音频信号基础:采样率与量化精度、奈奎斯特定理、时域与频域表示、分帧与加窗

各位同学,欢迎来到第二章。说实话,音频信号处理是整个语音识别前端的第一道关卡。你后面模型再厉害,如果前端信号处理没做好,那就是「垃圾进,垃圾出」。我见过太多项目,花了大把时间调模型,结果发现是采样率设错了,或者加窗方式不对——嗯,这种坑我自己也踩过。

这一章我们就把音频信号的几个核心概念彻底讲透。你理解了这些,后面做特征提取、降噪、端点检测,心里才有底。

2.1 采样率:把连续声音变成离散点

声音在自然界是连续的波形,但计算机只能处理离散的数字。采样,就是每隔一小段时间,记录一次声音的瞬时幅度值。

采样率(Sample Rate)就是每秒采样的次数,单位是 Hz。比如 16000 Hz,意思是一秒采 16000 个点。

采样率 常见场景 我的建议
8000 Hz 电话语音 够用,但高频信息丢失严重
16000 Hz 语音识别标准 首选,兼顾精度与计算量
44100 Hz 音乐 CD 语音识别没必要,浪费算力
48000 Hz 专业音频 除非做多模态,否则不推荐
个人经验:我做语音识别项目,90% 的情况都用 16000 Hz。这个采样率既能覆盖人声的主要频段(300-3400 Hz),又不会产生太多冗余数据。有一次客户非要上 44100 Hz,结果模型训练时间翻了三倍,准确率只提升了 0.2%——完全不值。

2.2 奈奎斯特定理:为什么不能随便降采样

你可能会问:采样率是不是越高越好?也不是。但采样率太低,问题就大了。

奈奎斯特定理说得很清楚:采样率必须大于信号最高频率的两倍,否则就会发生混叠(Aliasing)。

举个例子。人声最高频率大约 8000 Hz,那么采样率至少需要 16000 Hz。如果你用 8000 Hz 去采,那 4000 Hz 以上的频率就会「伪装」成低频信号混进来——你听到的声音就失真了。

我曾经踩过的坑:有一次做远场语音识别,麦克风阵列采集的原始信号是 48000 Hz,我为了省计算量直接降采样到 8000 Hz,没加抗混叠滤波器。结果模型识别率暴跌,后来才发现高频噪声全部折叠到了低频段,把语音特征彻底污染了。从那以后,我每次降采样之前必加低通滤波器。

实际工程中,我们通常留一点余量。比如语音用 16000 Hz(理论最低 16000 Hz 刚好够),但保险起见会用到 22050 Hz。不过我个人习惯还是 16000 Hz,配合一个截止频率在 7500 Hz 左右的抗混叠滤波器,效果很稳。

2.3 量化精度:每个采样点用多少比特

采样决定了「什么时候采」,量化决定了「采到的值用多少精度存」。

量化精度(Bit Depth)就是每个采样点用多少位二进制数表示。常见的有 8 bit、16 bit、24 bit、32 bit float。

  • 8 bit:256 个等级,噪声大,基本不用
  • 16 bit:65536 个等级,语音识别标准配置
  • 24 bit:16777216 个等级,动态范围更大
  • 32 bit float:浮点表示,适合中间处理,不适合存储

量化精度直接影响信噪比(SNR)。每增加 1 bit,理论上信噪比提升约 6 dB。16 bit 的理论动态范围是 96 dB,对于语音来说已经足够。

核心结论:语音识别前端,采样率 16000 Hz + 量化精度 16 bit 是最经典的组合。我做了这么多年,这个配置在绝大多数场景下都是最优解。

2.4 时域与频域:同一信号的两副面孔

音频信号有两种最基本的表示方式:时域和频域。

时域就是波形图,横轴是时间,纵轴是幅度。你看到的就是声音的「原始模样」——哪里声音大,哪里声音小,哪里是静音。

频域则是频谱图,横轴是频率,纵轴是能量。它告诉你声音里包含哪些频率成分,每个频率有多强。

从时域到频域,靠的是傅里叶变换(FFT)。这个变换本身不复杂,但你要理解它的物理意义:把一段信号分解成不同频率的正弦波之和。

我刚开始学的时候,总觉得时域更直观。但做语音识别,频域才是主角。为什么?因为人耳对频率的感知比对幅度的感知更敏感。而且语音的语义信息,主要藏在频率分布里,而不是波形形状里。

一个小技巧:当你拿到一段音频,先看时域波形判断有没有截幅、静音段;再看频谱判断噪声分布。两个视角结合,问题定位快得多。

2.5 分帧:语音信号不是平稳的,但短时是

语音信号是非平稳的——你的发音在不停变化。但有一个重要的假设:在极短的时间(10-30 毫秒)内,信号可以看作是平稳的。这就是短时平稳假设。

基于这个假设,我们把长语音切成一段段短片段,每段叫一帧(Frame)。

帧长一般取 20-30 毫秒。太短了,频率分辨率不够;太长了,平稳假设不成立。

帧移(Hop Size)是相邻两帧起始位置之间的间隔。通常取帧长的一半或三分之一,保证帧与帧之间有重叠,避免信息丢失。

参数 典型值 说明
帧长 25 ms(400 点 @16kHz) 兼顾频率分辨率和时间分辨率
帧移 10 ms(160 点 @16kHz) 60% 重叠,保证帧间连续性
每帧点数 512 或 1024 通常取 2 的幂,方便 FFT

2.6 加窗:避免频谱泄漏

直接对一帧信号做 FFT 会有一个问题:帧的边界处信号被「硬切」了,导致频谱中出现原本不存在的频率成分——这就是频谱泄漏。

解决办法是加窗。用一个窗函数(Window Function)乘以原始信号,让帧两端的幅度平滑地衰减到零。

常用的窗函数有几种:

  • 汉明窗(Hamming Window):语音识别最常用,旁瓣衰减适中
  • 汉宁窗(Hann Window):旁瓣衰减更快,但主瓣稍宽
  • 布莱克曼窗(Blackman Window):旁瓣衰减最大,但频率分辨率最低

我个人习惯用汉明窗。它在主瓣宽度和旁瓣衰减之间取得了很好的平衡,语音识别领域几乎成了默认选择。

加窗的数学形式:
// 汉明窗公式
w[n] = 0.54 - 0.46 * cos(2 * PI * n / (N - 1))

// 加窗操作
x_windowed[n] = x[n] * w[n]

注意,加窗是在分帧之后、FFT 之前做的。顺序不能乱。

2.7 知识体系总览

下面这张图把本章的核心概念串起来了。你可以看到,从原始声音到可处理的频域特征,中间经历了采样、量化、分帧、加窗、FFT 这几个关键步骤。

音频信号处理流程 模拟声音信号 采样 奈奎斯特定理 量化 16 bit 精度 分帧 25ms 帧长 加窗 汉明窗 FFT 时域→频域 频域特征 频谱 / 梅尔谱 核心原则:采样率 ≥ 2×最高频率 | 帧长 20-30ms | 加窗消除频谱泄漏 推荐配置:16000Hz / 16bit / 25ms帧长 / 10ms帧移 / 汉明窗

你看,从模拟声音到频域特征,每一步都有它的物理意义和工程考量。采样率决定了你能看到多高的频率,量化精度决定了信号的动态范围,分帧和加窗则是为了满足 FFT 的前提条件。

这些概念单独看都不难,但组合在一起,就是整个语音识别前端的基石。后面讲 MFCC、滤波器组、降噪算法,全都建立在这些基础之上。

一句话总结:采样率定边界,量化精度定质量,分帧加窗定输入,FFT 定特征。把这四步吃透了,前端算法你就掌握了 60%。