c语言梅尔谱图,声谱图,梅尔谱图

声谱图(spectrogram)

声音信号是一维信号,直观上只能看到时域信息,不能看到频域信息。通过傅里叶变换(FT)可以变换到频域,但是丢失了时域信息,无法看到时频关系。为了解决这个问题,产生了很多方法,短时傅里叶变换,小波等都是很常用的时频分析方法。

短时傅里叶变换(STFT),就是对短时的信号做傅里叶变换。原理如下:对一段长语音信号,分帧、加窗,再对每一帧做傅里叶变换,之后把每一帧的结果沿另一维度堆叠,得到一张图(类似于二维信号),这张图就是声谱图。

2767636875d4bfe0d842b5e95b93e2de.png

梅尔频谱

由于得到的声谱图较大,为了得到合适大小的声音特征,通常将它通过梅尔尺度滤波器组(Mel-scale filter banks),变为梅尔频谱。

频率的单位是HZ,人耳能听到的频率范围是20-20000HZ,但是人耳对HZ单位不是线性敏感,而是对低HZ敏感,对高HZ不敏感,将HZ频率转化为梅尔频率,则人耳对频率的感知度就变为线性。变换公式如下:

8be9702fe8c932a975ce17bfe583bae8.png

df3948acc6b998496161fb9866cf0d44.png

上图是HZ到Mel的映射关系图,由于二者为log关系,在频率较低时,Mel随HZ变化较快;当频率较高时,曲线斜率小,变化缓慢。

梅尔倒谱

梅尔倒谱就是在梅尔频谱上做倒谱分析(取对数,做DCT变换)。

import librosa

Mel_M = librosa.feature.mfcc(wav,sr=44100,n_mfcc=20)

librosa.feature.mfcc函数内部特征如下:

# -- Mel spectrogram and MFCCs -- #

def mfcc(y=None, sr=22050, S=None, n_mfcc=20, **kwargs):

if S is None:

S = logamplitude(melspectrogram(y=y, sr=sr, **kwargs))

return np.dot(filters.dct(n_mfcc, S.shape[0]), S)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值