2、数字音频基础回顾:采样定理、量化、PCM编码、常见音频格式的帧结构

做多通道音频同步,说白了就是跟「时间」和「数据」打交道。如果连音频数据是怎么来的、长什么样都不清楚,那后面谈同步就是空中楼阁。这一节我们快速过一遍数字音频的核心基础,我会结合自己踩过的坑来讲,希望能帮你把底子打扎实。

2.1 采样定理:为什么是44.1kHz?

采样定理,也叫奈奎斯特-香农定理。它的核心就一句话:采样频率必须大于信号最高频率的两倍,否则就会发生混叠。

用人话说就是——你想录下20kHz的声音(人耳上限),采样率至少得40kHz以上。CD标准定44.1kHz,其实就是留了点余量。我当年刚入行时觉得这理论太简单,直到有一次做音频采集,发现高频乐器声全变成了奇怪的「吱吱」声……嗯,后来查出来是抗混叠滤波器没做好,采样率倒是够,但模拟前端没滤干净高频噪声。

关键公式:

fs ≥ 2 × fmax

其中 fs 是采样率,fmax 是信号最高频率。

实际工程中,我建议采样率至少留20%的余量。比如你要处理20kHz的信号,采样率别卡在40kHz,用48kHz或更高会更安全。多通道同步场景下,采样率的一致性尤其重要——两个设备采样率差0.1%,半小时后可能就错了几百个样本。

2.2 量化:精度与噪声的博弈

采样是把连续时间变成离散时间,量化则是把连续幅度变成离散数值。量化位深(bit depth)决定了动态范围。16bit能提供96dB的理论信噪比,24bit则是144dB。

我个人的经验是:多通道同步录音,至少用24bit。为什么?因为多通道系统里,每个通道的增益、线缆长度、前级噪声都不一样。16bit的量化噪声在后期做增益调整时很容易暴露出来,尤其是弱信号通道。我曾经在一个8通道阵列项目里吃过这个亏——16bit录的,后期想提升某个通道的电平,结果底噪像潮水一样涌上来。

位深 动态范围 常见用途
8bit 48 dB 语音、对讲机
16bit 96 dB CD、普通录音
24bit 144 dB 专业录音、多通道系统
32bit float 理论无限 后期处理、DAW内部

避坑指南:量化时要注意「削波」。我曾经在调试多通道系统时,某个通道的峰值刚好卡在0dBFS,结果量化后高频细节全没了。建议留3-6dB的headroom。

2.3 PCM编码:最朴素的音频表示

PCM(脉冲编码调制)就是直接把采样、量化后的数值按顺序存起来。没有压缩,没有花招。每个样本就是一个整数,多通道的话就按帧交错排列。

举个例子,双通道16bit 44.1kHz的PCM数据流长这样:

帧1: [L样本(16bit)] [R样本(16bit)]
帧2: [L样本(16bit)] [R样本(16bit)]
帧3: [L样本(16bit)] [R样本(16bit)]
...

每个帧包含所有通道的一个样本。帧率就等于采样率。多通道同步的核心,其实就是保证所有通道的帧在时间上对齐。你想想看,如果通道A的帧3和通道B的帧3不是同一时刻采的,那后面做波束成形、声源定位就全乱套了。

PCM数据量计算公式:

数据率 (bps) = 采样率 × 位深 × 通道数

例如:48kHz × 24bit × 8通道 = 9.216 Mbps

这个带宽在多通道系统里很关键。我做过一个32通道的系统,光PCM数据流就接近40Mbps,USB 2.0都扛不住,最后换成了USB 3.0 + 硬件FIFO缓冲。

2.4 常见音频格式的帧结构

实际工程中,我们很少直接操作裸PCM数据,更多是跟封装格式打交道。下面说三种最常见的。

2.4.1 WAV格式

WAV是微软和IBM搞的,本质就是PCM数据加个文件头。帧结构很简单:

  • RIFF头:44字节,包含文件大小、音频格式、通道数、采样率、位深等信息
  • 数据块:连续的PCM帧

WAV的好处是解析简单,坏处是文件太大。我建议在开发调试阶段用WAV,方便用十六进制工具直接看数据。曾经有个bug,就是通过对比WAV文件的原始字节流找到的——某个通道的数据偏移了2个字节,导致整个通道串位。

2.4.2 FLAC格式

FLAC是无损压缩,帧结构比WAV复杂得多:

  • 帧头:同步码、块大小、采样率、通道数等
  • 子帧:每个通道独立编码,有LPC预测、Rice编码等
  • 帧尾:CRC校验

FLAC的帧大小不固定,取决于音频内容的复杂度。这给多通道同步带来一个麻烦——你不能简单地通过帧序号来定位时间点。我做过一个项目,需要从FLAC流中精确截取某一段,最后不得不先解码成PCM再处理。

注意:FLAC虽然无损,但解码有计算开销。在多通道实时系统中,如果CPU不够强,解码延迟可能会影响同步精度。我曾经在嵌入式平台上踩过这个坑,最后换成了WAV。

2.4.3 AAC格式

AAC是有损压缩,帧结构基于MDCT变换:

  • ADTS帧头:7或9字节,包含同步字、帧长度、采样率、通道配置
  • 原始数据块:经过量化和霍夫曼编码的频域数据
  • 每帧包含1024或960个样本(取决于配置)

AAC的帧是固定样本数的(通常1024个样本),这点比FLAC好。但要注意,AAC编码会引入算法延迟——编码器需要看未来的一些样本来做心理声学模型。这个延迟在多通道同步中必须补偿。我记得有一次做AAC实时传输,没算编码延迟,结果音频比视频慢了100多毫秒,被客户骂惨了。

2.5 知识体系总览

下面这张图是我自己整理的,把这一节的核心逻辑串起来了。你可以把它当作一个快速索引。

数字音频基础:知识体系 模拟音频信号 采样定理 量化 PCM编码(帧结构) WAV(无压缩) FLAC(无损压缩) AAC(有损压缩) 多通道同步:帧对齐 + 延迟补偿 核心逻辑:模拟 → 数字 → 封装 → 同步

这张图从模拟信号出发,经过采样和量化变成PCM数据,再封装成不同格式,最后落到多通道同步上。每个环节都可能引入时间误差,这也是我们后面要重点解决的问题。

我的建议:如果你刚开始接触多通道音频,先拿WAV格式练手。它结构简单,容易调试。等把同步逻辑跑通了,再考虑FLAC或AAC的压缩场景。饭要一口一口吃,路要一步一步走。


公众号:蓝海资料掘金营,微信deep3321