音频回声消除算法(二)

232 阅读2分钟

一、声学回声消除的基本原理

cd8f117ef8c3d33f2e281e158e371fd6_8f792bd152ff469b88203d1ed151765b.png

如上图所示,我们可以看到两个信号:

一个是蓝色和红色混合的信号1 ne,也就是实际需要发送的speech和实际不需要的echo混合而成的语音流;另一个就是虚线的信号2 fe,也就是原始的引起回音的语音。

那大家会说,哦,原来回声消除这么简单,直接从混合信号1里面把把这个虚线的2减掉不就行了?请注意,拿到的这个虚线信号2和回音echo是有差异的,直接相减会使语音面目全非。我们把混合信号1叫做近端信号ne,虚线信号2叫做远端参考信号fe,如果没有fe这个信号,回声消除就是不可能完成的任务,就像“巧妇难为无米之炊”。

虽然参考信号fe和echo不完全一样,存在差异,但是二者是高度相关的,这也是echo称之为回音的原因。至少,回音的语义和参考信号是一样的,也还听得懂,但是如果你说一句,马上又听到自己的话回来一句,那是比较难受的。既然fe和echo高度相关,echo又是fe引起的,我们可以把echo表示为fe的数学函数:

echo=F(fe)

函数F被称之为回音路径(即回声产生的途径)。在声学回声消除里面,函数F表示声音在墙壁,天花板等表面多次反射的物理过程;在线路回声消除里面,函数F表示电子线路的二四线匹配耦合过程。很显然,我们下面要做的工作就是求解函数F,得到函数F就可以从fe计算得到echo,然后从混合信号1里面减掉echo就实现了回声消除。

声学回声产生的原理和基本的消除思想就阐述这么多,大家应该已经对回音有个基本的概念了。

二、应用算法

2762a336ae67ccd6696354978959e4cd_07f7c57cd0d849438fc0f796103cf5e4.bmp

我最近基于webrtc的回音消除算法做了一个测试,内部也做了一些优化,目前这个算法可以应用到多种平台,像windows、linux、android、ios、arm平台都可以支持,大家可以看下,效果可以达到业界领先水平,基本上在很短时间内就可以完成回音收敛算法的学习。

项目地址download.csdn.net/download/un…

里面包含测试程序和可执行文件,windows平台和linux平台的我都已经编译好了,大家可以测试看下效果,接口调用也比较简单,如果需要商用的话可以跟我联系,或者有技术问题想要沟通、交流的也非常欢迎。

联系方式:

vx:unique_no_1

tel:18108010758