1. 音频系统概述:从物理世界到数字信号

做音频系统这么多年,我始终觉得一个道理没变过——不懂物理的数字工程师,做不出好产品。你想想看,麦克风采集的是空气振动,DSP 处理的是 0 和 1,Codec 在中间做桥梁。这三者但凡有一个环节理解不到位,出来的声音就是「能响,但不好听」。

这一章,咱们先把地基打牢。我会从声音的物理特性讲起,再过渡到数字音频的三个核心参数,最后给你一张系统架构的全景图。嗯,这里的内容我做了十几年,每次带新人都是这么讲的。

1.1 声音的物理特性

声音的本质是什么?说白了就是介质中的机械振动。空气被振源推动,形成疏密波,传到我们耳朵里。这里面有两个核心物理量,你必须要刻在脑子里:

  • 频率(Frequency):单位 Hz,决定音高。人耳能听到的范围大约是 20Hz ~ 20kHz。低于 20Hz 叫次声波,高于 20kHz 叫超声波——别觉得跟你没关系,我在做车载音频项目时就遇到过,某些高频 PWM 干扰刚好落在 22kHz,人耳听不到,但后级放大器自激了,折腾了两周才定位到。
  • 振幅(Amplitude):决定响度。工程上常用 dB SPL(声压级)来衡量。0dB SPL 是人耳能听到的最小声,120dB SPL 是痛阈。做 Codec 设计时,动态范围能不能覆盖这个区间,直接决定了听感。

一个重要的关系:频率和波长成反比。高频波长短,绕射能力弱;低频波长长,绕射能力强。这就是为什么你在隔壁房间能听到低音炮的「嗡嗡」声,但听不清高音细节。做扬声器 EQ 时,这个物理限制你绕不开。

还有一个容易被忽略的概念——相位(Phase)。两个同频率的声波,相位差 180° 就会互相抵消。我在调试双麦克风降噪算法时,就因为麦克风安装孔位差了 0.5mm,导致低频相位匹配出了问题,降噪深度直接从 30dB 掉到 12dB。嗯,机械公差最终会变成声学问题。

1.2 数字音频基础

模拟信号要进 DSP,必须先数字化。这个过程由 Codec 的 ADC 完成。三个核心参数决定了数字音频的质量:采样率、位深、通道数。我习惯把它们称为「数字音频的三根柱子」。

1.2.1 采样率(Sample Rate)

采样率就是每秒采集多少个样本点。根据奈奎斯特定理,采样率必须大于信号最高频率的两倍,才能无失真重建。

采样率 常见用途 理论最高频率
8 kHz 传统电话、对讲机 4 kHz
16 kHz VoIP、语音识别 8 kHz
44.1 kHz CD 音质、音乐播放 22.05 kHz
48 kHz 电影、广播、专业音频 24 kHz
96 kHz 高解析音频、录音棚 48 kHz

我的经验:做消费类音频产品,48kHz 是黄金采样率。它兼容性好,算力开销适中。除非客户明确要求「高解析」,否则别轻易上 96kHz——DSP 的 MIPS 和内存消耗会翻倍,而听感提升微乎其微。我曾经在一个 TWS 耳机项目里硬上 96kHz,结果降噪算法跑不过来,最后不得不降回 48kHz。

1.2.2 位深(Bit Depth)

位深决定了每个采样点的精度。它直接决定了动态范围——也就是系统能同时处理的最大声和最小声的比值。

  • 16-bit:动态范围约 96dB。CD 标准,够用。
  • 24-bit:动态范围约 144dB。专业音频、录音棚标配。
  • 32-bit:动态范围约 192dB。主要用于内部处理,防止累加溢出。

为什么 24-bit 在嵌入式音频里这么流行?我举个例子。你在做音频算法时,要经过 EQ、DRC、混音等多个处理环节,每经过一次运算,量化噪声就会增加一点。16-bit 在输入端够用,但经过 5 级处理,噪声可能已经抬头了。24-bit 给你留了充足的「净空」。我个人习惯,ADC 用 24-bit,DSP 内部用 32-bit 定点或浮点,DAC 输出再转回 24-bit。这个链路我用了很多年,没出过问题。

1.2.3 通道数(Channels)

通道数就是同时传输的独立音频流数量。

  • 单声道(Mono):1 个通道。语音、对讲。
  • 立体声(Stereo):2 个通道。左右声道,音乐、电影。
  • 多声道(5.1 / 7.1 / Atmos):多个通道。环绕声、空间音频。

通道数每翻一倍,数据量就翻一倍。做系统设计时,总线带宽和 DMA 通道数是瓶颈。我在一个智能音箱项目里,需要同时处理 4 个麦克风输入 + 2 个扬声器输出,结果 I2S 总线只有 2 个通道,最后不得不改用 TDM 模式才搞定。

1.3 音频系统架构概览

好了,物理和数字基础讲完了。现在我们把它们拼起来,看看一个完整的音频系统长什么样。下面这张图是我自己画的标准架构,几乎所有嵌入式音频产品都逃不出这个框架。

音频系统架构概览 音频系统架构概览 麦克风 / Line In ADC (Codec) DSP 处理 DAC (Codec) 扬声器 / Line Out I2C / SPI 控制总线 架构说明: 1. 模拟信号经 ADC 转换为数字 PCM 流,送入 DSP 2. DSP 完成降噪、EQ、DRC 等算法处理 3. 处理后的数字信号经 DAC 还原为模拟信号驱动扬声器 4. I2C/SPI 总线负责配置 Codec 寄存器、控制 DSP 运行状态 5. 时钟源(MCLK / BCLK / LRCLK)为整个链路提供同步

这张图里,我特意把 Codec 拆成了 ADC 和 DAC 两个部分。为什么?因为在实际项目中,ADC 和 DAC 的指标往往是分开优化的。比如做语音唤醒的产品,ADC 的 SNR 和 THD+N 是核心;做音乐播放的产品,DAC 的动态范围和输出功率更关键。你想想看,一个 Codec 芯片里,ADC 和 DAC 可能共用参考电压和时钟,但它们的性能目标完全不同。

整个系统的数据流,我习惯用一句话概括:模拟进,数字算,模拟出。中间的数字域是 DSP 的天下,两端的模拟域是 Codec 的领地。而 I2C/SPI 控制总线,就是 CPU 和这些外设之间的「指挥通道」。

一个常见的坑:很多新手工程师会把 Codec 和 DSP 当成两个完全独立的芯片来设计,各自画 PCB、各自写驱动。结果联调时发现,Codec 的 MCLK 和 DSP 的音频时钟不同步,导致采样率偏移,声音变调。我曾经在一个项目里,Codec 用 12.288MHz 晶振,DSP 用 24.576MHz,理论上可以分频同步,但 PCB 走线长了 3cm,时钟抖动超标,最后不得不改板。记住:时钟树设计要放在系统架构的第一页。

1.4 小结

这一章我们覆盖了三块内容:声音的物理特性(频率、振幅、相位)、数字音频三要素(采样率、位深、通道数)、以及完整的系统架构。这些东西看起来基础,但我在面试高级工程师时,发现很多人对「采样率到底怎么选」「位深为什么是 24-bit 而不是 32-bit」说不出所以然。嗯,基础不牢,后面做算法优化和系统调试时会很痛苦。