在音频处理中,均衡器可以改变音频信号的频响特性,从而弥补信号在传输过程中的缺陷或是达到特定的声音处理效果。通常情况下,均衡器将音频处理信号(20~20 K)按一定的规律分为10段,15段,25段或31段来进行调节。
常采用的均衡器算法是使用IIR或者FIR滤波器滤波的设计方法。这种方法有几个不足之处:IIR滤波器具有反馈回路,会出现相位偏差;FIR滤波器会造成很大的时间延迟,这对于实时滤波是非常不利的。另外,如果使用IIR或者FIR滤波器,所调节的频段越多,增加的滤波器的个数也越多,运算量也明显增大。而通过傅里叶变换设计均衡器,不但在滤波的过程中具有很大的优越性,不存在相位误差、时间延迟这些问题,对调节多段均衡程序运算量上也有明显的减少。另外,这段程序是在TMS320DM642上进行的,该芯片的特点就是可以进行快速的乘法运算,因此,卷积等运算可以在芯片上高速的运行。
1 设计原理
均衡器的基本功能就是调节信号各段频率的强弱,从而弥补信号在传输过程中的缺陷或是达到特定的声音处理效果。因此为了达到这个目的,调节信号的各段频率可以将输入的信号进行以下处理:
1)对输入的信号进行快速傅里叶变换,使得各个频段的信号分开;
2)对需要变化的频点及其周围的频点进行相应的处理;
3)将处理后的信号进行傅里叶反变换,得到最后需要的信号。
2 傅里叶变换
快速傅里叶变换的时域抽取方法是将输入的信号按奇偶分开,打乱原来的顺序,之后进行蝶形运算,以保证输出的序列是按着时间顺序排列的。分解过程遵循两条规则:1)对时间进行偶奇分解,即码位倒置;2)对频率进行前后分解,即蝶形运算。
2.1 码位倒置
将长度为Ⅳ的时域序列x(n)按n的奇偶分为两组,变成两个N/2序列
码位倒置可以将输入数据依照奇偶分开,如表1所示。
2.2 蝶形运算
2.2.1 蝶形运算的原理
蝶形变换是将处理的信号进行分级处理,逐次进行DFT变换,以减少复数的乘法减少运算次数。对于输入x(n)序列奇偶按分开的两个序列的DFT运算分别是
2.2.2 蝶形运算的算法
蝶形运算是逐级运算累加实现的,在传统的蝶形运算中,旋转因子的N是保持一个固定的值而k是不断变化的,第一级到第级中,k的变化是以2为底的幂指数的变化,而到第级时,k的变化则是0,1,…,(N/2)-1。如果依照k的这种变化规律,在第级时,就很难继续依照前级进行变化。因此,根据以上分析,采用另外一种思路来对蝶形运算进行重新的整理。在旋转因子中,N是每个
蝶形单元输入数据的个数,k的变化规律是0,1,…,(N/2)-1,采用这种方法就可以有效的缩短代码的长度,提高运行速度。图1为蝶形运算流程图。
2.3 快速傅里叶变换的实现
蝶形运算的旋转因子,输入的复数表示为InputData=RealInData+j*ImagInData,因此在计算过程中,旋转因子和输入数据的计算过程是将实数和复数分开计算所得到的。
因为旋转因子中k=0,1,…,(N/2)-1,因此随着k的增长cos(-2Pik/N)和sin(-2Pik/N)也相继发生成倍的变化。
对这一现象采用的处理方法是使用正余弦的倍角公式:
这样,处理的变化的过程就变为处理正弦和余弦倍角变化的过程,从而简化了程序。部分程序如下:
其中,Block是每一个蝶形单元输入个数的一半即N/2,r0和i0分别是旋转因子的实部和虚部。
3 均衡处理
对于频点的调节是调节频点周围这一段的频率幅度的大小,以最终达到调节频率的目的。为了防止在抽取频点时,因某一点的调节范围过大而使这一段的声音听起来不和谐,在对频点进行调节时,采用的方法是调节该频点及其附近的频点以达到最终的调节效果。
算法的实现:取频率点周围的点,将所取的点调节的范围是该点与对应频率点的距离的反比,这样就避免该点频率的影响太强烈。算法流程如图2所示。针对某一个频点的处理的程序如下:
Mid为调节频点对应的频率轴的位置,i为Mid相邻近的后面的点。
4 结束语
本文提出的采用频率滤波器对均衡器进行设计的方法,区别于其他的均衡器的实时滤波器的设计,既避免了IIR滤波器相位偏移的现象,又避免了FIR滤波器的延迟,因此对频率滤波具有很好的效果。另外,由于处理采用频域滤波,在处理音频信号时可以只经过一次傅里叶变换,就能处理各个频段的信号,大大减少了数据的运算量,因此使用频域滤波器可以更快捷、更高效地对数据进行处理。在使用该种方法