这是符合CC 4.0 BY-SA版权合同的博主的原创文章。 请附上原文出处的链接和本声明。 正文链接: https://blog.csdn.net/u 013538664/article/details/18678861原本对语音特征参数MFCC的提取过程并不熟悉,最近要做实验要自己手动提取

一、MFCC概述

在语音识别和说话人识别中,最常用的语音特征是稳健的鸭倒谱系数从200Hz到5000Hz的声音信号对声音的清晰度有很大的影响。 如果两个不同大小的声音作用于人耳,高频成分的存在会影响低频成分的感受,从而难以听到。 这种现象叫做掩蔽效应。 由于低频声在耳蜗基底膜上传输的距离大于高频声,一般低音容易掩蔽高音,高音难以掩蔽低音。 低频下声音掩蔽的临界带宽小于高频。 因此,人们在从低频到高频的频带内按照临界带宽的大小从密集到稀疏放置一组带通滤波器,对输入信号进行滤波。 通过对每个带通滤波器输出的信号能量作为信号的基本特征,并进一步处理该特征可以作为语音的输入特征。 由于该特征不依赖于信号的性质,输入信号没有任何假设和限制,也利用了听觉模型的研究成果。 因此,与基于通道模型的LPCC相比,该参数具有更好的鲁邦性,更适合人耳听觉特性,而且即使信噪比降低,也具有良好的识别性能。

稳健的鸭倒谱系数(Mel-scalefrequencycepstralcoefficients,简称MFCC )是在Mel尺度频域提取的倒谱参数,Mel尺度描述人耳频率的非线性特性

式中的f为频率,单位为Hz。 下图显示了Mel频率与线性频率的关系。

图1 Mel频率与线性频率的关系

二、语音特征参数MFCC提取过程

基本流程:

图2 MFCC参数提取的基本流程

1 .预加重

预加重过程是使语音信号通过高通滤波器。

(1) ) ) )。

式中的值在0.9-1.0之间,我们通常取0.97。 预加重的目的是提升高频部分,使信号频谱平坦,保持在从低频到高频的整个频带中,可以用相同的信噪比求出频谱。 另外,这也是为了消除发生中的声带和嘴唇的效果,补偿声音信号被发音系统抑制的高频部分,也是为了强调高频的友好芹菜。

2 .分镜头

首先将n个采样点集中为一个观测单位,称为帧。 通常,n的值为256或512,覆盖时间约为20~30ms左右。 为了避免两个相邻帧之间的明显变化,两个相邻帧之间存在包含m个采样点的重叠区域。 通常,m的值约为n的1/2或1/3。 通常,用于声音识别声音信号的采样频率为8KHz或16KHz,以8KHz来说,帧长为256个采样点,对应的时间长为256/8000 1000=32ms。

3 .加窗在每个框架上加汉明窗,提高框架左边缘和右边缘的连续性。 将划分帧后的信号的大小表示为s(n )、n=0,1,……、N-1,n表示为帧,则挂在汉明窗之后,w ) n )的波形表示为:

(2) ) ) )。

哼唱窗口因a的值而异。 通常,a取0.46

4 .快速傅立叶变换

由于信号在时域的变换通常很难看到信号的特性,所以通常将其变换为频域的能量分布进行观察,不同的能量分布可以表示不同的语音特性。 因此,在登上汉明窗后,每帧必须进一步经过快速傅立叶变换得到频谱上的能量分布。 对按帧开窗的各帧信号进行快速傅立叶变换得到各帧的光谱。 将语音信号的频谱平方得到语音信号的功率谱。 语音信号的DFT如下

式中的x(n )是输入的语音信号,n表示傅立叶变换的分数。

5 .三角带通滤波器将能谱传递给Mel尺度三角形滤波器组,定义具有m个滤波器的滤波器组。 滤波器的个数和临界频带的个数接近。 采用的滤波器是三角滤波器,中心频率为。 m通常取22-26。 各f(m )之间的间隔根据m的值减少

小而缩小,随着m值的增大而增宽,如图所示:

图3 Mel频率滤波器组

三角滤波器的频率响应定义为:

(4) 式中:

三角带通滤波器有两个主要目的:

对频谱进行平滑化,并消除谐波的作用,突显原先语音的友好的芹菜。(因此一段语音的音调或音高,是不会呈现在MFCC 参数内,换句话说,以MFCC 为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响)此外,还可以降低运算量。

6.计算每个滤波器组输出的对数能量为 (5)
7.经离散余弦变换(DCT)得到MFCC系数
(6)
将上述的对数能量带入离散余弦变换,求出L阶的Mel-scale Cepstrum参数。L阶指MFCC系数阶数,通常取12-16。这里M是三角滤波器个数。
8.对数能量

此外,一帧的音量(即能量),也是语音的重要特征,而且非常容易计算。因此,通常再加上一帧的对数能量(定义:一帧内信号的平方和,再取以10为底的对数值,再乘以10)使得每一帧基本的语音特征就多了一维,包括一个对数能量和剩下的倒频谱参数。

注:若要加入其它语音特征以测试识别率,也可以在此阶段加入,这些常用的其它语音特征包含音高、过零率以及友好的芹菜等。

9.动态查分参数的提取(包括一阶差分和二阶差分)

标准的倒谱参数MFCC只反映了语音参数的静态特性,语音的动态特性可以用这些静态特征的差分谱来描述。实验证明:把动、静态特征结合起来才能有效提高系统的识别性能。差分参数的计算可以采用下面的公式:

(7)

式中,dt表示第t个一阶差分;Ct表示第t个倒谱系数;Q表示倒谱系数的阶数;K表示一阶导数的时间差,可取1或2。将上式中结果再代入就可以得到二阶差分的参数。

总结:

因此,MFCC的全部组成其实是由:

N维MFCC参数(N/3MFCC系数+ N/3一阶差分参数+ N/3二阶差分参数)+帧能量(此项可根据需求替换)

三、MATLAB实现方法(不含有关能量的维数)

注:在提取MFCC参数之前需要加载并使用VOICEBOX工具包

实现代码:

<span style=”font-size:18px;”>[x fs]=wavread(‘000.wav’);bank=melbankm(24,256,fs,0,0.4,’t’);%Mel滤波器的阶数为24,fft变换的长度为256,采样频率为16000Hz%归一化mel滤波器组系数bank=full(bank);bank=bank/max(bank(:));for k=1:12%归一化mel滤波器组系数n=0:23;dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));endw=1+6*sin(pi*[1:12]./12);%归一化倒谱提升窗口w=w/max(w);%预加重滤波器xx=double(x);xx=filter([1-0.9375],1,xx);%语音信号分帧xx=enframe(xx,256,80);%对x 256点分为一帧%计算每帧的MFCC参数for i=1:size(xx,1)y=xx(i,:);s=y’.*hamming(256);t=abs(fft(s));%fft快速傅立叶变换t=t.^2;c1=dctcoef*log(bank*t(1:129));c2=c1.*w’;m(i,:)=c2′;end%求取一阶差分系数dtm=zeros(size(m));for i=3:size(m,1)-2dtm(i,:)=-2*m(i-2,:)-m(i-1,:)+m(i+1,:)+2*m(i+2,:);enddtm=dtm/3;%求取二阶差分系数dtmm=zeros(size(dtm));for i=3:size(dtm,1)-2dtmm(i,:)=-2*dtm(i-2,:)-dtm(i-1,:)+dtm(i+1,:)+2*dtm(i+2,:);enddtmm=dtmm/3;%合并mfcc参数和一阶、二阶差分mfcc参数ccc=[m dtm dtmm];%去除首尾两帧,因为这两帧的一阶差分参数为0ccc=ccc(3:size(m,1)-2,:);ccc% subplot(2,1,1) % ccc_1=ccc(:,1);% plot(ccc_1);title(‘MFCC’);ylabel(‘幅值’);% [h,w]=size(ccc);% A=size(ccc);% subplot(212) % plot([1,w],A);% xlabel(‘维数’);% ylabel(‘幅值’);% title(‘维数与幅值的关系’)</span> 结果:

四、HTK实现

运行:

HCopy config 8.wav 8.mfcc

注:涉及mfcc的参数为:

TARGETKIND=MFCC_E_D_A

-目标是MFCC文件,以及energy(E),delta(D),delta-delta(A)

TARGETRATE=100000

-窗间隔为10ms

WINDOWSIZE=250000

-窗长为25ms

注:HTK中时间单位为100ns

ZMEANSOURCE=T

-将来源文件取zeromean,即去掉DC值

USEHAMMING=T

-使用hammingwindow

PREEMCOEF=0.97

-预加重系数0.97

NUMCHANS=31

-在MEL刻度下等分成31个频带

USEPOWER=F

-不使用c(0)参数

NUMCEPS=13

-最后使用13阶MFCC

CEPLIFTER= 22                     

-倒谱滤波系数

ENORMALISE=T

-窗的能量值做正规化

LOFREQ=200

-设定频带的下截止频率

HIFREQ=3500

-设定频带的上截止频率

注:电话线品质,如果麦克风的话,L为0,H为8000

DELTAWINDOW=2

ACCWINDOW=2

-设定delta和delta-delta的计算参数

此处config如下所示:

生成的mfcc文件可以使用HList工具查看

全部输出:

HList–h –o 000.mfcc > 000.txt

只输出mfcc便于使用:

HList–r 000.mfcc > 000.txt

以上即是语音特征参数MFCC提取过程的详细解释和具体实现。