
在实时音频互动场景中,除了我们上一篇讲到的编解码会影响音质与体验,在端上,降噪、回声消除、自动增益模块同样起着重要作用。在本篇内容中我们将主要围绕回声消除和降噪模块,讲讲实时互动场景下的技术挑战,以及我们的解决思路与实践。「文末有个小彩蛋:) 」

回声消除的三大算法模块优化
在语音通信系统中,回声消除(Echo Cancellation)一直扮演着核心算法的角色。一般来说,回声消除的效果受诸多因素的影响,包括:
声学环境,包括反射,混响等;
通话设备本身声学设计,包括音腔设计以及器件的非线性失真等;
系统性能,处理器的计算能力以及操作系统线程调度的能力。
声网回声消除算法在设计之初,就将算法性能、鲁棒性和普适性作为最终的优化目标,这一点对于一个优秀的音视频 SDK 来说至关重要。
首先,回声是怎么产生的?简单来讲,就是你的声音从对方的扬声器发出,这个声音又被他的麦克风给收录了进去,这个被麦克风收录的声音又传回到你这一端,你就听到了回声。为了消除回声,我们就要设计一个算法将这个声音信号从麦克风信号中去除掉。

那么声学回声消除模块(AEC, Acoustic Echo Cancellation)是如何消除回声的呢?具体的步骤见如下简图所示:

第一步需要找到参考信号/扬声器信号(蓝色折线)跟麦克风信号(红色折线)之间的延迟,也就是图中的 delay=T。
第二步根据参考信号估计出麦克风信号中的线性回声成分,并将其从麦克风信号中减去,得到残差信号(黑色折线)。
第三步通过非线性的处理将残差信号中的残余回声给彻底抑制掉。
与以上的三个步骤相对应,回声消除也由三个大的算法模块组成:
延迟估计(Delay Estimation)
线性自适应滤波器(Linear Adaptive Filter)
非线性处理(Nonlinear Processing)
其中「延迟估计」决定了AEC的下限,「线性自适应滤波器」决定了 AEC 的上限,「非线性处理」决定了最终的通话体验,特别是回声抑制跟双讲之间的平衡。
注:双讲是指在交互场景中,互动双方或多方同时讲话,其中一方的声音会受到抑制,从而出现断断续续的情况。这是由于回声消除算法“矫枉过正”,消除了部分不该去除的音频信号。
回声消除技术挑战

本文深入探讨了实时音频互动场景下的回声消除技术挑战与优化思路,重点介绍了延迟估计、线性自适应滤波器与非线性处理三个关键算法模块。
最低0.47元/天 解锁文章
458





