如何使用Matlab制作简单的FIR滤波器?

时间:2009-11-15 20:25:13

标签: matlab filter matrix signal-processing

如何使用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滤波器的系数。但;如果我只有截止频率,我该如何计算这些系数?

3 个答案:

答案 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)