提纲挈领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.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检测的更多相关文章
- WebRTC的VAD 过程解读
摘要: 在上一篇的文档中,分析unimrcp中vad算法的诸多弊端,但是有没有一种更好的算法来取代呢.目前有两种方式 1. GMM 2. DNN. 其中鼎鼎大名的WebRTC VAD就是采用了GM ...
- 提纲挈领webrtc之NS(noise suppression)模块
Noise suppression,就是大家说的降噪.这种降噪是把人声和非人声区分开来,把非人声当成噪声. 一段包含人声和噪声的音频经过该模块处理,从理论上讲,只剩下人声了. webrtc的NS在业内 ...
- 提纲挈领webrtc音频处理算法之写在前面的话
最近工作用到了webrtc,发现webrtc是个宝库,里面有很多东西值得好好研究. 搜了这方面不少资料,发现介绍使用webrtc的不少,但是针对里面一些算法研究的 不多.特别是能把算法说的简洁明了的更 ...
- 常用有话帧检测技术(VAD)
作者:桂. 时间:2017-05-31 17:43:22 链接:http://www.cnblogs.com/xingshansi/p/6925355.html 前言 总结一下基本的有话帧检测(Vo ...
- 单独编译使用WebRTC的音频处理模块
块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...
- 【单独编译使用WebRTC的音频处理模块 - android】
更新 [2015年2月15日] Bill 这段时间没有再关注 WebRTC 以及音频处理的相关信息,且我个人早已不再推荐单独编译 WebRTC 中的各个模块出来使用.实际上本文的参考价值已经很小了,甚 ...
- WebRTC中的NetEQ
NetEQ使得WebRTC语音引擎能够快速且高解析度地适应不断变化的网络环境,确保了音质优美且缓冲延迟最小,其集成了自适应抖动控制以及丢包隐藏算法. WebRTC和NetEQ概述 WebRTC Web ...
- 替换unimrcp的VAD模块
摘要: unimrcp vad 模块voice activity dector一直认为比较粗暴,而且unimrcp的社区也很久没有更新了.使用原始unimrcp如果只是用来做Demo演示,通过手动调整 ...
- 详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)
前面我们介绍了 WebRTC 音频 3A 中的声学回声消除(AEC:Acoustic Echo Cancellation)的基本原理与优化方向,这一章我们接着聊另外一个 "A" - ...
随机推荐
- 微信录音文件上传到服务器以及amr转化成MP3格式
微信公众号音频接口开发 根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器. 上传语音接口 wx. ...
- 第1阶段——u-boot分析之make 100ask24x0_config指令(1)
本文学习目标: 掌握"make 100ask24x0_config"指令在Makefile和mkconfig文件中是怎么实现配置芯片选型 1.执行make 100a ...
- Linux系统下C语言如何调用scalapack中的函数
在并行计算中经常需要调用scalapck(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数. 注意:scalapack中的函数是用for ...
- poj 1149经典网络流构图
题意:m个猪圈,n个客户,每个客户给出选则猪圈的钥匙和需要购买猪的个数,其中每次客户购买时客户选则的猪圈数量可以相互更换,问最大购买数量. 思路:以客户作为除源点汇点之外的点,然后对于每个猪圈从源点连 ...
- 编程零基础应当如何开始学习 Python?
提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...
- POJ 3463 最(次)短路条数
Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9497 Accepted: 3340 Descr ...
- Java线程:线程栈模型
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型. 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶.线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运 ...
- [转载]历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX
原文地址:历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX-完全汉化版)下载作者:盖世天星 历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX-完全汉 ...
- 201521123044 《Java程序设计》第10周学习总结
1. 本章学习总结 2. 书面作业 本次PTA作业题集异常丶多线程 1.finally题目4-2 1.1 截图你的提交结果 1.2 4-2中finally中捕获异常需要注意什么? 1.无论try-ca ...
- 201521123109《java程序设计》第十周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1. finally 题目4-2 1.1 截图你的提交结果( ...