webrtc 音频VAD 检测

摘要:本文主要讲述VAD算法的提取和一些原理
参考文章:
http://billhoo.blog.51cto.com/2337751/1213801
http://blog.csdn.net/ssdzdk/article/details/42876011

1.模块提取

a. 代码目录,具体工程可以到百度云下载
这里写图片描述

b.把所有vad目录下的代码提出来,再把signal_processing下的代码提取出来编成静态库作为引用。

c. 工程在这里下载

2.代码解析

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

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

//检验音频帧长度,只支持10/20/30ms
  if (WebRtcVad_ValidRateAndFrameLength(fs, frame_length) != 0) {
    return -1;
  }
  if (fs == 48000) {
      vad = WebRtcVad_CalcVad48khz(self, audio_frame, frame_length);
   }else if (fs == 32000) {//重采样
    vad = WebRtcVad_CalcVad32khz(self, audio_frame, frame_length);
  } else if (fs == 16000) {
    vad = WebRtcVad_CalcVad16khz(self, audio_frame, frame_length);
  } else if (fs == 8000) {
    vad = WebRtcVad_CalcVad8khz(self, audio_frame, frame_length);
  }

2、WebRtcVad_CalculateFeatures函数计算特征,其特征包括6个频带的log能量,分别是80-250、250-500、500-1kHZ、1kHz-2kHz、2kHz -3kHz、3kHz -4kHz。使用分频方法计算这些特征。这六个特征放在向量feature_vector中,使用2维度的GMM模型来建模。
3、GmmProbability 通过高斯混合模型分别计算语音和非语音的概率,使用假设检验的方法确定信号的类型
GMM的噪声和语音模型如下:

   p(xk|z,rk)={1/sqrt(2*pi*sita^2)} * exp{ - (xk-uz) ^2/(2 * sita ^2 )} 
  1. 首先通过高斯模型计算假设检验中的H0和H1(C代码是用h0_test和h1_test表示),通过门限判决vadflag;
  2. 然后更新概率计算所需要的语音均值(speech_means)、噪声的均值(noise_means)、语音方差(speech_stds) 和噪声方差(noise_stds)。

DTX/CNG

该功能主要依靠:vad、DTX/非连续传输 、SID 静音描述silence insertion description 、CNG(舒适噪音生产)

编码器调用DTX判断 当背景噪声发生改变,编码器发送SID,否则不发送,SID结构如图所示,第一个字节必须是能量信息,后面的字节可选,写入量化的发射系数,WebRtcCng_Encode函数就是生成SID的。
这里写图片描述
图片:http://www.docin.com/p-906243283.html

     

做一些记录,向过世的雷神致敬!!愿天堂没有代码!!

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值