3. 量化与编码:量化噪声模型、均匀量化与非均匀量化、PCM编码原理与A律/μ律压缩

好,咱们今天聊聊量化与编码。这部分内容,说实在的,是音频数据转换的核心中的核心。你想想看,模拟信号是连续的,数字世界是离散的,怎么把连续的信号塞进离散的二进制码里?靠的就是量化和编码。

我个人习惯把量化比作「用尺子量身高」。模拟信号就是那个身高,尺子的刻度就是量化台阶。你量出来的结果,永远是个近似值。这个近似值带来的误差,就是量化噪声。

3.1 量化噪声模型

量化噪声,说白了就是「舍入误差」。我刚开始做音频系统时,总觉得这玩意儿是玄学。后来有一次调试一个16位ADC的底噪,死活降不下去,最后发现是量化噪声在作祟。嗯,从那以后我再也不敢小看它了。

量化噪声的数学模型其实挺简单的。假设量化步长为Δ,那么量化误差e的范围是:

-Δ/2 ≤ e ≤ Δ/2

如果输入信号足够复杂(比如音乐),误差可以近似为均匀分布。那么量化噪声的功率(方差)就是:

σ² = Δ² / 12

这个公式你最好记在心里。为什么?因为信噪比(SNR)就靠它算。

对于一个B位的量化器,满量程范围是2B·Δ。假设输入是满幅正弦波,信号功率是(2B·Δ)²/8。那么信噪比就是:

SNR = 6.02B + 1.76 dB

你看,每增加1位,信噪比提升约6dB。这就是为什么16位音频的理论动态范围是96dB,24位是144dB。

关键点:量化噪声是不可避免的,但你可以通过增加位数来降低它。不过位数增加也意味着数据量变大,这是个trade-off。

3.2 均匀量化与非均匀量化

均匀量化,就是尺子的刻度是等间距的。简单、直接,但有个问题——小信号的信噪比很差。

为什么?因为量化噪声的功率是固定的(Δ²/12),而小信号的功率很小,所以信噪比就低。你想想看,一段音乐里,弱音部分往往比强音部分更容易听到噪声,就是这个道理。

非均匀量化就是为了解决这个问题。它的思路是:小信号用小的量化步长,大信号用大的量化步长。这样小信号的信噪比就上去了。

我在项目中遇到过这种情况:用均匀量化处理语音信号,结果静音段全是「嘶嘶」的量化噪声。后来换成非均匀量化,效果立竿见影。

我的建议:如果信号动态范围大(比如音乐、语音),优先考虑非均匀量化。如果信号本身已经做过归一化处理(比如测试信号),均匀量化就够用了。

3.3 PCM编码原理

PCM,脉冲编码调制,是数字音频最基础的编码方式。它的流程就三步:采样、量化、编码。

  1. 采样:把连续时间信号变成离散时间信号。采样率要满足奈奎斯特定理,否则会有混叠失真。
  2. 量化:把连续幅度变成离散幅度。这一步会引入量化噪声。
  3. 编码:把量化后的幅度值用二进制码表示。

举个例子,假设采样率是44.1kHz,量化位数是16位,那么每秒的数据量就是:

44.1k × 16 = 705.6 kbps(单声道)
705.6k × 2 = 1.411 Mbps(立体声)

这就是CD音频的数据率。你想想看,一张CD能存74分钟,数据量可不小。

注意:PCM编码是无损的(在量化精度内),但数据量大。所以后来才有了各种压缩编码,比如MP3、AAC。但PCM是所有数字音频的基础,这个你得搞清楚。

3.4 A律与μ律压缩

A律和μ律是非均匀量化的具体实现。它们主要用于语音通信,比如电话系统。

为什么语音要用非均匀量化?因为语音信号的动态范围很大(约40-50dB),而且小信号出现的概率更高。用均匀量化的话,小信号的信噪比会非常差。

A律和μ律的核心思想是:对输入信号做对数变换,然后再均匀量化。这样等效于非均匀量化。

具体来说:

  • μ律:主要用于北美和日本。压缩特性是:
F(x) = sign(x) · ln(1 + μ|x|) / ln(1 + μ), 其中μ=255
  • A律:主要用于欧洲和中国。压缩特性是:
F(x) = sign(x) · A|x| / (1 + lnA), 0 ≤ |x| ≤ 1/A
F(x) = sign(x) · (1 + ln(A|x|)) / (1 + lnA), 1/A ≤ |x| ≤ 1, 其中A=87.6

这两个标准我都用过。说实话,在听感上差别不大,但兼容性很重要。如果你做的是国际市场的产品,最好两个都支持。

参数 μ律 (μ=255) A律 (A=87.6)
主要应用地区 北美、日本 欧洲、中国
小信号增益 较高 中等
信噪比(小信号) 约38dB 约34dB
实现复杂度 较低 中等

避坑指南:我曾经在项目中直接用μ律处理A律编码的信号,结果语音全是「嗡嗡」的失真。后来才发现,这两个标准的编码表不一样,不能混用。如果你要做编解码转换,记得查一下ITU-T G.711标准。

好了,量化与编码这部分就讲到这里。记住一句话:量化是取舍,编码是表达。取舍得好,表达得准,你的音频系统才能出好声音。