iir 和fir 滤波器的 matlab 设计202.114.108.237/download/783d5f2c-1eb1-4eaa-a64b-d155751... ·...
TRANSCRIPT
IIR 和 FIR 滤波器的 MATLAB 设计 2012301510047 付维杰
一、 问题
根据下列参数完成 IIR和 FIR数字滤波器设计
通带范围 300Hz~500Hz 带内最大衰减 Rp=-3dB
阻带范围<250Hz&>550Hz 带内最小衰减 Rs=-40dB
采样频率 Fs=2000Hz
要求:1、分别完成 IIR和 FIR滤波器的设计
2、IIR设计不可使用 butter、cheby1、cheby2和
ellip这四个完全设计函数
3、谈谈自己对两种滤波器设计的感受
二、 分析与建模
在数字滤波器设计中,大致分为两种:一种是有限冲激响应滤波
器,简称 FIR;另一种是无限冲激响应滤波器,简称 IIR。
对于 IIR,设计流程为:确定滤波器阶数、设计模拟原型滤波器、
频率变换、变换到数字滤波器。确定阶数常用到函数“butterord”、
“cheb1ord”、“cheb2ord”等,模拟低通滤波器原型的设计常用到
“buttap”、“cheb1ap”、“cheb2ap”,变换到带通用到函数
“lp2bp”,最后完成到数字域通常用冲激函数不变法或者双线性变
换法。当然还有完全设计函数“butter”、“cheb1”等,只需给定
参数即生成对应的滤波器参数。
对于 FIR,常用的设计方法是窗口法和最优等波动法。前者用到
fir1 和 fir2 这两个函数,后者用到 remezord 和 remez 函数,其对
应的函数输入参量可以在 MATLAB 的 HELP 系统中查看或者仿照已有
的设计例子。
除了上述一步步确定滤波器的参数,MATLAB 也可以同 fdatool
来直接设计滤波器,只需在交互界面给出滤波器的种类和参数即可。
本次设计也用到了它。
三、 源代码
1、 巴特沃斯设计 IIR(冲激函数不变法):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Build date:2014/12/28
%%%%%Builder:2012301510047_付维杰
%%%%%Use function of "impinvar"
%%%%%BUTTERWORTH
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs=2000; %freaquency of sample
Wp=[300*2*pi 500*2*pi]; %passingband
Ws=[250*2*pi 550*2*pi]; %stopband
Rp=3; %Maximun attenuation of passingband
Rs=40 %Minimun attenuation of stopband
[n,Wn]=buttord(Wp,Ws,Rp,Rs,'s'); %order
[z,p,k]=buttap(n); %zero,peak,gain
Wo=sqrt(Wn(1)*Wn(2));%Center frequency
[b,a]=zp2tf(z,p,k); %zero to transmit function
[bt,at]=lp2bp(b,a,Wo,Wn(2)-Wn(1)); %low to band
[bz,az]=impinvar(bt,at,Fs); %impulse of invariant
freqz(bz,az)
2、 巴特沃斯设计 IIR(双线性变换法):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Build date:2014/12/28
%%%%%Builder:2012301510047_付维杰
%%%%%Use bilinear transformation
%%%%%BUTTERWORTH
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs=2000; %frequency of sample
Wp=[tan(300*pi/Fs)*Fs*2 tan(500*pi/Fs)*Fs*2];
Ws=[tan(250*pi/Fs)*Fs*2 tan(550*pi/Fs)*Fs*2];
Rp=3; %Maximun attenuation of passingband
Rs=40 %Minimun attenuation of stopband
[n,Wn]=buttord(Wp,Ws,Rp,Rs,'s'); %order
[z,p,k]=buttap(n); %zero,peak,gain
Wo=sqrt(Wn(1)*Wn(2));%Center frequency
[b,a]=zp2tf(z,p,k); %zero to transmit function
[bt,at]=lp2bp(b,a,Wo,Wn(2)-Wn(1)); %low to band
[bz,az]=bilinear(bt,at,Fs); %impulse of invariant
freqz(bz,az)
3、 切比雪夫 I型设计 IIR:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Build date:2014/12/28
%%%%%Builder:2012301510047_付维杰
%%%%%Use function of "impinvar"
%%%%%CHEBYSHEV I
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs=2000; %freaquency of sample
Wp=[300*2*pi 500*2*pi]; %passingband
Ws=[250*2*pi 550*2*pi]; %stopband
Rp=3; %Maximun attenuation of passingband
Rs=40; %Minimun attenuation of stopband
[n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s'); %order
[z,p,k]=cheb1ap(n,Rp); %zero,peak,gain
Wo=sqrt(Wn(1)*Wn(2));%Center frequency
[b,a]=zp2tf(z,p,k); %zero to transmit function
[bt,at]=lp2bp(b,a,Wo,Wn(2)-Wn(1)); %low to band
[bz,az]=impinvar(bt,at,Fs); %impulse of invariant
freqz(bz,az)
n
4、 切比雪夫 II型设计 IIR:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Build date:2014/12/28
%%%%%Builder:2012301510047_付维杰
%%%%%Use function of "impinvar"
%%%%%CHEBYSHEV II
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs=2000; %freaquency of sample
Wp=[300*2*pi 500*2*pi]; %passingband
Ws=[250*2*pi 550*2*pi]; %stopband
Rp=3; %Maximun attenuation of passingband
Rs=40; %Minimun attenuation of stopband
[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs,'s'); %order
[z,p,k]=cheb2ap(n,Rs); %zero,peak,gain
Wo=sqrt(Wn(1)*Wn(2));%Center frequency
[b,a]=zp2tf(z,p,k); %zero to transmit function
[bt,at]=lp2bp(b,a,Wo,Wn(2)-Wn(1)); %low to band
[bz,az]=impinvar(bt,at,Fs); %impulse of invariant
freqz(bz,az)
n
5、 窗函数法设计 FIR:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Build date:2014/12/28
%%%%%Builder:2012301510047_付维杰
%%%%%USE "Window"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs=2000; %freaquency of sample
fcuts=[250 300 500 550];
mags=[0 1 0];
devs=[0.01 10^(-3/20) 0.01];
[n,Wn,beta,ftype]=kaiserord(fcuts,mags,devs,Fs);%kaiser window
[h]=fir1(n,Wn,ftype,kaiser(n+1,beta));
freqz(h)
n
6、 最优等波动设计 FIR:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Build date:2014/12/28
%%%%%Builder:2012301510047_付维杰
%%%%%Use Parks-McClellan FIR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs=2000; %freaquency of sample
Rp=3; %Maximun attenuation of passingband
Rs=40; %Minimun attenuation of stopband
f=[250 300 500 550];%frequency
a=[0 1 0]; %Expected amplitude
dev=[0.171,0.01,0.171];%[(10^(Rp/20)-1)/(10^(Rp/20)+1) 10^(-Rs/20)
(10^(Rp/20)-1)/(10^(Rp/20)+1)];
[n,fo,ao,w]=remezord(f,a,dev,Fs);
b=remez(n,fo,ao,w,'bandpass');
freqz(b,1,1024,Fs)
n
四、 设计结果(频率相位响应)
1、巴特沃斯设计 IIR(冲激函数不变法):
2、巴特沃斯设计 IIR(双线性变换法):
3、切比雪夫 I型设计 IIR:
4、切比雪夫 II型设计 IIR:
5、窗函数法设计 FIR:
6、最优等波动设计 FIR:
五、总结
设计过程中为了检验设计的准确性,同时也为了训练 FDATOOL的
使用,在 fdatool中同时设计,把参数输入,分别得到:
1、 巴特沃斯
2、 切比雪夫 I
3、 切比雪夫 II
4、 椭圆
5、 窗函数 hamming
6、 窗函数 kaiser
从上述设计结果可以看出:IIR因为系统函数存在极点,故其系
统若极点在单位圆外即是不稳定的。其相位响应很难做到线性度很好,
故可能产生一定程度上的相位失真。但是正是由于它只要求极点在单
位圆内,其实现带通的系统阶数可以做到很小,使其设计可以很简单,
易于实现。若要修正其相位的偏移,则需要“全通网络”,却会在一
定程度上增加系统的复杂程度和阶数。
对比下 FIR滤波器有一个先天的优势:系统的冲激响应易设计为
奇对称或偶对称,故相位线性度很好。不同于 IIR的设计具有分段常
数的特性,FIR滤波器可以设计为多通带多阻带的系统,可以适用于
数字微分器,这一点是 IIR无法做到的。但是另一方面,由于 FIR系
统函数的极点固定在原点,滤波器的高性能要求高阶数,通常的 FIR
滤波器阶数都很高,达到 IIR 的 5~10 倍,故其经济性不好,需要的
元件多。
在 fdatool 里设计时,发现当阶数越高,越接近一个门波形,阻
带内的盘瓣越密集,同时若阻带的衰减要求更高,相同情况下的阶数
也就越多。如设计了一个同样情况下的要求阻带-60dB的滤波器:
它的阶数达到了 146.这种情况适用于高质量要求的滤波器,而
对于经济性要求高的、需要批量产出的,则通常采用阻带衰减
-20~-40dB的滤波器。
综上所述,对于要求经济性的、高产出的、滤波质量要求不是很
高的,可以采用 IIR滤波器;而对于要求高质量、对失真很敏感的一
些专业领域,则采用 FIR滤波,同时可以考虑在一定经济基础上将阻
带的衰减降到尽可能低以满足专业需要。
2012301080042 侯悦
题目:
根据下列参数完成 IIR 和 FIR 数字滤波器设计
通带范围 300Hz~500Hz 带内最大衰减 Rp=-3dB
阻带范围<250Hz&>550Hz 带内最小衰减 Rs=-40dB
采样频率 Fs=2000Hz
要求:
1、分别完成 IIR和 FIR 滤波器的设计
2、IIR 设计不可使用 butter、cheby1、cheby2 和 ellip这四个完全
设计函数
3、谈谈自己对两种滤波器设计的感受
**********************************************************
解题过程:
一、 设计思路
①完成 IIR 滤波器的设计
I. 用模拟 butterworth 型带通滤波器设计
1)巴特沃斯滤波器阶数的选择:
在已知设计参数 pf , sf , pR , sR 之后,可利用“buttord”命令可求出所需
要的滤波器的阶数和 3dB 截止频率,其格式为:
[N,Omegac]=buttord[fp,fs,Rp,Rs,’s’],其中 fp,fs,Rp,Rs 分别为通
带截止频率、阻带起始频率、通带内波动、阻带内最小衰减。返回值 N 为滤波
器的最低阶数,Wc 为 3dB 截止频率。
2)特沃斯带通滤波器系数计算:
[b,a]=butter(N,[Omega1,Omega2]),其中[Omega1,Omega2]为通带截止
频率,是 2 元向量,需要注意的是该函数返回的是 2N 阶滤波器系数。
II. 用数字 butterworth 双线性变换法型带通滤波器设计
带通滤波器情况:采样频率为 2000Hz,要求通带截止频率为[300Hz,500Hz],
阻带起始频率为[250Hz,550Hz],通带内波动 3dB,阻带内最小衰减为 40dB,则
Wp=[300/1000,500/1000], Ws=[250/1000,550/1000], Rp=3dB, Rs=40dB。
III.用 Chebyshev I 型带通滤波器设计
IV. 椭圆滤波器设计
②完成 FIR 滤波器的设计
I. 窗口法设计 FIR 滤波器
使用 FIR1函数完成 FIR滤波器设计
II. 最优等波动设计 FIR 滤波器
计算衰减占比写 dev(wt)
③用 FDATOOL 设计
二、 matlab 程序设计及结果显示
IIR 部分
I. 用模拟 butterworth 型带通滤波器设计
结果为:
II. 用数字 butterworth 双线性变换法型带通滤波器设计
结果为:
III.用 Chebyshev I 型带通滤波器设计
结果为
IV.椭圆滤波器设计
结果为:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FIR 部分
I. 窗口法设计 FIR 滤波器
fir1 函数
结果为:
II. 最优等波动设计 FIR 滤波器
结果为:
③FDATOOL
FIR WINDOW
三、 两种滤波器的比较
1, 由图像可得,IIR的 shebyshev type2,椭圆滤波器,以及 FIR
的窗口设计法较好,其图像更能反映滤波器特性
2, FIR 阶数远高于 IIR 阶数,而阶数越大,设计越复杂,在实际
中越难以实现。IIR可以用较低的阶数实现较高的带通选择性。
3, 由图像可知,IIR 虽然阶数少,但其衰减变化缓慢,如下图所
示 :
FIR 在衰减段中下降迅速:
则在选通中误差较小,在精度要求较高的场合适用。