关于音视频:音视频开发进阶|第四讲音频自动增益控制-AGC

4次阅读

共计 6034 个字符,预计需要花费 16 分钟才能阅读完成。

在之前的文章中,咱们曾经接触了两个重要的音频前解决模块 – 回声打消 AEC 和噪声克制 ANS,它们别离解决了 RTC 场景下的回声、噪声问题,极大晋升了用户的体验。至此,音频前解决三剑客中,就只剩下一位 – 音频自动增益管制 AGC(Automatic Gain Control)还没有介绍,明天咱们就来认识一下它。

理论场景的音量问题和 AGC 的必要性

相较于回声和噪声,音量相干的问题仿佛不怎么“重大”,如果排除播放端误操作的因素,理论场景中还会有哪些音量问题?什么状况下咱们会有“须要调整音量”的想法呢?

状况一:音量太小,咱们无奈辨识具体的语音信息,甚至须要贴着扬声器、皱着眉头“凝听”。起因可能是讲话者间隔麦克风过远,也可能是麦克风的采集音量就比拟小;

状况二:音量太大,咱们的耳朵蒙受“痛击”,不得不对扬声器“敬而远之”。起因可能是讲话者间隔麦克风过近、可能其谈话自身就比拟“使劲”。

状况三:音量忽大忽小,一段语音里可能同时存在前述两个问题,音量起起伏伏、不即不离,对听众来说无疑也是一种”折磨”。

对于这些音量问题,除了让讲话者调整与麦克风的间隔、本身谈话的声音大小外,咱们熟知且习惯的解决办法是:在采集端,调节麦克风的采集增益;在播放端,调节播放软件的音量条、或者设施扬声器的播放增益。

 

采集音量控制

 播放音量控制

这些手动的操作,其实都还算得上空谷传声。这么一看,既然动动手就能够自行解决,音量问题貌似确实不是什么大问题,为什么还须要自动增益管制呢?

咱们须要意识到,“动动手”这种被动的音量调节形式,尽管有肯定成果,但“不够便捷”,也“众口难调”。理论场景中,环境复杂多变:谈话者不同则声音的原始音量有差别,谈话者间隔麦克风远近不同则声音流传的衰减有差别,麦克风设施不同则采集的增益有差别。
 

这些差别,使得一次“手动调节”很难适应采集环境的动态变化,如果场景中存在多个用户应用同一个麦克风的状况,更难一一兼顾。对于不相熟设施零碎的用户来说,如何调节设施采集增益、调节到多少适合或者都是“不可能实现的工作”(你晓得如何调节 PC 端的麦克风增益吗?)。如果只依赖于手动调节,尤其是频繁的手动调节,势必会给用户带来累赘,影响体验,对于产品设计来说也不够“优雅”。

此时,一个智能的音量调节机制的必要性就体现进去了。

AGC 针对上述情况,会主动调节采集端的音量“增益弥补”。简略来说,如果讲话者的声音过大,AGC 会主动升高增益;反之,会主动进步增益,以确保音量维持在一个比较稳定的程度。这个过程,用户无需频繁操作设施,就能防止声音起伏导致的不良体验,能够专一于 RTC 的音视频交互。

理解了常见的音量问题,以及 AGC 在解决这些问题上的劣势,大家应该能领会到 AGC 存在的合理性和必要性,是时候再进一步理解下其中的技术点了。所谓“音量自动增益管制”,想要做具体理解,咱们无妨把它拆解一下,一一击破:

  • 什么是“音量”?
  • 音量“增益”的实质是什么?
  • AGC 进行音量增益“自动控制”的策略是什么?

咱们接下来就一一解答这些问题。

一、什么是音量

在探讨 ANS、AEC 的文章中,咱们都会先理清相应模块的解决对象,比方噪声是什么、回声是什么。所谓知己知彼,AGC 也不例外,咱们须要先晓得:到底什么是音量?

其实,在系列文章的第一讲 – 音频因素中,咱们就接触了音量的概念,只不过应用的是另外一个名称:响度。

咱们回顾一下响度的定义:“嘹亮、强劲,是对声音强弱的感觉形容,这种特色被称为响度。响度由发声体振动的幅度决定,当流传的间隔雷同时,振动幅度越大、则响度越大;相同,当振幅肯定时,流传间隔越远,响度越小,就是咱们常说的“间隔太远了,听不见”的起因。“音量、响度”形容的是声音的同一属性,从定义上来看,它们是人耳对声音强弱的“感触”,次要由声音振动的“幅度”决定。感触是一种“心理量”,无奈被具体量化;而振幅是“物理量”,在音频采样位深为 16bit 时,其幅度取值为[-32768,32767],范畴十分大,不便于检测和计算(对于采样位深和幅度的概念,可参考系列文章的第一讲 – 音频因素 – 声音的采集与量化)。

为了简化示意,咱们又引入其余计量规范来示意音量,常见的有“声压级”规范和“全分贝刻度”规范,二者应用的单位均为分贝(dB)。

分贝是一个对数单位, 用于示意两个雷同单位物理量的比,所以它须要参考一个基准量来进行计算,基准量不同,失去的数值体系也不同:

  • 声压级(SPL,Sound Pressure Levels):单位为 dBSPL。应用声压作为基准量,其基准值为 20 μPa(声音在空气中振动会引起大气压强的变动,也即“声压“,单位为 Pa。20 μPa 是人耳在频率 1KHz 下能感知的最小声音,相当于三米外一只蚊子的声音)。咱们把声压为 20 μPa 的音量记为 0 dBSPL,音量越大,声压级分贝越大。咱们失常谈话聊天的声压级音量约为 40 ~ 60 dBSPL,如果音量达到 90dBSPL 以上会伤害听力,190 dBSPL 以上甚至会危及生命。常见的噪声等级划分,就应用了声压级参考系。
  • 全分贝刻度(DFS,Decibels Full Scale):单位为 dBFS。应用音频采样点的幅度值作为基准量。和声压级不同,全分贝刻度的基准值不是最小值,而是最大值。比方,对于采样位深为 16bit 的音频,音频采样点的最大振幅为 32768,此时音量最大。咱们取振幅 32768 作为基准量,对应全分贝刻度 0 dBFS,0 dBFS 也即全分贝刻度规范下的最大音量,除了最大音量外都是负值,16bit 下的最小值为 -96 dBFS。数字设施、数字音频解决均应用全分贝刻度作为音量单位,AGC 解决也是如此。

通过下面的形容,大家对于“什么是音量?”,应该有了初步的认知,有趣味的同学,还能够具体去理解不同音量规范的对数计算公式,有助于大家进一步了解“分贝”的概念。

接下来,咱们持续“音量自动增益管制“概念一一击破的第二局部:音量“增益”的实质。

二、音量“增益”的实质是什么

“增益”指的是放大肯定倍数,音量“增益”简而言之就是将音量放大肯定倍数。

咱们曾经晓得,决定音量大小的物理量为“振幅”,如果能对“振幅”进行调节,其实也就调节了音量。所以,“将音量放大肯定倍数”实际上是“将音频采样点的幅值放大肯定倍数”,实现上就是将音频采样点的幅值乘上一个系数,系数小于 1,就是放大幅值,大于 1 就是放大幅值。

须要留神的是,幅值的放大倍数和人耳的听觉感触并不对立,更不成线性关系。也就是说,幅值放大一倍,人耳的听感并没有相应的也放大一倍。针对这种波及两个物理量比值的非线性关系,咱们仍能够借助分贝来解决。

音频采样位深 16bit 下,振幅为 A1 的音频绝对于振幅为 A2 的音频,其音量的增益为:dB = 20 * log10(A1/A2)。

  • 假如采样点幅值放大为 2 倍(A1/A2 = 2),则该声音被增益了 20*log10(2) ≈ 6dB
  • 假如采样点幅值不变(A1/A2 = 1),则该声音被增益了 20*log10(1) = 0dB
  • 假如采样点幅值放大为 1 /2(A1/A2 = 1/2),则该声音增益了 20*log10(1/2) ≈ -6dB

若增益为负数,示意对音量做放大解决;反之增益为正数时,示意对音量做放大解决;增益为 0dB 示意应用原始的音量(大家须要留神,尽管都是 0dB,但不要混同 音量大小 和 音量增益)。应用 dB 来进行增益计算,就和应用全分贝刻度作为音量大小单位分割起来了。

ZEGO SDK 反对通过接口被动对采集 / 播放音量进行调节,为合乎了解习惯,接口可选的设置值为 [0,200]。其中 [0,100] 对应 -40 ~ 0 dB 的增益,会放大或保留原始音量;(100,200] 对应 0~12 dB 的增益,会放大音量,参考下面的公式,最高可将幅值放大 4 倍。点击即构音频 3A 解决

基于对音量增益实质的理解,咱们进一步理解一下 常见的音量增益路径:模仿增益和数字增益。两种增益路径的具体细节就不做开展,联合已知的基础知识,大家只须要简略理解如下:

  • 模仿增益:调整间断模拟信号的波形幅度,个别依赖于设施零碎接口,管制设施硬件的采集增益,调节零碎采集音量
  • 数字增益:调整离散数字信号的采样点幅值,不依赖于设施零碎接口,不调节零碎采集音量

一般来说,Windows 和 Mac 端广泛反对模仿增益调节,这些平台往往会采纳模仿增益 + 数字增益联合的策略调节音量。其中 Windows 端因采集声卡品种繁多,有些声卡的采集音量极小,如果不做零碎音量的模仿增益、间接做数字增益,可能会因精度不够,导致数字增益后音质不佳。而挪动端(iOS、Android)、Linux 端个别没有调节零碎采集音量的接口,无奈进行模仿增益调节,只能依赖于数字增益。

当然,只有两种根本的增益形式是无奈满足复杂多变的理论场景的,AGC 算法须要依据平台差别和理论需要,灵便抉择 / 搭配上述两种形式,并以此作为根底进一步制订解决策略。这也就是咱们 AGC 概念一一击破的第三局部内容:AGC 进行音量增益“自动控制”的策略是什么?

三、AGC 进行音量增益“自动控制”的策略是什么

在理解 AGC“自动控制”的策略之前,咱们先对其解决的音量对象做进一步明确。

显然,并不是所有信号都要进行音量增益管制的,和 ANS/AEC 只克制噪声 / 远端回声、要保留近端语音一样,AGC 也要针对采集信号中的近端语音做甄别,防止对噪声、回声等无关信号的增益。思考这点,把 AGC 模块放在 AEC、ANS 解决之后就比拟适合,因为此时信号中的噪声和回声曾经被极大的削减。

但地位的“劣势”,不代表 AGC 就能够毫无顾虑的发展工作。为防止漏网之鱼,往往须要进行人声检测(VAD),进一步辨别语音段和无话段。一般来说,VAD 算法在信噪比低的时候准确性也会升高,为解决这类问题,ZEGO SDK 减少了谐波检测,通过检测谐波特色量来辅助甄别人声,进一步保障后续 AGC 解决的成果。

人声检测

明确了 AGC 解决的音量对象,咱们这就开始理解其发展“自动控制”的策略。

任何策略的制订都要基于明确的指标和限度,围绕这些指标和限度能力保障策略失去精确、有条理的施行,对于 AGC 来说,其遵循的指标和限度次要为(参考经典的 WebRTC-AGC 算法):

  • 指标音量:示意音量调节的指标大小,应用全分贝刻度规范。比方设置输入音量的目标值为 -3dB;
  • 增益能力:示意音量调节的最大增益,应用分贝度量形式。比方设置最大增益为 12dB,也即可将幅值最高放大 4 倍;
  • 压限开关:示意是否应用压限逻辑。是否对超过指标音量的局部进行克制。

基于上述指标和限度,常见的 AGC 策略次要有如下几种(参考经典的 WebRTC-AGC 算法):

1、固定数字增益策略   

首先是最根本的控制策略:固定数字增益策略。该策略的外围逻辑,就是对音频音量做固定的、不超过所设增益能力的数字增益调节,且调节后的音量需低于指标音量(若应用压限逻辑)。

固定数字增益的整体策略绝对简略,但其毛病也比拟显著。因为增益量固定,短少反馈调节机制,对于音量继续较小的信号改善无限;而对于音量继续较大的信号,如果增益能力设置不合理,可能导致噪声音量绝对语音局部晋升更多(因为语音音量会受指标音量的限度,而噪声个别达不到压限规范),解决后噪声变得绝对更显著,这种状况在前序的 ANS 解决不欠缺时,会尤为重大。

发现了问题,天然就要思考解决方案,一方面是优化前序的噪声打消模块;另一方面,既然是增益固定引入的缺点,咱们能够减少一些动静调整的机制。

2、自适应模仿增益策略   

第二种控制策略“自适应模仿增益”,在固定数字增益策略的根底上,利用反馈机制,减少了对以后设施模仿增益值的管制

它会综合对前序调节成果的评估,剖析以后的模仿增益值是否正当,并计算出所需的模仿增益值,再调用零碎接口将“所需的模仿增益”设置到设施层,调节原始的采集音量,作用于后续的解决。

该策略的益处是,固定数字增益和动静模仿增益相辅相成,利用反馈机制进步了策略的灵活性、以及平衡成果。但因为模仿增益须要调用零碎接口,如果信号比较复杂、调整比拟频繁,会产生额定的性能耗费。另外,该策略不适用于短少相干零碎接口的挪动设施,局限性也比拟大

3、自适应数字增益策略  

为解决自适应模仿增益存在的局部问题,并继承其反馈机制的长处,第三种控制策略应运而生 –自适应数字增益。

自适应数字增益策略,在数字增益管制中参考了模仿增益的原理。并同样应用基于反馈机制的调节逻辑,会依据前序解决成果、动静调节数字增益参数,继续优化增益成果。因为只进行数字增益,不依赖于零碎接口,能够利用于挪动设施,适用范围更广

但遗憾的是,自适应数字增益策略也 存在毛病 – 灵敏度有余,增益调节速度不够快。在音量起伏频繁时,可能会将用于小音量的大增益,误用于大音量、或者将用于大音量的小增益,误用于小音量,导致大音量更大、小音量更小。

 管制模式

总结

理解了 AGC 常见的解决策略及其优劣势,能够发现没有哪一个策略是相对完满的,须要舍短取长、正当搭配,并且一直的总结精进。设计一个优良的 AGC 算法,也是任重道远的。

当初,AGC 自动增益管制的各个概念要点,咱们曾经逐个击破了,今后在理论利用中再遇到音量问题,咱们不应仅仅满足于“动动手”,还能够进一步借助 AGC 模块来解决,对于 AGC 解决不佳的状况,也能够尝试探究其原因和优化计划,进一步加深了解。

至此,致力于让声音更“好听”的音频前解决三剑客,曾经和大家介绍结束了,在当今的 RTC 场景下,3A 解决未然是不可或缺的一环,咱们很难设想,再回到充斥着回声、噪声、音量还起伏不定的环境会是一种怎么的“折磨”,用户体验无从谈起,恐怕再优良乏味的玩法都杯水车薪。

在将来,随着 RTC 场景的一直扩大,咱们必然会遇到更多的技术挑战,但咱们有理由置信,随着技术利用的不断深入,业界势必也会有更优良、更智能的 3A 算法落地,会继续为咱们的用户体验保驾护航,咱们大能够刮目相待!

上面,咱们再通过一个思维导图,梳理一下整篇文章的内容:

 

问:本期思考题

谐波检测为什么能够用于辅助定位人声,进步 VAD 的准确度?

(🤫下期揭秘)

上期思考题揭秘 ⬇️

问: 噪声克制可能会伤害“有用信号”,这一景象在音乐场景尤为显著,起因是什么呢?

答:《无间道》中有一句经典台词:“低音甜、中音准、高音沉,总之一句话就是通透”,大略是对“好听”最贴切的形容之一。这里的“低音、中音、高音”是指声音的不同频率。一段悦耳的音乐,在每个频段上(尤其是高频局部)都有着丰盛的细节,任何频段的损失都可能影响听感。然而,音乐在中高频(尤其是高频)局部的能量往往较低,这就导致叠加噪声之后,信噪比很小,给 ANS 解决带来难度。中高频的音乐细节很可能被误当做噪声解决掉,造成伤害。相比之下,人声个别集中在中低频,能量、信噪比也较高,在 ANS 解决中的伤害会绝对少。

综上,音乐更容易被 ANS 误伤,在有高音质要求的音乐场景,倡议升高降噪等级,甚至敞开降噪解决,尽可能从环境层面升高噪声烦扰。

正文完
 0