1.1 从声波到比特流:采样、量化与码率账本 本节摘要:PCM 是 AAC 与 Opus 共同的输入端。本节把采样、量化、编码三步拆开,算清未经压缩的音频码率账,并解释 44.1 kHz 与 48 kHz 两类采样率约定、位深与信噪比的关系——这些数字是后续一切压缩率讨论的分母。 本节是全册的地基:不先把"原始音频有多大、每个比特买到了什么"算清楚,后面所有关于压缩效率的对比都无从谈起。学完本节,1.2 节将回答"这么大的账单里,哪些项目是可以划掉的"。 一、采样:时间轴上的等间隔快照 麦克风把声压变化转成连续电压,模数转换器(ADC)按固定频率对其"拍照",得到离散样本序列。采样率 48 kHz 意味着每秒产生 48000 个整数。
本节摘要:PCM 是 AAC 与 Opus 共同的输入端。本节把采样、量化、编码三步拆开,算清未经压缩的音频码率账,并解释 44.1 kHz 与 48 kHz 两类采样率约定、位深与信噪比的关系——这些数字是后续一切压缩率讨论的分母。
本节是全册的地基:不先把"原始音频有多大、每个比特买到了什么"算清楚,后面所有关于压缩效率的对比都无从谈起。学完本节,1.2 节将回答"这么大的账单里,哪些项目是可以划掉的"。
麦克风把声压变化转成连续电压,模数转换器(ADC)按固定频率对其"拍照",得到离散样本序列。采样率 48 kHz 意味着每秒产生 48000 个整数。这条看似朴素的流水线有一个不容违反的约束——奈奎斯特定理:采样率必须高于信号最高频率的约两倍,否则高频成分会折叠成低频噪声(混叠)。工程上不会把滤波器截止频率恰好设在采样率一半,而是留出过渡带:CD 标准 44.1 kHz 的有效带宽到 20 kHz,20 至 22.05 kHz 这一段就是保护带。
44.1 kHz 这个奇怪的数字有明确的工业史背景:早期数字录音借用每秒 25 帧、每帧 490 行的模拟视频磁带做存储,44100 恰好能整除进水平消隐结构。它随 CD 进入消费市场并延续至今。48 kHz 则出自影视与广播阵营,能被 24 帧影视帧率与常见时钟整除,便于音画对齐。两套约定并存的结果是:所有音频设备都要处理 44.1 与 48 两族采样率及其倍频(88.2/96/176.4/192),而 AAC 与 Opus 都原生支持整数族切换。Opus 更进一步——它内部统一以 48 kHz 为基准工作,输入若是 44.1 kHz 会被重采样,这是它为实时链路简化时钟管理的取舍。
采样解决"何时测",量化解决"测多细"。N 位线性量化把电压幅度切成 2 的 N 次方级台阶。位深直接决定理论信噪比:满幅正弦信号下约为 6.02N 加 1.76 dB——16 位约 98 dB,24 位约 146 dB。人耳听觉动态范围通常按 120 dB 估算,所以 CD 选 16 位并非随手,广播与制作链路留 24 位则是为多次处理累积余量。
量化噪声还有一个讨厌的性质:它可能与信号相关,在安静段落形成可闻的颗粒感。录音棚的对策是抖动(dither)——注入约半级量化步长的微噪声,把相关失真变成统计上平坦的底噪,代价是底噪略升。这个细节与后续章节直接相关:感知编码的量化噪声同样面临"成形"问题,只不过 AAC 用噪声整形把失真推入掩蔽区,Opus 用加权残差控制失真谱形状,思路同源。

把账本算实,后文的压缩率讨论才有落点。一段 CD 音轨(44.1 kHz、16 bit、立体声)未压缩码率是 1411.2 kbps;一段 48 kHz/24 bit 的制作母带立体声是 2304 kbps;5.1 声道则冲到 6912 kbps。对照常见分发档位——AAC 在音乐平台常用 128 至 256 kbps,Opus 在通话里常设 24 至 64 kbps——压缩倍率在十倍到数十倍之间。这份"节省"从哪来,正是 1.2 节两本账要回答的。
下面这段 Python 把账本变成可复算的代码,顺手给出不同档位下的每分钟体积,便于部署时估带宽与存储:
def pcm_bitrate(sample_rate, bits, channels): """未压缩 PCM 码率,单位 kbps""" return sample_rate * bits * channels / 1000 def minutes_size(sample_rate, bits, channels, minutes, kbps_coded=None): """每分钟体积(MB);给出编码码率时按编码后估算""" if kbps_coded: bits_total = kbps_coded * 1000 * 60 * minutes else: bits_total = pcm_bitrate(sample_rate, bits, channels) * 1000 * 60 * minutes return bits_total / 8 / 1024 / 1024 configs = [ ("CD 44.1k/16/2", 44100, 16, 2, None), ("母带 48k/24/2", 48000, 24, 2, None), ("AAC 128k 立体声", 44100, 16, 2, 128), ("Opus 32k 单声道通话", 48000, 16, 1, 32), ] for name, sr, b, ch, coded in configs: print(f"{name:24s} {pcm_bitrate(sr, b, ch):8.1f} kbps" f" 每分钟 {minutes_size(sr, b, ch, 1, coded):6.1f} MB") # 输出示例: # CD 44.1k/16/2 1411.2 kbps 每分钟 10.1 MB # 母带 48k/24/2 2304.0 kbps 每分钟 16.5 MB # AAC 128k 立体声 1411.2 kbps 每分钟 0.9 MB # Opus 32k 单声道通话 768.0 kbps 每分钟 0.2 MB
注意最后两行的"每分钟"已经按编码后码率折算:同一分钟音乐,CD 体积约是 AAC 128 kbps 的十一倍,是 Opus 32 kbps 通话流的约五十倍。分发平台与通话服务面对的成本压力完全不同,这也解释了为什么两代编码器会把优化目标压向不同方向。
⚠️ 常见坑:把"采样率"当成"音质"的同义词。48 kHz 并不天然优于 44.1 kHz,二者带宽上限的差异(24 kHz 对 22.05 kHz)远在人耳常规听感之外;真正影响听感底限的是编码器在低码率下怎么分配比特。选 48 kHz 的主要理由是与影视、广播时钟族对齐,以及 Opus 内部原生工作在 48 kHz、可省一次重采样。
💡 关键直觉:位深买的是"安静段落还剩多少细节"(信噪比),采样率买的是"高频上限",声道数买的是"空间信息"。有损编码器动手术的顺序恰好反过来——空间信息(联合立体声)和高频(带宽裁剪或频谱复制)最先被压,因为它们对人耳的边际价值最低。
下一节把镜头从"账单"转向"账单里哪些项目可以划掉":统计冗余与感知冗余两本账,将解释有损压缩为什么敢丢、丢什么、丢多少。