基于MFCC的音频特征的语音关键词识别

参考链接
我的代码地址

1 引言

       梅尔倒谱系数(Mel-scale FrequencyCepstral Coefficients,简称MFCC)。依据人的听觉实验结果来分析语音的频谱,MFCC分析依据的听觉机理有两个:

       1)第一梅尔刻度(Mel scale):人耳感知的声音频率和声音的实际频率并不是线性的,有下面公式
              从频率转换为梅尔刻度的公式为:fmel=2595∗log10(1+f/700)
              从梅尔回到频率:f=700(10fmel/2595−1)
       式中fmel是以梅尔(Mel)为单位的感知频域(简称梅尔频域),f是以Hz为单位的实际语音频率。fmel与f的关系曲线如下图1-1所示,若能将语音信号的频域变换为感知频域中,能更好的模拟听觉过程的处理。
基于MFCC的音频特征的语音关键词识别_第1张图片       2)第二临界带(Critical Band):把进入人耳的声音频率用临界带进行划分,将语音在频域上就被划分成一系列的频率群,组成了滤波器组,即Mel滤波器组。

       研究表明,人耳对不同频率的声波有不同的听觉敏感度。从200Hz到5000Hz的语音信号对语音的清晰度影响较大。两个响度不等的声音作用于人耳时,则响度较高的频率成分的存在会影响到对响度较低的频率成分的感受,使其变得不易察觉,这种现象称为掩蔽效应。由于频率较低的声音(低音)在内耳蜗基底膜上行波传递距离大于频率较高的声音(高音),因此低音容易掩蔽高音。低音掩蔽的临界带宽较高频要小。所以,人们从低频到高频这一段频带内按临界带宽的大小由密到疏安排一组带通滤波器,对输入信号进行滤波。将每个带通滤波器输出的信号能量作为信号的基本特征,对此特征经过进一步处理后就可以作为语音的输入特征。由于这种特征不依赖于信号的性质,对输入信号不做任何的假设和限制,又利用了听觉模型的研究成果。因此,这种参数比基于声道模型的LPCC相比具有更好的鲁棒性,更符合人耳的听觉特性,而且当信噪比降低时仍然具有较好的识别性能。

2 MFCC提取过程

MFCC语言特征提取流程如下图2-1所示。
基于MFCC的音频特征的语音关键词识别_第2张图片

2.1 语言信号输入

       本文采用的语音数据集为谷歌源的语音命令数据集,该数据集有30种短单词的 65000个长度1秒钟的语音,旨在帮助构建基础但有用的应用程序语音接口,包括常用单词「是」(Yes)、「否」(No)、数字和方向词。下载地址。为方便后期将该神经网络部署于微控制器端,故将原始采样率为16KHz的语音信号下采样为8KHz,则1s的语音经过下采样后包含8000个数据点。该MFCC语音特征提取部分代码有python版和c版,本章节末尾可查看。读取原始语音信号(no发音),时域图2-2如下所示。
基于MFCC的音频特征的语音关键词识别_第3张图片

2.2 预加重

       对信号应用预加重滤波器以放大高频,预加重滤波器在以下几个方面很有用:1)平衡频谱,因为高频通常与较低频率相比具有较小的幅度;2)避免在傅里叶变换操作操作过程中出现数值问题;3)改善信号 - 噪声比(SNR);4)消除发声过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,也为了突出高频的共振峰。预加重处理其实是将语音信号通过一个高通滤波器,其数学表达式如下式所示:
预加重其中滤波器系数(α)的通常为0.95或0.97,这里取0.97。no发音预加重之后的信号的时域图如下图2-3所示。
基于MFCC的音频特征的语音关键词识别_第4张图片

2.3 分帧

       在预加重之后,我们需要将信号分成短时帧。因此在大多数情况下,语音信号是非平稳的,对整个信号进行傅里叶变换是没有意义的,因为我们会随着时间的推移丢失信号的频率轮廓。语音信号是短时平稳信号。因此我们在短时帧上进行傅里叶变换,通过连接相邻帧来获得信号频率轮廓的良好近似。

       语音处理邻域的典型帧大小范围为20至40ms,为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,通常约为每帧语音的1/2或1/3或50%(+/-10%)。因本文处理信号的频率为8KHz,为方便后面的FFT计算,设置帧大小为32ms,帧偏移(重叠区域)为20ms。处理的数据为1s的8KHz的音频信号,则总共的语音长度L=8000,帧长为l=32x0.001x8000=256,步长s=20x0.001x8000=160,则总帧数T的计算公式如下式所示:
分帧之后总帧数计算经过对预加重的语音数据进行上述分帧操作后,共得到50帧数据,每帧的长度为256,如下图2-4所示。
基于MFCC的音频特征的语音关键词识别_第5张图片

2.4 加窗

       将信号分割成帧后,我们再对每个帧乘以一个窗函数,如Hamming窗口。以增加帧左端和右端的连续性。抵消FFT假设(数据是无限的),并减少频谱泄漏。本文加Hamming窗,其形式如下式所示:
基于MFCC的音频特征的语音关键词识别_第6张图片式中0≤n≤N-1,N为窗口长度(由2.3节帧长为256,则N=256),设置参数a=0.46。Hamming窗如下图2-5所示。
基于MFCC的音频特征的语音关键词识别_第7张图片       加窗运算的过程比较简单,就是那每一帧的每一个数据与Hamming窗上对应的数据相乘即可,注意Hamming窗口的长度与帧长度相等。

2.5 傅里叶变换(FFT)

       由于信号在时域上的变换通常很难看出信号的特性,通常对它做FFT变换转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。对分帧加窗后的各帧信号进行做一个N点FFT来计算频谱,也称为短时傅立叶变换(STFT),其中N通常为256或512,本文帧长度为256,故NFFT=256。离散傅里叶变换公式如下所示,式中1≤k≤K。
DFFT计算公式       经过傅里叶变换之后的到频谱,再对语音信号的频谱取模平方(取对数或者去平方,因为频率不可能为负,负值要舍去)得到语音信号的谱线能量,采用以下公式计算功率谱(周期图periodogram)。
功率谱计算公式
其中,xi∈X,Xi是信号X的第i帧。

2.6 Mel滤波

       计算Mel滤波器组,将功率谱通过一组Mel刻度(通常取40个滤波器,nfilt=40)的三角滤波器(triangular filters)来提取频带(frequency bands)。

       这个Mel滤波器组就像人类的听觉感知系统(耳朵),人耳只关注某些特定的频率分量(人的听觉对频率是有选择性的)。它对不同频率信号的灵敏度是不同的,换言之,它只让某些频率的信号通过,而压根就直接无视它不想感知的某些频率信号。但是这些滤波器在频率坐标轴上却不是统一分布的,在低频区域有很多的滤波器,他们分布比较密集,但在高频区域,滤波器的数目就变得比较少,分布很稀疏。因此Mel刻度的目的是模拟人耳对声音的非线性感知,在较低的频率下更具辨别力,在较高的频率下则不具辨别力。赫兹(f)和梅尔(m)之间进行转换公式如第一节引言中所述,采样率为8KHz,则信号最大频率为8/2KHz(香农采样定理),故mel尺度上频率最大为 。

       定义一个有M个三角滤波器的滤波器组(滤波器的个数和临界带的个数相近),M通常取22-40,26是标准,本文取nfilt = 40。滤波器组中的每个滤波器都是三角形的,中心频率为f(m) ,中心频率处的响应为1,并向0线性减小,直到达到两个相邻滤波器的中心频率,其中响应为0,各f(m)之间的间隔随着m值的增大而增宽,如图所示:
基于MFCC的音频特征的语音关键词识别_第8张图片三角滤波器的频率响应公式定义为:
基于MFCC的音频特征的语音关键词识别_第9张图片       对于2.5节FFT得到的幅度谱,分别跟每一个滤波器进行频率相乘累加,得到的值即为该帧数据在该滤波器对应频段的能量值。本文使用三角滤波器个数为40个,故此时可得到40个能量值。本文输入语音分帧后得到了50帧,上述FFT即Mel滤波均是对分帧后的每一帧进行计算。

2.7 梅尔频率倒谱系数(MFCCs)——DCT、正弦提升

       2.6节中计算的滤波器组系数是高度相关的,这在某些机器学习算法中可能是有问题的。因此,我们可以应用离散余弦变换(DCT)对滤波器组系数去相关处理,并产生滤波器组的压缩表示。通常,对于自动语音识别(ASR),保留所得到的个倒频谱系数2-13,其余部分被丢弃; 我们这里取 num_ceps = 12。丢弃其他系数的原因是它们代表了滤波器组系数的快速变化,并且这些精细的细节对自动语音识别(ASR)没有贡献。
L阶MFCC系数计算公式其中L阶指的是MFCC系数阶数,通常取2-13;M为三角滤波器个数。

       可以将正弦提升器(Liftering在倒谱域中进行过滤。 注意在谱图和倒谱图中分别使用filtering和liftering)应用于MFCC以去强调更高的MFCC,其已被证明可以改善噪声信号中的语音识别。

2.8 最大最小归一化

       归一化是机器学习中常用的数据预处理操作。为了平衡频谱并改善信噪比(SNR),选用较为简单的最大最小归一化策略进行数据预处理:
最大最小归一化计算公式

3 总结

       计算滤波器组所需的所有步骤都是由语音信号的性质和人类对这些信号的感知所驱动的。相反,计算MFCC所需的额外步骤是由一些机器学习算法的限制所驱动的。需要离散余弦变换(DCT)来对滤波器组系数去相关化,该过程也称为白化。特别是,当高斯混合模型 - 隐马尔可夫模型(GMMs-HMMs)非常受欢迎时,MFCC非常受欢迎,MFCC和GMM-HMM共同演化为自动语音识别(ASR)的标准方式。随着深度学习在语音系统中的出现,人们可能会质疑MFCC是否仍然是正确的选择,因为深度神经网络不太容易受到高度相关输入的影响,因此离散余弦变换(DCT)不再是必要的步骤。值得注意的是,离散余弦变换(DCT)是一种线性变换,因此在语音信号中丢弃一些高度非线性的信息是不可取的。

Filter Banks和MFCC对比:
       计算量:MFCC是在FBank的基础上进行的,所以MFCC的计算量更大
       特征区分度:FBank特征相关性较高(相邻滤波器组有重叠),MFCC具有更好的判别度,这也是在大多数语音识别论文中用的是MFCC,而不是FBank的原因。
       信息量:FBank特征的提取更多的是希望符合声音信号的本质,拟合人耳接收的特性。MFCC做了DCT去相关处理,因此Filter Banks包含比MFCC更多的信息。

       使用对角协方差矩阵的GMM由于忽略了不同特征维度的相关性,MFCC更适合用来做特征。

       DNN/CNN可以更好的利用Filter Banks特征的相关性,降低损失。从目前的趋势来看,因为神经网络的逐步发展,FBank特征越来越流行。

       质疑傅里叶变换是否是必要的操作是明智的。鉴于傅立叶变换本身也是线性运算,忽略它并尝试直接从时域中的信号中学习可能是有益的。实际上,最近的一些工作已经尝试过,并且报告了积极的结果。然而,傅立叶变换操作是很难学习的操作,可能会增加实现相同性能所需的数据量和模型复杂性。此外,在进行短时傅里叶变换(stft)时,我们假设信号在这一短时间内是平稳的,因此傅里叶变换的线性不会构成一个关键问题。

       如果机器学习算法不易受高度相关输入的影响,则使用Mel刻度滤波器组。如果机器学习算法易受相关输入的影响,则使用MFCCs。

4 代码实现结果比对

分别采用C和Python实现MFCC的计算过程,经对比结果一致。(部分比对)
基于MFCC的音频特征的语音关键词识别_第10张图片
基于MFCC的音频特征的语音关键词识别_第11张图片

你可能感兴趣的:(语音,深度学习,自然语言处理,神经网络,tensorflow)