1. 语音信号基础:声音的物理特性与数字信号处理入门

各位同学,欢迎来到《语音算法核心原理解析》的第一章。

说实话,做语音算法这些年,我见过太多人一上来就扎进深度学习模型里,结果连最基本的采样率、量化位数都搞不清楚。嗯,这就像盖楼不打地基——迟早要塌。今天我们就从最底层开始,把声音的物理本质和数字化的过程彻底讲明白。

1.1 声音的物理三要素:频率、振幅、相位

声音是什么?说白了就是空气的振动。这种振动传到我们耳朵里,大脑就把它解读成了声音。描述这种振动,只需要三个物理量:频率、振幅、相位。

核心概念速查:

  • 频率(Frequency):每秒振动的次数,单位 Hz。频率决定音高。人耳能听到的范围大约是 20 Hz ~ 20 kHz。
  • 振幅(Amplitude):振动的幅度大小,决定音量(响度)。振幅越大,声音越响。
  • 相位(Phase):振动在某个时刻所处的状态,单位是角度(°)或弧度(rad)。相位本身人耳不敏感,但多路声音的相位差会影响叠加效果。

我记得刚入行时,有个项目要做多麦克风阵列的波束成形。当时怎么调都调不好,最后发现是相位计算差了 180 度——两个麦克风的信号直接抵消了。你想想看,如果连相位都搞不清楚,这种问题你排查三天都未必能找到原因。

1.2 从模拟到数字:采样、量化、编码

现实世界的声音是连续的模拟信号,但计算机只能处理离散的数字信号。怎么把连续的变成离散的?三步走:采样、量化、编码。

1.2.1 采样(Sampling)

采样就是每隔一段时间,记录一次信号的瞬时值。这个时间间隔的倒数就是采样率。

我的经验:语音算法里最常见的采样率是 16 kHz(每秒 16000 个采样点)。为什么是 16 kHz?因为人声的主要能量集中在 8 kHz 以下,根据奈奎斯特定理,采样率至少要是最高频率的两倍。16 kHz 刚好覆盖 8 kHz 带宽,留了点余量。

这里有个经典问题:采样率太低会怎样?——混叠(Aliasing)。高频信号会被错误地映射成低频信号,听起来就是失真。我曾经在一个语音唤醒项目里,因为 ADC 的采样率设置错了,导致“你好”的“好”字高频部分全被折叠到了低频,模型死活识别不出来。排查了整整两天,最后发现是采样率配置少了个 0。

1.2.2 量化(Quantization)

采样得到了时间上离散的点,但每个点的幅度还是连续的。量化就是把连续的幅度值,映射到有限个离散的等级上。

量化位数(Bit Depth)决定了等级数量:

量化位数 等级数 动态范围(dB) 典型应用
8 bit 256 ~48 dB 早期电话、对讲机
16 bit 65536 ~96 dB CD 音质、语音算法标准
24 bit 16777216 ~144 dB 专业录音、后期制作

避坑指南:量化位数不是越高越好。16 bit 对于语音算法来说已经足够。我曾经见过有人用 24 bit 做语音识别,结果模型训练时间翻倍,精度几乎没有提升。算力是有成本的,别浪费在不需要的地方。

1.2.3 编码(Encoding)

量化之后,每个采样点就是一个整数。编码就是把这些整数按照某种格式存储或传输。最常见的格式是 PCM(脉冲编码调制),也就是直接把量化后的数值按顺序存起来。

举个例子,一段 16 kHz、16 bit、单声道的 PCM 音频,每秒的数据量就是:

16000 采样/秒 × 2 字节/采样 × 1 声道 = 32000 字节/秒 ≈ 31.25 KB/s

这个数据量其实不小。所以后来才有了各种压缩编码,比如 μ-law、A-law、Opus 等。但那是后面章节的内容,今天先把 PCM 搞明白。

1.3 时域与频域:看声音的两个视角

同一个声音信号,我们可以从两个完全不同的角度去看它:时域和频域。

  • 时域(Time Domain):横轴是时间,纵轴是幅度。我们看到的是一条随时间变化的波形曲线。
  • 频域(Frequency Domain):横轴是频率,纵轴是幅度(或能量)。我们看到的是信号由哪些频率成分组成。

时域直观,但信息量有限。比如一段语音里混入了 50 Hz 的工频噪声,你在时域波形上几乎看不出来,但在频域里一目了然——50 Hz 处会多出一根明显的谱线。

怎么从时域变到频域?最核心的工具就是傅里叶变换(Fourier Transform)。

一句话理解傅里叶变换:任何一个时域信号,都可以分解成若干个不同频率、不同幅度、不同相位的正弦波的叠加。傅里叶变换就是帮我们找出这些正弦波的“配方”。

实际算法里,我们用的是离散傅里叶变换(DFT)和它的快速版本 FFT。FFT 把计算复杂度从 O(N²) 降到了 O(N log N),这才让实时语音处理成为可能。

我建议你记住这个公式(不用背,理解就行):

X[k] = Σ x[n] · e^(-j·2π·k·n / N)   (n = 0 to N-1)

其中 x[n] 是时域采样点,X[k] 是频域的第 k 个频率分量。N 是 FFT 点数,通常取 512、1024 或 2048。

1.4 本章知识体系总览

下面这张图,把本章的核心知识点串在了一起。我建议你多看几遍,把每个节点之间的关系理清楚。

语音信号基础 · 知识体系 声音的物理特性 频率 (Hz) 振幅 (dB) 相位 (°) 模拟 → 数字:采样 · 量化 · 编码 时域分析 (波形) 频域分析 (频谱) 核心工具:傅里叶变换 (FFT / DFT) 采样率决定频域上限,量化位数决定动态范围,FFT 是连接时域与频域的桥梁

1.5 本章小结

这一章我们讲了三个核心内容:

  1. 声音的物理三要素:频率、振幅、相位。这是理解一切语音算法的基础。
  2. 数字化的三个步骤:采样、量化、编码。记住 16 kHz / 16 bit / PCM 这个黄金组合。
  3. 时域与频域:两个视角看信号,FFT 是连接它们的桥梁。

说实话,这些内容看起来简单,但真正吃透的人并不多。我见过不少做了两三年语音算法的工程师,遇到噪声问题还是只会调模型参数,根本想不到先去频域看看噪声的分布。嗯,基础打牢了,后面的路才能走得稳。