MFCC的物理含义就是——在语音识别领域,将语音物理信息(频谱包络和细节)进行编码运算得到的一组特征向量。
MFCC提取过程:
1、首先对语音进行预处理。
预处理又包括对语音进行预加重、分帧、加窗。
2、快速傅里叶变换
对分帧加窗后的每帧语音数据进行fft变换。
3、计算谱线能量
对fft变换后的每帧信号取平方。
4、梅尔滤波器组滤波
将求出的每帧谱线能量谱与梅尔滤波器组相乘。
5、DCT变换
经过梅尔滤波器滤波后的每帧信号进行DCT(离散余弦变换),得到MFCC参数。
clc;
clear;
[x,fs]=audioread('diguashao.wav');%读取wav文件
%预加重y=x(i)-0.97*x(i-1)
for i=2:200000
y(i)=x(i)-0.97*x(i-1);
end
y=y';%对y取转置
figure(1);
subplot(2,1,1)
plot(x);
title( '原语音信号时域波形图' );
xlabel( '取样点' );ylabel( '幅度' )
subplot(2,1,2)
plot(y);
title( '预加重信号时域波形图' );
xlabel( '取样点' );ylabel( '幅度' )
对数据进行预加重:为了避免在后边的FFT操作中出现数值问题,需要加强一下高频信息,
因为一般高频能量比低频小,频率越高,介质对声能量的损耗越严重,预加重一定程度上弥补了高频部分的损耗,保护了声道信息。
分帧原理: 采用分帧的话,帧与帧之间的连贯性就会变差,于是我们每一帧的前N个采样点数据与前一帧的后N个采样点数据一样
S=enframe(y,1103,662);%分帧,对y进行分帧,x为没有预加重的语音序列
%每帧长度为1103个采样点,每帧之间非重叠部分为662个采样点
%1103=44100*0.025, 441=44100*0.01 662=1103-441
%根据计算,我们可以将108721个数据根据公式662*301+1103=200365
%可以将其分为301帧
对于整个采样点数据可以分为多少帧以及帧与帧之间交叉的采样点个数N,不是随便分的,一般来说帧长设置为25ms,帧移设置为10ms,其帧数和帧长数值如下:
帧数 = f s ⋅ 0.025 = 44100 ⋅ 0.025 = 1103 ( 个采样点 )
帧移 = f s ⋅ 0.0