WebRtc 的VAD算法解析

摘要:本篇文章主要讲述VAD算法的原理并且列举相关公式。该VAD的算法主要用了2 个 models 来对语音建模,并且分成噪声类和语音类。通过比较似然比的方法来确定是否是语音。其中有三个模式可以选择,每个模式算法是一直的,只是相关阈值不同。GMM的更新方法是梯度法,并没有使用常见的EM算法。这是因为其数据量不够大,难以准确估计种类,另外也节省部分运算量。 

1、  将信号通过分频降到8kHz。在这个频带计算噪声和语音的特征做VAD判决。

2、  WebRtcVad_CalculateFeatures函数计算特征,其特征包括6个频带的log能量,分别是80-250、250-500、500-1kHZ、1kHz-2kHz、2kHz -3kHz、3kHz -4kHz。使用分频方法计算这些特征。这六个特征放在向量feature_vector中,使用2维度的GMM模型来建模。

3、 WebRtcVad_GaussianProbability函数输入信号 、均值 、方差 ,计算高斯分别概率密度: 。注意这里少了一个 的系数,因为后面用到概率的时候都是相对量,能够抵消。例如似然比和后验概率。

4、 对于每一个特征 求对数似然比 ,一共6个

5、 计算加权对数似然比 。 是似然比的加权系数。

6、 如果6个特征中有一个满足似然比超过了阈值就认为有语音

\left\{ {\begin{array}{ccccccccccccccc}{\begin{array}{ccccccccccccccc}1&{L\left( {x,i} \right) > {T_l}}\end{array}}\\{\begin{array}{ccccccccccccccc}0&{else}\end{array}}\end{array}} \right.

或者加权似然比超过了阈值

\left\{ {\begin{array}{ccccccccccccccc}{\begin{array}{ccccccccccccccc}1&{{L_s}\left( x \right) > {T_a}}\end{array}}\\{\begin{array}{ccccccccccccccc}0&{else}\end{array}}\end{array}} \right.

7、 WebRtcVad_FindMinimum函数对每个特征feature,求出了100个帧里头的16个最小值。这些最小值都有一个年龄,最大不超过100,也就是说100帧之后失效。这个最小值用来更新噪声的均值。

8、 计算噪声加权均值 。

9、 模型参数更新,包括语音和噪声的两个高斯分布均值和方差更新。其中 。注意噪声均值的更新使用了长期的最小值,也即公式的第三部分。该部分与VAD的标志位是无关的。跟新完后结束VAD计算。最后需要对均值和方差做相应的限制。

1)  噪声模型均值更新:

2)  语音模型均值更新:

3)  噪声模型方差更新:

4)  语音模型方差更新:




你可能感兴趣的:(音频架构通用技术,基础信号处理)