基于MATLAB的IIR滤波器设计与实现
IIR滤波器的设计主要有经典设计法、直接设计法和最大平滑滤波器设计法三种方法。
1、经典设计法是基于模拟滤波器的变换原理,首先根据滤波器的技术指标设计出相应的模拟滤波器,然后再离散化为满足给定技术指标的数字滤波器。对应的工具函数由完全设计函数——butter、cheby1、cheby2、ellip、besself;阶数估计函数——buttord、cheb1ord、cheb2ord、ellipord;低通模拟原型滤波器函数——buttap、cheb1ap、cheb2ap、ellipap;频率转换函数——lp2lp、lp2bp、lp2bs;滤波器离散化函数——bilinear、impinvar。
2、直接设计法是离散域内用最小二乘法逼近给定的幅频特性,对应的工具函数是yulewalk。
3、最大平滑滤波器设计法是设计一般化低通滤波器,其零点数多于极点,对应的工具函数是maxflat。
分别用几个例子来说明三种方法的应用。
例一、经典法设计滤波器有脉冲响应不变法和双线性变换法两种方式。
(1)、脉冲响应不变法
用椭圆滤波器原型设计一个低通滤波器,满足wp=0.2pi、Rp=0.5dB、ws=0.3pi、As=20dB。代码如下:
1 wp=0.2*pi; 2 ws=0.3*pi; 3 rp=0.5; 4 rs=20; 5 [n,wn]=ellipord(wp,ws,rp,rs,‘s‘); 6 [z,p,k]=ellipap(n,rp,rs); 7 w=logspace(-1,1,1000); 8 h=freqs(k*poly(z),poly(p),w); 9 semilogx(w,abs(h)); 10 grid;
波形如下:
命令窗口可得:
n =
3
wn =
0.6283
(2)、双线性变换法
设计带通Chebyshev I型数字滤波器,要求通带边界频率为100~200Hz;通带纹波小于3dB;阻带衰减大于30dB;过渡带宽为30Hz;采样频率为1000Hz。代码如下:
1 fs=1000; 2 wp=[100 200]*2/fs; 3 ws=[30 300]*2/fs; 4 rp=3; 5 rs=30; 6 Nn=128; 7 [N,wn]=cheb1ord(wp,ws,rp,rs) 8 [b,a]=cheby1(N,rp,wn) 9 freqz(b,a,Nn,fs)
波形如下:
命令窗口可得:
N =
3
wn =
0.2000 0.4000
b =
0.0066 0 -0.0198 0 0.0198 0 -0.0066
a =
1.0000 -3.3130 6.1125 -6.9677 5.3979 -2.5753 0.6884
例二、用直接法设计一个多频带数字滤波器。
幅频响应值f=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]; m=[0 0 1 1 0 0 1 1 1 0 0];
具体操作步骤:(1):计算与分子多项式相应的幅值平方响应的辅助分子式和分母式;(2):由辅助分子式和分母式计算完全的频率响应;(3):计算滤波器的脉冲响应;(4):采用最小二乘法拟合脉冲响应,最终求得滤波器的分子多项式。
代码如下:
1 oder=10; 2 f=0:0.1:1; 3 m=[0 0 1 1 0 0 1 1 1 0 0]; 4 [b,a]=yulewalk(oder,f,m) 5 [h,w]=freqz(b,a,128) 6 axes(‘position‘,[0.2 0.2 0.4 0.4]); 7 plot(f,m,‘b-‘,w/pi,abs(h),‘m--‘); 8 xlabel(‘frequency(pi)‘); 9 ylabel(‘magnitude‘); 10 title(‘direct IIR design-yulewalk‘); 11 legend(‘理想图形‘,‘实际图像‘); 12 grid;
波形如下:
命令窗口可得:
b =
Columns 1 through 9
0.2774 -0.0460 -0.0761 0.1262 -0.3949 -0.0783 0.1008 -0.0571 0.1488
Columns 10 through 11
0.0512 0.0270
a =
Columns 1 through 9
1.0000 -0.0185 0.4144 0.0393 0.3588 0.1016 0.2372 -0.0633 0.1727
Columns 10 through 11
0.0629 0.0496
h =
0.0335 + 0.0000i 0.0325 - 0.0013i 0.0295 - 0.0023i 0.0244 - 0.0029i 0.0173 - 0.0028i 0.0079 - 0.0018i
-0.0036 + 0.0006i -0.0175 + 0.0046i -0.0338 + 0.0109i -0.0525 + 0.0201i -0.0736 + 0.0329i -0.0970 + 0.0503i
-0.1223 + 0.0735i -0.1488 + 0.1038i -0.1753 + 0.1429i -0.1999 + 0.1925i -0.2196 + 0.2539i -0.2304 + 0.3281i
-0.2270 + 0.4142i -0.2034 + 0.5095i -0.1545 + 0.6079i -0.0773 + 0.7003i 0.0265 + 0.7762i 0.1505 + 0.8263i
0.2845 + 0.8453i 0.4175 + 0.8333i 0.5410 + 0.7943i 0.6497 + 0.7347i 0.7417 + 0.6608i 0.8172 + 0.5776i
0.8778 + 0.4886i 0.9250 + 0.3956i 0.9602 + 0.2995i 0.9837 + 0.2003i 0.9951 + 0.0978i 0.9931 - 0.0077i
0.9754 - 0.1156i 0.9391 - 0.2233i 0.8818 - 0.3265i 0.8025 - 0.4191i 0.7033 - 0.4933i 0.5899 - 0.5422i
0.4714 - 0.5620i 0.3580 - 0.5532i 0.2582 - 0.5209i 0.1767 - 0.4726i 0.1147 - 0.4161i 0.0703 - 0.3575i
0.0406 - 0.3013i 0.0219 - 0.2498i 0.0112 - 0.2038i 0.0057 - 0.1636i 0.0035 - 0.1287i 0.0030 - 0.0984i
0.0031 - 0.0720i 0.0031 - 0.0485i 0.0022 - 0.0273i 0.0002 - 0.0076i -0.0033 + 0.0114i -0.0085 + 0.0305i
-0.0154 + 0.0506i -0.0241 + 0.0725i -0.0343 + 0.0972i -0.0455 + 0.1259i -0.0572 + 0.1597i -0.0681 + 0.2001i
-0.0763 + 0.2482i -0.0793 + 0.3050i -0.0737 + 0.3708i -0.0550 + 0.4444i -0.0190 + 0.5228i 0.0382 + 0.6005i
0.1178 + 0.6698i 0.2173 + 0.7224i 0.3303 + 0.7512i 0.4478 + 0.7532i 0.5608 + 0.7295i 0.6624 + 0.6847i
0.7487 + 0.6250i 0.8189 + 0.5562i 0.8740 + 0.4832i 0.9160 + 0.4091i 0.9470 + 0.3361i 0.9691 + 0.2652i
0.9842 + 0.1968i 0.9936 + 0.1308i 0.9983 + 0.0670i 0.9992 + 0.0051i 0.9967 - 0.0555i 0.9910 - 0.1151i
0.9824 - 0.1743i 0.9707 - 0.2336i 0.9557 - 0.2933i 0.9367 - 0.3540i 0.9131 - 0.4158i 0.8840 - 0.4790i
0.8480 - 0.5434i 0.8036 - 0.6086i 0.7489 - 0.6734i 0.6820 - 0.7360i 0.6013 - 0.7932i 0.5059 - 0.8407i
0.3965 - 0.8730i 0.2765 - 0.8842i 0.1522 - 0.8694i 0.0326 - 0.8265i -0.0728 - 0.7579i -0.1561 - 0.6700i
-0.2133 - 0.5720i -0.2448 - 0.4730i -0.2543 - 0.3803i -0.2472 - 0.2983i -0.2288 - 0.2289i -0.2037 - 0.1719i
-0.1755 - 0.1263i -0.1464 - 0.0905i -0.1182 - 0.0630i -0.0917 - 0.0420i -0.0675 - 0.0264i -0.0458 - 0.0151i
-0.0267 - 0.0071i -0.0102 - 0.0017i 0.0039 + 0.0017i 0.0156 + 0.0034i 0.0249 + 0.0040i 0.0321 + 0.0037i
0.0372 + 0.0028i 0.0402 + 0.0015i
(因系数w的数据太多,不予给出)
例三、用maxflat函数设计一个通用Butter-worth低通滤波器,满足系统函数分子阶数为8阶,系统函数分母阶数为3阶,截止频率为1pi。代码如下:
1 nb=8; 2 na=3; 3 wn=0.6; 4 [b,a]=maxflat(nb,na,wn,‘plots‘) 5 maxflat(nb,na,wn,‘trace‘)
波形如下:
命令窗口可得:
b =
0.1650 0.5048 0.4100 -0.1134 -0.2329 -0.0244 0.0202 -0.0043 0.0004
a =
1.0000 -0.1813 0.2073 -0.3006
Table:
L M N wo_min/pi wo_max/pi
8.0000 0 3.0000 0 0.2919
7.0000 1.0000 3.0000 0.2919 0.4021
6.0000 2.0000 3.0000 0.4021 0.5000
5.0000 3.0000 3.0000 0.5000 0.5979
4.0000 4.0000 3.0000 0.5979 0.7081
3.0000 5.0000 3.0000 0.7081 1.0000
ans =
0.1650 0.5048 0.4100 -0.1134 -0.2329 -0.0244 0.0202 -0.0043 0.0004
另:在寻找FIR滤波器设计与实现时找到sunev博主的一篇博文,推荐下《基于MATLAB的FIR滤波器设计与实现》。