预加重:预加重的作用是提升高频。对于语音中发声的部分,比如元音,它的频谱中高频的能量在传播中有比较明显的衰减,因此采用预加重的方法对高频部分进行补偿。对于n时刻语音的采样值𝑥[𝑛],经过预加重处理后得到的输出: y [ n ] = x [ n ] − a ∗ x [ n − 1 ] y[n]=x[n] - a*x[n-1] y[n]=x[n]−a∗x[n−1] 预加重系数𝑎的取值一般在0.9到1之间。预加重相当于将信号通过一个高通滤波器,能够提升高频的能量,帮助提升识别的效果。
加窗:语音信号在时间上是不断变化的,是不平稳的信号。但是在比较短的时间段内,可以近似认为它是平稳的,可以通过短时的表现和它的分布特征判断出该短时语音属于某个音素(phone)或子音素(sub-phone)。通过加窗操作将语音分割成一个个小段,窗函数只在一些区域非零,而在其他区域都为零。常见的窗函数有矩形窗、汉明窗、汉宁窗等。假设窗的长度包括L个采样点。矩形窗的公式为: w r [ n ] = { 1 0 ≤ n ≤ L − 1 0 otherwise w_r[n]=\left\{\begin{array}{ll} 1 & 0 \leq n \leq L-1 \\ 0 & \text { otherwise } \end{array}\right. wr[n]={100≤n≤L−1 otherwise 汉明窗的公式为: w [ n ] = { 0.54 − 0.46 cos ( 2 π n L ) 0 ≤ n ≤ L − 1 0 otherwise w[n]=\left\{\begin{array}{ll} 0.54-0.46 \cos \left(\frac{2 \pi n}{L}\right) & 0 \leq n \leq L-1 \\ 0 & \text { otherwise } \end{array}\right. w[n]={0.54−0.46cos(L2πn)00≤n≤L−1 otherwise 假设n时刻,信号的值为𝑥[𝑛],窗函数的值为𝑤[𝑛],加窗之后得到: y [ n ] = x [ n ] ∗ w [ n ] y[n]=x[n]*w[n] y[n]=x[n]∗w[n] 窗函数非零区域所覆盖的时长称为帧长(frame size),两个连续的窗之间平移的时长称为帧移(frame shift)。在语音识别中常用的帧长帧移分别是25ms、10ms。帧长和帧移的概念可以形象地表示如图。
离散傅里叶变换:加窗分帧的下一步是离散傅里叶变换(DFT, Discrete FourierTransform)。傅里叶变换的作用是将信号从时域映射到频域。假设加窗后的采样点个数是N,那么对这N个点做DFT有: X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π N k n X[k]=\sum_{n=0}^{N-1} x[n] e^{-j 2 \frac{\pi}{N} k n} X[k]=n=0∑N−1x[n]e−j2Nπkn 由于傅里叶变换的因子具有对称性,利用傅里叶变换的因子的对称性可以快速计算离散时间傅里叶变换。快速计算DFT的算法被称为快速傅里叶变换(FFT, FastFourier Transform)。只有在采样点个数为2的指数时,才能应用快速傅里叶变换对DFT加速。一般当采样点不是2的指数时,补零成2的指数个点,再应用快速傅里叶变换计算。
梅尔滤波:FFT后得到了各个频率分量的幅度,将幅度平方就得到了各个频率分量的能量。人耳对不同频率的敏感程度不同,对低频比较敏感,对高频(高于1000赫兹)相对不敏感。为了模拟人耳的这种特性,将频率映射到梅尔频率,梅尔频率与频率之间的表示关系为: m e l ( f ) = 1127 ∗ l n ( 1 + f 700 ) mel(f)=1127*ln(1+\frac{f}{700}) mel(f)=1127∗ln(1+700f) 在频率小于1000赫兹时,近似于线性映射,当频率大于1000赫兹时,近似于对数映射。将频率映射到梅尔频率后,接入梅尔滤波器,每个滤波器输出该频带的能量。根据各个梅尔频带中的能量,得到一定维数的特征。特征的维数取决于梅尔滤波器组的滤波器的个数M。
c [ n ] = ∑ n = 0 N − 1 log ( ∣ ∑ n = 0 N − 1 x [ n ] e − j 2 π N k n ∣ ) e j 2 π N k n c[n]=\sum_{n=0}^{N-1} \log \left(\left|\sum_{n=0}^{N-1} x[n] e^{-j \frac{2 \pi}{N} k n}\right|\right) e^{j \frac{2 \pi}{N} k n} c[n]=n=0∑N−1log(∣∣∣∣∣n=0∑N−1x[n]e−jN2πkn∣∣∣∣∣)ejN2πkn\label{eq:cel}
差分和能量:对于每帧选取经过IDFT的前12维倒谱系数,接着将能量作为第13维特征。加窗后的时域信号通过计算可以得到能量特征,假设窗的长度从𝑡1开始,到𝑡2终止,那么该帧的能量为: Energy = ∑ t = t 1 t 2 x 2 [ t ] \text {Energy}=\sum_{t=t_{1}}^{t_{2}} x^{2}[t] Energy=t=t1∑t2x2[t] 特征能够表征一定的声学特性,那么特征在时间上的变化也能表征声学特性。在原始的13维特征上加入特征在时间上的变化,即计算delta和double delta。delta特征表示了帧与帧之间倒谱系数和能量的变化,double delta表示了帧与帧之间delta特征的变化。原始的倒谱系数和能量的MFCC特征表示为𝑐[𝑛],delta特征和double delta特征可以表示为: d e l t a [ n ] = c [ n + 1 ] − c [ n − 1 ] 2 delta[n]=\frac{c[n+1]-c[n-1]}{2} delta[n]=2c[n+1]−c[n−1] d o u b l e d e l t a [ n ] = d e l t a [ n + 1 ] − d e l t a [ n − 1 ] 2 doubledelta[n]=\frac{delta[n+1]-delta[n-1]}{2} doubledelta[n]=2delta[n+1]−delta[n−1] 最后得到的39维MFCC特征的组成如图所示。