顾名思义,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以上的信号。

提纲挈领webrtc之vad检测的更多相关文章

  1. WebRTC的VAD 过程解读

    摘要: 在上一篇的文档中,分析unimrcp中vad算法的诸多弊端,但是有没有一种更好的算法来取代呢.目前有两种方式 1. GMM   2. DNN. 其中鼎鼎大名的WebRTC VAD就是采用了GM ...

  2. 提纲挈领webrtc之NS(noise suppression)模块

    Noise suppression,就是大家说的降噪.这种降噪是把人声和非人声区分开来,把非人声当成噪声. 一段包含人声和噪声的音频经过该模块处理,从理论上讲,只剩下人声了. webrtc的NS在业内 ...

  3. 提纲挈领webrtc音频处理算法之写在前面的话

    最近工作用到了webrtc,发现webrtc是个宝库,里面有很多东西值得好好研究. 搜了这方面不少资料,发现介绍使用webrtc的不少,但是针对里面一些算法研究的 不多.特别是能把算法说的简洁明了的更 ...

  4. 常用有话帧检测技术(VAD)

    作者:桂. 时间:2017-05-31  17:43:22 链接:http://www.cnblogs.com/xingshansi/p/6925355.html 前言 总结一下基本的有话帧检测(Vo ...

  5. 单独编译使用WebRTC的音频处理模块

    块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...

  6. 【单独编译使用WebRTC的音频处理模块 - android】

    更新 [2015年2月15日] Bill 这段时间没有再关注 WebRTC 以及音频处理的相关信息,且我个人早已不再推荐单独编译 WebRTC 中的各个模块出来使用.实际上本文的参考价值已经很小了,甚 ...

  7. WebRTC中的NetEQ

    NetEQ使得WebRTC语音引擎能够快速且高解析度地适应不断变化的网络环境,确保了音质优美且缓冲延迟最小,其集成了自适应抖动控制以及丢包隐藏算法. WebRTC和NetEQ概述 WebRTC Web ...

  8. 替换unimrcp的VAD模块

    摘要: unimrcp vad 模块voice activity dector一直认为比较粗暴,而且unimrcp的社区也很久没有更新了.使用原始unimrcp如果只是用来做Demo演示,通过手动调整 ...

  9. 详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)

    前面我们介绍了 WebRTC 音频 3A 中的声学回声消除(AEC:Acoustic Echo Cancellation)的基本原理与优化方向,这一章我们接着聊另外一个 "A" - ...

随机推荐

  1. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

  2. Microsoft Visual Studio 打开代码出现乱码解决方案

    在用VS编写代码时,文本的字符集可能和编译器的字符集不同,在这种情况下代码会显示出乱码. 解决办法: 在VS的工具->选项里面找到"文本编辑器",勾选“自动检测不带签名的UT ...

  3. 教学服务系统设计之PHP后台设计

    项目简介 本项目是与@nameoverflow同学合作.该同学负责vue 前端的设计,我负责php后台的接口实现.本文将主要记录php后台. 本项目的Github地址:https://github.c ...

  4. 二,ESP8266 GPIO和SPI和定时器和串口

    让这个灯亮 我们写lua用这个软件 链接:http://pan.baidu.com/s/1kVN09cr 密码:pfv7 http://www.cnblogs.com/yangfengwu/p/624 ...

  5. css浮动Float

    核心:浮动元素会脱离文档流并向左/向右移动,直到碰到父元素或者另外一个浮动元素. float :left 向左浮动 right 向右浮动 none (默认)     inherit  继承父元素 fl ...

  6. [转载]webarchive文件转换成htm文件

    原文地址:webarchive文件转换成htm文件作者:xhbaxf Mac OS X系统带有文件转换功能,可以把webarchive文件变成html文件.方法是:   Step 1: 建立一个文件夹 ...

  7. DevTool开发者工具

    DevTool开发者工具 chrome的开发者工具可以说是十分强大了,是web开发者的一大利器,作为我个人而言平时用到的几率很大,相信大家也很常见,但是不要仅仅停留在点选元素看看样式的层面上哦,跟着我 ...

  8. 转:【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)

      Executor框架简介 在Java5之后,并发编程引入了一堆新的启动.调度和管理线程的API.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.coc ...

  9. 201521123084 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自 ...

  10. 团队作业4---第一次项目冲刺(ALpha)版本 第七天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 a.完成所有基础功能 b.正在进行测试调试 四.困难与问题 1.随着测试出现了大大小小的一些BUG,但是由于原来写的时候思维定 ...