自編兩種濾波器結果比較函數----基於MATLAB

    該函數主要作用是,對同一段信號,用兩種不同的濾波器進行濾波處理,然後比較兩者在頻域的結果。通過比較,可以選擇合適的濾波器。這個函數中是對butter和fir兩種進行了比較,讀者要是想對比其他濾波器,或者同時比較三種及以上濾波器,只需要對代碼稍加修改,就可以滿足需求,這裏不加贅述。
   還有一點,讀者要是想輸出不同濾波器的結果,只需將下述函數的第一行修改爲:
   function  [filter1,filter2] = myfilter(Signal, Fs)   
   即可
function  myfilter(Signal, Fs)

%Signal----原始信號
%filter1---使用butter濾波器的濾波結果
%filter2---使用fir1濾波器的濾波結果
 
[b,a] = butter(5,[0.5*2/Fs 40*2/Fs],'bandpass');  %建立butter帶通濾波器
filter1 = filtfilt(b,a,Signal);  %利用已建立濾波器進行濾波
NFFT1 = length(filter1);  %進行FFT的信號長度  
frequency1 = Fs*(0:NFFT1-1)/NFFT1;    %頻率
filter1_FFT = abs(fft(filter1,NFFT1));   %FFT結果

[b1,a1] = fir1(20,[0.5*2/Fs 45*2/Fs],'bandpass');  %建立butter帶通濾波器
filter2 = filtfilt(b1,a1,Signal);    %利用已建立濾波器進行濾波
NFFT2 = length(filter2);  %進行FFT的信號長度
frequency2 = Fs*(0:NFFT2-1)/NFFT2;   %頻率
filter2_FFT = abs(fft(filter2,NFFT2));  %FFT結果

figure('Position',[200,200,500,400],'Name','原始信號與不同濾波器濾波結果對比')
plot(Signal,'r');  hold on;  plot(filter1,'g');    plot(filter2,'b');
legend('Original', 'Butter(5階)', 'Fir(20階)')

figure('Position',[200,200,500,400],'Name','不同濾波器濾波後FFT結果對比');
plot(frequency1(1:NFFT1/2), filter1_FFT(1:NFFT1/2),'g');  hold on; 
plot(frequency2(1:NFFT2/2), filter2_FFT(1:NFFT2/2),'b');    
legend('Butter(5階)', 'Fir(20階)')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章