即时语音中回声消除技术如何实现
即时语音中回声消除技术是通过回声消除算法将回声估计值从语音流中减去进行实现的。回声消除技术是基于回声产生的原因进行实现的,其消除效果一般会受到声学环境、通话设备的声学涉及以及语音通信系统性能等因素的影响。
1.回声产生的原因
从通讯回音产生的原因看,可以分为声学回音(Acoustic Echo 如上图)和线路回音(Line Echo),相应的回声消除技术就叫声学回声消除(Acoustic Echo Cancellation,AEC)和线路回声消除(Line Echo Cancellation, LEC)。声学回音是由于在免提或者会议应用中,扬声器的声音多次反馈到麦克风引起的(比较好理解);线路回音是由于物理电子线路的二四线匹配耦合引起的(一般硬件厂商来保证,不做具体阐述)。
2.回声消除技术原理
不管回声产生的原因如何,对语音通讯终端或者语音中继交换机需要做的事情都一样:在发送时,把不需要的回音从语音流中间去掉。
回声消除的基本原理是以扬声器信号与由它产生的多路径回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断修改滤波器的系数,使得估计值更加逼近真实的回声。然后,将回声估计值从话筒的输入信号中减去,从而达到消除回声的目的。
试想一下,对一个至少混合了两个声音的语音流,要把它们分开,然后去掉其中一个,难度何其之大。就像一瓶蓝墨水和一瓶红墨水倒在一起,然后需要把红墨水提取出来,这恐怕不可能了。所以回声消除被认为是神秘和难以理解的技术也就不奇怪了。实际上,算法只获取麦克风采集的混合信号是无法做回声消除的,因为算法并不清楚混合的信号里面哪些部分是回声哪些是本端的人说的话。但是回声其实播放的声音经过空间的墙面,地面,桌面反射回麦克风的信号,而播放的信号SDK其实是可以获取的,这就有了参考信号帮助算法来确定哪些是回声哪些是本端声音。
下面是AEC声学回声消除框图:
回声消除是非常复杂的技术,简单的描述这种处理方法:
(1)假设设备播放的声音是Y,经过空间反射产生的回声是Y',近端说话的声音是X,那么麦克风采集的信号就是 X+ Y'。
(2)AEC 算法的输入需要 麦克风的信号(X+ Y')以及播放的声音Y,理想的输出是X。
(3)算法的过程可以简单理解成用滤波器去模拟空间的反射变化,假设滤波器是f,那么就是希望f(Y) = Y'。这样我们就得到了Y'再在输入信号里面去掉。
(4)上述是理想情况,实际情况是空间反射,以及采集播放的性能决定Y到Y'基本都是非线性的变化,然而因为计算量的限制,一般的实时系统都是使用的线性的滤波器,所以滤波器即使处在最理想的情况下也只能处理线性部分,对于非线性部分(很多情况下非线性回声是主要部分)还要有非线性的处理Nonlinear Process。
(5)又因为回声的反射路径随着空间环境的变化随时都会变化,一般滤波器会设计成自适应的去跟踪环境回声路径的变化。
延伸阅读
声学回声消除的两种方式
1.基于DSP平台的回声消除
回声消除技术传统的应用领域是各种嵌入式设备,包括各种电信网络设备和终端设备。网络设备比如交换机,网关等等,终端则包括移动电话终端,视频会议终端等。现代通讯产品里面大量应用了回声消除技术,包括在我们看得到的终端产品(比如手机)和看不到的局端产品(比如交换机)。这种嵌入式设备的共同点就是采用各种型号的DSP芯片作为回声消除的载体。
目前基于DSP的回声消除算法已经比较成熟,市场上也有一批专门的算法/芯片公司的能够对外提供已经优化好的基于DSP的软件回声消除模块,如俄罗斯Spririt DSP、加拿大Octastic Semiconductor、瑞典GIPS等等效果都比较错。
2.基于Windows平台的回声消除
Windows平台是一个非实时的平台,音频的采集和播放对回声消除算法而言,也是非实时的。和DSP平台不一样,DSP平台可以直接控制AD/DA芯片的采集播放,获得实时的音频流(不存在同步问题)。但是Windows平台下,应用程序很难在底层直接控制声卡的采集播放,获得的是非实时的音频流,从而带来了采集和播放音频流的同步问题。