基于飞思卡尔MCU的AEC算法实现
扫描二维码
随时随地手机看文章
0 引言
VoIP是在IP网络上实现音视频及传真信号传输的一门全新的集成业务数据网络技术。IP语音传输技术具有节省带宽、话费低,可方便地集成智能型开放体系结构以及多媒体业务等优势。但较之传统电话,其语音质量较差。事实上,影响因特网语音质量的因素是多方面的,关键因素之一是回声的影响。因此,要提高因特网的语音质量,就必须在语音传输过程中进行回声消除。AEC是基于自适应算法并可用于VoIP的声学回声消除技术。而用于AEC算法的实现与研究的硬件平台是以freescale公司的MCF5235为核心的开发板。MCF523x系列MCU是首个以带有增强型乘加运算单元(eMAC)的ColdFIRe V2内核为核心,该产品同时结合了增强型时序处理单元(eTPU)和10/100以太网多媒体通道控制模块(MAC)的MCU,因而具有强大的数据处理能力和丰富的接口,能够满足VoIP电话终端对数据处理速度以及网络通讯安全的要求。
1 回声消除
1.1 声学回声消除原理
AEC是以扬声器信号与由它产生的多路径回声的相关性为基础建立的远端信号语音模型,利用它可对回声进行估计,并不断地修改滤波器的系数,以使估计值更逼近真实的回声,然后,将回声估计值从话筒的输人信号中减去,从而达到消除回声之目的。
声学回声消除器的结构原理如图1所示。其中y(n)代表远端语音信号,r(n)代表回声,x(n)是已经叠加了回声信号r(n)的近端语音信号。对回声消除器来说,可将远端信号作为一个参考信号,然后由自适应滤波器通过它来产生回声的估计值r′(n),再从近端带有回声的语音信号中减去r′(n),从而估计出近端输出信号μ(n)。在近端未说话时,即当x(n)=0时,μ(n)即为回声的残差信号e(n)。e(n)的计算方程为:
e(n)=r(n)-r′(n) (1)
此时,回声的残留信号的理想值应为0。
1.2 自适应FIR滤波器
在声学回声消除器里,横向结构的自适应滤波器可通过参考信号来产生回声的副本,其原理如图2所示。如果这个横向结构的自适应滤波器的转换函数与回声通道的函数模型一致,那么,回声的副本与回声就应该是一致的,这样,通过两者的抵消便可达到消除回声之目的。
FIR滤波器的最主要特点是没有反馈回路,这是一种非递归系统,它的冲激响应是一个有限长序列。FIR滤波器的输出计算公式为:
自适应FIR滤波器根据上一刻的近端输出信号μ(n)及远端语音信号y(n),并通过自适应算法来估算当前时刻FIR滤波器的系数ak(n+1)。
1.3 LMS算法和NLMS算法
在输入信号和参考信号都是平稳随机信号的情况下,自适应滤波器的均方误差E[e(n)]性能曲面是滤波器加权系数ak的二次函数。其系数修正算法通常采用可使均方误差最小的最优化求解算法。
由于实际的梯度值只能根据观测数据估计,因此LMS算法提出的一个基本思想就是用平方误差E[e2(n)]来代替均方误差E[e(n)]。它是对基本的最速下降算法的改进,其算法迭代公式为:
ak(n+1)=ak(n)+2μe(e)*y(n) (3)
其中y(n)为输入信号,μ为迭代步长常量。
规一化LMS (NLMS)算法可用来在LMS自适应滤波器方程里修正FIR滤波器的系数。NLMS算法与LMS算法几乎是一样的,唯一的不同是NLMS算法中使用可变步长控制因子来代替LMS算法中的常量因子。其目的是加快算法的收敛速度。其算法迭代公式为:
其中,μ可由试验来确定。但应注意,μ的选取至关重要,为了确保收敛,必须满足0<μ<2。本方案中的自适应算法就是采用NLMS算法。
1.4 语音检测
语音活动检测可用来确定三种语音状态:近端讲话状态、远端讲话状态和双端讲话状态。因为AEC要根据不同的语音活动状态来进行相应的处理。它在检测到近端语音活动状态时,滤波器既不进行滤波,也不进行系数更新;而在检测到双端语音活动状态时,将停止滤波器系数的更新,但要进行滤波。由于在只有远端语音活动的状态下,既要进行滤波,又要进行系数更新。因此,语音活动状态检测的正确与否在很大程度上会影响回声消除的效果。语音活动检测流程如图3所示。
双端讲话情况可以通过设计近端话音检测器,并采用Geigel算法来判决。利用该算法计算回声延时大小范围内的瞬时能量比较,具有着良好的性能优势。其Geigel算法描述如下:
式中,N是FIR延时级数,之所以将r(i)和最近N个远端输入的最大值进行比较,而不是仅仅和当前远端输入点y(i)进行比较,是因为回声路径延时具有不确定性。
2 实现方案
声学回声消除器AEC主要包括FIR滤波模块、Geigle双端语音判决模块、NLMS系数更新模块、语音状态控制模块四个部分,图4所示是该AEC的简要工作流程。
Freescale公司的硬件开发平台以Coldfire系列MCF5235为核心。该系列MCU支持标准C语言及其专用的汇编语言。因此,在该平台上运行的功能模块需要使用C语言或者专用汇编。AEC的开发及移植过程如图5所示。
设计时。首先应搭建AEC的Matlab模型并对该模型进行仿真验证。然后以已通过验证的模型为标准,搭建可在MCF5235开发板上运行的C语言模型。最后根据需要将运算较为密集的那部分C语言程序转化为Coldfire芯片的专用汇编语言。
3 实验结果及分析
在Matlab环境下对AEC进行测试时,可将需要的三部分语音信号同时输入到回声消除器,然后测试回声消除的相关性能。
本测试所输入的语音信号波形如图6所示。从上到下依次是远端语音信号y(n)、近端语音信号x(n)和回声信号,其中与之和作为近端输入与y(n)一同构成了回声消除器的两个输入信号。将滤波器的阶数设置为512。即采取64 ms延时的回声消除。通过回声消除处理后所得到的残差信号e(n)的波形如图7所示。
从图6和图7的对比可以发现,当只存在远端信号和回声信号,而近端缄默的情况下,回声消除器能够快速收敛并消除绝大部分回声;而当双端都存在信号时,回声消除器能在消除回声的基础上较好的保持近端语音波形。
将AEC功能模块集成到用MCF5235开发板搭建的VoIP终端上,来建立两个通信终端的语音通信,即可对AEC功能模块进行实时免提通话测试。
4 结束语
本文介绍了声学回声消除的原理、声学回声消除器的设计以及AEC在基于freescale公司MCF5235开发平台的VoIP语音通信终端上的集成方法。该AEC的实现包括语音检测、自适应滤波等语音处理算法。其程序执行的实时性较好。通过Matlab模型的仿真结果和通话主观测试结果证明,用该方案实现的声学回声消除器能够满足网络通信对语音的要求。