在通常的VOIP软件或视频会议系统中,假设咱们只有A和B两我的在通话,
首先,A的声音传给B,B而后用喇叭放出来,
而这时B的MIC则会采集到喇叭放出来的声音,而后传回给A,
若是这个传输的过程当中时延足够大,A就会听到本身刚才说的话,这就是回声。
回声消除器的做用就是在B端对B采集到的声音进行处理,把采集到的声音中包含的A的声音去掉以后在传给A,
这样A就不会听到本身说过的话了。
传给回声消除器的两个声音信号,必须同步得很是好,
就是说在B端接收到A说的话之后,要把这些声音数据传给回声消除器作参考,而后再传给声卡,声卡播放出来,
这里有一段延时,这时B再采集,而后传给回声消除器,与那个参考数据比较,从采集到的数据中把频率和参考数据相同的部分消除掉。
若是传给消除器的两个信号同步得很差,即两个信号找不到频率相同的部分,就没有办法进行消除了。
在通常的VOIP软件中,接收对方的声音并传到声卡中播放是在一个线程中进行的,
而采集本地的声音并传送到对方又是在另外一个线程中进行的,
而声学回声消除器在对采集到的声音进行回声消除的同时,还须要播放线程中的数据做为参考,
而要同步这两个线程中的数据是很是困难的,由于稍稍有些不一样步,声学回声消除器中的自适应滤波器就会发散,
不但消除不了回声,还会破坏采集到的原始声音,使被破坏的声音难以分辨。
声学回声主要又分红如下两种:
一、直接回声:由扬声器产生的声音未经任何反射直接进入麦克风
二、间接回声:由扬声器发出的声音通过屡次反射后,再进入Mic
对于第二种回声,拥有多路径、时变性的特色,是比较难处理的。
回声消除有两种方式:
第一种:经过硬件实现,
有不少手机就是这么作的,也有专业的芯片,可是只支持8khz的,
若是要求高质量的音质的话,基本实现不了。
第二种:经过软件实现,
qq,msn,skype不少具备通话功能的软件,如今都具备回声消除的功能(需是比较高版本的,低版本的可能没有),
可是实现代码是不对外的,开源的回声消除代码只有speex和webrtc。
通常经常使用的开源的AEC有两个:Speex 和 webrtc
webrtc相对比Speex强的多,缘由以下:
1,webrtc有回声时延估计算法模块
2,webrtc有neteq模块
3,webrtc核心就是gips,缘由你懂的web