语音识别——MFCC理解( 二 )


语音识别——MFCC理解

文章插图
既然它那么重要,那我们就是需要把它提取出来!我们要提取的不仅仅是共振峰的位置,还得提取它们转变的过程 。所以我们提取的是频谱的包络( ) 。这包络就是一条连接这些共振峰点的平滑曲线 。
语音识别——MFCC理解

文章插图
我们可以这么理解,将原始的频谱由两部分组成:包络和频谱的细节 。这里用到的是对数频谱,所以单位是dB 。那现在我们需要把这两部分分离开,这样我们就可以得到包络了 。
语音识别——MFCC理解

文章插图
那怎么把他们分离开呢?也就是,怎么在给定log X[k]的基础上,求得log H[k] 和 log E[k]以满足log X[k] = log H[k] + log E[k]呢?
为了达到这个目标,我们需要Play aTrick 。这个Trick是什么呢?就是对频谱做FFT 。在频谱上做傅里叶变换就相当于逆傅里叶变换 FFT (IFFT) 。需要注意的一点是,我们是在频谱的对数域上面处理的,这也属于Trick的一部分 。这时候,在对数频谱上面做IFFT就相当于在一个伪频率(-)坐标轴上面描述信号 。
语音识别——MFCC理解

文章插图
由上面这个图我们可以看到,包络是主要是低频成分(这时候需要转变思维,这时候的横轴就不要看成是频率了,咱们可以看成时间),我们把它看成是一个每秒4个周期的正弦信号 。这样我们在伪坐标轴上面的4Hz的地方给它一个峰值 。而频谱的细节部分主要是高频 。我们把它看成是一个每秒100个周期的正弦信号 。这样我们在伪坐标轴上面的100Hz的地方给它一个峰值 。
把它俩叠加起来就是原来的频谱信号了 。
语音识别——MFCC理解

文章插图
在实际中咱们已经知道log X[k],所以我们可以得到了x[k] 。那么由图可以知道,h[k]是x[k]的低频部分,那么我们将x[k]通过一个低通滤波器就可以得到h[k]了!没错,到这里咱们就可以将它们分离开了,得到了我们想要的h[k],也就是频谱的包络 。
x[k]实际上就是倒谱(这个是一个新造出来的词,把频谱的单词的前面四个字母顺序倒过来就是倒谱的单词了) 。而我们所关心的h[k]就是倒谱的低频部分 。h[k]描述了频谱的包络,它在语音识别中被广泛用于描述特征 。
那现在总结下倒谱分析,它实际上是这样一个过程:
只考虑幅度就是:|X[k] |=|H[k]||E[k] |;
这实际上有个专业的名字叫做同态信号处理 。它的目的是将非线性问题转化为线性问题的处理方法 。对应上面,原来的语音信号实际上是一个卷性信号(声道相当于一个线性时不变系统,声音的产生可以理解为一个激励通过这个系统),第一步通过卷积将其变成了乘性信号(时域的卷积相当于频域的乘积) 。第二步通过取对数将乘性信号转化为加性信号,第三步进行逆变换,使其恢复为卷性信号 。这时候,虽然前后均是时域序列,但它们所处的离散时域显然不同,所以后者称为倒谱频域 。
总结下,倒谱()就是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的谱 。它的计算过程如下:
语音识别——MFCC理解

文章插图
三、Mel频率分析(Mel- )
好了,到这里,我们先看看我们刚才做了什么?给我们一段语音,我们可以得到了它的频谱包络(连接所有共振峰值点的平滑曲线)了 。但是,对于人类听觉感知的实验表明,人类听觉的感知只聚焦在某些特定的区域,而不是整个频谱包络 。