首页 > 新闻 > 专家观点 >

Asterisk环境下语音回声问题讨论

2013-09-22 09:35:50   作者:星昊通 朱利中   来源:CTI论坛   评论:0  点击:


  在通信语音呼叫下,语音回声是经常遇到的问题。同样,在Asterisk开源的通信解决方案中,也会遇到这个问题。现在我们将对回声问题进行以下几个方面的讨论:

  什么是VOIP环境下的回声问题

  通常来说,在电话通信中遇到的回声就是在通话过中,拨打的用户听到了自己的声音。这些回声问题通常表现在传统PSTN回声源处理问题和VOIP网络延迟问题。

  传统PSTN源的问题

  在传统的PSTN模拟线路的环境中,必然会经过交换机和终端之间2-4芯线的转换,而且这个转换的过程可能连续经过经过工作结点来最终完成。如果在完成2-4转换的过程中因阻抗匹配,造成”泄漏”,从而导致了”电路回声”。现在很多用户使用VOIP网关,从因特网IP电话网关的连接方式可以看出,IP电话网关一端连接PSTN,另一端连接因特网。如果模拟端口部分的2-4线转换中出现阻抗不匹配的问题,同样也会出现回声的问题。因此,建议用户在使用语音模拟板卡或者模拟网关时,一定要把网关支持的制式通知到相应的国家,例如在中国使用,请调整到支持中国,也减少回声问题。

\

图例 1: 2-4 芯线线路转换出现的回声

  VOIP网络延迟

\

 

图例 2: VOIP网络延迟需要做回声处理

  在VOIP网络中,最大延迟的值肯定会超过30ms,在上图中我们可以看到一个完整的语音流需要语音压缩,打包,路由解析,解码,数据重新解包等等过程,这些过程都需要一定的时间来处理。所以有时候在内网也需要考虑回声的问题。以下拓扑图说明了语音流通过IP网络到PSTN网络的整个过程,以及在传输过程中的延迟的原因:

\

图例 3:电学回声和网络延迟

  以下是关于传输不同语音编码或者经过多个路由节点所需要花费的时间:

  • G.723.1: 37 msec
  • G.729: 15 msec
  • G.728: 2.5 msec
  • 内部摘挂机时间10 ms msec
  • 线路传输: 每1 msec 一百里
  • VoIP 网关节点处理: 50 to 100 msec
  • 2M 线路,传输128K 的数据包需要时间从0.5 ms 到128.6 ms
  • 64Kbps 线路传输一个1024K 数据包
  • 解压延迟: 通常 10 msecs 或者少于10ms
  • For a 1024K packet on a 64Kbps line

  整体来看,因为语音传输必须经过很多不确定的设备,例如卫星,无线网络道德许多设备节点,语音延迟的存在是必然的。

  回声的两种来源:

  在目前的回声技术领域,回声的来源主要来自于两个方面:

  声学回声(AEC)。声学回声主要来源于一些VOIP终端设备本身,和设备本身相关,可能经常在如下环境遇到回声问题:

  • 免持车载电话系统,标准的电话或手机或免持模式,因为使用电话免提模式,扬声器的声音进入到麦克风。
  • 专用独立的“会议电话”,使用天花板扬声器和麦克风的桌子上已安装的会议室系统。会议室设计不合理导致或者麦克风,扬声器的物理位置设计问题。
  • 物理耦合(通过听筒的扬声器的振动传输到麦克风壳体)。 电话终端设计不合理,或者质量比较差的IP 电话。

\

图例4:声学原因

  电学回声

  此问题通常是在PSTN电话系统中的在2-4芯中出现的电子线路参数(例如阻抗)不匹配导致。在图例1 中,大家可以看到因为2-4芯线路转换是PSTN的一个必然的语音处理过程,使用会产生回声问题。

\

图例 5:2-4wire,传输使用不同的线路

  Asterisk 中的回声问题

  
在asterisk环境下,同样存在回声问题。板卡的回声问题就是asterisk用户经常遇到的问题。在上面的解释中,对于电学回声,最好办法就是在IPPBX接入的板卡上做回声抑制的处理,例如使用带回声抑制的板卡和网关。对于声学回声,建议使用质量比较好的终端设备和IP电话机。另外,必须注意网络传输过程中需要留意的几个因素。

  我们现在介绍一下基于Asterisk语音卡的一些解决办法:

  1. 使用支持硬件DSP回声抑制芯片的语音板卡硬件解决办法。目前几乎所有的 Asterisk 语音板卡芯片都是采用Octasic 回声抑制芯片,此厂家的芯片技术相当不错。需要提醒用户的是,diigum的 带回声的模拟语音卡支持Non-Linear Processor (NLP) 处理器,可以通过配置支持的参数vpmnlptype 进行相应的调整。此参数仅支持digium 模拟卡和单E1 数字卡。
  2. 使用开源的软件回声抑制解决办法,免费的回声抑制软件有很多,比较常用的有mg2, oslec 等等,这些免费的软件回声抑制处理办法都有同样的局限性:
  • 占用系统的CPU资源
  • 处理的通道数有限
  • 对回声的training 周期明显少于带回声的dsp 的周期,所以training的时间大约需要10-15 second, 而硬件处理则是软件处理的1/4.
  • 回声抑制的软件处理方式不支持 non-linear processor方式,始终有回声存在于语音增益中,所以回声不能完全消除。

  Asterisk 环境下测试回声的方法:

  Sangoma 提供了很多丰富的排查回声抑制的底层工具,可以轻松排查和利用回声抑制模块完全消除回声抑制(当然在一定的范围)。

\

Sangoma 4E1 数字语音卡

  Sangoma 回声处理解决方案— Sangoma 如何提高Asterisk性能的28个解决办法几个方法是:

  1)通过底层驱动抓包工具截取回声抑制的数据,发生此数据到技术支持,可以分析出回声的正在原因

\

图例 6 :Sangoma回声抑制工具

  2)通过Echo Spike Generation 工具检测回声,用户可以通过以下工具来抓取回声语音效果,如果在可以消除的范围内,回声是可以消除的。以下例子中,tap 在50-80 之间,如果设置echo 为128的话,回声完全可以消除。当然如果设置为64 tap,那么剩余的回声是不能完全消除的,通话过程中仍然保留有回声。


\


  图例7 ec.spike 工具。注意,此回声发生在55 taps 和88 taps 之间,如果设置echo=128 是完全可以消除这些回声的。

  在以上这个例子中,echo 发生发生在3ms,7ms 和9ms。12 ms 以后没有发生echo的问题。所以,如果回声抑制可以支持12ms 回声消除,那么以下的回声将会消除。

\

图例8:echo问题发生时间点

  这里需要注意的是,回声消除是一个静态设置的值,剩余的echo,echo 抑制解决办法是无法消除的(例如,剩余部分可能就在系统的内存中,系统将直接丢弃没有消除的回声)。同时因为VOIP网络涉及了网络延迟等等因素,这些因素是动态的,而且这些延迟的因素是回声抑制控制器不能控制的,所以可能导致有一些回声是不能彻底消除的。

常见的回声问题举例

1)谈话者自己的回声 :

2)隧道效果回声:

回声处理的语音效果对比

未经过回声处理的语音:

经过回声处理的语音语音:

>>回声抑制demo 演示

  总结

  通过以上文章介绍,我们给大家介绍了回声问题的几个来源,回声问题的影响特征,同时重点介绍了在asterisk 环境下,Asterisk 语音板卡的价格测试工具,和软件回声抑制的一些局限性。最后,介绍了几个回声抑制语音效果的实例和demo 工具。希望给大家一个完整的,丰富的诊断手段,能够帮助用户解决实际问题。

 

 
分享到: 收藏

专题