該函數主要作用是,對同一段信號,用兩種不同的濾波器進行濾波處理,然後比較兩者在頻域的結果。通過比較,可以選擇合適的濾波器。這個函數中是對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階)')