來源:https://blog.csdn.net/leokingszx/article/details/80041910
在實際的應用中,有時需要使用FIR根據完成一些特定功能,比如近似一階RC低通電路的響應,等等。如何確定FIR濾波器的系數呢?http://www.360doc.com/content/17/0518/21/1832721_655109467.shtml 中有這么一段話: FIR濾波器很簡單,它實際上是一個全零點模型(MA滑動平均模型),濾波器系數只包含滑動平均的B,而自回歸的A=1。濾波過程就是X和B的卷積,再聯系濾波器的原理,容易知道,FIR濾波器的系數B就是濾波器的沖激響應h。 因此它的設計就簡單了,只要設定濾波器的頻率響應H,進行ifft后就得到沖激響應h,把h直接作為濾波器系數B對原信號濾波即可。可有如下的例子:%此函數是filter函數的標准示例,體現了使用濾波器進行波形處理的思路和寫法。
%其功能是實現低通濾波。
clc;clear;
Fs = 2048; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1024; % Length of signal
t = (0:L-1)*T; % Time vector
f1 = 100;
f2 = 700;
S1 = sin(2*pi*f1*t)+sin(2*pi*f2*t);
% figure(1);plot(1000*t(1:50),(S1(1:50)));
figure(1);fft_test(1, Fs, 1024, S1);title('低通濾波前');
jieshu = 150;
Window=boxcar(jieshu+1);
Num1=fir1(jieshu,[0.001 0.3], Window);
a= [1];
imp = [1; zeros(jieshu, 1)];
h1 = filter(Num1, a, imp);
w = conv(S1,h1);
%標記有***的是另外一種方法。事實上直接對原序列filter也行。
% w = filter(Num1,a, S1); %***
%
S2 = w(jieshu/2:1024+jieshu/2);
figure(2);fft_test(1, Fs, 1024, S2);title('低通濾波后');
% figure(2);fft_test(1, Fs, 1024, w);title('低通濾波后'); %***
Num1即為低通濾波的沖激響應。filter函數直接了當的一邊實現了FIR濾波器,一邊進行了濾波。同時,zzz = fft(Num1);
plot(abs(zzz));可得:對Num1FFT可得如上的圖,可見Num1確實是已知的頻率響應的頻譜的ifft的結果,與最開始的結論想吻合。
————————————————