1.2.4 详细实现过程
分帧
把信号分成20-40ms的帧,通常会分成25ms的。如果语音信号的采样频率是16kHz的,那么一帧就有16000*25/1000=400个样本点。通常我们会让相邻的帧有重叠的部分,我们会每次移动10ms(而不是25ms),这就意味着相邻的帧重叠的样本为(25-10)/1000*16000=240个。这样,第一帧是前400个样本点,第二帧是第160个到560个样本点。如果最后一帧不够400个样本点,我们一般在后面补0。
后面的步骤是应用到每一帧上的,从每一帧抽取12个特征。先介绍一些数学记号:s(n)表示时域信号;si(n)是第i帧的数据,其中n的范围是1-400;当我们介绍DFT的时候,Si(k)表示的是第i帧的第k个复系数;Pi(k)是第i帧的功率谱。
对每帧信号进行DFT
S_i(k)=\sum_{n=1}^{N}s_i(n)h(n)e^{-j2\pi kn/N} 1 \le k \le N
其中h(n)是一个N点的窗函数(比如Hamming窗),K是DFT的长度。有了Si(k)我们就可以估计功率谱:
P_i(k)=\frac{1}{N}|S_i(k)|^2
上式得到的是周期图的功率谱估计。通常我们会进行512点的DFT并且保留前257个系数。
计算美尔滤波器组
这是一组大约20-40(通常26)个三角滤波器组,它会对上一步得到的周期图的功率谱估计进行滤波。我们的滤波器组由26个(滤波器)长度为257的向量组成,每个滤波器的257个值中大部分都是0,只有对于需要采集的频率范围才是非零。输入的257点的信号会通过26个滤波器,我们会计算通过每个滤波器的信号的能量。
计算过程如下图所示,最后我们会保留这26个滤波器的能量。图(a)是26个滤波器;图(b)是滤波后的信号;图(c)是其中的第8个滤波器,它只让某一频率范围的信号通过;图(d)通过它的信号的能量;图(e)是第20个滤波器;图(f)是通过它的信号的能量。
图:美尔滤波器组和加窗后的功率谱
能量取log
这一步非常简单,对26个能量取log。
DCT
对这26个点的信号进行DCT,得到26个倒谱系数(Cepstral Coefficents),最后我们保留2-13这12个数字,这12个数字就叫MFCC特征。对功率谱再做DCT的目的就是为了提取信号的包络。
学员评价