首頁 > 其他

FIR低通濾波器的MATLAB模擬及效果驗證

2019-12-25 04:49:25

本文介紹如何用MATLAB模擬產生FIR濾波器,並使用一個混合頻率的信號通過FIR濾波器,觀察其輸出,以驗證FIR濾波器效能。

1

實際應用背景:若信號為一個10Hz與一個30Hz的餘弦信號相加,那麼如何濾除30Hz的信號?

2

首先產生原始信號。取樣率設定為100Hz,時寬2s。MATLAB程式如下:? ? ? ? f1=10;%第一個點頻信號分量頻率? ? ? ? f2=30;%第二個點頻信號分量頻率? ? ? ? fs=100;%取樣率? ? ? ? T=2;%時寬? ? ? ? B=20;%頻寬? ? ? ? n=round(T*fs);%取樣點個數? ? ? ? t=linspace(0,T,n);? ? ? ? y=cos(2*pi*f1*t)+cos(2*pi*f2*t);

3

觀察原始信號的時域波形和頻譜,從頻譜圖中可以明顯看出其10Hz與30Hz的分量。

MATLAB程式如下:

        figure;

        plot(t,y);

        title('原始信號時域');

        xlabel('t/s');

        ylabel('幅度');

        figure;

        fft_y=fftshift(fft(y));

        f=linspace(-fs/2,fs/2,n);

        plot(f,abs(fft_y));

        title('原始信號頻譜');

        xlabel('f/Hz');

        ylabel('幅度');

        axis([ 0 50 0 100]);



4

設計FIR濾波器:為濾除30Hz的分量,我們選用20Hz截止頻率的低通濾波器,階數為40階(若要獲得更陡峭的過渡帶,階數可以選擇的更高)。MATLAB中用fir1函數實現濾波器衝擊響應係數的計算。注意:模擬頻率f=20Hz需要按f/(fs/2)的式子化為數位頻率,作為fir1函數中的引數。

MATLAB程式如下:

        b=fir1(40, B/(fs/2));  %濾波產生指定頻寬的噪聲信號

        figure;

        freqz(b);%畫濾波器頻響


5

信號通過FIR濾波器:採用filter函數。MATLAB程式:? ? ? ? y_after_fir=filter(b,1,y); ?%信號通過濾波器

6

觀察濾波後輸出信號的時域與頻譜

從頻譜中可以明顯看出,30Hz的分量被濾除,留下了10Hz的分量。時域波形也可以看出這一點。同時需要注意,輸出信號的前面一段是無效的。該段的長度為濾波器階數的一半。

MATLAB程式:

        figure;

        plot(t,y_after_fir);

        title('濾波後信號時域');

        xlabel('t/s');

        ylabel('幅度');

        

        fft_y1=fftshift(fft(y_after_fir));

        f=linspace(-fs/2,fs/2,n);

        figure;

        plot(f,abs(fft_y1));

        title('濾波後信號頻譜');

        xlabel('f/Hz');

        ylabel('幅度');

        axis([ 0 50 0 100]);




IT145.com E-mail:sddin#qq.com