梅尔频谱和 fbank:ASR 的输入为什么不是原始波形

2026-08-24

主流语音识别系统的输入不是原始音频波形,而是梅尔滤波器组特征(fbank)——把波形按二三十毫秒切成帧、每帧做短时傅里叶变换,再用一组按人耳感知刻度排布的滤波器压成一个低维向量。

这一步在整条链路里排第二,位于音频前处理之后、声学建模之前(四个环节的全貌见语音识别是怎么工作的)。它看起来只是格式转换,实际上是整个系统里信息压缩最狠的一刀。

先看这一刀砍掉了多少

16 kHz 采样的音频,每秒有 16000 个数字。特征提取之后,按 10 毫秒的帧移算,每秒只剩约 100 帧,每帧是一个几十维的向量。

数量级从”每秒上万”降到了”每秒上百”。被砍掉的主要是两类信息:波形的相位,以及频率轴上人耳根本分辨不出来的那些细节。留下的是各个频带上的能量随时间怎么变化——也就是决定”这句话说了什么”的那部分。

对识别任务来说,这不是有损压缩带来的遗憾,而是主动的减负。同一句话由不同的人在不同环境说出来,波形长得完全不一样,但梅尔特征上的模式要接近得多。让模型少学一点无关的东西,它就能把容量用在真正要区分的地方。

为什么要分帧

因为语音是非平稳信号

傅里叶变换那套工具的前提是信号在分析窗内性质稳定,可你说一句话的过程中,声道形状一直在变——从”啊”滑到”衣”,频谱结构完全不同。整段做一次变换,得到的是一锅粥。

但把时间尺度缩小到二三十毫秒,情况就变了:这段时间内声道来不及有大的变化,信号可以近似看作平稳。经典配置取 25 毫秒帧长,正好卡在这个”够短所以平稳、够长所以能看清低频”的平衡点上。

帧移为什么比帧长小——常见配置是每次只前进 10 毫秒,相邻帧之间有一大半重叠。这不是浪费,是为了避免边界处的信息断裂。如果帧与帧首尾相接不重叠,恰好跨在切分点上的音变过程就会被两边都截掉一半,谁也没看全。重叠相当于让相邻的观察窗互相接力。

为什么频率轴要按梅尔刻度重排

人耳对频率的分辨率不是线性的:低频区听得细,两个相差不多的低音你能分开;高频区听得粗,同样的绝对差值放到高频就分不出来了。

梅尔刻度就是把这个特性写成一条曲线,然后按它来排布滤波器——低频区滤波器密集、彼此靠得近,高频区滤波器稀疏、每个覆盖更宽的频带。落到每个滤波器里的能量加起来取对数,就得到 fbank 的一维。

滤波器的个数常见为 80,但这不是硬性规定,40 和 128 都有人用,取决于模型和任务。

这套做法的逻辑其实很朴素:识别的目标是还原”人听到了什么”。既然人耳在高频区本来就分辨不出细节,那在高频区保留高精度就是浪费——把精度预算按人耳的分辨能力分配,才是合理的资源分配。

有意思的是,语音合成那边也用梅尔频谱作为中间表示,声学模型先生成梅尔频谱,再交给声码器还原成波形,见声学模型和声码器怎么分工。识别和合成,一个把它当终点、一个把它当起点,用的是同一种表示。

fbank 和 MFCC 差在哪一步

这两个词经常被混用,实际关系很清楚:MFCC 是在 fbank 之后又多做了一次离散余弦变换(DCT)

fbankMFCC
是什么梅尔滤波器组能量取对数fbank 再做一次 DCT
多做了哪一步——离散余弦变换,用于去相关
主要盛行年代神经网络成为声学模型主力之后GMM-HMM 时代
现在还用不用主流选择仍在用,但多见于传统管道、需要低维特征或对齐工具的场景

为什么当年非要那一步 DCT:GMM-HMM 的声学模型通常用对角协方差的高斯建模,这等于假设特征各维之间不相关。而 fbank 相邻滤波器有重叠,各维之间天然高度相关,直接喂进去会违反模型假设。DCT 正是用来把相关性打散的。

为什么现在不做了:神经网络自己就能处理维度间的相关性,不需要你替它去相关。而 DCT 是一次有损的变换,为了迎合一个已经不存在的假设去丢一部分信息,不划算。所以神经网络时代的主流回到了 fbank。

判断口诀:看你的声学模型有没有”特征维度独立”这个假设。有,就需要 MFCC;没有,fbank 更省事也更完整。

那能不能直接喂原始波形

能。确实存在直接以原始波形为输入的模型,让网络自己学出前端滤波器,理论上可以学到比手工梅尔刻度更适配任务的东西。

主流工业管道仍以 fbank 为输入,原因是很现实的几条:

  • 梅尔特征把与文字无关的变化提前剥掉了,模型不必再花容量去学这件已知的事。
  • 特征提取是确定性的算法,便宜、可复现、可以离线预算好,训练时不必反复算。
  • 整个工具链——数据增强、对齐工具、各家开源实现——都是围绕帧级特征长出来的,换输入等于换掉一整套配套设施。

所以这里的正确表述是”主流”,不是”唯一”。判断某个系统吃什么,永远以它自己的文档为准,而不是以这篇文章为准。

常见问题

问:我送进去的音频采样率不对,会怎么样?

会直接影响特征。滤波器组是按建模采样率划分频带的,采样率不匹配时,同一个频率成分会落到错误的滤波器里,模型看到的模式整个偏掉。所以前处理阶段必须先重采样到模型训练时用的采样率,相关要求见音频送进 ASR 前要满足什么条件

问:帧长和帧移可以自己改吗?

原则上可以,但推理时必须和训练时保持一致。模型学到的是特定帧率下的时序模式,你把帧移从 10 毫秒改成 20 毫秒,等于把时间轴压了一半,模型看到的完全是另一种东西。这类参数属于”跟着模型走”,不属于可调优项。

问:既然梅尔特征丢掉了相位,为什么不影响识别?

因为”说了什么”这件事主要写在频谱的幅度包络里,相位对它的贡献很小。但换个任务结论就变了——要把频谱还原成能听的波形时,相位就很关键,这也是语音合成那边需要声码器专门处理的原因之一。

问:端到端模型是不是就不需要特征提取了?

不是。端到端指的是声学模型、发音词典、语言模型不再分开训练,不代表前面的特征提取被去掉了。多数端到端系统的输入仍然是 fbank,两件事不在一个层面上,详见端到端和传统混合系统的差别

相关阅读


本文讲的是语音特征提取的通用原理,不绑定某一个具体实现。 各家系统的帧长帧移、滤波器数量与是否使用 MFCC 差异很大,请以你所用系统的官方文档为准。 我们没有对文中提到的任何方案做过性能实测,因此不给准确率、速度一类的数字。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。