STFT、log-mel、MFCC 的区别
文章目录
- STFT
- log-mel
- MFCC
- 小结
STFT
这是最基础的一步。它揭示了音频信号在时间-频率域上的能量分布。
计算过程:
- 将连续的音频信号分割成短的重叠帧(通常 20-40ms 一帧,如 25ms,步长 10ms)。
- 对每一帧应用窗函数(如汉明窗)以减少频谱泄漏。
- 对每一帧进行离散傅里叶变换,得到该帧的复数频谱。
输出:
- 复数矩阵: [num_frames, num_freq_bins],包含幅度和相位信息。
- 通常使用幅度谱 (STFT): 相位信息在传统语音识别/LID中常被忽略(深度学习模型有时会尝试利用它)。幅度谱表示了每个频率bin在每个时间帧上的能量强度。
特点:
- 最原始、信息量最丰富的时频表示。
- 维度较高 (num_freq_bins 通常等于 FFT 点数的一半加一,如 257 for 512-point FFT)。
- 频率刻度是线性的 (Hz),不符合人耳对音高的非线性感知(人耳对低频差异更敏感)。
- 包含大量细节,但也包含很多对区分语音内容冗余甚至不利的信息(如精细的谐波结构、特定说话人特征)。
log-mel
在 STFT 幅度谱的基础上,模拟人耳听觉特性进行压缩和变换。
计算过程 (在 STFT 之后):
-
梅尔滤波器组:
- 设计一组三角形滤波器(数量通常 40-80,如 40)。这些滤波器在梅尔刻度上均匀分布。
- 梅尔刻度 (mel) 是近似人耳对音高感知的非线性频率刻度:mel = 2595 * log10(1 + freq/700)。
- 低频区域滤波器窄且密集(分辨率高),高频区域滤波器宽且稀疏(分辨率低)。
-
应用滤波器组:
- 将 STFT 幅度谱的每个频率 bin 的能量通过这组梅尔滤波器。每个滤波器的输出是该滤波器覆盖频率范围内的能量总和。结果是 [num_frames, num_mel_bins]。
-
取对数:
- 对每个梅尔 bin 的能量值取自然对数或常用对数(log(energy))。这一步非常重要:
- 压缩动态范围(人耳对声音强度的感知也是非线性的,近似对数)。
- 使特征分布更接近高斯分布,有利于后续建模。
- 对每个梅尔 bin 的能量值取自然对数或常用对数(log(energy))。这一步非常重要:
输出: [num_frames, num_mel_bins] 的矩阵。
特点:
- 大幅降低了维度 (从几百个线性频率 bin 降到几十个梅尔 bin)。
- 符合人耳听觉特性:梅尔刻度模拟频率感知,对数压缩模拟强度感知。这使得特征更接近人类听到声音的方式。
- 保留了语音中最具区分性的频谱包络信息(即共振峰的位置和形状,这是区分音素和语言的关键),同时抑制了部分细节(如精细的谐波结构、过高的频率分辨率)。
- 是深度学习语音处理(ASR, TTS, LID等)中最常用且效果通常优异的基础特征。
MFCC
是在 Log-Mel 频谱的基础上进行的进一步压缩和去相关。
计算过程 (在 Log-Mel 之后):
- 离散余弦变换: 对每一帧的 num_mel_bins 维 Log-Mel 特征向量进行 DCT (Discrete Cosine Transform)。这类似于傅里叶变换,但只使用余弦函数,且输出是实数。
- 保留系数: DCT 的输出称为倒谱系数 (Cepstral Coefficients)。这些系数按重要性(低频变化到高频变化)排序。
- 通常只保留前 12-13 个系数(有时加上第0个系数,代表帧能量)。
- 前几个系数(低频)包含了频谱包络(声道信息)的主要信息。
- 后面的系数(高频)包含了频谱细节(激励源信息,如声门脉冲形状、噪声特性)。
输出: [num_frames, num_ceps] 的矩阵(通常 num_ceps = 13)。
特点:
- 维度最低,计算和存储效率高。
- 高度去相关: DCT 使得各个 MFCC 维度之间的相关性很低,这对某些传统统计模型(如 GMM-HMM)非常有利,因为这些模型通常假设特征维度独立或低相关。
- 明确分离: 在倒谱域,理论上较低的倒谱系数代表声道滤波器的形状(频谱包络),较高的倒谱系数代表声源激励(频谱细节)。这对区分语音内容(主要依赖声道形状)和说话人/环境(可能依赖激励细节)有一定帮助。
- 丢失信息: 丢弃了高阶 DCT 系数意味着丢失了 Log-Mel 频谱中的部分信息(主要是高频细节)。虽然这些信息可能对区分语音内容冗余,但在深度神经网络时代,这些信息有时可能是有用的。
小结
原始音频 (时域)|vSTFT (时频域 - 线性频率, 高维, 复数)|| (取幅度谱)vSTFT幅度谱 (时频域 - 线性频率, 高维, 实数)|| (应用梅尔滤波器组 + 取对数)vLog-Mel Spectrogram (时频域 - 梅尔频率, 中维, 实数) <--- 深度学习时代最常用起点| || (可选: 直接输入模型) | (进行DCT)| v| MFCC (倒谱域, 低维, 实数) <--- 传统模型常用| |v v模型输入 模型输入