一、技术背景
在语音通话过程回声的产生是由于远端的声音传递到近端后,近端的麦克风会将扬声器播放的声音也一并录制。如果录音过程没有对语音数据进行处理,那么远端会听到自己说话的回声。因此回声消除技术便出现了,主要分为硬件实现和软件实现,而软件实现又包括基于DSP的实时回声消除实现技术和基于PC的非实时回声消除技术。目前基于PC的非实时回声消除技术发展比较快,WEBRTC便是使用使用此类技术进行回声消除。
二、 WebRTC回声消除技术
WEBRTC使用自适应滤波技术进行回声消除,主要包括回声延时估计、NLMS、维纳滤波、NLP和CNG等过程。具体流程如下:
- 回声延时估计
回声延时是指在进行回声处理是时远端和近端数据的时间不是同步的,远端数据播放到近端麦克风录制有一段时间,而回声消除需要对齐数据的时间戳。WEBRTC使用远端和近端音频数据的功率谱相关性来计算延时,相关性最高时两者数据间的延时最接近所需的回声延时。
- NLMS
WEBRTC使用NLMS算法进行自适应滤波。设远端信号为x(n),近端信号为d(n),w(n)为远端信号的权重系数,则误差信号为e(n) =d(n)-w(n)*x(n),运用最小均方误差准则,就是要求使得E(|e(n)|^2)最小时的w。对于LMS算法,滤波器系数迭代公式为:w(n+1) = w(n) + 2u*e(n)*x(n),其中u为步长因子,在LMS算法中该因子是固定的,因此算法收敛速度慢。NLMS算法用可变的步长因子进行替代,其迭代步长因子计算公式为:u(n+1) = u(n) / (sigma + x(n)T x(n))。
- 维纳滤波
WEBRTC使用维纳滤波器进行回声过滤,此前已经通过NLMS算法求解了回声信号和语音信号,回声信号的功率谱表示为Pe(w),语音信号的功率谱表示为Ps(w),滤波器的传递函数则为:H(w) = Ps(w)/(Ps(w) + Pe(w)。
- NLP消除残留回声
进行维纳滤波后还会存在残留回声,使用NLP进行消除,WEBRTC中NLP部分对弱信号进行了剔除。
- CNG
经过回声消除处理后,背景噪声也可能会被一同消除,需通过CNG增加随机舒适噪声。