IP电话回声消除器的设计及其DSP实现
介绍了一种用于IP电话中的自适应回声消除器采用归一化最小二乘(NLMS)自适应滤波器实现包括语音模式检测器和粗略时延估计器。最后以TI公司的TMS320C5402DS芯片为平台实现了该回声消除器还对关键代码进行了分析。
关键词 回声消除 自适应滤波 NLMS DSP
1 在VoIP中采用回声消除技术的必要性
与传统的PSTN网络采用电路交换技术不同 IP电话采用的是分组交换技术充分利用Internet来传输语音数据使得价格大大降低从而取得了长足的发展。但是IP电话也存在一些弊端 比如语言质量比较差导致这一弊端的因素很多其中主要的因素就是网络延时和算法延时这主要是由于互联网的数据传输特点以及语音编解码耗时较大导致的总延时长达 100ms根据经验如果语音的延时超过了50ms那么人耳就可以鉴别出自己的回声显然 IP电话系统的回声是非常严重的鉴于此 国际电联(ITU)也相应地制定了回声消除的国际规范如G 165 G 1 68。
2 回声消除器的结构框图和基本原理
图1所示是VoIP回声消除系统结构图。
从图1可以看出整个回声消除系统分成三个部分 NLMS!适应滤波器、语音检测器和粗略时延估计器。其中语音检测器又分为三个部分近端说话检测器、远端说话检测器和双端说话检测器。
图1中 A、 B端代表远端用户 CD端代表近端用户 y(n)代表时刻n来自远端的语音采样值。 y(n)经过互联网到达近端用户的扬声器端 由于从扬声器出来的声音信号经过空气形成的回声通道H(z)又会被近端的话筒拾取这部分回声信号echo(n)会混同近端用户的语音信号一起进入近端的话筒也就形成近端的声学信号r(n), r(n)再通过互联网 向远端用户的扬声器传输。如果不采取回声消除措施只要远端信号 y(n)通过互联网传回远端扬声器的时间超过50ms(这是经常出现的情况)那么这部分被近端拾取的回声信号echo(n)会被远端用户分辨出来结果就使得远端用户听到了自己的声音会大大降低通话的质量这是用户所不能容忍的。所以必须采取消除回声的措施。
完成回声消除的一个很重要的模块就是自适应滤波器本文采用 NLMSS法进行自适应滤波。当远端信号y(n)到达近端之后先把这个信号“复制”一份放到存储器中结合误差信号利用NLMSS法不断调整自适应滤波器的系数使得y(n)经过自适应滤波器后的输出尽量逼近回声信号echo(n),这样当近端的语音信号x(n)=0的时候从B端输出的误差信号e(n)也就接近0从而达到了回声消除的目的。
当然在NLMSI适应滤波器进行滤波和系数更新之前必须检测语音模式是近端说话模式、远端说话模式、还是双端说话模式 因为不同的说话模式
NLMS适应滤波器所执行的功能是不完全相同的。另外 由于远端信号 y(n)被自适应滤波器“复制”到存储器中的时刻 t1和y(n)经过回声通道H
(z),进入近端话筒并作相应的处理的时刻t2是不相同的 t2要大于t1 这主要是语音
数据编码、打包和压缩造成的。为了使得滤波器处理的信号y(n)和传回远端的信号r(n)保持对应 即echo(n)和y(n)保持高度的相关性那么被自适应滤波器“复制”的y(n)信号最好在存储器中延时一段时间这样才能保证达到回声消除取得比较好的效果。3 NLMS!适应滤波器原理
为了讨论方便这里先考虑远端说话模式 即近端语音信号x(n)为0。 为了简单起见把图1中的NLMS!适应滤波器部分单独抽出来简化成图2。图2所示是NLMS自适应滤波器结构图。
硅云怎么样?硅云是一家专业的云服务商,硅云的主营产品包括域名和服务器,其中香港云服务器、香港云虚拟主机是非常受欢迎的产品。硅云香港可用区接入了中国电信CN2 GIA、中国联通直连、中国移动直连、HGC、NTT、COGENT、PCCW在内的数十家优质的全球顶级运营商,是为数不多的多线香港云服务商之一。目前,硅云香港云服务器,CN2+BGP线路,1核1G香港云主机仅188元/年起,域名无需备案,支持个...
触摸云触摸云(cmzi.com),国人商家,有IDC/ISP正规资质,主营香港线路VPS、物理机等产品。本次为大家带上的是美国高防2区的套餐。去程普通线路,回程cn2 gia,均衡防御速度与防御,防御值为200G,无视UDP攻击,可选择性是否开启CC防御策略,超过峰值黑洞1-2小时。最低套餐20M起,多数套餐为50M,适合有防御型建站需求使用。美国高防2区 弹性云[大宽带]· 配置:1-16核· ...
今天遇到一个网友,他在一个服务器中搭建有十几个网站,但是他之前都是采集站点数据很大,但是现在他删除数据之后希望设置可能有索引的文章给予404跳转页面。虽然他程序有默认的404页面,但是达不到他引流的目的,他希望设置统一的404页面。实际上设置还是很简单的,我们找到他是Nginx还是Apache,直接在引擎配置文件中设置即可。这里有看到他采用的是宝塔面板,直接在他的Nginx中设置。这里我们找到当前...