自适应噪声抵消算法优化与FPGA实现

2019-11-26 08:55王志铎马令坤张俊涛
陕西科技大学学报 2019年6期
关键词:状态机滤波器音频

王志铎, 马令坤, 张俊涛

(1.陕西科技大学 电气与控制工程学院, 陕西 西安 710021; 2.陕西科技大学 电子信息与人工智能学院, 陕西 西安 710021)

0 引言

在语音通信的过程中往往会受到各种噪声的干扰,这些噪声可能是由于路径损耗、反射、衍射等各种原因造成从而使通信质量下降,抑制这些干扰,提高通信质量是十分必要的[1].传统的滤波器无法滤除特性和传输路径不断变化的噪声信号,随着数字信号处理技术的发展,自适应滤波技术已经成为数字信号处理领域的一个重要分支,且已经广泛应用到生活、工作和军事等领域[2].在实际应用中,不同的应用场合对硬件实现的速度和成本的要求不同,例如,移动电话中使用的LMS自适应滤波器需要尽可能小的面积以减轻设备的重量,但是该应用中的速度不太重要,因为它用于语音处理[3].

FPGA采用并行处理方式,使用灵活且易于裁剪,因此用于FPGA实现的自适应噪声抵消器的硬件设计变得十分重要.在本文中,以DE2-115为硬件平台在FPGA上实现音频的自适应噪声消除,使用符号LMS算法实现噪声抵消器,同时采用高性能音频编解码芯片WM8731对信号进行采集和输出,通过SIMULINK和FPGA进行连接[4]将实时的语音信号输入FPGA中进行处理以实现高信噪比的自适应噪声抵消.

1 自适应噪声抵消原理

自适应噪声抵消是一种自适应系统,用于从所需信号中去除不需要的噪声.如图1所示,自适应噪声抵消有两个输入,称为主输入和参考输入.参考输入经过滤波器并从主输入中减去,主输入包含信号和噪声[5].来自参考输入的噪声信号n1通过噪声路径信道传递到主输入端,该主输入端接收信号源s和不相关的噪声n0.噪声n1经过滤波器以产生输出信号y,它是n0的近似,并从主输入d中减去,以产生称为误差信号e的系统输出信号e=s+n0-y.误差信号用于使用自适应算法调整自适应滤波器的权重系数,以使误差信号最小化.

图1 自适应噪声抵消模型

1.1 最小均方算法

最小均方算法的基本结构如图2所示.可以用三种基本关系的形式表述如下:

y(k)=uTW

(1)

e(k)=d(k)-y(k)

(2)

Wk+1=Wk+2×μ×e(k)×u(k)

(3)

从算法的迭代公式可以看出,只要给定滤波器的长度,收敛因子,LMS算法只利用输入信号u和期望信号d即可进行计算,不需要计算自相关矩阵Rx以及互相关向量等,因此非常适合用于先验知识未知的场合.

图2 LMS自适应滤波器框图

1.2 符号LMS算法

从LMS算法的公式可以看出,一个M阶的LMS自适应滤波器在一个输入信号周期内要使用M次乘法完成滤波,还需要2M次乘法完成系数的更新,而乘法运算会在FPGA中占用较多的资源,为了LMS滤波器的乘法次数,将对该项目使用符号LMS算法,以减少对逻辑单元的占用,从而能够设计出更多可能的自适应滤波器[6].

符号LMS算法同样是利用随机梯度来达到最优解,不同的是,符号法只给出梯度迭代的方向,而不给出具体的梯度值,性能没有LMS算法稳定,但相对的换来了运算速度的增加和硬件资源的节约,符号LMS算法的迭代公式有三种形式[7],即:

Wk+1=Wk+μ×sign[e(k)]×x(k)

(4)

Wk+1=Wk+μ×sign[x(k)]×e(k)

(5)

Wk+1=Wk+μ×sign[e(k)]×sign[x(k)]

(6)

分别称上述三种算法为符号-误差算法、符号-数据算法、符号-符号算法,比较三个公式,容易看出,符号LMS算法在权值更新的过程减少了M次乘法运算,对于乘法器资源有限且乘法速度有限制的FPGA来说可以大幅提高LMS算法的运算速度[8].式(6)对误差信号和参考信号都进行了符号运算,通过误差信号和输入信号的符号来决定梯度迭代的方向,减少了2M次乘法运算.

2 自适应噪声抵消算法的MATLAB仿真

符号LMS算法有三种形式,算法性能的随机性很大,收敛速度、稳态误差会有不同的特性,在FPGA上实现之前首先在MATLAB平台对符号LMS算法进行仿真,并与传统的LMS算法进行对比,评价出算法性能较好的一种,并对不同噪声条件下符号LMS算法降噪的性能进行对比分析.

2.1 符号LMS算法的仿真

编写MATLAB代码进行仿真验证,利用MATLAB产生两个正弦信号,信号s频率为500 Hz,幅度为1,噪声n频率为1 kHz,幅度为1,并将s和n叠加作为含噪信号,信号长度为1 000,滤波器的阶数M=8,收敛因子μ=0.125.由文献[9]知符号-数据算法和符号-符号LMS算法相对于符号-误差算法收敛速度更快,而符号-数据算法比符号-符号算法有更好的稳态误差,再者从硬件实现的角度来看并不需要符号-符号LMS算法,因为与μ相乘是一个常数的缩放,在FPGA中可以通过数据移位实现与μ相乘,只需将μ设定为2的N次幂的形式即可,调用符号LMS算法程序,通过更改权值更新的公式运行程序出符号-数据LMS算法和传统LMS算法并绘制出信号图形和均方误差图形如图3和图4所示.

图3 两种算法仿真前后对比图

图4 均方误差曲线图

可以看到输出信号跟预期信号基本相同,但是有细微的畸变,从误差曲线可以看出,符号数据LMS的收敛速度跟传统LMS算法基本保持一致,达到稳态之前均方误差较大,达到稳态之后和传统算法的稳态误差基本相同.

2.2 音频信号的降噪仿真

正弦波叠加的干扰抵消验证了符号-数据LMS算法的可行性,通过实际叠加噪声的语音信号进一步进行验证,利用两个具有一定距离的USB声卡连接麦克风采集环境中的信号[10],并存储在MATLAB环境中,用来采集信号的麦克风,一个靠近噪声源采集噪声,另一个靠近声源位置采集含噪声的声音信号,将信号通过抵消器进行仿真验证.

2.2.1 单频率噪声消除仿真

人说话的语音频率范围为300~3 400 Hz,属于中低频信号[11].生活中经常会存在一些中低频的干扰噪声,例如GSM通信过程中,会受到频率为217 Hz的TDMA噪声的干扰[12].利用信号发生器输出500 Hz的正弦波并通过功放放大用扬声器输出作为环境中的噪声,同时在距离噪声源一定位置发出“你好”的声音,用两路分别靠近噪声源位置和人声位置的麦克风同时采集环境中的声音,通过SIMULINK存储到MATLAB环境中进行处理,采集到的单频噪声信号的归一化峰值为0.05,语音信号的峰值为0.1,仿真结果如图5所示.

通过对比图5(b)、(d)可以发现,降噪系统抵消单频的500 Hz噪声信号效果明显,系统只在开始阶段有轻微的波动,从输入输出信号的频谱也可以看出500 Hz附近的分量被大幅的衰减,抵消器对单频信号的消除效果明显,经过计算在抵消前后的信噪比分别为-23.49 dB和3.83 dB,信噪比增益为27.32 dB.

(a)噪声信号 (b)不含噪声语音信号

(c)含噪语音信号 (d)消噪后信号

(e)含噪语音信号频谱 (f)消噪后信号频谱图5 500 Hz单频噪声消除仿真

2.2.2 多种单频噪声叠加消除仿真

实际环境中同样存在着诸如风扇噪声等多频噪声,利用MATLAB生成归一化幅度均为0.3的频率分别为100 Hz、500 Hz和1 100 Hz的三个正弦波叠加的噪声,通过扬声器进行播放作为环境中的噪声,利用同样的方式采集信号到MATLAB环境中进行噪声的抵消运算,采集到的多频噪声归一化峰值为0.82,语音信号的归一化最大峰值为0.1,仿真结果如图6所示.

在经过抵消器进行噪声抵消之后还原出了语音信号,对比图6(b)、(d)可以发现,系统收敛速度相对于单频信号变慢,收敛之后仍然有很好的抵消效果.从频谱分析可以看出抵消前在100 Hz、500 Hz和 1 100 Hz附近有很大的分量,抵消后三个单频尖峰基本被抵消掉,经过计算在抵消前后的信噪比分别为-29.27 dB和-4.62 dB,信噪比增益为24.65 dB.

(a)噪声信号 (b)不含噪声语音信号

(c)含噪语音信号 (d)消噪后信号

(e)含噪语音信号频谱 (f)消噪后信号频谱图6 多频噪声消除仿真

2.2.3 白噪声消除仿真

白噪声的频带范围更宽,包含着更多的谐波分量,利用MATLAB生成均值为0,方差为1的白噪声信号并通过扬声器在室内环境中播放,同时播放一段歌曲音频[13],用两个麦克风采集数据到MATLAB环境中并通过抵消器进行白噪声的抵消,采集到的白噪声归一化峰值幅度为0.15,音乐信号的归一化峰值幅度为0.3,仿真结果如图7所示,抵消器较好地还原出了歌曲的声音,从时域图和频谱图都可以清晰地看出,白噪声较好的被抵消掉.经过计算在抵消前后的信噪比分别为-4.06 dB和15.92 dB,信噪比增益为19.98 dB.

(a)噪声信号 (b)不含噪声语音信号

(c)含噪语音信号 (d)消噪后信号

(e)含噪语音信号频谱 (f)消噪后信号频谱图7 白噪声消除仿真图

3 自适应噪声抵消器的FPGA实现

自适应噪声消除器的详细结构如图8所示.由于要进行盲滤波,自适应滤波器需要测量参考噪声和主输入信号,这是公式(2)中的参考信号d.在源信号相对较弱的场中测量时,噪声才能有效地用作参考.因此,记录参考噪声的麦克风必须与记录主要输入的麦克风保持一定距离.播放噪音的两个扬声器必须是相同的设置,以便噪声在测量区域的任何地方同步.使用两个USB声卡连接麦克风同步采集含噪语音信号和噪声信号.对于实时数据采集和自适应滤波,输入的两路信号经过SIMULINK被记录至MATLAB工作空间,连接并作为立体声输出信号回放,然后作为FPGA的输入.这样的结构还允许异步自适应滤波,即记录输入数据,将其存储在MATLAB工作空间中,并将其用作FPGA的输入,以便以后进行自适应滤波.立体声线路输入由两个不同的输入信号组成:左声道中的含噪信号和右声道中的噪声信号.噪声信号n1与误差信号e和收敛因子μ一起决定了权重更新的速度.权重更新在LMS状态机中定义,状态机在一个音频周期期间运行和处理一个音频样本.

图8 系统整体框图

3.1 WM8731控制模块设计

WM8731音频编解码器可以提供高质量的24位音频.芯片支持麦克风输入、线路输入和输出端口[14],采样率可从8 kHz到96 kHz,采样精度可以为8 bit、16 bit或 32 bit,WM8731通过串行I2C总线接口控制,该接口连接到FPGA芯片的引脚.本文采用48 kHz的采样率和16 bit的采样精度进行声音信号的采集和输出,利用LINEIN接口的两路ADC分别采集含噪语音信号和噪声信号,降噪后的信号利用LINEOUT接口的DAC进行输出[15].利用FPGA内部的PLL进行分频得到18.432 MHz的时钟作为音频芯片的时钟信号,编写I2C总线通信代码进行芯片寄存器配置,读取两路ADC的值送到状态机进行降噪处理之后再由DAC控制输出信号.

3.2 符号LMS算法状态机实现

状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心[16].符号LMS算法状态机如图9所示,为了跟MATLAB仿真保持一致,算法仍设为8阶,利用DE2-115的其中四个拨码开关将收敛因子μ设置为16级可调,实验时设置收敛因子取0.125.

图9 符号LMS算法状态机

每采集一个新的数据状态机进入工作状态,首先进行系数的更新,系数更新公式采用公式(5)进行实现,直接对输入数据最高为判断得出数据的符号进行梯度方向的判断,进而改变误差信号e的方向,收敛因子μ采用移位的方式实现,整个权值更新的过程不再需要乘法运算的参与,后面三个状态对采样的数据进行缓冲保存,进而实现语音信号的实时处理.

3.3 符号LMS算法仿真结果

图10是符号LMS算法的ModelSim时序验证图,用跟MATLAB相同的数据进行硬件仿真,可以验证算法在FPGA中成功实现,同时也可以看到输出信号达到稳态的时间在微秒级别.权重更新的算法优化也为FPGA节省了较多的乘法器.同MATLAB仿真结果相比,FPGA对信号的还原有相对较大的畸变,这是因为FPGA实现过程中,数据位宽为16位,权重系数位宽为32位,位宽的限制导致其必然和MATLAB中全精度计算有着一定的误差.

图10 FPGA仿真结果图

3.4 噪声抵消器实时调试结果

利用SIMULINK实时采集两路USB声卡的信号并输出给FPGA进行音频信号的实时降噪处理,设置左右声道分别输出实时采集的信号和经过噪声抵消器处理的信号,将输出信号接到示波器进行观察,同时用示波器分析出两路信号的频谱,如图11、图12和图13所示.从示波器图形可以看出,500 Hz的噪声被衰减了25 dB左右,叠加了三种正弦波的信号在每个单频尖峰都有20 dB以上的抵消效果,叠加了白噪声的音频信号也能有效的消除噪声,从频谱图中可以看出对白噪声在整个频带上有平均约15 dB的衰减,这意味着噪声可以降低到原始水平的1/10~3/10.

图11 实时单频噪声抵消图

图12 实时多频率噪声抵消图

图13 实时白噪声抵消图

4 结论

本文首先阐述了自适应LMS算法和速度更快的符号LMS算法,并且使用MATLAB进行分析比对,验证了不同噪声环境下自适应噪声抵消算法的效果,然后将基于符号LMS算法的自适应噪声抵消器在FPGA硬件上实现,并通过ModelSim仿真验证了符号LMS算法在FPGA上实现的收敛性和稳定性.同时在FPGA上实时运行抵消器并验证了不同噪声下自适应噪声抵消的效果,从实验结果来看,无论是环境中的单频噪声还是白噪声,在抵消器的作用下都能较好的被抵消,从而还原出有用信号.

本文在DE2-115开发板上实现的自适应噪声抵消器可以有效地实时抵消正弦噪声和多频噪声,并且也可以较好的抵消白噪声,并且采用的符号LMS算法有效的节省了硬件资源,同时由于FPGA设计灵活且易裁剪,可以根据需求更改滤波器的阶数、系数的位宽等参数应用在不同的场合.

猜你喜欢
状态机滤波器音频
基于有限状态机的交会对接飞行任务规划方法
从滤波器理解卷积
必须了解的音频基础知识 家庭影院入门攻略:音频认证与推荐标准篇
基于Spring StateMachine的有限状态机应用研究
基于Daubechies(dbN)的飞行器音频特征提取
开关电源EMI滤波器的应用方法探讨
一种微带交指滤波器的仿真
音频分析仪中低失真音频信号的发生方法
基于TMS320C6678的SAR方位向预滤波器的并行实现
Pro Tools音频剪辑及修正