【转载】双二阶IIR滤波器

  • 前言
  • 双二阶滤波器说明
  • 补充说明和一些建议
  • 三种滤波器类型的计算过程系数如何使用
    • Direct Form I 的计算过程
    • Direct Form II 的计算过程
    • Transposed direct forms
  • 附录英文原文
    • 第一个链接来源的英文原文
    • 第二个链接来源的英文原文

前言

本文翻译自这个博客:
Biquads | EarLevel Engineering
和 wiki:
https://en.wikipedia.org/wiki/Digital_biquad_filter
(英文原文附在最后面)

双二阶滤波器说明

双二阶滤波器(biquad)是最常用的滤波器之一。双二阶滤波器是双二阶(两个极点和两个零点)的IIR滤波器。考虑到更高阶数的滤波器对系数敏感,双二阶可以单独使用,或者在更复杂的滤波器中作为基本的构建单元。例如,一个双二阶低通滤波器有12dB/octave斜度的截止频点,可以用于音调控制;如果需要一个24dB/octave的斜度,可以级联两个双二阶滤波器,这个结构比一个单4阶滤波器对参数更不敏感。

双二阶滤波器有几种不同的结构。最直观也最直接的实现是用一个二阶差分方程( (y[n] = a0*x[n] + a1*x[n-1] + a2*x[n-2] – b1*y[n-1] – b2*y[n-2])),称之为Direct Form I:
【转载】双二阶IIR滤波器_第1张图片 Direct Form I

在定点(没有浮点数)处理器中,Direct Form I是最好实现的,因为只有一个加法点(定点DSP一般都有扩展的累加器,可以在运算中有一定的溢出)。

我们可以把Direct Form I在加法那个点分成两部分,如下图:
【转载】双二阶IIR滤波器_第2张图片

然后,我们把分开的两部分交换顺序,让反馈的部分(极点)先计算:
【转载】双二阶IIR滤波器_第3张图片

可以看到,上图中成对的Z延时是有冗余的,剔除冗余后得到Direct Form II:
【转载】双二阶IIR滤波器_第4张图片 Direct Form II

Direct Form II更适合浮点处理器,节省了存储空间,并且浮点处理器不会有溢出问题(不像定点处理器有溢出问题)。我们可以通过转置来进一步改进Direct Form II. 把信号的流向前后颠倒,输出变成输入,分支节点变成加法,加法变成分支节点。通过转置,滤波器的特征不变,并且,转置后更有利于用浮点来计算。当相加的两个数比较临近时,浮点数会有更高的精度(把很小的数加到一个很大的数上,精度会比两个相近的数相加有更低的精度)。下图是转置后的Direct Form II( Transposed Direct Form II):
【转载】双二阶IIR滤波器_第5张图片 Transposed direct form II

补充说明和一些建议

总结,direct form I更适合定点计算,转置(transposed) Direct form II更适合浮点计算。

量化误差,在低频情况下,容易导致双二阶滤波器更脆弱(不稳定),主要是因为反馈系数(b1和b2)以及中间值(the delay memory)。精度不够,会导致不容易精确控制极点的位置,尤其在极点靠近单位圆的情况下,因此,量化误差会变成一个重要问题。第二个问题,是关于中间值的,相乘之后会产生更多的位,当保存下来时,需要做截断处理。这个误差反馈回滤波器系统,可能导致系统不稳定。32位浮点数对于音频滤波器来讲一般是足够好了。但是,对于很低频率(如控制类信号的滤波)和高采样率情况下,可能需要双精度才行。

对于定点实现的滤波器,24位的系数和中间存储,基本上可以很好的满足需要了,但是48k采样率下从300Hz往下(或者96k采样率下从600Hz往下),就开始变得不稳定了。定点处理器上实现双精度开销很大,幸好,有一个简单的方法可以提高稳定度。看看Direct Form I的结构图,把高精度的累加结果保存在低精度的中间存储器中,这个过程会造成精度损失。把精度损失(量化损失:高精度计算结果与低精度存储之间的差值)加回到下一次输出结果的计算中,近似达到双精度,当然,会增加一些运算量。这个技巧被称为First Order Noise Shaping. 有更高阶的Noise Shapers,但是First Order已经足够好了,可以应付所有音频需要,即使在高采样率的情况下。
【转载】双二阶IIR滤波器_第6张图片Direct Form I with first-order noise shaping

没有双精度的系数和计算,仅仅用16位定点,通常情况下,是不适合用于处理音频的。

最后,双二阶滤波器仅仅是DSP工具之一,它也不全是最好的滤波器。还有其它的滤波器没有低频敏感问题的(通常,双二阶滤波器对于高频是有比较好精度的,对于低频则不太好;有其它类型的滤波器,精度的分布更均匀,或者可以牺牲部分高频的精度来换取低频的精度)。然而,双二阶滤波器很通用和普遍,设计工具也很充足,所以,双二阶滤波器会是首选,除非有明确的原因需要用其它类型的滤波器。

有太多滤波器类型了,另外一个对synthesizer来说很经常使用的是state variable filter。对于低频有很好的性能,对于高频有一些需要绕过的限制,但是,最重要的是频率和Q系数是分开的,且很容易改变。它也构成了低频sine波产生器。

你可能感兴趣的:(audio,codec,算法,芯片)