Mel spectrogram 梅尔谱
根据我们人类听觉的特性,我们对低频声音比较敏感,对高频声音没那么敏感
所以当声音频率线性增大时,频率越高,我们越难听出差别,因此不用线性谱而是对数谱
Mel谱包含三大特性:
- 时域-频域信息
- 感知相关的振幅信息
- 感知相关的频域信息
Mel谱的核心就是Mel-scale,一个对数尺度的对于频率感知线性变化的尺度
提取Mel谱的方法:
- 做STFT得到复数矩阵
- 将幅度转成分贝(db) 问:如果这里在mel spectrogram里面就把幅度转成db了,
那Log_mel_spectrogram跟它又有什么区别呢? - 将频率转到mel-scale
step 3 : 先选择mel bands的数目,一个mel band就像一系列跟感知有关的频率
构造mel filter banks:
- 将最低频率和最高频率转到mel尺度上
- 在我们的频率范围内等距取到(# bands)个点,这些点是不同mel band的中心频率
- 将我们取的点又转回Hertz
- 将这些中心频率点(float)取整到临近的frequency bin
- 生成三角滤波器
对语谱图使用mel filter banks
M = (# bands, framesize / 2 + 1)
Y = (framesize / 2 + 1, # frames)
Mel spectrogram = MY (# bands, # frames)
但如果只是简单理解的话,Mel谱只是把普通语谱图的频率从线性转到了mel尺度
mel尺度是一种对数尺度,人类对于频率的感知在mel尺度上更加敏感
Mel谱的各种应用:
- Audio 分类
- 自动情感识别
- 音乐流派分类
- 音乐乐器分类
- …
# Extract Mel spectrograms
mel_spectrogram = librosa.feature.melspectrogram(source, sr=sr1, n_fft=1024, hop_length=512, n_mels=128)
log_mel_spectrogram = librosa.power_to_db(mel_spectrogram)