基于MATLAB的IIR滤波器设计与实现
基于MATLAB的IIR濾波器設(shè)計(jì)與實(shí)現(xiàn)
IIR濾波器的設(shè)計(jì)主要有經(jīng)典設(shè)計(jì)法、直接設(shè)計(jì)法和最大平滑濾波器設(shè)計(jì)法三種方法。
1、經(jīng)典設(shè)計(jì)法是基于模擬濾波器的變換原理,首先根據(jù)濾波器的技術(shù)指標(biāo)設(shè)計(jì)出相應(yīng)的模擬濾波器,然后再離散化為滿足給定技術(shù)指標(biāo)的數(shù)字濾波器。對(duì)應(yīng)的工具函數(shù)由完全設(shè)計(jì)函數(shù)——butter、cheby1、cheby2、ellip、besself;階數(shù)估計(jì)函數(shù)——buttord、cheb1ord、cheb2ord、ellipord;低通模擬原型濾波器函數(shù)——buttap、cheb1ap、cheb2ap、ellipap;頻率轉(zhuǎn)換函數(shù)——lp2lp、lp2bp、lp2bs;濾波器離散化函數(shù)——bilinear、impinvar。
2、直接設(shè)計(jì)法是離散域內(nèi)用最小二乘法逼近給定的幅頻特性,對(duì)應(yīng)的工具函數(shù)是yulewalk。
3、最大平滑濾波器設(shè)計(jì)法是設(shè)計(jì)一般化低通濾波器,其零點(diǎn)數(shù)多于極點(diǎn),對(duì)應(yīng)的工具函數(shù)是maxflat。
分別用幾個(gè)例子來說明三種方法的應(yīng)用。
例一、經(jīng)典法設(shè)計(jì)濾波器有脈沖響應(yīng)不變法和雙線性變換法兩種方式。
(1)、脈沖響應(yīng)不變法
用橢圓濾波器原型設(shè)計(jì)一個(gè)低通濾波器,滿足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)、雙線性變換法
設(shè)計(jì)帶通Chebyshev I型數(shù)字濾波器,要求通帶邊界頻率為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
例二、用直接法設(shè)計(jì)一個(gè)多頻帶數(shù)字濾波器。
幅頻響應(yīng)值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):計(jì)算與分子多項(xiàng)式相應(yīng)的幅值平方響應(yīng)的輔助分子式和分母式;(2):由輔助分子式和分母式計(jì)算完全的頻率響應(yīng);(3):計(jì)算濾波器的脈沖響應(yīng);(4):采用最小二乘法擬合脈沖響應(yīng),最終求得濾波器的分子多項(xiàng)式。
代碼如下:
?
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('理想圖形','實(shí)際圖像'); 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
(因系數(shù)w的數(shù)據(jù)太多,不予給出)
?
例三、用maxflat函數(shù)設(shè)計(jì)一個(gè)通用Butter-worth低通濾波器,滿足系統(tǒng)函數(shù)分子階數(shù)為8階,系統(tǒng)函數(shù)分母階數(shù)為3階,截止頻率為1pi。代碼如下:
波形如下:
命令窗口可得:
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濾波器設(shè)計(jì)與實(shí)現(xiàn)時(shí)找到sunev博主的一篇博文,推薦下《基于MATLAB的FIR濾波器設(shè)計(jì)與實(shí)現(xiàn)》。
?
轉(zhuǎn)載于:https://www.cnblogs.com/clairvoyant/p/4734311.html
總結(jié)
以上是生活随笔為你收集整理的基于MATLAB的IIR滤波器设计与实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天津政府应急系统之GIS一张图(arcg
- 下一篇: tcp服务器客户端状态图