完整的回声消除算法框架有哪些内容
完整的回声消除算法框架有三个主要模块:1.延迟估计模块;2.线性滤波模块;3.非线性处理模块。目前比较常见的回声消除算法有两类,一类是回声抑制算法,另一类则是声学回声消除算法。
1.时延估计模块
时延产生原因
参考信号取自下行接收的数据,麦克风信号取自采集的数据,中间存在时延、声音传播时间(无论内外)、播放采集线程工作的 buffer、启动时间差等。不同设备、不同环境下存在的时延不同。
时延估计模块影响
时延的对齐可以减轻自适应滤波器的压力,减少滤波器的跟踪长度,降低开销, 如果没有时延对齐模块,就需要将滤波器跟踪的长度设计成能够覆盖所有参考信号到回声信号之间的时延,这经常是上百毫秒的,计算量非常大。
时延的对齐影响滤波器的性能。时延没对齐,滤波器跟踪的参考信号和回声信号相关性极低,滤波器收敛会受到影响。时延估计过量,滤波器跟踪的信号缓冲区中根本找不到参考信号,滤波器同样不能收敛。
时延的对齐速度,影响整个收敛速度,影响滤波器收敛,同时也影响非线性回声处理。时延变化时,需要能够快速跟踪到时延的变化,并且迅速调整,否则就会偶现回声。
时延估计设计
一般来说,由于设备扬声器和麦克风的响应影响,回声的分布大致在中频段,高频低频部分回声很少,因此可以在中频段去跟踪回声。
Webrtc 的 aec 模块采用的是频域 Binary Spectrum 的方法。将两端的频谱中间频段的分布映射到二值化数据,寻找相似性较高的远端信号并计算对应的时延,该方法计算量很低,但是受噪声影响很大。
Webrtc 的 aec3 模块采用的是线性滤波。匹配滤波器的方法是直接在时域信号做 NLMS (Normalized Least Mean Square) 处理,这个方法鲁棒性很好。
时域信号互相关会出现多个峰值,导致时延估计不准。我们考虑采用频域互相关的方法,结合线性滤波,一方面保证鲁棒性,一方面利用频域互相关检测速度快的特点,加快检测速度。
2.线性滤波模块
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)。这样滤波器的输出能够逼近真实的回声,从而使误差信号中不存在回声信号。
自适应滤波器收敛阶段,近端信号是完全的 echo,不能混杂有近端语音。因为近端和噪声是会扰乱 h(n) 的收敛过程。也就是说要求回声消除算法开始运转后收敛要非常快,较好要求对方的算法在你一说就收敛好了,收敛好之后,如果对方开始说话,这个 h(n) 系数就不要变化了,需要稳定下来。
回声路径可能是变化的,一旦出现变化,回声消除算法要能判断出来,因为自适应滤波器学习要重新开始,也就是 h(n) 需要一个新的收敛过程,以逼近新的回音路径 H。自适应滤波器需要在收敛速度和跟踪性能、稳态失调之间进行平衡。
线性滤波器设计
自适应滤波器,目前常用的是 NLMS 滤波器和 Kalman 滤波器,这两种滤波器各自有优点和缺点。Kalman 滤波收敛速度快,收敛性能欠缺;NLMS 相对来说比较平稳。基本上就是在于收敛速度和跟踪性能、稳态失调有不同的偏向。但是无论哪种滤波器,都是可以调整跟踪的速度来改变收敛速度和跟踪性能之间的平衡,NLMS 改变的是步长值,Kalaman 改变的是增益。
考虑用多种滤波器混合使用的方案,取不同滤波器的优点,保证收敛速度,同时也相互限制发散。非线性滤波器也会参与估计回声、双讲的状态,从而控制自适应滤波器跟踪步长,根据状态实现变步长跟踪。
3.非线性滤波模块
非线性处理模块通常是计算参考信号、麦克风信号、线性回声信号以及残差之间的相关性,估计残留回声,或者回声的状态。采用维纳滤波的方式消除回声,其重点在于如何估计残留回声,而估计残留回声的大小,也直接影响到最终消除的结果。残留回声估计不足,回声处可能会有残留;残留回声估计太过,双讲处会对近端语音损伤。
非线性滤波器设计
我们的非线性处理模块针对参考信号、麦克风信号、线性回声信号以及残差信号,采用峰值相关性、频域相关性、幅值相似性等特点,联合判断得到双讲状态、回声状态等信息。除了上述的相关性外,还可以利用线性滤波器的更新权值去获得回声的状态。而影响最终输出结果的,是残余回声或者回声大小的估计。残余回声的估计,采用了回声的状态和滤波器的 ERL (Echo Return Loss) 估计相结合的方法。
延伸阅读
回声消除的基本概念
回音消除(Acoustic Echo Cancelling)是透过音波干扰方式消除麦克风与喇叭因空气产生回受路径(feedback path)而产生的杂音。通俗一点来说,回声消除就是为了消除机器自身发出的声音,不影响外界传递过去的声音。 如在双工通话的场景中,来自远端的经过扬声器放出来的声音被消掉,否则经过麦克风采集和近端说话人信号混在一起被传递到远端,则会出现远端的人听到自己说的话,这种回声对于一些通信设备来说体验是致命的差。