一、一个完整的回声消除系统,包含以下几个模块:
1.时延估计(Time Delay Estimation, TDE) 模块
2.(线性)回声消除(Linear Acoustic Echo Cancellation, AEC) 模块(线性滤波模块)
3.双讲检测(Double-Talk Detect, DTD) 模块
4.非线性残余声学回声抑制(Residual Acoustic Echo Suppression, RAES) 模块(非线性滤波模块)
二、时延估计模块
时延产生原因:参考信号取自下行接收的数据,麦克风信号取自采集的数据,中间存在时延、声音传播时间(无论内外)、播放采集线程工作的 buffer、启动时间差等。不同设备、不同环境下存在的时延不同。
实现的回声消除技术,主要会用到两种声音信号,一个是回声信号,一个是参考信号,在回声消除的实际执行中,两种信号间是存在一定时延的,时延来源主要有三种:
1、从远端麦克风获取到参考信号到参考信号从近端扬声器中播放出来所产生的时延。
2、参考信号从近端扬声器播放出来后抵达近端麦克风所产生的时延。
3、近端麦克风获得回声信号后,将其送至回声消除算法模块所产生的时延。
时延估计模块存在的意义就是控制回声信号和参考信号之间的时延,使其保持在一定的范围内,便于后面模块对回声进行处理。
时延估计模块影响
时延的对齐可以减轻自适应滤波器的压力,减少滤波器的跟踪长度,降低开销, 如果没有时延对齐模块,就需要将滤波器跟踪的长度设计成能够覆盖所有参考信号到回声信号之间的时延,这经常是上百毫秒的,计算量非常大。
时延的对齐影响滤波器的性能。时延没对齐,滤波器跟踪的参考信号和回声信号相关性极低,滤波器收敛会受到影响。时延估计过量,滤波器跟踪的信号缓冲区中根本找不到参考信号,滤波器同样不能收敛。
时延的对齐速度,影响整个收敛速度,影响滤波器收敛,同时也影响非线性回声处理。时延变化时,需要能够快速跟踪到时延的变化,并且迅速调整,否则就会偶现回声。
时延估计设计
一般来说,由于设备扬声器和麦克风的响应影响,回声的分布大致在中频段,高频低频部分回声很少,因此可以在中频段去跟踪回声。
Webrtc 的 aec 模块采用的是频域 Binary Spectrum 的方法。将两端的频谱中间频段的分布映射到二值化数据,寻找相似性最高的远端信号并计算对应的时延,该方法计算量很低,但是受噪声影响很大。
Webrtc 的 aec3 模块采用的是线性滤波。匹配滤波器的方法是直接在时域信号做 NLMS (Normalized Least Mean Square) 处理,这个方法鲁棒性很好。
时域信号互相关会出现多个峰值,导致时延估计不准。我们考虑采用频域互相关的方法,结合线性滤波,一方面保证鲁棒性,一方面利用频域互相关检测速度快的特点,加快检测速度。
三、(线性)回声消除(Linear Acoustic Echo Cancellation, AEC) 模块(线性滤波模块)
回声消除模块主要是利用自适应滤波器进行设计的,在设计时需要考虑稳定性、算法复杂度、收敛速率等相关指标。为了实现更好的回声消除效果,除了自适应滤波器之外,在设计线性回声消除模块时,还需要引入双讲检测。
x(n) 为远端输入信号,经过未知的回声路径 h(n) 得到 y(n)=x(n)∗h(n),再加上观测噪声 v(n),得到近端输入信号 s(n)=y(n)+v(n)。x(n) 通过自适应滤波器 w(n) 得到估计的回声信号,并与近端输入信号 s(n) 相减得到误差信号 e(n),即 e(n)=s(n)−conj(w(n))x(n),自适应滤波算法所估计的回声路径就越接近实际的回声路径,得到的误差就越小,回声残留就越小。所以用得到的误差大小作为自适应调整的方向。
滤波器采用特定的自适应算法不停地调整权值向量,使估计的回声路径 w(n) 逐渐趋近于真实回声路径 h(n)。这样滤波器的输出能够逼近真实的回声,从而使误差信号中不存在回声信号。
自适应滤波器收敛阶段,近端信号只有回声,不能混杂有近端语音。因为近端和噪声是会扰乱 h(n) 的收敛过程。也就是说要求回声消除算法开始运转后收敛要非常快,最好要求对方的算法在你一说就收敛好了,收敛好之后,如果对方开始说话,这个 h(n) 系数就不要变化了,需要稳定下来。
回声路径可能是变化的,一旦出现变化,回声消除算法要能判断出来,因为自适应滤波器学习要重新开始,也就是 h(n) 需要一个新的收敛过程,以逼近新的回音路径h。自适应滤波器需要在收敛速度和跟踪性能、稳态失调之间进行平衡。
线性滤波器设计
自适应滤波器,目前常用的是 NLMS 滤波器和 Kalman 滤波器,这两种滤波器各自有优点和缺点。Kalman 滤波收敛速度快,收敛性能欠缺;NLMS 相对来说比较平稳。基本上就是在于收敛速度和跟踪性能、稳态失调有不同的偏向。但是无论哪种滤波器,都是可以调整跟踪的速度来改变收敛速度和跟踪性能之间的平衡,NLMS 改变的是步长值,Kalaman 改变的是增益。
考虑用多种滤波器混合使用的方案,取不同滤波器的优点,保证收敛速度,同时也相互限制发散。非线性滤波器也会参与估计回声、双讲的状态,从而控制自适应滤波器跟踪步长,根据状态实现变步长跟踪。
四、非线性残余声学回声抑制(Residual Acoustic Echo Suppression, RAES) 模块(非线性滤波模块)
自适应滤波器很难将回声完全消除,为了实现残余回声的消除,就需要引入残余回声抑制模块了。当我们在设计残余回声抑制模块时,不仅需要实现近端语音失真度和残余回声抑制量之间的平衡,还需要做好算法效果和计算复杂度之间的平衡,
非线性处理模块通常是计算参考信号、麦克风信号、线性回声信号以及残差之间的相关性,估计残留回声,或者回声的状态。采用维纳滤波的方式消除回声,其重点在于如何估计残留回声,而估计残留回声的大小,也直接影响到最终消除的结果。残留回声估计不足,回声处可能会有残留;残留回声估计太过,双讲处会对近端语音损伤。
非线性滤波器设计
我们的非线性处理模块针对参考信号、麦克风信号、线性回声信号以及残差信号,采用峰值相关性、频域相关性、幅值相似性等特点,联合判断得到双讲状态、回声状态等信息。除了上述的相关性外,还可以利用线性滤波器的更新权值去获得回声的状态。而影响最终输出结果的,是残余回声或者回声大小的估计。残余回声的估计,采用了回声的状态和滤波器的 ERL (Echo Return Loss) 估计相结合的方法。
自适应滤波器有三种工作模式(通过DTD双讲检测):
- 远端语音存在,近端语音不存在:滤波、自适应滤波器系数更新
- 远端语音存在,近端语音存在:滤波
- 远端语音不存在:什么都不用做
参考文献:
https://worktile.com/kb/ask/5708.html文章来源:https://www.toymoban.com/news/detail-765942.html
https://www.cnblogs.com/LXP-Never/p/11703440.html文章来源地址https://www.toymoban.com/news/detail-765942.html
到了这里,关于回声消除(AEC)原理、算法及实战——完整的回声消除算法框架所涉及到的模块介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!