编者按: 随着在线会议的普及,用户已经不再满足于能听到,而是要有更为极致的听感体验,如何能够在复杂多变的应用场景中依旧保证声音清晰流畅是对会议系统的极大挑战。LiveVideoStackCon2022上海站大会邀请到了全时 音视频研发部经理 顾骋老师,为大家详细介绍了语音前处理技术在会议场景中的应用与挑战。

文/顾骋
整理/LiveVideoStack

大家好,我是顾骋,来自全时,本次分享的主题是语音前处理技术在会议场景中的应用与挑战。

内容主要包括三个方面:第一部分介绍影响会议声音质量的因素及应对方法;第二部分介绍语音前处理技术在会议中的应用;第三部分介绍语音前处理与深度学习技术的结合及效果。

以下是我们在视频会议当中可能经常会遇到的两个场景和问题:

1. 开会时出现杂音,影响参会人员体验

2. 同事讲话时,有他人的键盘声传入影响会议进行

那么,导致产生这些问题的原因是什么呢?

1、如何保障会议中的声音质量

影响声音质量的因素有很多,其中最常见的就是网络。因为声音在网络传输的过程中会有所损失,如数据丢失、包的乱序,或延时较大导致声音过了很久才可被听到。针对这个问题,首先我们需要对相关网络部署进行保障,其次在传输层做一些流控,如在编码时编写冗余信息来对抗丢包问题或是在解码时根据帧与帧的相关性来预测丢失的语音帧。

第二个因素是环境因素,不同于网络因素,环境因素较难察觉。举个例子,同事A在会议室中用座机开会时,同事B进入会议室,打开电脑进入会议,两台设备都开着外放,会导致刺耳尖锐的啸叫声。或是在墙面吸音效果较差的房间进行会议时,由于混响较大,较难听清对方声音。此外,随时随地开会的场景很丰富,在路边开会时,喇叭声传入会议中使得会场混乱,影响他人体验等等。

第三个是硬件因素。如使用iPhone的场景下回声问题出现的概率较小,这是因为它的麦克风扬声器耦合性较好,而部分安卓机由于耦合不良,导致麦克风采集到的扬声器放出的声音非常大,有的声学设计包含许多非线性因素。我们在安卓机上会专门进行适配调整。用头戴麦的会议效果很理想,因为它本身是近场拾音,不会采集到周围杂音,同时不外放的话也就不会出现回声。但如果用笔记本电脑开外放,或连接外置音箱、外置麦克风时,就会出现很多问题。

第四个是软件因素。同一台设备中的同一个软件,在同样的网络环境中,有时好,有时坏。软件的播放或采集通过不同线程驱动,当CPU占用高时,录放设备的同步就会出现问题。此时回音消除模块的近端信号与远端信号之间的时延会发生抖动,导致回声泄露。另外,有很多电脑厂商对声卡做了一些音频处理,如硬件的回声消除或噪声抑制。然而有些厂商设计的产品未必理想,导致消除不彻底致使语音失真,在后期使用软件进行算法处理时往往难以去除这部分噪声或回声。

2、语音前处理在会议中的应用

如图所示为音频引擎的大致流程图。下半部分(蓝线)是uplink链路,麦克风采集信号后通过高通滤波去除工频干扰噪声。大部分采集到的声音是48khz或44.1khz,频率很高,但对于正常语音处理来说频率在16khz以下即可,所以我们会先对语音做分频带处理,回音消除、噪声抑制的工作主要在低频带进行,并将计算出来的增益值映射到高频带,然后再恢复成全带信号,最后经过Agc模块。

Agc可以解决由于说话人离麦克风的距离远近变化导致的声音忽大忽小,以及补偿回音消除、噪声抑制处理过程中对语音造成的损伤。最终前处理后的音频数据会被编码发送到网络端。

上半部分(红线)是downlink链路,从网络接收的包经过NetEq处理后解码,取出低频段作为回声消除模块的参考信号,同时支持多通道混音(除语音之外可能会接收到音乐信号,或是部分场景中使用客户端模式混音),最后从扬声器中播放。

噪声抑制和回声消除是三个引擎中最重要的两个版块。

如图所示为经典的噪声抑制功能图,传统噪声抑制算法首先通过vad检测判断当前是语音还是噪声,然后利用vad检测结果来估算噪声幅度谱,最后从含噪语音幅度谱中减去噪声幅度谱就是纯净语音的幅度谱,相位信息则是利用了含噪语音的相位谱。

噪声抑制分为两步,一步是估计噪声,另一步是计算增益因子。

估噪声最常用的是MCRA。首先计算粗略噪声,利用最小值跟踪法获得噪声的初步估计。即使在语音活动期间也不是所有频点都含有语音,很多频点都会有噪声,因此对于单个频点而言它的幅度谱最终会趋近于噪声的级别。我们可以通过最小值估计来估算初始噪声级别,再通过时间递归法对初始噪声进行平滑处理,如果当前是语音,就用上一帧的数据更新它,如果当前是噪音,就用当前帧的数据更新它。

对于噪声抑制来说,我们可以用简单的谱减法。从含噪的幅度谱中去除噪声幅度谱后即可获得纯净幅度谱,这无疑是最简单的方法,但缺点很明显,这种方法容易过多去除“噪声谱”,可能会减多,也可能会减少导致音乐噪声的出现。

目前应用较广泛的方法是维纳滤波,首先利用估算的纯净幅度谱和理想幅度谱的均方误差,取其最小值,也就是导数为0的地方,估算出先验信噪比后即可算出维纳滤波系数。当然也有很多其他方法,如基于统计意义的方法等,且由于人耳对语音的感知是非线性的,我们可以将幅度谱转换到对数谱,得到的结果会更理想。

声音从扬声器里播放出来之前,会通过直达声直接传给麦克风,同时经过房间的连续反射最终被麦克风采集,相当于扬声器中传出的声音再次传入麦克风,导致对端说话时能听到自身回音。针对回声,一般做法是通过自适应滤波器估算房间冲击响应,再和远端信号进行卷积,得出估算的回音信号。实际应用中会更复杂,因为扬声器和麦克风之间有很多非线性耦合,房间也存在一些混响,而且可能除了远端说话时也有近端在说话,一直处于双讲状态,导致回声消除比较困难。

对于上文提到的回声估计,我们用到较多的是NLMS自适应滤波器,原因是其有利于工程实现,我们基本是通过NLMS方式在频域分块处理。

回声消除主要包括以下几点:

1、时延估计

远端信号首先需要和近端信号对齐。因为在房间内,扬声器播出的声音会被麦克风采集,造成时延差,此外,声卡的输入和输出存在缓存buffer,再加上采集播放线程不同步等问题,不可避免地会引入时延。时延较小时,由于线性滤波器本身有一定长度,能够抵消时延,所以问题不大,但当时延较大时就需要采用时延估计算法,比如用最简单的互相关法。

2、线性回声消除

采用自适应滤波器能够估算出回声在房间内的传播路径,得到线性回声估计。其中归一化最小均方误差(NLMS)应用最为广泛,我们往往通过控制迭代步长来使其尽快收敛,达到稳定状态。

3、双讲检测

那么如何加快收敛速度呢?这就需要双讲检测算法(dtd),因为在仅有远端说话时应尽快更新滤波器,但如果同时有近端说话时,应尽量冻结滤波器以防发散。其实双讲检测操作起来比较困难,因为在有噪声干扰时检测很难准确。在很多场景我们选择通过控制迭代步长起到类似双讲检测作用,同时为了提高收敛速度,我们给滤波器组的每个块分配不同权重,比如更近的块权重更大,从而收敛更多。

4、残留回声抑制

在实际场景中,线性回声包括非常大的非线性成分,简单地通过线性滤波器无法完全消除,所以需要通过RES估算残留回声并抑制。在控制过程中会发现,抑制力度过小时,回声消除的不干净,但如果力度过大则会损伤语音,这也是实际应用中最具有挑战性的。

3、拥抱深度学习追求极致音质

如同上文所提到的,我们基于传统数字信号处理方式进行语音前处理,如消除回声,消除噪声。

传统的降噪基本基于先验的假设条件如假设是一个加性噪声,它和语音不相关,还得是平稳的。对于平稳噪声的处理没有太大问题,但对于某些场景如鼠标键盘敲击声,处理起来的效果会不太理想。如果用传统方法提取鼠标键盘声的特征进行抑制,难点在于也许能够在个别场景下通过观察频谱分布提取有效特征,但由于噪声类型变化太多,导致在其他场景下,特征提取不准,此外人工调参工作量也是十分巨大。

这就体现出深度学习的优势,它提供了非常强大的非线性拟合能力,即使是百万级的参数量,只要有足够好的数据,通过训练后即可达到较好效果。

一般我们会先选定模型,设置训练目标如计算一个mask,这个mask相当于传统算法中的gain值,最初比较简单的是理想二值掩膜,判断频点是语音或噪音,这往往会引入一些噪声。后来我们通过理想比值掩膜计算比值而不是简单的做一个二分类。

后续引入了很多相位信息,发现相位对音质有较大影响。最后我们选择了cIRM,它同时考虑了幅度和相位,达到更好的效果。当然在实际使用中还是需要结合具体场景进行选择。

训练网络需要有非常强大的泛化能力,否则在某些场景下的效果会不太理想,于是我们需要对样本进行增广,对于目前已有的训练数据集进行一些处理或根据需要应用的场景使用私有的训练数据。同时还需找到较合适的特征。如果通过映射方式直接输入时域波形,那么最后直接输出的就是已经完成降噪的时域波形,但这会提升训练难度。所以我们一般会适当提取一些特征,比如将其转换到一个频域或通过分带的方式切割为多个带。更多或更合适的特征提取能够有效降低模型的大小。

之所以这样做,是因为实际的应用场景基本都是实时的。可能大家看到许多挑战赛中的效果非常理想,但如果直接拿来部署就会发现根本无法运行,因为假如10ms一帧的数据,需要运算50ms才能出结果,这根本达不到实时性的要求,换句话说,在好的机器上能跑起来,但换到较差的机器就不行了。所以最终的抉择还应综合实际应用场景、机器性能,及部署在端侧还是服务器。部署在服务器上可以通过较好的gpu提升性能。移动端和pc、mac端的处理上也存在一些差异。嵌入式设备还应考虑存储量的问题,如果参数量过大会对其存储造成一定影响。

我们根据应用场景选择合适的模型后,还会不断的进行优化,或对数据做一些处理,再加上部署,这样才能够保证实时性。

举个例子,噪声里面的瞬态噪声对传统降噪来说很难处理,如图中传统降噪前后的对比,其中的平稳噪声基本能够被消除,但鼠标键盘这种噪声就无法完全消除了。而AI降噪方式能够较好地处理这种情况。

回声消除也类似,其实在回声消除中存在一个大问题,即消除回声算法遇到双讲情况时会对本地语音造成很大损伤,通过AI算法进行较好的训练后能够很好的解决这个问题。

大家可能觉得目前基于深度学习的方法已经可以替代传统方法了,但实际上却没那么简单。深度学习的方法固然好,能够解决许多传统方式解决起来比较困难的问题,但它也并不是全能的。应用基于深度学习的方法时,假如数据集覆盖很全面,效果也许会很不错,但当数据集和真实场景存在一定差异时,最终效果也会大打折扣。

另外一个重要问题是性能,由于我们的计算资源往往比较有限,而深度学习方法的性能开销却很大,对于实时性要求很高的场景来说,设备性能不够,深度学习的方法未必是最好的选择。目前大多还是深度学习加传统相结合的方式,相当于取精华去糟粕,用传统方式完成最基础功能,把复杂的部分交给深度学习,在保障性能的前提下尽可能提高使用效果。

最后,我们来总结下:

1、一场会议有许多组成部分,但声音往往是最为重要的。一方面不是所有人都喜欢开着视频,另一方面声音的卡顿会比视频的卡顿更令人抓狂,一帧声音数据的丢失就会被人明显的感知到。

2、影响声音的因素有很多,包括环境、硬件、软件等因素,都会带来不同的体验。

3、针对这些问题,可以利用语音前处理技术进行噪声抑制以及回声的消除。

4、深度学习和传统方法各有千秋,之间的优势可以互补。

希望通过今天的介绍,大家能对会议系统里音频处理相关的问题有一定的了解。

以上是本次分享的全部内容,谢谢!

(全文完)


语音前处理技术在会议场景中的应用及挑战相关推荐

  1. 数字孪生制造:数字孪生技术在制造业可视化中的实践与挑战

    文章目录 数字孪生制造:数字孪生技术在制造业可视化中的实践与挑战 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍:算法原理,操作步骤,数学公式等 一.数字孪生技术的核 ...

  2. 智能分析网关AI安全帽识别技术在工地场景中的应用及意义

    安全帽是建筑业.制造业等工业生产中重要的劳保工具,应用十分广泛且十分重要.但是在实际场景中,比如建筑工地或工厂流水线上,依然有很多工人忽视安全帽的重要性,同时,由于企业的监督不到位,因未佩戴安全帽而引 ...

  3. 密码技术在车联网安全中的应用与挑战

    随着智慧交通和无人驾驶的快速发展,车联网产业呈现蓬勃发展态势,车与云.车与车.车与路.车与人等综合网络链接的融合程度越来越高,随之而来的安全挑战也更加严峻.解决车联网的安全问题需要一个整体的防护体系, ...

  4. 低延迟流式语音识别技术在人机语音交互场景中的实践

    美团语音交互部针对交互场景下的低延迟语音识别需求,提出了一种全新的低出字延迟流式语音识别方案.本方法将降低延迟问题转换成一个知识蒸馏过程,极大地简化了延迟优化的难度,仅通过一个正则项损失函数就使得模型 ...

  5. 音视频技术在云会议场景的拓展和未来

    音视频技术不断发展,云会议场景在人们生活中也越来越常见.那么如何将云会议场景中的音视频技术不断提升改善?本次分享会我们邀请到了来自腾讯会议的商世东先生,他将与我们分享云视频技术在腾讯会议里面的一些领域 ...

  6. 多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  7. 公开课 | 多模态人物识别技术及其在爱奇艺视频场景中的应用

    在这期CSDN技术公开课Plus中,爱奇艺科学家路香菊博士为大家分享了多模态人物识别的相关技术,大家可以在公开课笔记中了解.学习到爱奇艺在多模态技术领域中的主要研究工作及在爱奇艺视频中是如何应用这些技 ...

  8. 人脸识别,让会议签到更轻松!会议会展中的人脸识别签到!

    随着AI 人工智能的盛行,各个行业都面临着前所未有的技术革新,尤其在极具科技创新的会务领域. 会议会展,作为创新科技对外展示的第一道窗口,尖端技术首次应用到会议会展领域屡见不鲜,从全息投影的虚拟讲解员 ...

  9. AI赋能日常生活:讯飞语音转写在会议、采编、上课等场景中的应用

    人工智能在日常生活中的应用已经非常广泛了.除了ChatGPT这种对话生成式AI,语音转文字技术也可以在很多场景中派上用场.比如,奔波于各种会议之间的打工人.经常采访的媒体从业者以及要上网课的学生们,每 ...

最新文章

  1. [转载]Windows SDK笔记
  2. 思科网络设备及配置详解,网工入门必备指南!
  3. 看微信了解MySQL及相关IT技术
  4. 有道智能学习灯 初体验
  5. [Node.js] mySQL数据库 -- NPM包
  6. mysql锁申请步骤_大话MySQL锁
  7. V4L2学习(三)框架分析
  8. 数据分析必备的统计学(二):假设检验
  9. 2016-5-31 项目结构调整
  10. [恢]hdu 2003
  11. q萌扫地机器人_为什么买了扫地机器人的到最后都后悔了?
  12. LayUI_03 前端框架 内置模块
  13. js通过银行卡号获取银行卡号获取所属银行,银行名称,银行编码,银行卡种
  14. b级计算机机房标准,B级电子信息系统机房技术要求国标GB50174–2008
  15. Laravel框架之微信授权获取用户信息
  16. httpclient发布application/octet-stream
  17. android 紫外线传感器,Arduino光线传感器-UV Sensor V1.0-ML8511紫外线传感器
  18. Objective-C分类 (catagory)
  19. word标题4降级标题5无法显示
  20. Winsock属性、方法介绍

热门文章

  1. java字符串转换bigdecimal_安全字符串到BigDecimal转换
  2. 决战下半场:小程序技术助力金融APP重回C位
  3. 安卓7.0权限及预览版问题
  4. 软件人生感触之一 深度和广度
  5. mixin机器人java开发_Mixin 开发简明教程 1:写个机器人
  6. emit python 作用_PyQT5 emit 和 connect的用法详解
  7. 用Python编写迷宫游戏
  8. 短视频的人设如何定位?考虑好三点,打造吸引粉丝的人设
  9. Python基础 协程
  10. IDEA MAVEN项目打包成jar包的两种简单方式