图1 回声问题
回声问题指的是在实时通话中听到的自己的声音回响或是失真的音频。例如,当Alice呼叫Bob时,她的声音从Bob手机的扬声器中播放出来。Bob的麦克风拾取Alice的声音,音频信号被发送回Alice,Alice听到她的声音回响。
通常通话应用程序都会Alice的声音。应用程序既可以在软件中实现 AEC,也可以利用手机内置的AEC。然而,AEC并非一直有效。
以上图为例,抑制回声的一种方法是每当Alice说话时衰减Bob的麦克风信号。虽然这确保了Alice永远不会听到自己的回声,但这也意味着Bob永远无法在Alice说话时打断她,这就是众所周知的对讲机效应。良好AEC的目标是抑制回声并允许双方同时通话(通常称为双向通话)。
现存的开源WebRTC堆栈包括适用于手机的轻量级算法AECm,以及计算量较大的版本AEC3。它在可拓展性和高质量两方面仍然存在不足:在大规模的社交软件应用中,AEC算法需要能够适应多种应用场景,例如不同的声学环境、不同设备等;AEC性能对许多因素都很敏感,例如扬声器音量、用户声学环境的混响程度、麦克风与扬声器之间的耦合等。因此,我们推出了Beryl,改进Meta音频处理堆栈核心的产品,以同时满足可拓展性与高质量两方面的需要。作为一个覆盖范围广泛的基准解决方案,该解决方案在CPU和内存资源方面是轻量级的,但即使在最低端设备上,也能提供比当前最先进的解决方案更好的质量。
图2 Beryl架构
Beryl是基于DSP的可拓展AEC解决方案。它有两种模式:lite mode和full mode,以适应不同计算能力的设备。
延迟估算器能够估算由于声道变化、线程抖动或时钟漂移造成的远端参考信号和近端捕获信号之间的延迟。
图3 Beryl的线性AEC滤波器示意图
参考信号和捕获信号通过延迟估算器对齐后,线性AEC滤波器估计捕获信号中存在的回声,并将其从信号中减去,从而只提供没有任何回声的近端音频的近似估计值。本质上讲,线性适应滤波器是通过迭代估计扬声器和麦克风之间的声学路径(也称为房间脉冲响应)来实现这一目的的。由此产生回声估计值,再从输入信号中减去回声估计值,得出输出信号,也称为误差信号。
Beryl的线性AEC滤波器是一种基于频域NLMS的双滤波器方法:一个固定滤波器,有助于AEC在稳定状态下工作;一个始终自适应滤波器,有助于AEC快速适应变化。
图4 AES应用场景
线性AEC无法消除传播链中的非线性因素,因此需要AES来清除残余回声。
在从远端到近端的传播路径中,可能存在一些非线性失真,例如扬声器之前和麦克风之后的放大器所引入的非线性失真。Beryl AES应用感知滤波和环境噪声匹配技术消除静态回声,从而有效消除残余回声,保持语音的本质。
以下为使用WebRTC AECm和Beryl AEC在安卓版Messenger上进行实时通话的两段简短录音:
使用WebRTC AECm的通话
使用Beryl AEC的通话
图5 性能对比
在包含约3000个音频片段,40小时的语音和音乐,涵盖7种语言,并以16kHz和48kHz采样的数据集上的测试结果显示,对比它们的竞争对手,Beryl full和Beryl lite都达成了显著的性能提升。与AECm相比,Beryl lite的回声干扰分数提高了26-29%,双向通话分数提高了38%,对于大部分用户群都在移动平台上的实时通话软件来说具有应用意义。
附上演讲视频:
https://mpvideo.qpic.cn/0bc3emaagaaakmamdjcctrtfai6damrqaaya.f10002.mp4?