Webrtc AGC 算法原理介绍(五)
零、前言
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量在这几篇文章中描述清楚。
一、WebRtcAgc_AddFarend
该函数调用了WebRtcAgc_AddFarToDigital函数,其中仅仅是对远端使用WebRtcAgc_ProcessVad函数。该函数的目的是计算远端信号的VAD可信度,用于在Process_Digital中使用,保证远端信号出现的地方信号增益有所减弱。这么做的原因是相信,远端信号出现出很可能出现回声信号。
这里默认信号与近端信号已经做了延时估计对齐处理,然而在Webrtc的程序中,调用WebRtcAgc_AddFarToDigital与调用WebRtcAgc_Process处的信号显然没有严格对齐,此处存在一定的误差。
二、WebRtcAgc_SaturationCtrl
该判断信号是否饱和,注意到在Webrtc_AddMic中计算了包络env的值,16khz采样的数据,10ms的数据是160个samples,分成10块,每块是16个。求每块16个点中平方值最大的点作为包络。
/* compute envelope */
if ((M ==