基于FPGA的多路回声消除算法的实现

2017-09-15 13:15尹邦政朱静毛茅
科技资讯 2017年24期

尹邦政++朱静++毛茅

摘 要:文章概述了一种广泛应用于VOIP(Voice Over IP)技术的回声消除算法,并基于该算法在大规模逻辑器件FPGA上实现应用。通过仿真和实测验证,该算法能有效快速地消除回声;同时,该算法应用灵活,能实现多路的回声消除,在VOIP终端设备上具有较强的应用价值和应用前景。

关键词:回声消除 VOIP FPGA

中图分类号:TN91 文献标识码:A 文章编号:1672-3791(2017)08(c)-0009-03

Abstract:In this paper, an echo cancellation algorithm widely used in VOIP (Voice over IP) technology is summarized and applicated on FPGA. By simulation and experimental verification, the algorithm can effectively eliminate echo; meanwhile, the algorithm can achieve flexible application, multi-channel echo cancellation function, has good application prospect in VOIP terminal equipment.

Key Words: Echo cancellation; VOIP; FPGA

随着网络IP技术的发展,VOIP(Voice Over IP)技术也在通信领域得到广泛的应用。由于VOIP技术具有网络带宽利用率高,与其它的网络技术融合性好,通信成本低等优势,逐渐取代传统的PSTN通信技术,同时,随着网络带宽的增大以及网速的增快,视频及数据应用的需求也极大的推动VOIP技术的发展。VOIP是基于IP的语音实时传输,语音信号在编解码、压缩解压缩、拆解包等过程中不可避免的存在延时,同時也不像传统电话一样独占通信带宽,因此,语音的通信质量一直是影响VOIP技术发展的重要因素,影响语音质量另一个重要因素是回声信号,回声信号能导致讲话者能听到自己被延迟后的话音,极大的影响到用户体验。要提高VOIP的语音质量,就必须在语音传输的过程中进行消除回声的处理[1]。

在VOIP技术中,一般采用声学回声消除器来抵消通话过程中产生的回声,以提高语音质量。一个基本的回声消除器包含两部分:自适应滤波器和双端通话检测器,自适应滤波器通过自适应地模拟回声路径来消除回声,其性能决定着回声消除的效果。在实际应用中,自适应滤波器采用最多的是NLMS算法及对其改进的各种算法,原因是NLMS算法简洁,复杂度低[2]。

目前在VOIP通信终端中,普通采用专用的语音信号处理芯片(CODEC),如SI3000等对语音信号进行编解码以及回声消除,但是随着终端设备的功能复杂化,平台化,芯片方案越来越不适合应用到多路语音终端设备中。本文基于LMS算法,在大规模逻辑器件FPGA上实现多路语音信号的回声消除,具有时延小,语音质量好,可扩展性强等特点,具有较好的应用价值和应用前景。

1 自适应滤波

自适应滤波是回声消除模块的核心内容。通过自适应滤波可重构出非常接近真实回声的语音,从而相减完成回声消除。而自适应滤波的核心是系数更新算法。常用的有LMS和RLS,以及这两种方法的改进版本[3-4]。

LMS算法收敛后稳态误差大于RLS,但却易于硬件实现,所以大部分算法都是基于LMS的,LMS自适应滤波系数更新算式如下所示:

h(n+1)=h(n)+μX(n)e(n)

其中:h、X是数组,e是单个数据,n代表第n个时刻,μ为步长因子,是一个<1的正数。

改进的LMS算法中最常用的是NLMS,该算法的改进目的是收敛速度。代价是需要一个除法运算。经过实验,NLMS的收敛时间为LMS的一半。当μ为0.01时,LMS收敛需要4000次更新系数,也即是0.5s,可以满足应用需求。

2 自适应滤波的实现

FPGA的开发软件中本身有滤波器的IPcore,但是要做多自适应更新系数就需要配置该IPcore为可变系数模式。但是由于回声消除128ms时,需要1024阶滤波,这对于IPcore来说是相当庞大的,需要占用大量的乘法器或者逻辑资源。因为IPcore里的滤波器结构是MAC结构或者分布式结构,优点是可以有很大的数据吞吐率。而语音信号的吞吐量却是很低的,所以不适合采用IPcore及其结构来实现回声消除的滤波器。

将1024阶滤波需要的1024次乘法分时完成,这样就可以只用一个乘法器,由于语音采样率只有8K,所以理论上来说时钟频率达到8M即可将1024次乘法分时完成。同理1024个系数的更新也可以分时完成。整个自适应滤波分滤波和系数更新两个部分完成。重构滤波器的实现框图如图1所示。

每次在8K采样时钟将远端语音写入移位寄存RAM后,启动滤波。滤波在时域的实现是竖乘法的卷积运算。FPGA实现时分1024次将数据RAM和系数RAM的数据同时取出,两者相乘的结果进行积分运算。每次滤波运算前要对积分结果清零。

系数更新的实现框图如图2所示。

根据系数更新公式:

h(n+1)=h(n)+μX(n)e(n)

数据RAM的内容与误差信号一一相乘后再与对应的系数相加即可得到更新后的系数。值得特别注意的是公式中的μ。通过MATLAB仿真得到μ的取值为2-36,相当于右移36位。但是数据位宽只有16位,误差较小时也就2~3位有效。相乘后的值不超过20位。且有时数据本身也只有不到8位有效。这时候右移36位显然是把有效数据都忽略了。因此要想办法把这36位右移分摊到算式的其余地方。endprint

将系数更新公式变为:

h(n+1)=(h(n)×232+μX(n)e(n) )×2-32

这样即使误差为最小值1时,数据为4位有效也可以不被移除掉。h(n)×232代表系数位宽为32位。系数公式改变后,更新的系数要被右移32位。显然这样直接移动会把h(n)移为0。因此还要想办法把这右移32位分摊到其它的地方。

注意到系数是在计算重构回声时使用的,重构回声为sum (h(n)×X(n))。重构回声是1024个48位位宽的数据累加,对这个数据进行右移32位显然能保留有效位。但是FPGA实现时也不能先将累加和定义得非常宽,这样太浪费资源,运算速度也不够快。综合考虑先将系数h(n)右移16位后与16位的语音信号X(n)相乘,此时相乘后的结果要累加1024次后再右移16位,所以相乘后的结果右移6位后依然不为0的数据才会有意义。最后运算结果再右移10位即可完成总共32位的位移。

自适应滤波重构回声的仿真如图3所示,可以看到,重構的回声与真正的回声信号高度吻合。

3 基于FPGA的实现

本文基于Altera公司的低成本Cyclone IV系列FPGA EP4CE10设计了4路回声消除电路,在VOIP终端设备中进行了应用。该FPGA芯片含10320个逻辑单元(LE)、414Kbit内置存储单元、嵌入式乘法器23个、锁相环2个、全局时钟网络10个、8个I/O块单元和多达179个用户输入输出接口。4路回声消除电路共使用60%的逻辑资源,50%的组合逻辑资源和45%的寄存器资源。实验结果表明,基于FPGA的回声消除方案能同时对4路音源进行有效回声消除。

4 结语

基于FPGA的回声消除算法相比于硬件回声消除电路或其它芯片方案,具有方案灵活特点,算法中滤波阶数和时钟频率等重要参数可根据实际产品适当的调整以便达到最佳回声消除效果;同时还具有易扩展性特点,能根据实际产品设计多路回声消除,达到降低成本目的。基于这些优点,该回声消除方案能广泛应用于VOIP终端设备中,具有较高的应用价值和应用前景。

参考文献

[1] 李挥,林茫茫.VoIP 回声消除器设计及算法研究[J].电子学报,2007,35(9):1774-1778.

[2] 高鹰,谢胜利.一种变步长LMS自适应滤波算法及分析[J].电子学报,2001,29(8):1094-1097.

[3] Kwong,R H,Johnston E W.A variable step size LMS algorithm[J].IEEE Trans on Sig Proc,1992,40(7):1633-1642.

[4] Lin S,Harris J G.Combined LMS/F algorithm[J].Electronics Letters,1997,33(6):467-468.endprint