mfcc1.m
上传用户:ay_070428
上传日期:2014-12-04
资源大小:11427k
文件大小:1k
源码类别:

语音合成与识别

开发平台:

Matlab

  1. function ccc = mfcc(x)
  2. % 归一化mel滤波器组系数
  3. bank=melbankm(24,256,8000,0,0.5,'m');
  4. bank=full(bank);
  5. bank=bank/max(bank(:));
  6. % DCT系数,12*24
  7. for k=1:12
  8.   n=0:23;
  9.   dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));
  10. end
  11. % 归一化倒谱提升窗口
  12. w = 1 + 6 * sin(pi * [1:12] ./ 12);
  13. w = w/max(w);
  14. % 预加重滤波器
  15. xx=double(x);
  16. xx=filter([1 -0.9375],1,xx);
  17. % 语音信号分帧
  18. xx=enframe(xx,256,80);
  19. % 计算每帧的MFCC参数
  20. for i=1:size(xx,1)
  21.   y = xx(i,:);
  22.   s = y' .* hamming(256);
  23.   t = abs(fft(s));
  24.   t = t.^2;
  25.   c1=dctcoef * log(bank * t(1:129));
  26.   c2 = c1.*w';
  27.   m(i,:)=c2';
  28. end
  29. %差分系数
  30. dtm = zeros(size(m));
  31. for i=3:size(m,1)-2
  32.   dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);
  33. end
  34. dtm = dtm / 3;
  35. %合并mfcc参数和一阶差分mfcc参数
  36. ccc = [m dtm];
  37. %去除首尾两帧,因为这两帧的一阶差分参数为0
  38. ccc = ccc(3:size(m,1)-2,:);