Matlab實現IIR數字濾波器設計


低通濾波器的設計:

1、基本指標

  低通濾波器顧名思義就是低頻率成分通過,高頻率成分截止,那么在設計一個低通濾波器時首先要明白想要截止多大的頻率。比如想截掉4Hz以上的信號,理想狀態下就是將4Hz以上的信號成分全部截止,4Hz以下的信號全部保留。然而事實上幾乎不存在這樣的濾波器,通常情況下總是在通過頻率和截止頻率之間存在一個過渡帶。通過頻率這部分稱為通帶,允許通過的最大頻率為通帶截止頻率ωp,截至頻率這部分稱為阻帶,阻帶最小截至頻率為ωs,通帶和阻帶之間的部分為過渡帶,也即ωpp。通帶之間的波動稱為通帶波動δp,阻帶之間的波動稱為阻帶波動δs如圖所示:

來源:【北京交通大學陳后金教授數字信號處理課件】

2、Matlab函數介紹

聲明:上面一節的基本指標均為模擬濾波器狀態下的指標,Matlab不僅提供了模擬濾波器設計函數,同樣提供了數字濾波器的設計函數,只是參數之間需要一些轉換。

數字濾波器設計中,Wp和Ws為歸一化角頻率,如果工程要求設計低通數字濾波器滿足通帶截止頻率為fp = 40,阻帶截止頻率fs = 50,則fp,fs和Wp,Ws之間的轉換關系為:

Wp = 2*pi*fp/Fs;
Ws = 2*pi*fs/Fs;

截止頻率的定義是當輸出幅值響應下降到輸入幅值的-3dB ( 20log(1/\sqrt{2}) ),也就是0.707(也就是 1/\sqrt{2} )時對應的頻率,也稱3db截頻

巴特沃斯數字濾波器函數:
[n,Wc] = buttord(Wp/pi,Ws/pi,Ap,As);
[b,a] = butter(n,Wc,'low');%低通濾波器

Ap和As的計算用上圖中的公式計算獲得。

function FilteredSignal = filtered(signal,Fs,fp,fs,Ap,As,FilterType)
% fp=40; fs=50; Ap=1; As=20;
%=============================================
% Fs:信號的頻率
% fp:濾波器的通帶頻率
% fs:濾波器的截止頻率
% Ap:通帶最大衰減
% As:阻帶最小衰減
% FilterType:濾波器類型,'low',低通,'high',高通
% FilteredSignal:濾波后的信號
%==============================================
Wp = 2*pi*fp/Fs;
Ws = 2*pi*fs/Fs;
[n,Wc] = buttord(Wp/pi,Ws/pi,Ap,As);
[b,a] = butter(n,Wc,FilterType);
omega=[Wp Ws]; 
h = freqz(b,a,omega); %Compute Ap and As of AF
fprintf('Ap= %.4f\n',-20*log10(abs(h(1))));
fprintf('As= %.4f\n',-20*log10(abs(h(2))));
FilteredSignal = filter(b,a,signal);

 當 fp=40; fs=50; Ap=1; As=20;時,通過上面的代碼設計的濾波器Ap= 0.9998,As= 20.0000,滿足要求,設計的濾波器如下圖:

 

切比雪夫I型數字濾波器函數:

[N,wc] = cheb1ord(Wp/pi,Ws/pi,Ap,As);
[b,a] = cheby1(N,Ap,wc,'low');
%% 切比雪夫1型低通濾波器
fp=40; fs=50; Ap=1; As=20;
Wp = 2*pi*fp/Fs;
Ws = 2*pi*fs/Fs;
[N,wc] = cheb1ord(Wp/pi,Ws/pi,Ap,As);
[b,a] = cheby1(N,Ap,wc,'low');
omega = [Wp,Ws];
h = freqz(b,a,omega);
fprintf('N = %.2f\n',N);
fprintf('Ap=%.4f\n',-20*log10(abs(h(1))));
fprintf('As=%.4f\n',-20*log10(abs(h(2))));
figure(7)
freqz(b,a,512,200);title('CBI Lowpass Filter')

 

N = 5.00;Ap=1.0000<=1;As=20.0093>20滿足定義的Ap和As,通帶剛好,阻帶有余量。

%% 橢圓低通濾波器
[N,wc] = ellipord(Wp/pi,Ws/pi,Ap,As);
[b,a] = ellip(N,Ap,As,wc,'low');
omega = [Wp,Ws];
h = freqz(b,a,omega);
fprintf('N = %.2f\n',N);
fprintf('Ap=%.4f\n',-20*log10(abs(h(1))));
fprintf('As=%.4f\n',-20*log10(abs(h(2))));
figure
freqz(b,a,512,200);title('elip Lowpass Filter')

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM