音频3A处理简介之AGC(自动增益控制)

在音频通话和视频会议中,音频自动增益控制AGC模块的主要作用:

  • • 稳定音频信号的输出电平。无论麦克风采集信号的强弱(如用户离麦克风远近程度不同),尽可能保证音频采集模块的输出音量保持相对一致,不会偏大造成消波,也不会偏小导致听不清楚。
  • • 动态适应音量采集的变化环境。即可以应对环境中噪音变化、设备差异(如不同麦克风灵敏度)、用户说话习惯差异,动态自动调整语音信号的强度,使得其输出保持在一个合适的水平。

在常见的消费类电子产品的音频编解码器 Audio Codec 的处理链路之中,AGC模块一般工作中经过ADC转换之后的数字域处理环节,通过DSP算法来实现动态调整语音信号数据增益的功能,这样的处理方式灵活性更好,并且可以与其他DSP算法如降噪、AEC等协同优化。当然,一些低端的Audio Codec(例如TLV320AIC3101)内部缺少丰富的数字音频处理功能,那么AGC模块也可以直接在模拟域对PGA的增益进行调节来实现自动增益控制的效果。如下图是TLV310AIC3101的AGC处理链路。

另外,我们只有在音频信号的输入链路的处理中,也就是对麦克风采集语音信号的处理中,才会用到AGC动态调整增益来实现语音信号强度基本保持一致的效果;在音频信号的输出链路,也就是对扬声器播放语音信号的处理链路之中,一般是不需要AGC的,此时对于输出语音信号的大小通常由用户手动设置或系统音量管理,无需自动增益。

1. AGC音频处理链路与VAD模块

一般而言,从麦克风采集到的声音信号中,除了真正的我们想要保留的本地端语音信号以外,不可避免地还会包含有一定的噪声、双向对接状态下的回声等,而AGC既然是通过调整音频采样数据的增益来维持音量的稳定性,那么其要稳定的对象势必是尽可能去除了噪声和回声的本地端语音信号,这就是在音频3A链路中,应该把AGC放在AEC和ANS之后进行处理的原因所在,因为我们要进行音量自动增益控制的对象并不包含回声和噪声。

以上的噪声和回声分别在ANS和AEC环节处理后,在AGC自动增益控制的处理流程中,还包含一个VAD(语音活动检测)模块用于决定何时启动音频采样数据的增益调整。VAD模块的主要目标就是对麦克风连续采集的语音信号区分为语音段与非语音段(如静默或背景噪声),只在语音段才会激活AGC对音频数据的增益进行动态控制,非语音段抑制增益调整或维持固定增益,防止放大噪声,避免AGC的动态增益调整对非语音信号产生负面影响。

VAD模块对于语音段和非语音段的判决,以音频帧为单位,对音频帧内音频采样数据的均方根能量进行统计,与VAD模块维护的动态本地噪声的能量进行比较,若当前帧能量高于动态噪声本底+固定偏移(如+3dB),可判定为语音段候选,再结合状态机控制机制(如连续多帧高于阈值判定为语音段,连续多帧低于阈值判定为非语音段),给出语音段和非语音段的最终判决。

2. AGC的处理流程

2.1. 音频采样数据的预处理

如上所述,AGC工作在Audio Codec的数字域,也就是对麦克风采集信号经过ADC以及其他音频处理模块处理后的数字采样序列中执行自动增益处理的流程。在该环节,首先对连续的音频采样数据进行切片处理,把连续的音频数据切分为固定采样数量的音频帧,后续的AGC处理是以音频帧为单位。

在AGC的分帧处理上,一般会采用50%重叠的方式进行处理,即当前音频帧的前50%采样与上一个音频帧的后50%采样相同,以平滑音频帧的边界效应,避免两个连续的音频帧增益不同造成的突变。

2.2. VAD检测

如上所述,VAD模块通过比较当前音频的帧能量与噪声本底的能量,判断当前音频帧处于语音段还是非语音段。

AGC的流程中一般仅在语音段触发AGC增益调整。

2.3. 自动增益的计算阶段

自动增益的计算阶段要依赖于AGC模块的几个提前预设值:

  • • 目标电平,也就是对于AGC模块的调整而言,期望AGC模块的输出能够达到的目标音量水平。
  • • 时间常数,表示增益调整的时间参数,用于控制增益调节的平滑度,避免声音音量忽大忽小。

在计算增益时,对当前音频帧的能量和目标电平进行比较,当当前帧能量高于目标电平时,应适当减小增益以避免音频采样数据叠加增益后过载;而如果当前帧能量低于目标电平,则增大增益提高音量的幅度。

针对信号的动态范围比较小(信号幅度的差异不大)的应用场景,一般就可以简单的选择线性增益调整模式:即根据当前音频帧的能量与目标电平的差异确定一个增益的大小,对所有的音频采样进行相同的增益调整。

而针对复杂信号环境(如突发噪声、多频段干扰),则需采用非线性增益的调整策略:

  • • 动态范围压缩(DRC)。DRC是一种通过非线性增益调整信号动态范围的技术,不仅可以用于语音信号的处理,也广泛应用于通信系统和智能设备领域中。DRC的工作大致依赖于三个参数:threshold_low、threshold_high和ratio。其工作逻辑大概为:当音频采样的幅度和能量低于threshold_low阈值的时候,DRC就会设置比较低的增益以抑制噪声;当音频采样的幅度和能量在threshold_low和threshold_high之间的时候,DRC按照前面计算出来的目标增益对该音频采样进行设置;而当音频采样的幅度和能量大于threshold_high时,就按照ratio的设置,对这个音频采样的增益进行适当压缩,以避免出现消顶的问题。
  • • 多频段增益控制。首先通过FFT运算执行频带分割,把信号分为低频、中频、高频子带;然后对每个子带单独计算并调整增益,这样可以避免整体调整所导致的频谱失衡问题,整个处理方式有点类似于EQ的工作流程了,对于不同频段设置不同的增益,或者抑制,或者增强。

此外,自动增益计算和调整的时间常数则主要包含两种类型的时间参数,用于实现增益和调整后语音幅度的平滑和自然变化:

  • • 启动时间(Attack Time):当音频信号的幅度突增时,快速降低增益(典型值20~100ms),防止出现瞬时过载的问题。
  • • 释放时间(Release Time):当信号幅度减弱时,则缓慢恢复增益(典型值100~2000ms)。

2.4. 增益的应用阶段及其后处理

AGC处理的最后阶段,就是把计算阶段所计算出来的增益应用到当前音频帧的所有采样数据上。根据前一阶段采用线性或者非线性的增益计算策略,针对性的对音频采样设置一致或者不一致的增益。

此外,经过以上AGC处理以后的音频采样序列数据,还需要限制其幅值(如-1dBFS),防止DAC或扬声器过载;以及与前面阶段的AEC、ANS等音频处理模块反馈联动,实现对音频数据的稳定控制。

相关推荐
Wireless_Link14 天前
音频3A处理简介之AEC(回音消除)
aec·音频3a·回音消除·echo cancel
zhuweisky2 个月前
C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
vad·静音检测·降噪·agc·语音活动检测·自动增益
浪游东戴河5 个月前
VoIP之音频3A技术
音频·aec·3a·agc·ans
瘦弱的皮卡丘7 个月前
声音是如何产生的
音视频·音频·音频3a