本文翻译自:http://www.earlevel.com/main/2003/02/28/biquads/
作者:Posted on February 28, 2003 by Nigel Redmon
1 硬件需求介绍
图1 卡拉ok硬件系统
1)麦克风(microphone)
2)音频ADC --PCM1080或其他音频ADC
3)FPGA --卡拉ok系统
4)音频DAC--PCM5102A
5)音响
6)显示屏
2 FPGA硬件系统介绍
图2 fpga内部音频算法系统
音频模拟信号经过音频adc采集后转化为数字信号通过I2S送入FPGA,FPGA内部可做均衡器算法,反馈抑制算法,高低通滤波器混响回声以及变声的音频处理算法。
3 Biquad Filter
最常用的过滤器形式之一是biquad。双二阶是二阶(两个极点和两个零)IIR滤波器。它的阶数足够高,可以单独使用,而且由于高阶滤波器的系数敏感度,双二阶常被用作更复杂滤波器的基本构建块。例如,双二阶低通滤波器的截止斜率为12 dB /倍频程,可用于音调控制。如果您需要24 dB /倍频程的斜率,则可以级联两个双二阶,与单个四阶设计相比,它的系数灵敏度问题更少。
Biquads有几种形式。最明显的二阶差分方程的直接实现(y [n] = a0 * x [n] a1 * x [n-1] a2 * x [n-2] – b1 * y [n- 1] – b2 * y [n-2]),称为直接格式I:
直接表格I
直接形式I是在定点处理器中实现的最佳选择,因为它具有单个求和点(定点DSP通常具有允许中间溢出的扩展累加器)。
我们可以采用直接形式I并将其在求和点处拆分,如下所示:
然后,我们将两半交换,以使反馈一半(两极)首先出现:
现在,请注意z延迟中的一对是多余的,与另一对存储相同的信息。因此,我们可以合并这两对,产生直接的II型配置:
直接表格II
在浮点中,直接形式II更好,因为它可以节省两个内存位置,并且浮点不像定点数学那样对溢出敏感。我们可以通过调换滤镜来对此进行一些改进。要转置滤波器,请反转信号流的方向-输出变为输入,分配节点变为求和器,求和器变为节点。滤波器的特性不变,但是在这种情况下,浮点特性会好一些。当中间和的值更接近时,浮点具有更好的精度(将小数加到浮点中的大数上的精度不及类似值)。这是转置后的直接形式II:
转置直接形式II
注意事项和建议
同样,对于定点,直接形式I通常是最佳选择,对于浮点,转置直接形式II通常是最佳选择。
在低频设置下,双二阶更容易受到量化误差的影响,这主要来自反馈系数(b1和b2)和延迟存储器。系数缺乏分辨率使得极点的精确定位变得困难,当极点位于单位圆附近时,这尤其成问题。第二个问题是延迟存储器,这是因为乘法会产生更多的位,并且这些位在存储到存储器时会被截断。该量化误差在滤波器中反馈,从而导致不稳定。32位浮点通常足以满足音频滤波器的要求,但您可能需要使用双精度,特别是在非常低的频率(用于控制滤波)和高采样率的情况下。
对于定点滤波器,24位系数和存储器对于大多数滤波器都适用,但是在48 kHz采样率下(约是96 kHz的两倍),在低于300 Hz时开始变得不稳定。在定点处理器上,双精度总是很昂贵的,但是幸运的是,有一种简单的技术可以提高稳定性。从直接绘图形式I看,当将高精度累加器存储在右侧的较低精度延迟存储器中时,就会发生量化。通过获取量化误差(将完整的累加值与其存储到内存后的值之差),并将其加回到下一个样本计算中,该滤波器的性能几乎与使用全双精度计算一样好,但是在很大程度上降低计算成本。这种技术称为一阶噪声整形。
直接形式I具有一阶噪声整形
通常,没有双精度系数和计算功能的音频不适合16位定点处理。
最后,biquads只是DSP程序员工具之一-它们并不总是最好的滤波器形式。还有其他一些滤波器不具有biquad的低频敏感度(通常,biquad系数的精度在高频时非常好,而在低频时则很差;还有其他滤波器形式可以将精度更均匀地分布或折衷降低高频性能,以获得更好的低频性能)。但是,二元模型是众所周知的,并且设计工具很多,因此,除非您找到使用其他滤波器的理由,否则它们通常是IIR滤波器的首选。
过滤器形式太多,无法覆盖,但是对于状态合成器而言,是一种流行于合成器的过滤器形式 。它具有非常出色的低频性能,并且必须解决高频方面的限制,但是最重要的是频率和Q系数是分开的,并且容易更改以进行动态滤波。它也使低频正弦波发生器成为一个很好的例子。