当前位置: 首页 > news >正文

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))。这一步非常重要:
      • 压缩动态范围(人耳对声音强度的感知也是非线性的,近似对数)。
      • 使特征分布更接近高斯分布,有利于后续建模。

输出: [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模型输入                               模型输入
http://www.dtcms.com/a/327020.html

相关文章:

  • 梳理一下实现3D显示的途径有哪些?
  • QT(概述、基础函数、界面类、信号和槽)
  • Qt之QMetaEnum的简单使用(含源码和注释)
  • [激光原理与应用-253]:理论 - 几何光学 - 变焦镜头的组成原理及图示解析
  • excel-随笔记
  • 单例模式,动态代理,微服务原理
  • [特殊字符]深度解析 FastMCP:重构MCP应用开发的全维度革命
  • 当机械臂装上「智能大脑」:Deepoc具身智能模型如何重构传统自动化​
  • 力扣经典算法篇-50-单词规律(双哈希结构+正反向求解)
  • 【Golang】pprof 使用介绍:从数据采集到可视化分析
  • windows版本:Prometheus+Grafana(普罗米修斯+格拉法纳)监控 JVM
  • Webpack 介绍与使用的详细介绍
  • ChatGpt 5系列文章1——编码与智能体
  • 地图可视化实践录:显示地理区域图
  • 【Bug经验分享】由jsonObject-TypeReference引发的序列化问题
  • 完整多端口 Nginx Docker部署 + GitLab Runner注册及标签使用指南
  • Table Foundation Models: on knowledge pre-training for tabular learning(每日一文)
  • 安卓主题定制实践:17.45MB轻量级主题引擎技术解析
  • Text Animator for Unity快速上手
  • Milvus入门:开源向量数据库,解锁大模型时代的高效检索
  • 面试八股之从jvm层面深入解析Java中的synchronized关键字
  • 【AI绘画】Stable Diffusion webUI 常用功能使用技巧
  • JVM 内存大对象监控和优化实践
  • AT F-Intervals 题解
  • 【KO】大厂常见问题
  • 局域网远程控制/推流
  • 从裸机到云原生:Linux 操作系统实战进阶的“四维跃迁”
  • 嵌入式调试利器:STM32F429移植letter-shell实战
  • 【第四章:大模型(LLM)】05.LLM实战: 实现GPT2-(7)模型训练与微调
  • Apache 服务器基础配置与虚拟主机部署