1.先通俗理解:
参考知乎作者:我的上铺叫路遥
与其关注特征向量或特征值的实际含义,不如关注为何这样的特征向量或特征值是有效的。
举个例子,我本科时的学号是15020140011,可以作为我在大学的一个特征值。但是这个学号有什么具体含义吗?如果我没记错的话,15表示入学年份是2015年,14表示我在本系(1专业)第4个小班,后面的11代表班里的编号。但是这个学号是十分有效的,它是我在大学里唯一的标识,机器只要通过这个学号可以识别我,识别率100%。
MFCC同样的道理,它的13个系数(也许还有13个一阶差分和13个二阶差分)都是通过离散余弦变换(DCT)而来,并取前13个系数。
DCT的作用,为了获得频谱的倒谱,倒谱的低频分量就是频谱的包络,倒谱的高频分量就是频谱的细节,这些都是语音识别上经过科学验证十分有效的语音物理信息。但语音识别是对机器来说的,所以我们必须对物理信息进行某种“编码”,得到的就是MFCC13维特征向量,你是否理解它不重要,只要机器能够识别就行了。
综上所述,我认为MFCC的物理含义就是——在语音识别领域,将语音物理信息(频谱包络和细节)进行编码运算得到的一组特征向量。
2.MFCC再认识
用从最初的几个倒谱系数(虚线)获得的频率包络覆盖一段浊音(实线)的频率图
MFCC的物理含义,简单地说可以理解为语言信号的能量在不同频率范围的分布。如果把计算出的系数的低位部分(一般是前12个)作反傅立叶变换(IFFT),就可以得到上图中虚线表示的信号的频谱包络,也就是表示声带特征的那一部分低频信息。
要理解为什么可以这么做,我们先看看倒谱的定义:一种信号的傅里叶变换谱经对数运算后再进行的傅里叶反变换(IFFT)。(IFFT其实就是对频谱再作一次FFT)
人的发声过程可以看作是肺里的气流通过声带这个线性系统。如果用e(t)表示声音的输入激励(音高),h(t)表示声带的响应(也即我们需要获取的特征),那么听到的语音信号为下面两幅图很好地解释了这个过程,语音信号的频谱可以看作是低频的包络和高频的细节相加,在得到倒谱系数后,我们只需要取低位的系数便可以得到包络信息。(这里的x[k]即为倒谱系数)
注意整个过程中我们并没有明确计算 e(t) 和 h(t) ,而是通过直接对语音信号x(t)作倒谱分析,再提取低位的倒谱系数,就可以获取我们想要的声道特征。
有意思的是,对数频谱作傅里叶反变换后的域被称为quefrency domain(对应频域frequency domain),quefrency domain和时域time domain类似但不完全一样。提取低位系数的操作称为low-time liftering(对应滤波操作filtering)。同样地,我们可以通过high-time liftering来获取激励特征。
当然在MFCC的实际计算中我们并没有作傅里叶反变换,而是先将频谱通过一组三角滤波器,再作离散余弦变换(DCT)得到MFCC系数。但其物理意义是一样的,即表示信号频谱的能量在不同频率区间的分布。每一个滤波器的作用就是得到对应频率区间的频谱能量,如果我们有26个三角滤波器,就会得到26个MFCC系数,这时候再取低位的系数就可以代表声道的特征。