MFCC(Mel-frequency cepstral coefficients):梅尔频率倒谱系数。梅尔频率是基于人耳听觉特性提出来的, 它与Hz频率成非线性对应关系。梅尔频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征。主要有 以下几个步骤:预加重,分帧,加窗,快速傅里叶变换(FFT),梅尔滤波器组,离散余弦变换(DCT).
1. 预加重(Pre-Emphasis)
将数字语音信号s(n)通过一个高通滤波器(high pass filter),公式如下:
一般 α 取值为0.95/0.97。
作用:
1)加强高频信息,因为一般高频能量比低频小
2)避免FFT操作中的数值问题
3)可能增大信噪比(Signal to Noise Ratio)
注意的是,现代的系统可以将这步用mean normalization代替,详细解释,
2. 分帧(framing)
这里的帧(frame)代表一小段时间t的语音数据。帧由N个采样点组成。
我们要对语音数据做傅里叶变换,将信息从时域转化为频域。但是如果对整段语音做FFT,就会损失时序信息。因此,我们假设在很短的一段时间t内的频率信息不变,对长度为t的帧做傅里叶变换,就能得到对语音数据的频域和时域信息的适当表达。
一般来说,帧的长度取值区间在20ms到40ms之间,相邻帧有50%的重叠(overlapping)。
常用的参数设置: 帧长25ms,步长(stride)10ms(15ms的重叠)
帧长(T),语音数据采样频率(F )和帧的采样点(N)之间的关系:
3. 加窗(window)
将信号分帧后,我们将每一帧代入窗函数,窗外的值设定为0,其目的是消除各个帧两端可能会造成的信号不连续性(即谱泄露 spectral leakage)。常用的窗函数有方窗、汉明窗和汉宁窗等,根据窗函数的频域特性,常采用汉明窗(hamming window)。公式如下:
窗口长度为N, 0≤n≤N−1 , 该函数形状如下:
4. 快速傅里叶变换(Fast-Fourier-Transform)
对分帧加窗后的各帧信号进行N点傅里叶变换得到各帧的频谱。N为每帧的采样点,通常情况下N的值为256或512。这也叫STFT(Short-Time Fourier-Transform)。
其中 xi 是信号x的第i个帧。
这里需要先介绍下Nyquist频率,奈奎斯特频率(Nyquist频率)是离散信号系统采样频率的一半,因哈里·奈奎斯特(Harry Nyquist)或奈奎斯特-香农采样定理得名。采样定理指出,只要离散系统的奈奎斯特频率高于被采样信号的最高频率或带宽,就可以避免混叠现象。在语音系统中我通常采样率取16khz,而人发生的频率在300hz~3400hz之间,按照Nyquist频率的定义就有Nyquist频率等于8khz高于人发生的最高频率,满足Nyquist频率的限制条件。FFT就是根据Nyquist频率截取采样率的一半来计算,具体来说就是,假设一帧有512个采样点,傅里叶变换的点数也是512,经过FFT计算后输出的点数是257(N/2+1),其含义表示的是从0(Hz)到采样率/2(Hz)的N/2+1点频率的成分。也就是说在经过FFT计算时不仅把信号从时域转到了频域并且去除了高于被采样信号的最高频率的点的影响,同时也降低了维度。
5.梅尔滤波器组(Mel Filter Banks)
由于人耳对不同频率的敏感程度不同,且成非线性关系,因此我们将频谱按人耳敏感程度分为多个Mel滤波器组,在Mel刻度范围内,各个滤波器的中心频率是相等间隔的线性分布,但在频率范围不是相等间隔的,这个是由于频率与Mel频率转换的公式形成的,公式如下:
将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,一般用40个滤波器,每个滤波在中心频率的响应都是1,然后线性下降,一直到相邻三角滤波的中心频率处为0,如图所示:
6. 离散余弦变换(Discrete Cosine Transform)
滤波器组得到的系数是相关性很高的,因此我们用离散余弦变换(Discrete Cosine Transform)来去相关并且降维。一般来说,在自动语音识别(Automatic Speech Recognition)领域,保留得到的倒频谱系数的第2-13个,剩下的抛弃。
reference: