Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

15.6 MFCC:Mel 频率倒谱系数

MFCC(mel frequency cepstral coefficients,Mel 频率倒谱系数)是一种有用的波形表示,突出与语音单元检测相关的信号特征。MFCC 是一个 39 维特征向量,由以下部分组成:

12 个倒谱系数1 个能量系数
12 个倒谱差分系数1 个能量差分系数
12 个二阶倒谱差分系数1 个二阶能量差分系数

下面概述这些特征的计算方式;对更多细节感兴趣的读者,可以学习信号处理课程。

倒谱:逆离散傅里叶变换

MFCC 系数建立在倒谱之上。可以把倒谱理解为一种分离声源和滤波器的有用方法。回忆 15.4.6 节,语音波形由特定基频的声门声源波形通过声道产生;声道的形状具有特定的滤波特性。但声门声源的许多性质(如基频、声门脉冲的细节等)对于区分不同音段并不重要。对音段检测最有用的信息是滤波器,即声道的确切位置。如果知道声道的形状,就知道发出了哪个音段。这说明有用的音段检测特征应能设法对声源和滤波器进行反卷积(分离),只呈现声道滤波器。事实证明,倒谱就是实现这一目的的一种方法。

(a)

(b)

(c)

图 15.30 来自 Taylor(2009)的幅度频谱(a)、对数幅度频谱(b)和倒谱(c),经许可使用。两个频谱上都叠加了平滑频谱包络,以便更直观地观察频谱。

为简单起见,考虑以对数幅度频谱作为输入,并忽略 mel 缩放。倒谱可以理解为频谱的对数的频谱。这听起来可能令人困惑,但先从容易的部分开始:频谱的对数。也就是说,倒谱以一个标准幅度频谱开始,例如 Taylor(2009)图 15.30(a)中的元音频谱。然后取对数,即把幅度频谱中的每个幅度值替换为其对数,如图 15.30(b)所示。

下一步,把对数频谱想象成波形本身。换句话说,考虑图 15.30(b)中的对数频谱。假设去掉说明它是频谱的坐标轴标签(X 轴是频率),把它当作一个普通语音信号,X 轴表示时间。现在可以对这个“伪信号”的频谱说些什么?注意,这个波中有一个高频重复成分:沿 X 轴每 1000 个单位大约重复 8 次的小波,频率约为 120 Hz。这个高频成分由信号的基频造成,表示信号每个谐波处频谱中的小峰。此外,这个“伪信号”中还有一些低频成分;例如,包络或共振峰结构在窗口中有大约四个大峰,因此对应低得多的频率。

图 15.30(c)展示了倒谱,即上面描述的对数频谱的频谱。这个倒谱(cepstrum 一词由 spectrum 的前四个字母反转形成)以样本为 X 轴显示。这是因为对对数频谱求频谱后,我们离开了频谱的频域,回到了时域。事实证明,倒谱的正确单位是样本。

观察这个倒谱,可以看到约 120 处确实有一个大峰,对应 F0 并表示声门脉冲。X 轴较低位置还有其他成分,它们表示声道滤波器(舌头及其他发音器官的位置)。因此,如果关注音段检测,可以只使用较低的倒谱值;如果关注音高检测,则可以使用较高的倒谱值。

对于 MFCC 提取,我们通常只取前 12 个倒谱值。这 12 个系数只表示声道滤波器的信息,与声源信息清晰分离。

倒谱系数还有一个非常有用的性质:不同系数的方差往往不相关。频谱并没有这一性质,因为不同频带上的频谱系数彼此相关。

对于学习过信号处理的读者,更正式地说,倒谱定义为信号 DFT 的幅度取对数后再进行逆 DFT。因此,对于加窗语音帧 x[n]x[n]

c[n]=n=0N1log(n=0N1x[n]ej2πNkn)ej2πNkn(15.17)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}\tag{15.17}

能量 在上一节的 12 个倒谱系数之外,我们再加入第 13 个特征:帧能量。能量是音段检测的有用线索(例如,元音和咝音的能量比塞音大)。一帧中的能量是该帧样本功率在时间上的总和;因此,对于从时间样本 t1t_1t2t_2 的窗口中的信号 xx,能量为

Energy=t=t1t2x2[t](15.18)E n e r g y = \sum_ {t = t _ {1}} ^ {t _ {2}} x ^ {2} [ t ]\tag{15.18}

差分特征 我们还加入与倒谱特征随时间变化相关的特征。语音信号的变化,例如共振峰过渡处的斜率,或从塞音闭塞到塞音爆破的变化,也能为音段身份提供有用线索。对于 13 个特征(12 个倒谱特征加能量),分别加入一个差分或速度特征,以及一个二阶差分或加速度特征。13 个差分特征中的每个特征表示对应倒谱/能量特征在帧之间的变化;13 个二阶差分特征中的每个特征表示对应差分特征在帧之间的变化。这些差分可以简单地通过用当前帧的值减去前一帧的值来计算,但实践中通常拟合一个多项式,并取其一阶和二阶导数。