查看原文
其他

技术干货 | 为高音质保驾护航 - 通信中的回声消除

胡林艳 网易智企技术+ 2021-09-19


导读语音通信,在当代生活已经成为了大家主要的沟通交流方式,而通话语音的质量也是衡量每个厂商系统好坏的标志之一。这次给大家分享网易云信是如何通过回声消除算法保证通话语音质量的。

文|胡林艳

网易云信音视频引擎开发工程师



 前言


 回声产生原因 



在语音通信中,回声一直是影响音质的主要因素,它会带来种种影响,比如在漏回声、产生杂音、处理人声断续、忽大忽小、丢字、失声等现象中,有一部分就是回声或者工作失调的回声消除算法引起的。所以,一个优质的回声消除算法,将在很大程度上提升语音通信的音质。所谓回声,就是自己的声音又传回自己。


简单来说,一个人的声音传到对方,经过扬声器播放,通过空间声场传播被麦克风采集到,这样回声 echo 就产生了。叠加了近端本身的声音(包括近端语音,近端噪声),这样对端就听到了自己的声音(回声 echo)+ 另一方声音。


一端麦克风采集的混合信号,有本端说话人的语音信号和对端说话人通过扬声器播放的语音产生的回声(红色信号),这样叠加的语音信号(蓝色信号)通过传输线路传到对端扬声器播放,对端人就听到自己刚刚的语音信号,即所谓的回声。


所以混合信号中除了本地的语音之外,还有对方的回声信号。回声消除算法,就是要把这个红色的回声信号从蓝色的麦克风混合信号中去除掉。


 回声带来的影响 


回声是不能在通话回路中存在的,一方面会引起对话的混淆,一方面也会带来啸叫,在会议中影响更大。所以通常会加入回声消除算法进行处理。


如果回声没有被算法完全消除,会因为消除产生畸变,导致听起来像杂音,严重影响主观感受。同时,回声消除处理两端同时说话的双讲数据时,可能会将近端语音当作回声处理,导致近端语音出现忽大忽小,甚至剪切的效果。因此,一个优质的回声消除算法在通话中,极为重要。



 回声消除原理


 回声消除框架 


回声消除算法实施时,参考信号是从播放端接收到的远端信号获得的,声音从扬声器播放出去,再被采集产生的回声,分成直达声和反射回声。直达声是最先到达并且能量最大的回声,往往和设备本身、软件系统设计、声音传播路径有关。所以需要一个方法,找到参考信号/扬声器信号跟麦克风信号之间的延迟,并调整缓冲区,使得算法获取到的参考信号和回声信号中间时延较小。


回声经过扬声器播放,声音传播,再到麦克风采集,经过了三个系统,而这三个系统中,扬声器、麦克风系统为非线性系统的可能性很高,而声音传播的系统,是线性系统。所以整个过程中,有可能存在非线性部分,但是肯定存在线性部分,而在无法预知回声特征前提下,去跟踪线性回声成为一种可行的办法。跟踪的线性回声,从采集信号中减去,就得到了回声的残留信号。


而非线性的回声,可以通过非线性的处理方式将残差信号中的残余回声给彻底抑制掉。

如图所示,一个完整的回声消除算法框架,包含三个主要模块

  • 延迟估计模块。

  • 线性滤波模块。

  • 非线性处理模块。


 时延估计模块 


时延产生原因

参考信号取自下行接收的数据,麦克风信号取自采集的数据,中间存在时延、声音传播时间(无论内外)、播放采集线程工作的 buffer、启动时间差等。不同设备、不同环境下存在的时延不同。


时延估计模块影响

时延的对齐可以减轻自适应滤波器的压力,减少滤波器的跟踪长度,降低开销, 如果没有时延对齐模块,就需要将滤波器跟踪的长度设计成能够覆盖所有参考信号到回声信号之间的时延,这经常是上百毫秒的,计算量非常大。


时延的对齐影响滤波器的性能。时延没对齐,滤波器跟踪的参考信号和回声信号相关性极低,滤波器收敛会受到影响。时延估计过量,滤波器跟踪的信号缓冲区中根本找不到参考信号,滤波器同样不能收敛。


时延的对齐速度,影响整个收敛速度,影响滤波器收敛,同时也影响非线性回声处理。时延变化时,需要能够快速跟踪到时延的变化,并且迅速调整,否则就会偶现回声。


时延估计设计

一般来说,由于设备扬声器和麦克风的响应影响,回声的分布大致在中频段,高频低频部分回声很少,因此可以在中频段去跟踪回声。


Webrtc 的 aec 模块采用的是频域 Binary Spectrum 的方法。将两端的频谱中间频段的分布映射到二值化数据,寻找相似性最高的远端信号并计算对应的时延,该方法计算量很低,但是受噪声影响很大。


Webrtc 的 aec3 模块采用的是线性滤波。匹配滤波器的方法是直接在时域信号做 NLMS (Normalized Least Mean Square) 处理,这个方法鲁棒性很好。


时域信号互相关会出现多个峰值,导致时延估计不准。我们考虑采用频域互相关的方法,结合线性滤波,一方面保证鲁棒性,一方面利用频域互相关检测速度快的特点,加快检测速度。


 线性滤波模块 



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 改变的是增益。


我们考虑用多种滤波器混合使用的方案,取不同滤波器的优点,保证收敛速度,同时也相互限制发散。非线性滤波器也会参与估计回声、双讲的状态,从而控制自适应滤波器跟踪步长,根据状态实现变步长跟踪。


 非线性滤波模块 


非线性处理模块通常是计算参考信号、麦克风信号、线性回声信号以及残差之间的相关性,估计残留回声,或者回声的状态。采用维纳滤波的方式消除回声,其重点在于如何估计残留回声,而估计残留回声的大小,也直接影响到最终消除的结果。残留回声估计不足,回声处可能会有残留;残留回声估计太过,双讲处会对近端语音损伤。


非线性滤波器设计

我们的非线性处理模块针对参考信号、麦克风信号、线性回声信号以及残差信号,采用峰值相关性、频域相关性、幅值相似性等特点,联合判断得到双讲状态、回声状态等信息。除了上述的相关性外,还可以利用线性滤波器的更新权值去获得回声的状态。而影响最终输出结果的,是残余回声或者回声大小的估计。残余回声的估计,采用了回声的状态和滤波器的 ERL (Echo Return Loss) 估计相结合的方法。



业务中回声消除算法设计


 不同场景对回声的需求 


根据业务的需求,我们结合场景分类模块,将通话场景分成音乐场景语音场景,而不同的场景下,回声的特点和对回声消除的要求不同,从而可以调整回声和双讲的平衡。


音乐对话场景下,双讲占比较多,希望保留音乐,音乐下回声不明显,所以在整个非线性检测上,偏向于双讲的检测。在语音对话场景下,双讲占比小,回声要求干净,所以非线性检测上,偏向于回声的检测。


 不同模式对回声的需求  


通过检测外设情况,分成耳机模式、外放模式耳机下通常是没有回声的,部分由于线路耦合产生的回声,或者耳机密封性不好外漏的回声,线性特点明显,回声较小,但是耳机下对回声和双讲的剪切感都比较明显,可以结合线性滤波器的残差结果,调整残留回声的估计。而常用的外放模式下,基本上回声都非常大,信回比低,对回声的残留比较敏感,所以残留回声估计时,会比较偏向于回声估计,从而达到最优的听觉效果。



结语


以上技术方案就是本次分享的全部内容,通过回声消除技术,能够提升用户的听感,适应各种场景切换和环境变化,保证不受回声干扰。每块技术都比较重要,也是经过多次优化调优的结果。网易云信也将继续打磨音频技术,给行业带来更好的服务。


 作者介绍 


胡林艳,网易云信音视频引擎开发工程师,负责音频引擎的回声消除算法开发,在传统语音增强算法设计方面有丰富的经验。


 相关阅读推荐 


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存