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

文|胡林艳

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

 前言

 回声产生原因 

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

简单来说,一个人的声音传到对方,经过扬声器播放,通过空间声场传播被麦克风采集到,这样回声 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) 估计相结合的方法。

业务中回声消除算法设计

 不同场景对回声的需求 

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

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

 不同模式对回声的需求  

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

结语

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

 作者介绍 

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

 相关阅读推荐 

  • 技术实践|网易云信 IM SDK 服务高可用技术方案

  • 云信小课堂|搭建应用级别在线聊天室,7步就够了!

  • 技术干货 | 高性能短链设计与实现

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

  1. 淘宝直播技术干货:高清、低延时的实时视频直播技术解密

    本文由淘宝直播音视频算法团队原创分享,原题"5G时代|淘宝直播高画质低延时技术探索",收录时有改动. 1.引言 目前,5G技术应用正在逐步推进,相比目前广泛使用的4G, 它具有更高 ...

  2. 深入浅出,聊聊实时音视频中的回声消除与降噪

    在实时音频互动场景中,回声消除.降噪.自动增益(即 3A 算法)是直接影响音质和体验的重要环节之一.如何降低计算量,提升处理效率,如何兼容更多的设备.环境等,让3A 算法可以适应更多场景等一系列问题是 ...

  3. 可视监控对讲、楼宇对讲等领域中的回声消除、音频降噪

    在实际生活中,对讲是比较常用的功能,如小区单元的视频对讲.监控场所的实时对讲,还有现在很火的智能门铃中的视频对讲,对讲这个功能确实方便了双方的沟通,但这功能的实现并不是那么容易,因为有个技术是较难实现 ...

  4. python回声程序echo 一行代码_echo speex中的回声消除程序,可以直接在vs下运 效果还 有测试语料 Audio program 238万源代码下载- www.pudn.com...

    文件名称: echo下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Visual C++ 文件大小: 5481 KB 上传时间: 2014-08-07 下载次数: 10 提 供 者: ...

  5. 淘宝直播系统开发技术干货:高清、低延时的实时视频直播技术解密

    面对实时视频直播系统开发技术的的高需求,当前面临的主要问题有: 1)需要在内容生产过程中把控好质量和成本: 2)需要在内容分发和消费过程中确保用户体验. 为了解决直播系统开发这个问题, 我们有两个优化 ...

  6. 技术干货 | iOS 高阶容器详解

    导读:近期,在面试 iOS 工程师的过程中,当我问到候选人小伙伴都了解哪些 iOS 容器类型时,大多数小伙伴能给出的答复就是NSArray.NSDictionary 和 NSSet以及对应的可变类型, ...

  7. 100+精选技术干货合辑(持续更新中)

    本文是一篇精选技术干货合辑,每周更新. 在阅读之前,先听我讲个故事.三人要进监狱,狱长许他们每人一个要求. 美国人爱雪茄,要了6箱子雪茄. 法国人爱浪漫,要了一位女子作伴. 犹太人说,给我一部能跟外加 ...

  8. 技术干货 | 网易云信音视频通话产品中的音频效果功能

    导读:音频效果器一般是指某些通过改变声音信号来实现某些特殊效果的设备或者算法模块.随着直播.短视频等应用的爆发,娱乐应用中对音频效果器的需求也受到越来越多的关注. 文|陈耀斌 网易智企云信音视频开发专 ...

  9. 技术干货 | 视频最佳体验之自适应调节系统

    导读:RTC 场景视频的体验指标主要包括视频延迟.视频流畅度.视频清晰度.在一定条件下视频的最佳体验主要指延迟.流畅度.清晰度达到均衡,达到条件下的最佳主观体验.本文主要介绍,为了能够调节出一个最佳的 ...

最新文章

  1. Permission denied 故障
  2. Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮...
  3. mysql语录错误1300_mysql 语句常见错误 汇总(持续更新中)
  4. 巧用Environment.UserInteractive 实现开发和生产环境的分开调试部署
  5. 判断存储过程是否存在某个参数名
  6. 分享一个Visual Studio的背景插件,让堆码更富情趣
  7. Python使用itchat获取微信好友
  8. 求职互联网数据分析,如何准备行业知识?
  9. Microsoft Office 2008 for Mac Service Pack 1 更新后无法启动程序问题解决方案
  10. Android 移动应用开发模拟题
  11. android原生系统怎么下载地址,安卓全机型原生官方ROM下载地址
  12. 移动app原型设计工具:Flinto for Mac
  13. mysql过程的写法_mysql存储过程的具体写法
  14. 发动机冒黑烟_汽车发动机冒黑烟的原因与处理方法
  15. 数学期望一-指数分布的数学期望
  16. Android Execution failed for task ‘:app:mergeDebugResources‘.
  17. 安索夫矩阵分析市场和产品策略
  18. php 图片获得大小,PHP获取一张图片的宽度和高度大小 并裁切图片
  19. Mysql数据库 汉字转拼音全拼
  20. 提升搜索引擎的友好度只要五个步骤

热门文章

  1. 从0开始学Swift笔记整理(一)
  2. 03-29复利计算单元测试
  3. HDU 1518 Square
  4. 怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker
  5. 趣文:程序员/开发人员的真实生活
  6. 和quot;分别是什么?
  7. centos 8 卸载anaconda_CentOS 7.8 (2003) 发布,附地址
  8. Log binomial 回归在队列中的应用
  9. centos7修改系统语言为简体中文
  10. 人工智能-机器学习=深度学习-其他