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,脉冲编码调制,是数字音频最基础的编码方式。它的流程就三步:采样、量化、编码。
- 采样:把连续时间信号变成离散时间信号。采样率要满足奈奎斯特定理,否则会有混叠失真。
- 量化:把连续幅度变成离散幅度。这一步会引入量化噪声。
- 编码:把量化后的幅度值用二进制码表示。
举个例子,假设采样率是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标准。
好了,量化与编码这部分就讲到这里。记住一句话:量化是取舍,编码是表达。取舍得好,表达得准,你的音频系统才能出好声音。