function mfc=mfcc(x)
%%%%%%%%%%%%%%%%%%%%%%%%%
%对输入的语音序列x进行mfcc参数提取,返回mfcc参数和一阶差分mfcc参数,mel滤波器的阶数为24
%fft变换长度为256,采样频率为8000HZ,对x 256点分为一帧
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bank=melbankm(24,256,8000,0,0.5,'m')
%归一化mel滤波器组参数
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))%dctcoef为dct系数,bank归一化mel滤波器组系数
c2=c1.*w'%w为归一化倒谱提升窗口
m(i,:)=c2'
end
%差分系数
dtm=zeros(size(m))
for i=3:size(m,1)-2
dtm(i,:)=-2*(i-2,:)-m(i-1,1)+2*m(i+2,:)
end
dtm=dtm/3
%合并mfcc参数和一阶差分mfcc参数
mfc=[m dtm]
%去除首尾两帧,因为这两帧的一阶差分参数为0
mfc=mfc(3:size(m,1)-2,:)
首先你要保证你目录下面有melfb函数,这个函数应该不是matlab的系统函数,然后你的输入s应该是你的音频文件的矩阵,fs是melfb函数用的,估计是滤波频率啥的,没做过音频处理的程序,但这个函数你至少保证你有这些东西才能正常运行。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)