选择 IIR 滤波器实现时应考虑哪些因素?

信息处理 过滤器 无限脉冲响应
2021-12-28 03:28:24

IIR 滤波器可以实现为直接形式 1 或 2但是您如何决定使用哪种形式?各自的优缺点是什么?

4个回答

有点过时,但可能值得更全面的答案,特别是因为 Direct Form II 会给您带来很多麻烦。首先,没有“一刀切”,最佳选择取决于您的具体应用和限制。你可以考虑的是

  1. 内存:直接形式 II 和转置形式 II 占用的状态内存比直接形式 I 和转置形式 I 少一点,但在级联二阶部分实现中差异很小
  2. MIPS:就乘法和加法的数量而言,所有四种实现都是相同的。但是,根据特定处理器的指令集,实现效率可能存在显着差异。所以“这取决于”。
  3. 定点属性:这有很大的不同。首先,您必须确保您的状态变量不会溢出,因此您需要分析输入/输出与状态变量之间的传递函数。这里直接表格 I 和转置表格 II 是明显的赢家。与输入和输出相比,状态变量绑定到 +106dB 左右。例如,在直接形式 II 中,从输入到状态的传递函数仅由极点给出。我见过真实世界的例子,其中这实际上可以超过 100 dB 的增益。对于定点实现,这是绝对不允许的。
  4. 噪声:在截断和舍入误差方面,所有实现大致相同。3) 中提到的状态变量传递函数问题也在一定程度上影响了这一点,即使使用 32 位浮点,我也看到了 Direct Form II 滤波器的可听噪声问题。

因此,总而言之,转置形式 II 往往不是最佳选择。在一些定点场景中,特别是如果存在明显的噪声问题,直接形式 I 更好,因为它可以更容易地增加诸如误差频谱整形等之类的东西。

首先,来自维基百科关于Direct Form I 和 II implementation 的一些信息。

直接形式 I 需要更多的记忆,但是是一种更简单的策略,并且不太可能出现四舍五入和共振问题。

直接形式 II 需要较少的内存,但它可能会出现不寻常的交互、更大的数字和更多的舍入误差。通过级联较小的滤波器,尤其是二阶滤波器,可以减少其中的大部分。

除非您使用资源非常稀缺的系统或有极端要求,否则在实践中选择直接形式 I 或 II 并不重要。例如,如果你在 PC 或智能手机上做事,那真的没关系。就个人而言,我更喜欢Form I。

真正的问题通常是 MIPS,如果您打算进行定点实现,事情会变得更加复杂。例如,在 ARM 上,如果系数和滤波器状态都是 32 位,则 IIR 滤波器将消耗更多的 MIPS。如果您需要实现例如具有非常低截止频率的低通滤波器,则需要 32 位的状态和系数。在这些情况下,您可以使用不同类型的过滤器,例如状态变量过滤器。

除了数值精度等技术差异外,还有稳定性问题。当数字滤波器的极点/零点对彼此靠近时,频率响应在不同位置会变得不稳定(通常接近奈奎斯特或接近零)。

当 IIR 滤波器用于音乐应用时,当滤波器参数被实时调制(例如,改变低通滤波器的截止频率)时,实现的选择会对滤波器的稳定性产生深远的影响。

我有一个开源应用程序,可让您聆听以下每个实现的差异,同时了解截止频率或峰值增益等随时间变化的参数:

  • 直接形式 I
  • 直接形式 II
  • 转置直接形式 I
  • 转置直接形式 II
  • 格子形式
  • 状态变量

项目在这里:

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

截屏