语音信号中的MFCC提取过程及matlab代码

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值