顾名思义,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.c 该文件是用户调用的API函数,使用vad一般只需要调用该里面的函数即可。

使用函数:WebRtcVad_Create  WebRtcVad_Init 申请内存和初始化一些参数。

使用函数:WebRtcVad_set_mode 设置vad要处理的采样率,一般是8000或16000

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

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

有兴趣的话可以研究一下。这里不做展开。

  使用方法:

  初始化调用:

  WebRtcVad_Create();

  WebRtcVad_Init();

  WebRtcVad_set_mode();

  处理调用:

  WebRtcVad_Process();

注意事项:

  这里共有三种帧长可以用到,分别是80/10ms,160/20ms,240/30ms。其它采样率

的48k,32k,24k,16k会重采样到8k来计算VAD。之所以选择上述三种帧长度,是因为语

音信号是短时平稳信号,其在10ms~30ms之间可看成平稳信号,高斯马尔科夫等比较

的信号处理方法基于的前提是信号是平稳的,在10ms~30ms,平稳信号处理方法是可

以使用的。

  从vad的代码中可以看出,实际上,系统只处理默认10ms,20ms,30ms长度的数据,

其它长度的数据没有支持,笔者修改过可以支持其它在10ms-30ms之间长度的帧长度

发现也是可以的。

  vad检测共四种模式,用数字0~3来区分,激进程度与数值大小正相关。

0: Normal,1:low Bitrate, 2:Aggressive;3:Very Aggressive 可以根据实际的使用

在初始化的时候可以配置。

  自问自答:

  问题一:为什么子带是从80HZ开始的?

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

最新文章

  1. Kaiju: Fast and sensitive taxonomic classification for metagenomics
  2. 转载php在IIS中运行
  3. [前端插件]Bootstrap Table服务器分页与在线编辑应用总结
  4. POJ 3411 Paid Roads(SPFA || DFS)
  5. HDU 1757 A Simple Math Problem(矩阵快速幂)
  6. 图形用户界面(graphical user interface)
  7. 【原创】Java移位运算
  8. CAS Server 单点登录开源项目
  9. (转) 各种好用的插件 Xcode
  10. eclipse及Java常用问题及解决办法汇总
  11. hive drop 报错
  12. org.hibernate.NonUniqueObjectException
  13. 什么是DDoS攻击?DDoS防御的11种方针详解
  14. 幂率定律及绘制Power-law函数
  15. Vue2.0-token权限处理
  16. Python开发【笔记】:pymsyql 插入一条数据同时获取新插数据的自增id的两种方式
  17. ZOJ 2017 Quoit Design 经典分治!!! 最近点对问题
  18. ELK环境搭建
  19. 工具 | Axure基础操作 No.3
  20. iOS sort array 数组排序里面的对象

热门文章

  1. 开始学习.net的第二天
  2. MIT6.828课程JOS在macOS下的环境配置
  3. JTemplates 的使用
  4. Python中os和shutil模块实用方法集锦
  5. 第二次项目冲刺(Beta阶段)5.23
  6. 结对作业1----基于flask框架的四则运算生成器
  7. 201521123042《Java程序设计》 第7周学习总结
  8. 201521123092《Java程序设计》第七周学习总结
  9. 201521123034《Java程序设计》第十四周学习总结
  10. 201521123118《java程序与设计》第10周学习总结