Webrtc AGC 算法原理介绍(六)
零、前言
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量在这几篇文章中描述清楚。
一、WebRtcAgc_ProcessDigital
ProcessDigital是AGC的核心函数,无论什么模式都要调用到。现在来解释一下。
该函数8khz的时候处理80个点的数据,16k处理160个点的数据,32k处理低频160个点的数据。每个处理都是10ms。
1、首先计算了近端信号的VAD参数。并且当远端信号超过10帧(100ms)后,使用远端的VAD参数修正近端VAD,具体方法是:
L = 3 4 L n e a r − 1 4 L f a r L=\frac{3}{4}L_{near}-\frac{1}{4}L_{far} L=43Lnear−41Lfar
2、接着使用似然比 L L L计算出衰减decay。
D d e c a y = { − 65 , i f L > 1 0 , i f L < 0 − 65 L , e l s e D_{decay}=\left\{\begin{matrix}-65,if L>1\\ 0, if L<0\\ -65L,else\end{matrix}\right. Ddecay=⎩⎨⎧−65,ifL>10,ifL<0−65L,else
如果是adaptive(无论,Analog或者Digital)中,对声音小的情况,对decay修正。这个参数在计算慢包络的时候使用。??
3、计算每1ms的最大能量作为包络env。
4、通过快、慢包络和增益表计算出增益数组gain
这个部分,首先计算了快慢包络。
C f a s t = { − 1000 C f a s t + C f a s t , e v n [ k ] < C f a