语音端点检测(Voice Activity Detection,VAD)

2023-11-06

本文内容均翻译自这篇博文:(该博主的相关文章都比较好,感兴趣的可以自行学习)
Voice Activity Detection(VAD) Tutorial

语音端点检测一般用于鉴别音频信号当中的语音出现(speech presence)和语音消失(speech absence)。这里将提供一个简单的VAD方法,当检测到语音时输出为1,否则,输出为0。

语音是否出现或者在背景噪声上是否平坦决定了VAD方法的检测是否稳定(The job of a VAD is to reliably determine if speech is present or not even in background noise)。在纯净背景噪声环境下(clean conditions),即使简单的能量检测方法也能够得到较好的语音检测效果,然而,一般情况下,我们得到的音频信号均会存在背景噪声。这就意味着,我们的VAD方法必须对噪声具有较好的鲁棒性。

1567740-20190410150842269-287278187.png

VAD的总体步骤如下:

  1. 将音频信号进行分帧处理;
  2. 从每一帧数据当中提取特征;
  3. 在一个已知语音和静默信号区域的数据帧集合上训练一个分类器;
  4. 对未知的分帧数据进行分类,判断其属于语音信号还是静默信号。

通常,一个VAD算法会将音频信号划分为发音部分(voiced)、未发音部分(unvoiced)和静默部分(silence)。这里介绍的特征能够很好的适用于这种分类任务,但是分类器的分类类别是3类而非两类(voiced speech,unvoiced speech and silence)。

预处理

第一步是将音频信号通过一个高通滤波器,截止频率大约为\(200Hz\)。这一步的目的是移除信号当中的直流偏置分量和一些低频噪声。虽然在低于\(200Hz\)的部分仍然有部分语音信息,但是不会对语音信号造成很大的影响。

在特征提取之前,我们首先要对音频信号进行长度为\(20-40ms\)的分帧,一般帧与帧之间的重叠为\(10ms\)。举例来说,如果我们的音频信号采样率为\(16kHz\),取窗口大小为\(25ms\),这种情况下,每一帧数据的所包含的数据点为:\(0.025*16000=400\)采样点。令帧之间重叠为\(10ms\)来计算,第一帧的数据起始点为\(sample 0\),第二帧数据的起始点为\(sample 160\)

特征提取

分帧完成之后,就可以对每一帧数据进行特征提取。在下面的讨论中,\(x(n)\)为音频数据的一帧数据,其中\(n\)的范围为\(1 \rightarrow L\)\(L\)为每一帧数据的长度)。对每一帧数据进行下面五种特征的提取:

  1. 对数帧能量(logarithm of frame energy):
    \[ E=log(\sum\limits_{n=1}^{L}x(n)^2) \]
  2. 过零率(zero crossing rate):每一帧数据穿过零点的次数
  3. 在延迟一个位置处标准化自相关系数(normalised autocorrelation coefficient at lag 1):
    \[ C=\frac{\sum\limits_{n=1}^{L-1}x(n)x(n-1)}{\sqrt{(\sum\limits_{n=1}^{L-1}x(n)^2)(\sum\limits_{n=1}^{L-1}x(n-1)^2)}} \]
  4. \(P_{th}\)阶线性预测的第一个系数
  5. \(P_{th}\)阶线性预测误差的对数

在本文中,我们使用\(P=12\),也就是说线性预测器的阶数为\(12\)

分类

上面介绍的特征,单一使用时无法有效的对音频信号进行端点检测,但是我们可以使用多种特征的组合,来有效的解决这一问题,并且降低错误分类的概率。
Rabiner使用一个推测(calculating)静默信号特征均值和方差;语音信号特征均值和方差的贝叶斯分类器来进行分类。为了对一个未知数据帧进行分类,我们计算该数据帧来自每一个标签数据的似然,假设数据分布服从多变量高斯分布。然后,选择最大似然所对应的模型作为该数据帧的标签。

我们也可以选择discriminative classifier,如:支持矢量机,神经网络等。这里有一个SVM库libsvm,能够简单的训练一个SVM分类器来用于语音信号和静默信号的分类。

训练

训练分类器需要足够的带标签数据,这就要求人们进行人工标注数据。具体的,在VAD应用当中,要求对音频信号中的语音部分和静默部分进行划分。一般来说,带标签数据越多,训练得到的分类器分类效果越好。一个重要的细节是:在训练数据当中的背景噪声要尽量与测试数据当中的背景噪声相匹配,否则会引起噪声失配问题。如果你无法对训练和测试数据当中的噪声类型进行确定,那么尽量使用多种噪声和多种\(SNR\)(信噪比)数据对分类器进行训练。

如果你想要应用VAD到一个实际应用当中,如:电话语音数据,很重要的一点是:进行训练的数据需要在相同的通道(channel)获取,训练所获取数据的channel和应用场景的channel相同。这样可以降低训练数据集和测试数据集的失配问题。一旦训练完成之后,你可以获得一个可以预测未知数据标签的模型。

Putting it All Together

模型训练完成之后,我们可以使用该模型对未知数据帧的标签进行预测。随着数据中噪声的增加,可以推测到,VAD模型的准确率会下降。

有时,预测标签在speech present和speech abscent之间剧烈震荡,这种情况是我们所不愿意看到的。在这种情况下,我们可以对预测标签使用中值滤波Median Filter进行处理。

转载于:https://www.cnblogs.com/dream-and-truth/p/10683684.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

语音端点检测(Voice Activity Detection,VAD) 的相关文章

随机推荐

  • 多线程编程技巧

    java中 多线程类需要继承Thread或实现Runnable接口 在Run函数中执行多线程代码 但是需要用Start 函数开始执行 多线程并行执行 执行的顺序取决于本地操作系统给谁分配系统资源 Runnable共享资源的方法 a 如果每个
  • [数据结构]--图(图的遍历,最小生成树,最短路径算法)

    前言 在这里 如果大家对图或者数据结构还不太熟悉 想找一个动态的生成过程来参考 这是一个不错的网站 知识框架 图的定义 在线性结构中 数据元素之间满足唯一的线性关系 每个数据元素 除第一个和最后一个外 只有一个直接前趋和一个直接后继 在树形
  • java入门到精通6版pdf_java从入门到精通第6章.pdf

    100 第 6 章 继承 第6 章 继 承 继承是面向对象编程的重要特征之一 顾名思义 继承就是在现有类的基础上构建新类 以满足新的要求 在继承过程中 新的类继承原来的方法和实例变量 并且能添加自己的方 法和实例变量 在本章中主要讲解的内容
  • 多个df文件之间含有重叠项的处理

    在进行数据分析时 为获取某个完整的panel数据往往需要将多个文件进行整合 而当这些文件之间存在重叠的时候 单纯的拼接难以得到好的结果 本文将以pandas重复值处理的若干函数着手 分析最好的文件重复值处理方法 首先 pandas中处理重复
  • CSS快速入门

    目录 一 概念 二 好处 三 CSS与html结合方式 1 内联样式 2 内部样式 3 外部样式 四 CSS语法 五 选择器 基础选择器 1 id选择器 2 类选择器 3 元素选择器 例子 扩展选择器 1 选择所有元素 2 并集选择器 3
  • qt 和java混合编程

    用QAndroidJniObject来做new一个对象 java Qt C File file new File QAndroidJniObject file java io File V File file new File tmp a
  • 大数据课程L2——网站流量项目的算法分析&&数据处理

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 了解网站流量项目的算法分析 了解网站流量项目的数据处理 一 项目的算法分析 1 概述 网站流量统计是改进网站服务的重要手段之一 通过获取用户在网站的行为 可以
  • [UTCTF 2020]Spectre

    题目 一段wav音频 Audacity 查看频谱图 放大即可发现flag Sonic Visualiser 上下左右拖动就找到flag了
  • 如何从数组对象中拿到指定的数据格式,数组对象数据处理

    一 原始数据 result name book4 value 3 children name 你的名字 value 3 name 言叶之庭 value 5 name book5 value 3 children name 白夜行 value
  • selenium中获取页面元素方法介绍以及定位页面元素

    1 通过浏览器驱动获取 单个元素页面元素的8种方式 通过 id获取元素 el driver find element by id id 通过 name获取元素 el driver find element by name name 通过 c
  • 六、04【Java 多线程】之并发编程

    多线程并发编程 并行和并发的概念我们之前有提到过 在回顾下 并发 多个任务在同一个 CPU 核上 按细分的时间片轮流 交替 执行 从逻辑上来看那些任务是同时执行 并行 单位时间内 多个处理器或多核处理器同时处理多个任务 是真正意义上的同时进
  • 【华为OD机试】求最多可以派出多少支团队(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 用数组代表每个人的能力 一个比赛活动要求参赛团队的最低能力值为N 每个团队可以由1人或2人组
  • 基于SpringBoot的疾病预防系统的设计与实现

    系统合集跳转 一 系统环境 运行环境 最好是java jdk 1 8 我们在这个平台上运行的 其他版本理论上也可以 IDE环境 Eclipse Myeclipse IDEA或者Spring Tool Suite都可以 tomcat环境 To
  • 一个div里有多个a标签,改变a标签的字体颜色方法

  • 抓包工具_Charles使用

    目录 1 Charles准备工作 2 Charles抓包原理 3 Charles抓包步骤 4 Charles抓包分析 5 Charles重发请求 1 Charles准备工作 Charles是一种抓包工具 和fiddler mitmproxy
  • tuts4you上lena‘s40个crackme(1)

    本来是不打算写文章了 因为懒 想以后通过录屏的形式保存一下自己学的路程 但奈何开学后一直没找到机会 在宿舍也不愿意大吼大叫的讲东西 只好再写写文章了 最近学了一些汇编语言和逆向工程 所以就想通过这40给题目来看一看成效 这篇文章是第一题 博
  • SpringMVC框架学习笔记整理-动力节点王鹤(无必详细)

    继续整理了Springmvc的学习笔记 动力节点王鹤老师讲的springmvc 分享给大家 看了这么多网上的视频 还是只有王鹤老师讲的能听明白 就喜欢讲的细的 而且老师条理很清晰 视频资源 https www bilibili com vi
  • 对MRTK中HandInteractionExamples实例的一些理解

    文章目录 前言 一 按钮 二 边界框 三 操作示例 四 滑动条 五 其它 前言 对HoloLens实例的一些浅陋的理解 大部分为官方自己解释 一 按钮 BoxCollider 按钮前板的Box Collider PressableButto
  • 欧莫,github一看就懂【纯小白】

    教程 一看就懂 Github基础教程 哔哩哔哩 bilibili 分享原因 一不小心刷到的 对小白来说真的很友好 因为我也被github上的英文吓到过 突然刷到这样简单直白的介绍 忍不住分享一波u 2 giehub免费加速 教程 手把手教你
  • 语音端点检测(Voice Activity Detection,VAD)

    本文内容均翻译自这篇博文 该博主的相关文章都比较好 感兴趣的可以自行学习 Voice Activity Detection VAD Tutorial 语音端点检测一般用于鉴别音频信号当中的语音出现 speech presence 和语音消失