DSP(Digital Signal Processor,数字信号处理器)是在模拟信号变换成数字信号以后进行高速实时处理的专用处理器件,DSP具有接口简单、方便;精度高、运算速度快、稳定性好;编程方便,容易实现复杂的算法;集成方便等优点,已经被广泛的应用于通信、雷达、语音、图像、消费类电子产品等领域。DSP技术的发展和应用,使得自适应信号处理技术得以实现。自适应噪声消除是消除强背景噪声的一种有效的技术,在通常情况下,背景噪声不是稳定不变的,而是随着时间的变化而变化。因此,噪声消除应该是一个自适应噪声处理过程:既可以在时变的噪声环境下工作,还可以根据环境的改变而调整自身的工作参数。在本文中,利用DSP的优越性能,在TI公司TMS320VC5416芯片上,分别实现LMS和RLS算法的自适应强噪声消除系统,该系统经过验证,能够很好地消除背景噪声,恢复出原始话音信号。
1 自适应噪声消除算法
自适应噪声消除算法的基本思想是将噪声混杂的信号通过一个滤波器来达到抑制噪声,并使信号本身无失真通过的这样一个过程。并且,正如上面所述,这个自适应处理过程不需要预先知道信号以及噪声的特点。图1为自适应噪声消除算法的原理框图。
为了实现这个自适应噪声消除系统,这里使用2个输入源和1个自适应滤波器。一个输入源是混入了噪声的信号(称之为主输入源,用s十n0表示),另一个输入源为背景噪声,这个背景噪声与主输入源噪声相关,而与主输入源中的信号无关(称之为噪声参考输入源,用n1表示),噪声参考输入源通过自适应滤波器后输出yo滤波器不断地自我重新调整,使得y与n0的误差达到最小。然后用主信号源减去输出y得到系统的输出z=s+n0-y,z即去噪后的信号。
假设s,n0,n1,y是平稳过程,并且均值为0,s与n0和n1无关联,而n1和n0相关,则可以得出以下的表达式:
当调整滤波器,使得E[z2]达到最小值时,E[(n0-y)2]也是最小值,因此,系统输出z可以作为自适应滤波器的误差信号。
文中的自适应滤波器采用2种自适应滤波算法:一种是最小均方算法(LMS),另一种是RLS算法。
最小均方算法(LMS)应用最广、算法最简单。LMS算法主要目的是使误差信号的均方值达到最小。自适应滤波器的系数由下式决定。
其中,P(i)是第i个自相关矩阵的逆;k(i)是第i个增益向量;λ是指数型遗忘因子。从算法中矩阵的运算可以看出来,RLS算法比LMS算法要复杂得多。对于一个N阶的滤波器,LMS算法每次迭代需要O(N)次运算,而RLS算法需要O(N2)此运算。在DSK方式实现时,发现在48 kHz的采样率下,采用LMS算法设计的滤波器的阶数最多20阶,而在同样的条件下,采用RLS算法设计的滤波器的阶数只有5阶左右。
2 DSP实现
本文的自适应噪声消除算法处理器件采用TI的TMS320VC5416型DSP处理器。该处理器采用改进的哈佛结构,拥有专用的硬件乘法器和专门为数字信号处理而设计的指令系统,快速的指令周期等优点。由于声音是模拟信号,要使用DSP对其进行处理,首先需要将模拟信号进行模/数转换,本文采用MAX197作为A/D转换芯片。MAX 197是Maxim公司推出的8通道、12位的高速A/D转换芯片,单次转换时间仅为6μs,采样速率可达100 kSa/s。经过噪声消除后的信号质量可以通过音箱来辨别,因此,在噪声消除后,还要将信号进行数/模转换。本文采用MX7541作为系统的D/A转换芯片。MX7541是美国Maxim公司生产的高速高精度12位数字/模拟转换器芯片,由于MX7541转换器件的功耗特别低,而且其线性失真可低达0.012%,因此,该D/A转换器芯片特别适合于精密模拟数据的获得和控制。
本文的自适应噪声消除系统结构图2所示。
麦克风1用于采集带有强烈背景噪声的话音信号作为系统的输入1,麦克风2用于采集背景噪声作为输入2,输入1和输入2经过音频接口输入到MAX197中进行A/D转换,转换后的信号被送入TMS320VC5416中进行自适应噪声消除处理,处理后的信号经过MX7541的D/A转换后,送入音箱进行播放。另外,还可以通过计算机和Matlab软件来比较自适应噪声消除系统的输入/输出信号,验证自适应噪声消除系统工作情况。
图3为3台计算机记录的自适应噪声消除系统的工作情况:
比较主输入信号、参考噪声输入信号和滤波器输出信号,可以清楚地看出输出与主输入信号相比,噪声成分被大大削弱,这与用音箱直接听到的声音效果一致,以上结果证明用DSP成功地实现了实时的自适应噪声消除系统。
3 结 语
本文采用TI的TMS320VC5416型DSP成功地实现了自适应噪声消除系统,试验的结果显示LMS算法和RLS算法是去除噪声的自适应滤波器非常有效的方法,DSP板也是实现实时自适应噪声消除系统的好平台。在整个系统工作过程中,仍有少量的背景噪声不能完全从信号中去除掉,为了测试算法的效果,用Matlab产生一个白噪声信号作为噪声参考信号,同时将参考噪声信号进行微小扭曲后与从麦克风输入的语音信号叠加后作为主输入信号,然后用前文所述的实现方式对主输入信号和参考噪声信号进行自适应噪声去除算法处理。在处理后,噪声完全从信号中去除掉了,由此,可以看出,背景噪声不能完全从信号中去除掉问题不是由算法造成的,而是由于试验设备造成的。麦克风、电缆以及采样造成会造成信号扭曲,而这些扭曲在噪声去除算法中是无法补偿的,因此其可能是造成这个问题的最可能原因。