声学回声解决方法经验

匿名 (未验证) 提交于 2019-12-02 23:00:14

声学回声消除的挑战
声学回声(Acoustic Echo-AE)是由于在免提或者会议应用中,扬声器的声音多次反馈到麦克风引起的(麦克风采集了近端声音的同时也采集了扬声器发出来的声音)。

当调用Engine接口时,如果操作系统给出的延时估算不准确,则无法正常工作;当调用FDE-Formant Delay Estimate, SDE-Spectru Delay Estimate接口时,初始化需要2-5秒,之后才能正常工作,偶尔会出现回声(1%以内),但能很快恢复;当调用OS接口时,每个机型测试过后才能使用。

菊风声学回声解决方法

菊风MME为了达到良好的声学回声消除效果,同时对输出和输入两个方向的语音信号进行了处理。在AEC算法上,菊风MME主要采用以下三种方式:第一种是Engine,即依赖于操作系统给出的声卡缓冲大小计算延时,主要应用于iPad、iPod、touch和普通PC机;第二种是FDE(Formant Delay Estimate),即基于共振峰估计延时及SDE(Spectrum Delay Estimate),即频域延时估计,主要应用于Android 设备、PC 虚拟机和普通PC机等,如果手机不带AEC功能,一般使用Sde算法比较多,效果好;第三种是OS,调用操作系统自带的AEC功能,带有这类功能的操作系统,一般是iPhone还有一些比较好的Android手机,比如三星等,可以直接调用系统的AEC功能,达到良好的效果。

对于AEC消除模块的性能菊风通常从以下三方面进行评测:
1.信号的保真度要做到有效的语音信号不损失或微损失;
2.在信号不损失或微损失的情况下,做到尽可能的消除噪声;
3.最终给测试人员的感受才是最有效的考量。

具体情况举例

情况一: 回声问题 之 回声延时抖动(不稳定)


和某些Android手机用户端通话时,
对端会间断的听到回声。


和这些Android手机通话时,回声时有时无。当回声延时相对稳定的时候,回声能够被AEC模块有效的消除; 当回声延时波动较大的时候, AEC模块不能快速适应这种变化,导致回声不能被有效的消除,对端会听到回声。


1.Android系统远端信号播放到MIC收集回声信号的延时时间不固定(100ms~800ms抖动),导致AEC无法按帧(每帧8ms)逐一对应处理;
2.对于Android系统,建议能够使用OS AEC的手机都采用OS AEC;如果OS AEC无效,那么就推荐使用SDE;
3.SDE在大部分情况下,都能正常工作,偶尔可能有一小段时间的回声漏出来;
4.如果SDE不能很好的工作, 那么建议使用8kHz采样率的编解码进行通信;SDE在8kHz下比16kHz有更稳定的表现。

情况二:回声问题 之 MIC增益过大,消顶失真


某些Android手机开启Speaker后, 对端能一直听到回声


1.当把Speaker音量调小后, 对端就听不到回声 ;
2.如果此时把AEC模块关闭,对端仍然能听到回声,说明第一步时AEC有效;


1.移动设备上,扬声器和麦克风靠得很近,当扬声器播放出来的音量过大时,麦克风采集到的声音音量变化超过16bit的动态范围,导致很大一部分声音被消顶。由于近端录制的声音失真,导致AEC模块无法匹配近端和远端声音, 从而无法有效工作,对端会听到回声 ;
2.通过减小Speaker音量可以有效解决这个问题。

正常音频


消顶失真音频

情况三:回声问题 之 空间反射,回声时间过长


处在空旷的室内环境中,通过大功率音箱播放声音的终端通话时, 对端能听到回声


将音箱音量调小或者移动到空旷的室外环境, 回声消失


1.在这种环境下,播放出来的声音通过多路径传播(墙壁一次反射、二次反射…),又被麦克风采集。由于各个传播路径距离差别较大,导致同一段声音从开始产生回声到回声结束之间的时间很长(超过100ms)。同时由于音箱的功率较大,播放的声音音量较大, 导致经过多次反射的声音被麦克风采集后音量仍然很大,
于是在对端听到回声;
2.目前的AEC模块只能消除100ms左右以内的多路径传播回声效应;
3.解决方法: 降低麦克风灵敏度,减小播放声音音量, 将播放设备和采集设备放在更为空旷的地方。

原始音频

具有多次反射回声的音频

以上是菊风Juphoon公司在声学回声解决办法的一些经验,之后会分享更多的技术经验,敬请期待…

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!