MFCC matlab code
%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(:)); �T系数,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