1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 解析自适应滤波回声消除

解析自适应滤波回声消除

时间:2024-02-18 21:49:30

相关推荐

解析自适应滤波回声消除

回声消除是语音信号处理领域比较常见的处理方法,基于自适应预测的回声消除是其中比较基础的一种。但在很多博客中却没有将其中的一些细节讲清楚,导致读者一头雾水,这里做一个详细的总结。回声分为线路回声和声学回声,本文重点关注声学回声。

1. 回声产生及消除机制

回声产生是由扬声器和麦克风之间的声波反射和声学耦合引起的。如下图所示,在电话会议系统中,扬声器输出信号由房间内的墙壁,地板和其他物体定向反射后产生的远端产生语音信号被近端的麦克风接收,导致回声被发送回远端。

由于回声的存在干扰了正常的通信,因此人们希望消除回声来更好的通信。一般的回声消除算法都包含以下几个步骤:

估计房间的回声路径的特征

人为生成回声信号的拷贝

然后从麦克风信号中减去回声

经过以上三个步骤就可以达到回声消除的目的了。

2.基于自适应滤波的回声消除

因为回声路径通常是未知且时变的,所以自适应滤波器是生成回声信号的一个比较好的选择,这里我们使用最小均方误差(Least Mean Square, LMS)算法设计自适应滤波器,其原理如下图所示:

此时,对应于上一节的一般回声消除算法,使用自适应预测的回声消除步骤如下:

估计回声路径特性,我们训练自适应滤波器,使得滤波的声学特性接近于近端房间的声学特性

通过我们训练好的自适应滤波器,生成回声

从麦克风信号中减去我们生成的回声

这里注意的是我们训练自适应滤波器获得房间的声学特性,而很多博客介绍自适应滤波器的目的是直接输出纯净语音。

我们把自适应滤波这部分单独抽取出来研究如下图所示,这就是一个FIR维纳滤波器,其目的是使得输出信号与期望信号的误差最小,如果使用LMS来衡量这种误差,那么就是基于LMS的自适应滤波器。

我们假设滤波器权重为w,阶数为p,期望信号(有的地方也叫参考信号)为d(n),那么滤波器输出为输入信号x(n)和滤波器权重w的卷积:

那么LMS误差则为:

而我们的目的是最小化这个误差,因此需要更新滤波的权重,自适应滤波器的训练采用随机梯度下降法,没错就是神经网络那个梯度下降。推到过程就不展开了,直接给出权重更新公式为:

其中μ为迭代步长,相当于神经网络中的学习速率。以上就是基于LMS的自适应滤波器训练过程。

其实完整的回声消除流程如下图所示,包括双向通话检测,自适应滤波和非线性处理。双向通话检测是由于近端有人说话时会干扰滤波器的期望输出,导致滤波器无法正常收敛,因此当检测当双讲时就停止滤波器系数更新。而非线性处理是抑制滤波后信号中的残留回声,因此可以划分到回声抑制范围。

3. 回声消除算法实现

真正工程上的AEC较为复杂(可以参考开源的AEC算法,如WebRTC/Speex等),大致都如下面的流程图所示。本文只是个Demo, 实现和最终的效果意思意思就可以了,因此NLP就不实现了。

下图左声道(上面的)是近端语音,右声道(下面的)是远端语音。

AEC的参数太难调了,随便调了下看下效果就好。

本文完整的代码可以在我的公众号语音算法组菜单栏点击FindMe->Github->SpeechAlgorithms获取

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。