博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebRtc 的VAD算法解析
阅读量:4184 次
发布时间:2019-05-26

本文共 873 字,大约阅读时间需要 2 分钟。

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

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

2、  WebRtcVad_CalculateFeatures函数计算特征,其特征包括6个频带的log能量,分别是80-250、250-500、500-1kHZ、1kHz-2kHz、2kHz -3kHz、3kHz -4kHz。使用分频方法计算这些特征。这六个特征放在向量feature_vector中,使用2维度的GMM模型来建模。

3、 WebRtcVad_GaussianProbability函数输入信号 、均值 、方差 ,计算高斯分别概率密度:P\left( x \right) = \frac{1}{\sigma }{e^{\frac{​{ - {​{\left( {x - \bar x} \right)}^2}}}{​{2{\sigma ^2}}}}}。注意这里少了一个 \frac{1}{​{\sqrt {2\pi } }}的系数,因为后面用到概率的时候都是相对量,能够抵消。例如似然比和后验概率。

4、 对于每一个特征 求对数似然比 L\left( {x\left( n \right),i} \right) = \log \left( {\frac{​{​{P_s}\left( {x\left( n \right),i} \right)}}{​{​{P_n}\left( {x\left( n \right),i} \right)}}} \right),一共6个

5、 计算加权对数似然比{L_s}\left( {x\left( n \right)} \right) = \sum\limits_{}^{} {​{K_i}L\left( {x\left( n \right),i} \right)}  。 {K_i}是似然比的加权系数。

6、 如果6个特征中有一个满足似然比超过了阈值就认为有语音

{F_{vad}}\left( n \right) = \left\{ {\begin{array}{ccccccccccccccc}{\begin{array}{ccccccccccccccc}1&{L\left( {x,i} \right) > {T_l}}\end{array}}\\{\begin{array}{ccccccccccccccc}0&{else}\end{array}}\end{array}} \right.

或者加权似然比超过了阈值

{F_{vad}}\left( n \right) = \left\{ {\begin{array}{ccccccccccccccc}{\begin{array}{ccccccccccccccc}1&{​{L_s}\left( x \right) > {T_a}}\end{array}}\\{\begin{array}{ccccccccccccccc}0&{else}\end{array}}\end{array}} \right.

7、 WebRtcVad_FindMinimum函数对每个特征feature,求出了100个帧里头的16个最小值。这些最小值都有一个年龄,最大不超过100,也就是说100帧之后失效。这个最小值用来更新噪声的均值。

8、 计算噪声加权均值 u\left( n \right) = {\alpha _{n1}}{u_{n1}}\left( {n - 1} \right) + {\alpha _{n2}}{u_{n2}}\left( {n - 1} \right)

9、 模型参数更新,包括语音和噪声的两个高斯分布均值和方差更新。其中j = 1,2 。注意噪声均值的更新使用了长期的最小值,也即公式的第三部分。该部分与VAD的标志位是无关的。跟新完后结束VAD计算。最后需要对均值和方差做相应的限制。

1)  噪声模型均值更新:

{u_{nj}}\left( n \right) = {u_{nj}}\left( {n - 1} \right) + \left[ {1 - {F_{vad}}\left( n \right)} \right]{K_{\Delta n}}\frac{​{​{\nabla _{​{u_{nj}}}}{p_n}\left( {x\left( n \right)} \right)}}{​{​{p_n}\left( {x\left( n \right)} \right)}} + {K_L}\left[ {​{x_{\min }}\left( n \right) - {u_n}\left( n \right)} \right]

2)  语音模型均值更新:

{u_{sj}}\left( n \right) = {u_{sj}}\left( {n - 1} \right) + {F_{vad}}\left( n \right){K_{\Delta s}}\frac{​{​{\nabla _{​{u_{sj}}}}{p_{\rm{s}}}\left( {x\left( n \right)} \right)}}{​{​{p_s}\left( {x\left( n \right)} \right)}}

3)  噪声模型方差更新:

{\sigma _{nj}}\left( n \right) = {\sigma _{nj}}\left( {n - 1} \right) + \left[ {1 - {F_{vad}}\left( n \right)} \right]{C_{\Delta n}}\frac{​{​{\nabla _{​{\sigma _{nj}}}}{p_n}\left( {x\left( n \right)} \right)}}{​{​{p_n}\left( {x\left( n \right)} \right)}}

4)  语音模型方差更新:

{\sigma _{sj}}\left( n \right) = {\sigma _{sj}}\left( {n - 1} \right) + {F_{vad}}\left( n \right){C_{\Delta n}}\frac{​{​{\nabla _{​{\sigma _{sj}}}}{p_s}\left( {x\left( n \right)} \right)}}{​{​{p_s}\left( {x\left( n \right)} \right)}}

转载地址:http://jfzoi.baihongyu.com/

你可能感兴趣的文章
一步一步教你如何在手机上看电子书
查看>>
Web服务新手入门
查看>>
SOA新手入门
查看>>
压力测试计划实例
查看>>
LINUX JDK 安装与环境变量设置
查看>>
Java Native Methods 例子
查看>>
一个js的接口测试器源代码
查看>>
ASP.NET 2.0中上传文件的简单实现
查看>>
IEEE802标准
查看>>
OSI模型简单描述
查看>>
如何将 Office 应用程序配置为在交互式用户帐户下运行
查看>>
TCP,IP详解,卷一:协议学习笔记之第三章IP:网际协议
查看>>
Linux命令之chmod详解
查看>>
Linux 安装 Elasticsearch运行及问题解决
查看>>
Linux入门看着一篇就文章就够了
查看>>
微服务发展历程
查看>>
业务基础环境搭建及api网关
查看>>
Dubbo启动检查、负载均衡、多协议支持
查看>>
Dubbo的异步调用
查看>>
Dubbo特性结果缓存、并发与连接控制
查看>>