我们用通俗原理 + 数字算账 + 语音物理特性,一次性给你讲透,完全贴合 ASR 语音识别逻辑。
一、先搞懂:时域原始信号「维度太高」是什么意思
以标准语音:16k 采样率、16bit、单声道为例:
- 1 秒语音 =16000 个采样点
- 10 秒语音 =160000 个数值
维度太高的意思
机器如果直接把原始时域采样点当输入:
- 一秒就要输入16000 维向量(16K个采样点的数据)
- 模型参数爆炸、训练巨慢、算力扛不住(树莓派 / RK 都跑不动)
- 大量数值跟语义无关,纯浪费计算
直白说:原始时域点数太密、数据量太大,模型吞不下、也没必要吞。
二、为什么「冗余太大」?
1. 语音本身是短时平稳的
人说话有个物理特性:20ms~30ms 之内,声音的频率、音色基本不变
- 20ms 有320 个时域采样点(20ms * 1.6K =320点,时域320维度数据)
- 这 320 个点表达的是同一个语音状态
👉320 个点只需要一组频域特征(十几个频域点)就能代表剩下几百个时域采样点全是重复冗余信息
2. 时域相邻采样点高度相关
前后两个采样点数值差别极小,变化平滑,大量数据是重复、可预测的,没有新增信息量。
3. 人耳不敏感细节冗余
时域波形里包含大量人耳感知不到的高频微小波动,对 “识别说什么字” 完全没用,属于多余数据。
三、为什么「噪声多」?
1. 时域直接混杂所有噪声(时域之所以需要大量的冗余,就是因为时域信号包含了大量的噪声!!!)
原始 PCM 时域里一锅烩:
- 人声
- 环境噪音(风声、车流)
- 电路电磁干扰、麦头底噪
- 呼吸、唇齿杂音
所有噪声和有效语音混在同一个时域波形里,分不开。
2. 时域看不出哪些是噪声、哪些是语音
肉眼看波形就是乱糟糟起伏,无法直接区分:哪段频率是人声、哪段是噪声。
3. 转到频域才能分离噪声
- 人声集中在:300Hz~3400Hz(不排除这个频谱波动的噪声,这里的噪声就当成真实的语音,给语音进行增强)
- 低频干扰、高频白噪在频域里一目了然可以直接滤波切掉无用频率,时域做不到。
四、总结三句话(记住就能永久理解)
维度太高1 秒 16000 个采样点,数据量爆炸,模型根本没法直接用。
冗余太大20ms 内语音基本不变,几百个时域点表达同一个信息,大量重复浪费。
噪声太多时域人声 + 环境噪 + 电路噪混在一起,无法区分、没法过滤。
五、所以必须做的一步
时域 PCM → 分帧加窗 → FFT 转频域 → 提取 Mel/MFCC 特征
- 降维度:几百个时域点 → 几十个特征值
- 去冗余:用一组特征代表一整帧语音
- 滤噪声:频域直接剥离无关频率
这就是语音识别绝不直接用原始时域信号的根本原因。