matlab环境下MFCC程序

阅读: 评论:0

function ccc = mfcc(x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                function ccc=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)%size(xx,1)返回xx的维数
  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*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,:);

本文发布于:2023-05-11 17:31:28,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/95801.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:参数   差分   长度
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图