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

本文内容均翻译自这篇博文:(该博主的相关文章都比较好,感兴趣的可以自行学习)
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方法必须对噪声具有较好的鲁棒性。

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)}} \]

猜你喜欢

转载自www.cnblogs.com/dream-and-truth/p/10683684.html
今日推荐