matlab生成语谱图,语谱图的生成

本文详细介绍了如何在MATLAB中进行MFCC(梅尔频率倒谱系数)特征提取,包括预加重、分帧、加窗、补零、FFT、梅尔滤波、取对数、DCT变换和归一化等步骤。通过代码实例展示从音频数据到语谱图的完整过程,并提供了MATLAB生成的语谱图结果。
摘要由CSDN通过智能技术生成

最近一直在做语音方面的工作,由于任务需要所以提取MFCC特征,并保存为语谱图,在以下的讲述中我并没有用到什么源码或者相关理论,但是它给了一个很好的诠释,让我在写自己的代码时有章可循,谢谢原著作者。

需要注意的是,下文中的data.txt的来源:

1.使用Matlab的函数audiorecorder进行录音

2.使用Matlab的函数getaudiodata获取音频数组

3.将获取的音频数组存入Data.txt文件。

MFCC参数提取步骤

——>预加重

——>分帧

——>对每一帧加窗

——>对每一帧补零

——>各帧信号的FFT变换及其功率谱

——>梅尔滤波(通过40个滤波器)

——>取对数

——>DCT变换

——>归一化

1.预加重

如果数据在低频的强度大于高频,就会不利于处理,因此需要通过一个传递函数为s[n]-a*s[n]的高通滤波器。滤去数据中的低频成分,使高频特性更加突现。

0818b9ca8b590ca3270a3433284dd417.png

2.分帧

分帧就是将N个采样点集合成一个观测单位。我们设定每帧涵盖的时间是25ms,因为采样率是16000,所以得到每帧的样本点个数是400。

另外,为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域。我们设定的重叠区域是15ms,所以就是每隔10ms取一帧。

0818b9ca8b590ca3270a3433284dd417.png

3.对每一帧加窗

分帧后马上进行FFT,由于转换时会将帧内信号当作周期信号处理,所以在帧的两个端点处会发生突变,转换出来的频谱与原信号频谱差别很大。所以要对每一帧加窗,使帧内信号作FFT时的两个端点处不会发生突变。

我们采用的窗是汉明窗:(M为帧长,即400)

0818b9ca8b590ca3270a3433284dd417.png

4.对每一帧补零

我们要对每一帧信号进行FFT,而FFT要求输入数据长度一定是2^K,现在一帧为400个采样点,所以补零至最接近的512位。

5.各帧信号的FFT变换及其功率谱

对分帧加窗后的各帧信号进行512点的FFT变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。

6.梅尔滤波(通过40个滤波器)

40个三角滤波器在MEL谱上均匀分布,每两个滤波器间有50%的重叠部分。

所以要先把实际频率转换成梅尔频率,实际频率最小为0Hz,最大为16000 / 2 = 8000Hz

0818b9ca8b590ca3270a3433284dd417.png

转换成梅尔频率后,我们要实现的是40个滤波器,所以计算这40个滤波器的梅尔频率分布,然后把梅尔频率转换成实际频率

0818b9ca8b590ca3270a3433284dd417.png

然后根据实际频率的数组,计算出f数组,公式如下(h数组就是40个滤波器的实际频率分布数组):

0818b9ca8b590ca3270a3433284dd417.png

最后根据以下公式,计算滤波器的输出(m为滤波器的个数)

0818b9ca8b590ca3270a3433284dd417.png

以下为10个滤波器的图:

0818b9ca8b590ca3270a3433284dd417.png

7.取对数

三角窗滤波器组的输出求取对数,可以得到近似于同态变换的结果。

8.DCT变换

对对数能量梅尔谱进行DCT变换,取前13维输出,得到梅尔倒谱。

公式为:

0818b9ca8b590ca3270a3433284dd417.png

9.归一化

对所有的梅尔倒谱归一化。

先求出所有倒谱向量的均值向量

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值