www.pudn.com > hmm--matlab.rar > mfcc.m
function ccc = mfcc(x)
%归一化mel滤波器组系数
bank = melbankm(24,256,8000,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,:);