MFCC/FBANK 特征提取

语音识别的过程中,第一步就是提取语音信号特征,而 MFCC (Mel Frequency Cepstral Coefficents) 作为一种语音信号特征,目前仍然广泛应用于各种语音识别系统中,FBANK 则常用于 DNN 语音识别中,并具有比 MFCC 更优异的性能,本文将详细介绍 MFCC/FBANK 特征提取的过程,并分析其特性差异。

1 背景

在详细介绍 MFCC/FBAK 特征提取过程之前,有必要先了解一些背景知识。

1. 语谱图(Spectrogram)

语谱图是一种非常直观的描述语音信号的方式。目前的语音信号处理基本都基于一个前提假设:语音信号是短时平稳的。因此,我们对语音信号的处理都是先分帧,以帧为单位来处理,语谱图的实现也不例外,下面介绍生产语谱图的详细过程:

  • 首先将一段语音信号分帧,并对帧信号做 FFT计算其频谱,如下图。
  • 我们先选择一帧的语音频谱,如下图左。然后将左边的频谱旋转90度。得到中间的图。最后将频谱分量的幅值映射为灰度图,即越黑表示幅值越高,如右图。
  • 将所有的帧的灰度图连在一起,我们就会得到一个随着时间变化的频谱图,也就是就是描述语音信号的spectrogram声谱图。

下面是一段语音信号的语谱图:

总结:

  1. 语谱图的横轴表示时间,纵轴表示频率,颜色表示频率分量的幅值
  2. 通过语谱图可以很直观的看到语音信号中的共振峰

1.2 倒谱分析 (Cepstrum Analysis)

语音信号可以看作是声门激励信号和声道冲激响应的卷积。将声门激励信号和声道冲激响应分离(即解卷积)出来单独分析对语音信号处理具有重要的意义。

解卷积有两种方法,一种是线性预测分析,一种是同态分析。对语音信号进行同态分析,实现了将卷积关系变换为求和关系的分离处理,并且得到其倒谱参数,所以同态分析也称为倒谱分析

对于语音信号\(x(n)\),它可以表示为两个信号的卷积:

对其做傅里叶变换,得到

如下图

我们可以这么理解,将原始的频谱\(X(k)\)由两部分组成:包络\(H(k)\)(信号低频成分)和频谱的细节\(E(k)\)(信号的高频细节)。\(X(k)\)的峰值就表示语音的主要频率成分,这些峰值被称为共振峰(formants),它是语音信号处理中的一个重要特征,而包络就是一条连接这些共振峰点的平滑曲线,那该如何将其分离呢?

我们对频域两边分别取对数:

然后再进行傅里叶反变换,从而可以得到

时域信号\(x^{‘}(n)\)即为倒谱,它和原始的时域信号\(x(n)\)不一样,它将原始时域信号的卷积关系转化为了线性加关系,此时只需要将倒谱通过一个低通滤波器即可获得包络部分对应的时域信号\(h^{‘}(n)\)。

1.3 梅尔频率(Mel-Frequency)

人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的。如果在语音识别系统中能模拟人类听觉感知处理特点,就有可能提高语音的识别率。

而梅尔频率就是一种基于人耳对等距的音高(pitch)变化的感官判断而定的非线性频率刻度,也就是说如果两段语音的Mel频率相差两倍,则人耳听起来两者的音调也相差两倍,它和普通频率的关系如下:

另外,实验表明人耳就像一个滤波器组一样,它只关注某些特定的频率分量(人的听觉对频率是有选择性的)。且对低频的分辨率高,对高频的分辨率低,也就是说在低频区的滤波器更密集集,在高频区滤波器分布更为稀疏。所以梅尔频率分析的滤波器组也是如此设计的: 而梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)就是先对时域信号进行傅里叶变换转换到频域,然后再利用梅尔频率刻度的滤波器组对应频域信号进行切分,最后转换到倒谱上。

2 MFCC/FBAK特征提取

MFCC 的特征提取过程可以详细分为7步,下面进行详细说明。

2.1 预加重

信号的传输过程中,高频分量衰减的快,低频分量衰减的小。语音信号的传播过程中,也是如此,声带的振动的激励信号传播经过声道、口、唇、空气,高频分量衰减的更快,预加重的目的就是为了补偿高频分量的过大衰减,凸显高频分量中的共振峰

一般通过传递函数为:

来实现预加重,其中 \(a\)为预加重系数,取值一般为:\(0.9<a<1.0\). 经过预加重处理的信号为:

2.2 分帧加窗

分帧的过程其实相当于加了矩形窗,但是加矩形窗后的信号经过傅里叶变换之后,会导致频谱泄露。因此为了平滑加窗后的信号,减小FFT 后的旁瓣大小,减小频谱的泄露,一般采用汉明窗对信号进行平滑处理:

2.3 快速傅里叶变换(FFT)

通过FFT 变换将时域信号变换为频域信号,并计算其幅度谱或功率谱,用于后续处理。

功率谱:

2.4 Mel 滤波

经过FFT 变换后的功率谱信号依然包含有很多的冗余信息,采用滤波器组,将频域信号分成若干个频段,对频域信号进行滤波,每个频段用一个值来表示,精简频域信息

而为了近似人耳的听觉特性,因此采用梅尔滤波器组进行滤波。具体实现上,将FFT得到的幅度谱,分别跟每一个滤波器进行频率相乘累加,得到的值即为该帧数据在在该滤波器对应频段的能量值。

2.5 取对数

根据前面倒谱分析的描述,对经过 Mel 滤波器组后的信号取对数,分离信号中的低频包络和高频细节,用于后续的倒谱计算。

此时输出的特征就是 FBANK。

2.6 离散余弦变换(DCT)

离散余弦变换:

DCT 具有很强的”能量集中”特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔科夫过程(Markov processes)的统计特性时,离散余弦变换的去相关性接近于K-L变换(Karhunen-Loève 变换–它具有最优的去相关性)的性能。

按照倒谱的定义,需要对取 log 后的信号在做傅里叶反变换然后通过低通滤波器获得最后的低频信号。MFCC一般通过 DCT 变换来得到最后的特征,原因有以下几点:

  • DCT 变换可以直接获取信号的低频信息。
  • 由于滤波器之间是有重叠的,所以前面的获得的能量值之间是具有相关性的,DCT可以对数据进行降维解相关。
  • 相比于傅里叶变换,离散余弦变换的结果没有虚部,更好计算。

2.7 差分

DCT 变换的结果只能反映语音信号中当前帧的信息,而语音信号在时域中是连续的,因此通过差分计算,可以得到语音信号的变化趋势,从而更好的描述它。MFCC 中,一般会采用一阶差分和二阶差分。具体的实现如下:

3 MFCC vs FBANK

MFCC 被广泛应用于 GMM-HMM 结构的语音识别系统中,而 FBANK 则常用于 DNN 结构的语音识别系统中,并且通常具有比 MFCC 更好的性能, 那么为什么会产生这种差异呢?从前文可以知道,MFCC 特征是在 FBANK 的基础上通过 DCT 变换得到的,因此我们可以从 DCT 变换的特性来分析,产生这种差异的原因主要有以下几点:

  • 在 GMM-HMM 框架下,通常会采用对角协方差矩阵对 GMM 进行建模,这也就要求特征空间的每一维相互独立,而 DCT 变换的解相关特性可以很好的满足 GMM 的独立性假设,但是 DNN 是鉴别性模型,对于输入特征并没有这样的限制。
  • FBANK 经 DCT 变换降维得到的 MFCC,而降维必然导致部分信息的丢失,而 DNN 本身就具有很强的特征提取能力,信息的丢失也就必然会导致性能的下降。

4 总结

MFCC/FBANK 特征提取的过程其实非常简单,但每一步都有其特有的目的,我们在学习的过程中,不仅要知其然,更有知其所以然,这也是我写下此文的目的,水平有限,若有不当之处,欢迎指正!

Reference

  1. 《实用语音识别基础》
  2. http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf
  3. http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/
  4. https://tspace.library.utoronto.ca/bitstream/1807/44123/1/Mohamed_Abdel-rahman_201406_PhD_thesis.pdf
  5. https://blog.csdn.net/xmdxcsj/article/details/51228791
  6. https://blog.csdn.net/wbgxx333/article/details/10020449