基於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濾波器設計與實現》。