零、前言
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量在这几篇文章中描述清楚。
一、WebRtcAgc_AddMic
WebRtcAgc_AddMic用在自适应模拟模式下(kAdaptiveAnalog),其流程如下:
WebRtcAgc_AddMic 流程图
这个流程第一步是根据帧长和采样率继续分帧,具体如下:
采样率 | 帧长 | 子帧个数(1ms)M | 子帧长度L | subFrames |
---|---|---|---|---|
8000 | 10ms | 10 | 8 | 80 |
8000 | 20ms | 20 | 8 | 80 |
16000 | 10ms | 10 | 16 | 160 |
16000 | 20ms | 20 | 16 | 160 |
32000 | 5ms | 10 | 16 | 160 |
这里注意32k时候因为在apm里头已经做了分频,10ms的数据分成了低频16K的10ms数据和高频16k的10ms数据,因此上表32000子帧个数10和subFrames为160。这些子帧用下面用来计算能量信息。
第二部分是如果麦克风最大值大于模拟值就计算缓慢增益的序号对应的值。
t a r g e t G a i n I d x = ( G A I N _ T B L _ L E N − 1 ) ∗ ( m i c V o l − m a x A n a l o g ) ( m a x L e v e l − m a x A n a l o g ) targetGainIdx = \frac{(GAIN\_TBL\_LEN - 1)*(micVol - maxAnalog)}{(maxLevel - maxAnalog)} targetGainIdx=