梅尔频谱图(Mel Spectrogram)和梅尔频率倒谱系数(MFCC)

Crazy learner 2024-09-06 08:31:01 阅读 73

梅尔频谱图(Mel Spectrogram)和梅尔频率倒谱系数(MFCC)之间有着密切的关系。MFCC可以看作是梅尔频谱图的进一步处理和特征提取。以下是两者之间关系的详细讲解:

1. 梅尔频谱图 (Mel Spectrogram)

梅尔频谱图是将音频信号的频谱表示转换到梅尔频率标度上,并通过一组梅尔滤波器对频谱进行加权平均后得到的结果。具体步骤如下:

音频信号预处理:

预加重 (Pre-emphasis)。

分帧 (Framing)。

加窗 (Windowing)。

计算功率谱 (Power Spectrum):

对每一帧信号进行快速傅里叶变换 (FFT)。

计算每一帧的功率谱。

应用梅尔滤波器组 (Mel Filter Bank):

使用一组三角形滤波器,频率分布在梅尔频率标度上。

将功率谱通过这些滤波器,得到每个滤波器的加权平均值。

对数压缩 (Log Compression):

对滤波器组输出的值取对数,以模拟人耳对声音强度的非线性感知。

梅尔频谱图的最终输出是对数梅尔频谱值的矩阵,行代表梅尔滤波器的数量,列代表时间帧。

2. 梅尔频率倒谱系数 (MFCC)

MFCC是基于梅尔频谱图进一步处理得到的一组特征系数。具体步骤如下:

计算梅尔频谱图:

按照上述步骤,计算音频信号的梅尔频谱图。

离散余弦变换 (DCT):

对梅尔频谱图的每一列(即每一时间帧的梅尔频率表示)进行离散余弦变换 (DCT)。

这一步的目的是将频谱压缩到更少的系数,并去除相关性,使得特征更加集中。

保留低阶系数:

通常只保留DCT变换后的前12到13个系数,这些系数包含了主要的频谱信息。

3. 两者之间的关系

输入:MFCC的计算基于梅尔频谱图。具体来说,梅尔频谱图是MFCC计算的中间结果。

处理流程:

音频信号 -> 预处理 -> 分帧 -> 加窗 -> FFT -> 功率谱 -> 梅尔滤波器组 -> 对数压缩 -> 梅尔频谱图。

梅尔频谱图 -> 离散余弦变换 (DCT) -> MFCC。

特征表示:

梅尔频谱图是一个二维矩阵,包含频率和时间维度的频谱信息。

MFCC是一个较小的特征向量(通常为每帧12到13个系数),这些系数是从梅尔频谱图中提取并压缩得到的。

4. 可视化对比

为了更直观地理解两者的关系,可以通过代码生成梅尔频谱图和MFCC的可视化图:

<code>import librosa

import librosa.display

import numpy as np

import matplotlib.pyplot as plt

# 加载音频文件

y, sr = librosa.load('audio.wav', sr=None)

# 计算梅尔频谱图

S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)

# 对梅尔频谱图取对数

log_S = librosa.power_to_db(S, ref=np.max)

# 计算MFCC

mfccs = librosa.feature.mfcc(S=log_S, n_mfcc=13)

# 可视化梅尔频谱图

plt.figure(figsize=(12, 6))

plt.subplot(2, 1, 1)

librosa.display.specshow(log_S, sr=sr, x_axis='time', y_axis='mel')code>

plt.title('Mel Spectrogram')

plt.colorbar(format='%+02.0f dB')code>

# 可视化MFCC

plt.subplot(2, 1, 2)

librosa.display.specshow(mfccs, sr=sr, x_axis='time')code>

plt.title('MFCC')

plt.colorbar()

plt.tight_layout()

plt.show()

总结

梅尔频谱图:提供了音频信号在梅尔频率标度上的频谱表示,捕捉了频率和时间的细节。

MFCC:通过对梅尔频谱图的离散余弦变换和压缩,提取了更紧凑和不相关的特征,用于进一步的音频分析和模式识别。

理解梅尔频谱图和MFCC之间的关系,有助于在实际应用中更有效地利用这些特征进行音频处理任务。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。