带 FIR 滤波器的参数 eq

信息处理 过滤器设计 有限脉冲响应 参数方程
2022-02-12 22:22:38

是否有任何好的公开方法可以将参数 EQ 设计为 FIR 滤波器。DSP教科书中讨论的标准技术是频域采样或使用Parks-McClellan,这涉及通带,阻带,过渡带等。这对于拒绝频谱的某个部分或模仿和现有的模拟/数字滤波器。但是,如果我想将滤波器直接设计为 FIR 滤波器,例如采用频率、增益和带宽参数的峰值/陷波/搁置/低通/高通滤波器,该怎么办?是否有将参数 EQ 直接设计为 FIR 滤波器的标准技术?

4个回答

这些过滤器类型在这里很好地介绍了http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

然而,这些都是单二阶 IIR 实现。要将其转换为 FIR,您可以简单地将这些滤波器和窗口的脉冲响应计算为具有所需精度的有限大小。另一种选择是将滤波器设计为 IIR,对频率响应进行采样,然后执行多种 FIR 拟合技术中的任何一种。

一般来说,您会发现 FIR 滤波器不太适合这种情况,所需的抽头数在很大程度上取决于拐角频率和采样率之间的关系以及滤波器的 Q。

为了回答我自己的问题,我在 Julius Smith 的精彩页面上找到了一个关于设计 FIR 滤波器的参考:https ://ccrma.stanford.edu/~jos/filters/Two_Zero.html 。(我不先检查那里是天真的)。这不完全是我想要的,但更接近于参数化设计,然后使用 IIR 滤波器的 IR 或频域采样。

我只是将频域划分为 4 个区域并创建 4 个低阶滤波器,因此它们之间有一些很好的平滑重叠。这将需要您创建 1 个低通、1 个高通和两个带通滤波器,您可以在其中独立缩放每个滤波器的增益。通过每个过滤器运行数据并对结果求和。这是一些 MATLAB 代码来说明我在说什么在一些随机数据上运行。

x = randn(1,65536);
b1 = fir2(12, [0 0.25 0.5 1], [1 1 0 0]);
b2 = fir2(12, [0 0.24 0.51 1], [0 1 1 0]);
b3 = fir2(12, [0 0.49 0.75 1], [0 1 1 0]);
b4 = fir2(12, [0 0.5 0.75 1], [0 0 1 1]);
g1 = 1.0;
g2 = 0.5;
g3 = 0.2;
g4 = 0.2;
y = g1*filter(b1, 1, x) + g2*filter(b2, 1, x) + ...
    g3*filter(b3, 1, x) + g4*filter(b4, 1, x);
plot(20*log10(abs(fft(y))))

Matlab 的滤波器设计文档应该有您正在寻找的参考资料。

例如fir2可能会这样做。