天天看點

matlab設計模拟帶通濾波器

簡單記錄下在matlab上如何設計出模拟的帶通濾波器,包括:巴特沃斯濾波器、切比雪夫I型濾波器、切比雪夫II型濾波器、橢圓型濾波器。

代碼如下:

%設計帶通濾波器

%巴特沃斯、切比雪夫I型、切比雪夫II型、橢圓型濾波器

clear all;

%wp和ws分别是通帶和阻帶的頻率(截止頻率)。當wp和ws為二進制矢量時,為帶通或帶阻濾波器,這時求出的Wn也是二進制矢量;當wp和ws為一進制矢量時,為低通或高通濾波器:當wp<ws時為低通濾波器,當wp>ws時為高通濾波器。

%wp和ws為二進制矢量

wp=[0.1*2*pi 0.15*2*pi]; %設定通帶頻率

ws=[0.05*2*pi 0.2*2*pi]; %設定阻帶頻率

Rp=1; %設定通帶波紋系數

Rs=20; %設定阻帶波紋系數

%巴特沃斯濾波器設計

[N,Wn]=buttord(wp,ws,Rp,Rs,\'s\'); %求巴特沃斯濾波器階數,輸出參數N代表滿足設計要求的濾波器的最小階數,Wn是等效低通濾波器的截止頻率

%無論是高通、帶通和帶阻濾波器,在設計中最終都等效于一個截止頻率為Wn的低通濾波器(我現在也不是很了解為啥是這樣,畢竟我也是剛接觸濾波器)

fprintf(\'巴特沃斯濾波器 N= %4d\n\',N); %顯示濾波器階數

[bb,ab]=butter(N,Wn,\'s\'); %求巴特沃斯濾波器系數,即求傳輸函數的分子和分母的系數向量

W=0:0.01:2; %設定模拟頻率

[Hb,wb]=freqs(bb,ab,W); %求巴特沃斯濾波器頻率響應

plot(wb/pi,20*log10(abs(Hb)),\'b\'); %作圖

hold on

%切比雪夫I型濾波器設計

[N,Wn]=cheb1ord(wp,ws,Rp,Rs,\'s\'); %求切比雪夫I型濾波器階數

fprintf(\'切比雪夫I型濾波器 N= %4d\n\',N); %顯示濾波器階數

[bc1,ac1]=cheby1(N,Rp,Wn,\'s\'); %求切比雪夫I型濾波器系數,即求傳輸函數的分子和分母的系數向量

[Hc1,wc1]=freqs(bc1,ac1,W); %求切比雪夫I型濾波器頻率響應

plot(wc1/pi,20*log10(abs(Hc1)),\'k\'); %作圖

%切比雪夫II型濾波器設計

[N,Wn]=cheb2ord(wp,ws,Rp,Rs,\'s\'); %求切比雪夫II型濾波器階數

fprintf(\'切比雪夫II型濾波器 N= %4d\n\',N);%顯示濾波器階數

[bc2,ac2]=cheby2(N,Rs,Wn,\'s\'); %求切比雪夫II型濾波器系數,即求傳輸函數的分子和分母的系數向量

[Hc2,wc2]=freqs(bc2,ac2,W); %求切比雪夫II型濾波器頻率響應

plot(wc2/pi,20*log10(abs(Hc2)),\'r\'); %作圖

%橢圓型濾波器設計

[N,Wn]=ellipord(wp,ws,Rp,Rs,\'s\'); %求橢圓型濾波器階數

fprintf(\'橢圓型濾波器 N= %4d\n\',N); %顯示濾波器階數

[be,ae]=ellip(N,Rp,Rs,Wn,\'s\'); %求橢圓型濾波器系數,即求傳輸函數的分子和分母的系數向量

[He,we]=freqs(be,ae,W); %求橢圓型濾波器頻率響應

%作圖

plot(we/pi,20*log10(abs(He)),\'g\');

axis([0 max(we/pi) -30 2]);

legend(\'巴特沃斯濾波器\',\'切比雪夫I型濾波器\',\'切比雪夫II型濾波器\',\'橢圓型濾波器\');

xlabel(\'角頻率{\omega}/{\pi}\');

ylabel(\'幅值/dB\');

line([0 max(we/pi)],[-20 -20],\'color\',\'k\',\'linestyle\',\'--\');%在畫布上畫線

line([0 max(we/pi)],[-1 -1],\'color\',\'k\',\'linestyle\',\'--\');

line([0.2 0.2],[-30 2],\'color\',\'k\',\'linestyle\',\'--\');

line([0.3 0.3],[-30 2],\'color\',\'k\',\'linestyle\',\'--\');

運作結果如下:

巴特沃斯濾波器 N= 4

切比雪夫I型濾波器 N= 3

切比雪夫II型濾波器 N= 3

橢圓型濾波器 N= 2

matlab設計模拟帶通濾波器

 注:

1、求各種濾波器的傳輸函數的分子和分母向量系數的函數,例如:

[bc1,ac1]=cheby1(N,Rp,Wn,\'s\'); %求切比雪夫I型濾波器系數,即求傳輸函數的分子和分母的系數向量

這裡的函數cheby1()中的參數為

cheby1(N,Rp,Wn,\'type\',\'s\');

其中注意’type’可為高通:\'high’或帶阻:‘stop’,如果不填的話,預設是低通或者帶通,至于是低通還是帶通,主要看你前面的wp和ws是二進制矢量還是一進制矢量:二進制矢量對應帶通,一進制矢量對應低通。

2、matlab中的line()函數簡單介紹:

https://blog.csdn.net/qq_36554582/article/details/83352155

————————————————

版權聲明:本文為CSDN部落客「逸淩123」的原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/qq_36554582/article/details/83350837