语音信号MFCC的特征提取Matlab源码

语音信号处理MFCC提取的Matlab源码,

Matlab调试运行的时候注意添加语音工具箱voicebox查找路径。即,

MatlabFile->Set Path…->Add Folder… 选择你所解压的voicebox文件夹路径。

%function ccc=mfcc(x)   



%归一化mel滤波器组系数   



filename=input('input filename:','s');



[x,fs,bits]=wavread(filename);



bank=melbankm(24,256,fs,0,0.5,'m');   



bank=full(bank);   



bank=bank/max(bank(:));   



%DCT系数,12*24   



for k=1:12   



    n=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参数   



for i=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));   



    c2=c1.*w';   



    m(i,:)=c2';   



end   



%差分参数   



dtm=zeros(size(m));   



for i=3:size(m,1)-2   



    dtm(i,:)=-2*m(i-2,:)-m(i-1,:)+m(i+1,:)+2*m(i+2,:);   



end   



dtm=dtm/3;   



%合并mfcc参数和一阶差分mfcc参数   



ccc=[m dtm];   



%去除首位两帧,因为这两帧的一阶差分参数为0   



ccc=ccc(3:size(m,1)-2,:);



subplot(211)



ccc_1=ccc(:,1);



plot(ccc_1);title('MFCC');



% ylabel('幅值');



% title('一维数组及其幅值的关系')



% [h,w]=size(ccc);



% A=size(ccc);



% subplot(212)



% plot([1,w],A);



% xlabel('维数');



% ylabel('幅值');



% title('维数于幅值的关系')



return

 

你可能感兴趣的:(matlab)