MFCC特征值详解

看了网上的很多MFCC,依然没能够学号MFCC,因此糊了一段时间详细的看了下MFCC的内容。现在也算是对于MFCC有了更深入的理解了。

不管是语音识别还是其他的一系列的识别大体都分为三个步骤,1、输入信号的预处理2、特征值提取3、相关算法的识别与分类。MFCC算是语音识别中特征值提取一种方法,其他的还有LPCC等一系列的特征值提取方法。我在进行语音识别的过程中我采用的就是MFCC特征值的提取,在后面识别算法中我采用的是支持向量机算法。下面是MFCC在matlab上的完整代码,基本上每一句都有相应的注释。

[voice,fs]=wavread('1.wav');%读取WAV格式的语音信号;
%数据的前期处理,以及参数的设置为了后面第四与第五歩的计算
dvoice=double(voice);%转化为double类型;
voicematrix=melbankm(24,256,fs,0,0.5,'t');%24表示后面的三角滤波器是24阶,后面每帧是256点,0和0.5是默认值,t表示滤波器是三角滤波器;
%melbankm返回的是一个系数矩阵,包含滤波器的振幅;
voicematrix=full(voicematrix);%将稀疏矩阵转化为全矩阵,方便后面的计算;
voicematrix=voicematrix/max(voicematrix(:));%矩阵数据归一化,减少计算量;
%设置三角滤波器以及输出MFCC参数的阶数
for k=1:12 %设置MFCC的输出向量的阶数
    n=0:23;%三角滤波器的阶数
    dctcoef(k,:)=cos((2*n-1)*k*pi/(2*24));%DCT离散余弦变换的的公式
end
w=1+6*sin(pi*(1:12)./12);%归一化倒谱提升窗口
w=w/max(w);%归一化
%1:预处理
dvoice=filter([1-0.9375],1,dvoice);%预加重通过一个高通滤波器;
%2:分帧
dvoice=enframe(dvoice,256,80);%分帧处理,每一帧采样256点,帧移80;
for i=1:size(dvoice,1);%获得一共分的帧个数;
    tvoice=dvoice(i,:);%提取每一帧语音;
    %3:加汉明窗
    hvoice=tvoice'.*hamming(256);%每一帧语音加上汉明窗;
    %4:快速傅里叶变换
    fvoice=abs(fft(hvoice));%加窗后的没一帧语音进行fft快速傅里叶变换;
    fvoice=fvoice.^2;%语音谱取模平方得到功率谱;
    %5:三角带通滤波器滤波加上,离散余弦变换;
    mvoice=dctcoef*log(voicematrix*fvoice(1:129));
    mvoice2=mvoice.*w';%将12阶的系数同比例的缩小,减少运算量的
    mfccmatrix(i,:)=mvoice2';
    %mfccmatrix(i,:)=mvoice';
end
%6:一阶差分提取动态特征
dimfccmatrix=zeros(size(mfccmatrix));
for i=3:size(mfccmatrix,1)-2
    dimfccmatrix(i,:)=-2*mfccmatrix(i-2,:)-mfccmatrix(i-1,:)+mfccmatrix(i+1,:)+2*mfccmatrix(i+2,:);
end
dimfccmatrix=dimfccmatrix/3;
%7:二阶差分提取动态特征
ddimfccmatrix=zeros(size( dimfccmatrix));
for i=3:size(dimfccmatrix,1)-2
    ddimfccmatrix(i,:)=-2* dimfccmatrix(i-2,:)- dimfccmatrix(i-1,:)+ dimfccmatrix(i+1,:)+2* dimfccmatrix(i+2,:);
end
 ddimfccmatrix= dimfccmatrix/3;
 totalmatrix=[mfccmatrix, dimfccmatrix, ddimfccmatrix];%合并mfcc参数和动态参数;
 totalmatrix=totalmatrix(3:size(mfccmatrix,1)-2,:);%去除首尾两帧,这两帧差分为零;
 totalmatrix

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值