为高阶(超过 500 个)设计二阶部分 IIR 滤波器

信息处理 matlab 数字滤波器
2022-02-18 19:21:08

我目前正在构建一个需要适合 DSP 的混响。我正在使用此链接https://ccrma.stanford.edu/~jos/pasp/Freeverb.html中提出的模型。

它涉及创建一些具有高阶(超过 1000 个)的反馈梳状滤波器。为此,我使用了集成在我的 DSP 中的二阶部分 IIR 滤波器 (IIRSOS)。我正在使用 Matlab 函数“tf2sos”,它采用期望滤波器的传递函数 (TF) 的分子和分母,并创建二阶部分 (SOS) 系数的矩阵。有了这个系数,我可以做出我想要的。

问题:对于高阶滤波器(大约 200 阶),“tf2sos”函数似乎完全不稳定。然而,名为 dsp.IIRFilter 的 Matlab 对象也使用二阶部分 IIR 似乎可以处理它:

订单的脉冲响应 = 200 :订单 订单的脉冲响应 = 200 的脉冲响应 = 1500 : 订单的脉冲响应 = 1500

在第二张图片中,您可以看到带有 tf2sos 系数的滤波器完全出错了。有人知道我如何获得像 1500 这样的订单的函数系数矩阵吗?

谢谢你。

1个回答

Schroeder/Moore 实现使用稀疏 IIR 滤波器。将这些实现为常规 IIR 滤波器或 biqauds 效率极低。

直接实现这些更容易、更有效。参见例如 https://ccrma.stanford.edu/~jos/pasp/Schroeder_Allpass_Sections.html

梳状滤波器和 schroeder 全通都使用与常规 IIR 滤波器相同的结构,但延迟不是单个样本,而是更大的数字。所以施罗德全通看起来像任何其他一阶全通,除了那里的延迟很大。如果你想了解这方面的技术

该算法专门设计为计算效率高,因此使用标准双二阶没有意义。不利的一面是,它通常听起来不太好。反馈延迟网络听起来要好得多。