【问题标题】:How to make a Simple FIR Filter using Matlab?如何使用 Matlab 制作简单的 FIR 滤波器?
【发布时间】:2010-12-16 20:36:28
【问题描述】:

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

【问题讨论】:

    标签: matlab filter matrix signal-processing


    【解决方案1】:

    最简单的是“windowed 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 Wikipedia 页面以获取有关窗口功能的更多信息。它们基本上在过渡带宽和阻带抑制之间有不同的权衡。

    【讨论】:

    • 我不能使用内置的 fir 函数,正如我在问题中已经说过的那样......
    • 对不起。我改变了答案。
    【解决方案2】:

    如果您不想要不同形状的幅度谱,请完全按照 sellibitze 的建议进行操作,只需将 sinc 函数替换为所需幅度响应的傅里叶逆变换的实部(延迟以获得因果对称脉冲响应)。

    【讨论】:

      【解决方案3】:

      由于 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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2015-03-05
        相关资源
        最近更新 更多