關於webrtc的VAD(voice activity dectctor)算法說明web
webrtc 的vad使用GMM(Gaussian Mixture Model)對語音和噪聲建模,經過相應的機率來判斷語音和噪聲。這種算法算法
的優勢是它是無監督的,不須要嚴格的訓練。GMM的噪聲和語音模型以下:spa
p(xk|z,rk)={1/sqrt(2*pi*sita^2)} * exp{ - (xk-uz) ^2/(2 * sita ^2 )} it
XK是選取的特徵量,在webrtc的VAD中具體是指子帶能量,rk是包括均值uz和方差sita的參數集合。z=0,表明噪聲;z=1,表明語音。webrtc
webrtc中的vad的C代碼的詳細步驟以下:test
1.設定模式 :方法
依據hangover、單獨判決和全局判決門限將VAD檢測模式分爲如下4類activity
0-quality mode 集合
1- Low bitrate mode vi
2-Aggressive mode
3- Very aggressive mode
2.webrtc的VAD只支持幀長10ms,20ms和30ms,爲此事先要加以判斷,不符合條件的返回-1。
3.webrtc 的VAD核心計算只支持8KHz採樣率,因此當輸入信號採樣率爲32KHz 或者16KHz 時都要先下采樣到8KHz 。
4.在8Khz採樣率上分爲兩個步驟
4.1 計算子帶能量
子帶分爲80~250Hz,250~500Hz,500~1000Hz,1000~2000Hz,2000~3000Hz,3000~4000Hz
須要分別計算上述子帶的能量feature_vector。
4.2 經過高斯混合模型分別計算語音和非語音的機率,使用假設檢驗的方法肯定信號的類型。
首先經過高斯模型計算假設檢驗中的H0和H1(C代碼是用h0_test和h1_test表示),經過門限判決vadflag;
而後更新機率計算所須要的語音均值(speech_means)、噪聲的均值(noise_means)、語音方差(speech_stds)
和噪聲方差(noise_stds)。