如何使用Matlab制作简单的低通FIR滤波器(不使用内置功能)?
问题示例:
Implement a FIR LPF with cut-off frequency 250Hz
可能还需要给出采样频率......
解决方案尝试或我已经知道的事情:
x = [...] -> input signal
A = 1; -> Since this is FIR
B = [?????]
y = filter(B, A, x) -> Output signal
Afaik,B应包含FIR滤波器的系数。但;如果我只有截止频率,我该如何计算这些系数?
答案 0 :(得分:11)
最简单的是“窗口sinc”过滤器:
fs = 44100;
cutoff = 250;
t = -256:256; % This will be a 513-tap filter
r = 2*cutoff/fs;
B = sinc(r*t).*r .* blackman(length(t))';
freqz(B);
过滤器的长度(参见t=...
)控制过渡带的宽度。在这种情况下,cutoff
为-6 dB点。 blackman
是热门窗口的名称。您可以查看this维基百科页面,了解有关窗口功能的更多信息。它们在过渡带宽和阻带抑制之间基本上有不同的权衡。
答案 1 :(得分:0)
如果你不是幅度谱的不同形状,就像推荐的推荐一样,只用所需幅度响应的逆傅里叶变换的实部取代sinc函数(延迟得到因果对称脉冲响应) )。
答案 2 :(得分:0)
由于LTI滤波器的系数是时域脉冲响应,您可以通过指定幅度矢量和相位矢量在matlab中创建频率响应,然后反向FFT它们以获得系数,例如,类似于A = [ 1 .9 .8 .5 .2 .1 0]
,theta=[0 0 0 0 0 0 0]
,然后H=A.*exp(j*theta)
,然后coefs = ifft(H)