webrtc中的VAD 语音检测

一、简介

      VAD(Voice Activity Detection)算法的作用是检测是否是人的语音,它的使用范围极广,降噪,语音识别等领域都需要有vad检测。vad检测有很多方法,这里我们之介绍一下webrtc里面的vad检测。

  webrtc的vad检测原理是根据人声的频谱范围,把输入的频谱分成六个子带:80Hz~250Hz,250Hz~500Hz,500Hz~1K,1K~2K,2K~3K,3K~4K。软件中分别计算这六个子带的、能量。然后使用高斯模型的概率密度函数做运算,得出一个对数似然比函数。对数似然比分为全局和局部,全局是六个子带之加权之和,而局部是指每一个子带则是局部,所以语音判决会先判断子带,子带判断没有时会判断全局,只要有一方过了,就算有语音。

二、webrtc中的vad

  webrtc的vad检测代码比较简洁,核心代码只在三个文件中。

webrtc_vad.c 该文件是用户调用的API函数,使用vad一般只需要调用该里面的函数即可。

WebRtcVad_Create  WebRtcVad_Init 申请内存和初始化一些参数。

WebRtcVad_set_mode 设置vad要处理的采样率,一般是8000或16000

WebRtcVad_Process 核心函数,完成检测是否有人声的核心。

vad_core.c 该文件是webrtc_vad.c 文件中函数的实现代码,也是vad最深层的核心代码,使用方法:

  1、初始化调用:

  WebRtcVad_Create();

  WebRtcVad_Init();

  WebRtcVad_set_mode();

  2、处理调用:

  WebRtcVad_Process();

注意事项:

  webrtc可以支持10ms , 20ms, 30ms,语音检测。对应于语音可以使用160,320,480 个short 的sample去检测是否静音。

  vad检测共四种模式,用数字0~3来区分,激进程度与数值大小正相关。0: Normal,1:low Bitrate, 2:Aggressive;3:Very Aggressive 可以根据实际的使用在初始化的时候可以配置。

  

  PS:为什么子带是从80HZ开始的?

  答复:我国交流电标准是220V~50Hz,电源50Hz的干扰会混入麦克风采集到的数据中且物理震动也会带来影响,所以取了80Hz以上的信号。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值