webrtc的vad使用GMM(Gaussian Mixture Mode)对语音和噪音建模,通过相应的概率来判断语音和噪声,这种算法的优点是它是无监督的,不需要严格的训练。GMM的噪声和语音模型如下:
p(xk|z,rk)={1/sqrt(2*pi*sita^2)} * exp{ - (xk-uz) ^2/(2 * sita ^2 )}xk是选取的特征量,在webrtc的VAD中具体是指子带能量,rk是包括均值uz和方差sita的参数集合。z=0,代表噪声,z=1代表语音
webrtc中的vad的c代码的详细步骤如下:
1.设定模式
根据hangover、单独判决和全局判决门限将VAD检测模式分为以下4类
0-quality mode1-low bitrate mode2-aggressive mode3-very aggressive mode2.webrtc的VAD只支持帧长10ms,20ms和30ms,为此事先要加以判断,不符合条件的返回-1
3.webrtc的VAD核心计算只支持8KHz采样率,所以当输入信号采样率为32KHz或者16KHz时都要先采样到8KHz4.在8KHz采样率上分为两个步骤
4.1 计算子带能量
子带分为80~250Hz,250~500Hz,500~1000Hz,1000~2000Hz,2000~3000Hz,3000~4000Hz需要分别计算上述子带的能量feature_vector4.2通过高斯混合模型分别计算语音和非语音的概率,使用假设检验的方法确定信号的类型
首先通过高斯模型计算假设检验中的H0和H1(c代码是用h0_test和h1_test表示),通过门限判决vadflag然后更新概率计算所需要的语音均值(speech_means)、噪声的均值(noise_means)、语音方差(speech_stds)和噪声方差(noise_stds)参考:
http://blog.csdn.net/u012931018/article/details/16903027
GitHub地址:
https://github.com/wiseman/py-webrtcvad
新闻热点
疑难解答