您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > MFCC梅尔倒谱参数及matlab代码
转发:有关MFCC梅尔倒谱参数的资料。内容:1.Mfcc梅尔倒谱参数参数知识2.mfcc的matlab代码1.在语音辨识(SpeechRecognition)和语者辨识(SpeakerRecognition)方面,最常用到的语音特征就是「梅尔倒频谱系数」(Mel-scaleFrequencyCepstralCoefficients,简称MFCC),此参数考虑到人耳对不同频率的感受程度,因此特别适合用在语音辨识。下面简单的介绍一下求解MFCC的过程。1.预强调(Pre-emphasis):将语音讯号s(n)通过一个高通滤波器。H(z)=1-a*(z-1)系数其中a介于0.9和1.0之间。若以时域的表达式来表示,预强调后的讯号s2(n)为s2(n)=s(n)-a*s(n-1)这个目的就是为了消除发声过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所压抑的高频部分。(另一种说法则是要突显在高频的共振峰。)2.音框化(Frameblocking):先将N个取样点集合成一个观测单位,称为音框(Frame),通常N的值是256或512,涵盖的时间约为20~30ms左右。为了避免相邻两音框的变化过大,所以我们会让两相邻因框之间有一段重迭区域,此重迭区域包含了M个取样点,通常M的值约是N的一半或1/3。通常语音辨识所用的音讯的取样频率为8KHz或16KHz,以8KHz来说,若音框长度为256个取样点,则对应的时间长度是256/8000*1000=32ms。3.汉明窗(Hammingwindow):将每一个音框(frame)乘上汉明窗,以增加音框左端和右端的连续性(请见下一个步骤的说明)。假设音框化的讯号为S(n),n=0,…N-1。N为frame的大小,那么乘上汉明窗后为S'(n)=S(n)*W(n),此W(n)形式如下:W(n,a)=(1-a)-a*cos(2pn/(N-1)),0≦n≦N-1??不同的a值会产生不同的汉明窗。一般我们都取a=0.46。4.快速傅利叶转换(FastFourierTransform,orFFT):由于讯号在时域(Timedomain)上的变化通常很难看出讯号的特性,所以通常将它转换成频域(Frequencydomain)上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每个音框还必需再经过FFT以得到在频谱上的能量分布。乘上汉明窗的主要目的,是要加强音框左端和右端的连续性,这是因为在进行FFT时,都是假设一个音框内的讯号是代表一个周期性讯号,如果这个周期性不存在,FFT会为了要符合左右端不连续的变化,而产生一些不存在原讯号的能量分布,造成分析上的误差。当然,如果我们在取音框时,能够使音框中的讯号就已经包含基本周期的整数倍,这时候的音框左右端就会是连续的,那就可以不需要乘上汉明窗了。但是在实作上,由于基本周期的计算会需要额外的时间,而且也容易算错,因此我们都用汉明窗来达到类似的效果。5.三角带通滤波器(TriangularBandpassFilters):将能量频谱能量乘以一组20个三角带通滤波器,求得每一个滤波器输出的对数能量(LogEnergy),共20个。必须注意的是:这20个三角带通滤波器在「梅尔频率」(MelFrequency)上是平均分布的,而梅尔频率和一般频率f的关系式如下:mel(f)=2595*log10(1+f/700)或是mel(f)=1125*ln(1+f/700)梅尔频率代表一般人耳对于频率的感受度,由此也可以看出人耳对于频率f的感受是呈对数变化的:在低频部分,人耳感受是比较敏锐。在高频部分,人耳的感受就会越来越粗糙。三角带通滤波器有两个主要目的:对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。(因此一段语音的音调或音高,是不会呈现在MFCC参数内,换句话说,以MFCC为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响。)降低资料量。6.离散余弦转换(Discretecosinetransform,orDCT):将上述的20个对数能量Ek带入离散余弦转换,求出L阶的Mel-scaleCepstrum参数,这里L通常取12。离散余弦转换公式如下:Cm=Sk=1Ncos[m*(k-0.5)*p/N]*Ek,m=1,2,...,L其中Ek是由前一个步骤所算出来的三角滤波器和频谱能量的内积值,这里N是三角滤波器的个数。由于之前作了FFT,所以采用DCT转换是期望能转回类似TimeDomain的情况来看,又称QuefrencyDomain,其实也就是Cepstrum(倒谱)。又因为之前采用Mel-Frequency来转换至梅尔频率,所以才称之Mel-scaleCepstrum。7.对数能量(Logenergy):一个音框的音量(即能量),也是语音的重要特征,而且非常容易计算。因此我们通常再加上一个音框的对数能量(定义为一个音框内讯号的平方和,再取以10为底的对数值,再乘以10),使得每一个音框基本的语音特征就有13维,包含了1个对数能量和12个倒频谱参数。(若要加入其它语音特征以测试辨识率,也可以在此阶段加入,这些常用的其它语音特征,包含音高、过零率、共振峰等。)8.差量倒频谱参数(Deltacepstrum):虽然已经求出13个特征参数,然而在实际应用于语音辨识时,我们通常会再加上差量倒频谱参数,以显示倒频谱参数对时间的变化。它的意义为倒频谱参数相对于时间的斜率,也就是代表倒频谱参数在时间上的动态变化,公式如下:△Cm(t)=[St=-MMCm(t+t)t]/[St=-MMt2]这里M的值一般是取2或3。因此,如果加上差量运算,就会产生26维的特征向量;如果再加上差量运算,就会产生39维的特征向量。一般我们在PC上进行的语音辨识,就是使用39维的特征向量。2.%mfccfunctionmfc=mfcc(x)%%%%%%%%%%%%%%%%%%%%%%%%%%对输入的语音序列x进行mfcc参数提取,返回mfcc参数和一阶差分mfcc参数,mel滤波器的阶数为24%fft变换长度为256,采样频率为8000HZ,对x256点分为一帧%%%%%%%%%%%%%%%%%%%%%%%%%%%%bank=melbankm(24,256,8000,0,0.5,'m');%归一化mel滤波器组参数bank=full(bank);bank=bank/max(bank((:));%DCT系数,12*24fork=1:12n=0:23;dctcoef(:,k)=cos((2*n+1)*k*pi/(2*24));end%归一化倒谱提升窗口w=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);%计算每帧的mfcc参数fori=1:size(xx,1)%y=xx(i,:);s=y'.*hamming(256);t=abs(fft(s));t=t.^2;%计算能量c1=dctcoef*log(bank*t(1:129));%dctcoef为dct系数,bank归一化mel滤波器组系数c2=c1.*w';%w为归一化倒谱提升窗口m(i,:)=c2';end%差分系数dtm=zeros(size(m));fori=3:size(m,1)-2;dtm(i,:)=-2*(i-2,:)-m(i-1,1)+2*m(i+2,:);enddtm=dtm/3;%合并mfcc参数和一阶差分mfcc参数mfc=[mdtm];%去除首尾两帧,因为这两帧的一阶差分参数为0mfc=mfc(3:size(m,1)-2,:);希望大家愉快!
本文标题:MFCC梅尔倒谱参数及matlab代码
链接地址:https://www.777doc.com/doc-6068179 .html