3. 感知音频编码原理
有损音频编码的核心目标,是在尽可能低的码率下保留“听感上无损”的质量。要做到这一点,编码器必须回答一个关键问题:哪些声音信息是人耳真正听得见的,哪些又是听不见的?心理声学模型(Psychoacoustic Model)正是用来回答这个问题的工具。它利用人耳听觉系统的生理与心理特性,找出那些可以被安全丢弃或大幅降低精度的信号成分,从而把宝贵的比特分配给更重要的频段。
3.1 临界频带:人耳的“频率分辨率”
人耳对频率的分辨并不是均匀的。在低频段(如 100 Hz 附近),人耳能分辨出相差仅 1~2 Hz 的两个音;但在高频段(如 10 kHz 附近),需要相差数百 Hz 才能区分。这种非线性的频率感知特性,促使听觉研究者提出了临界频带(Critical Band)的概念。
临界频带可以理解为:人耳基底膜上某一位置对应的频率范围,在这个范围内,声音会被作为一个整体进行初步处理。整个可听频率范围(约 20 Hz~20 kHz)被划分为 24 个 Bark 刻度(以 Bark 为单位),每个 Bark 对应一个临界频带。临界频带的宽度随频率升高而增大:低频处约 100 Hz,高频处可达 4 kHz 以上。
下表列出了部分 Bark 刻度与频率范围的对应关系,便于建立直观印象:
| Bark 序号 | 中心频率 (Hz) | 临界频带范围 (Hz) | 带宽 (Hz) |
|---|---|---|---|
| 1 | 50 | 20 – 100 | 80 |
| 5 | 400 | 300 – 510 | 210 |
| 10 | 1175 | 920 – 1480 | 560 |
| 15 | 2500 | 2000 – 3100 | 1100 |
| 20 | 6400 | 4800 – 8500 | 3700 |
| 24 | 13500 | 10500 – 20000 | 9500 |
3.2 掩蔽效应:听觉的“选择性失聪”
掩蔽效应(Masking Effect)是指一个声音(掩蔽声)的存在,使得另一个声音(被掩蔽声)的听阈被提高的现象。简单说,当某个强音出现时,它附近的弱音会变得听不见。掩蔽效应分为两种:
- 频域掩蔽(同时掩蔽):两个声音同时出现,强音会掩蔽其邻近频带的弱音。掩蔽效果在掩蔽声中心频率附近最强,并向两侧衰减,但向高频方向的衰减比向低频方向更慢。
- 时域掩蔽(非同时掩蔽):强音消失后,人耳对紧随其后的弱音仍存在短暂的听阈提升(后掩蔽,持续约 50~200 ms);强音出现前也有较短的前掩蔽(约 5~20 ms)。
在音频编码中,频域掩蔽是主要利用对象。编码器通过心理声学模型计算出每个临界频带内的掩蔽阈值(Masking Threshold),凡是低于该阈值的信号成分,人耳无法感知,编码器就可以将其丢弃或分配极少的比特。而高于阈值的成分,则需要保留足够的精度,使量化噪声被“隐藏”在掩蔽阈值之下。
3.3 心理声学模型的工作流程
以 MP3/AAC 编码器中常见的心理声学模型为例,其核心计算流程如下:
- 时频变换:将 PCM 时域信号分帧(通常 1024 或 2048 个采样点),通过 MDCT(改进离散余弦变换)或 FFT 转换到频域,得到各频点的能量谱。
- 频带划分:将频点按 Bark 刻度映射到 24 个临界频带,计算每个频带的总能量。
- 扩展函数卷积:考虑相邻临界频带之间的掩蔽扩散,将各频带的掩蔽能力按扩展函数(Spreading Function)进行卷积,得到全局掩蔽能量分布。
- 计算掩蔽阈值:从全局掩蔽能量中减去一个与频带序号相关的偏移量(对人耳安静听阈进行修正),得到每个临界频带的最终掩蔽阈值。
- 信掩比(SMR)计算:将每个频带的信号能量与掩蔽阈值相减,得到信掩比(Signal-to-Mask Ratio, SMR)。SMR 越大,说明该频带越需要精确编码。
- 比特分配:将可用比特优先分配给 SMR 较大的频带,使量化噪声谱恰好低于掩蔽阈值曲线。
下面这张图展示了心理声学模型在编码器中的位置以及掩蔽阈值的计算逻辑:
3.4 实际编码中的掩蔽阈值应用
在 AAC 编码器中,心理声学模型输出的掩蔽阈值直接决定了每个比例因子频带(Scalefactor Band)的量化步长。比例因子频带是对临界频带的进一步细分,通常每个频带包含 4~32 个 MDCT 系数。编码器计算每个比例因子频带的 SMR 后,通过噪声分配迭代(Noise Allocation Loop)调整量化步长,直到量化噪声满足“低于掩蔽阈值”的条件。
以下是一个简化的量化步长调整伪代码,展示了 SMR 如何驱动比特分配:
for each scalefactor band b:
smr[b] = signal_energy[b] - masking_threshold[b] // 单位 dB
// 初始量化步长
step[b] = base_step
// 迭代调整
while (estimated_noise[b] > masking_threshold[b]) and (bits_used < bit_budget):
step[b] += 1.5 dB // 增大步长,减少比特
bits_used -= saved_bits[b]
end while
// 若仍有剩余比特,则减小步长提升质量
while (estimated_noise[b] < masking_threshold[b] - 3 dB) and (bits_used < bit_budget):
step[b] -= 0.75 dB
bits_used += extra_bits[b]
end while
end for
这种迭代过程保证了:量化噪声被均匀地“铺”在掩蔽阈值之下,而不是均匀地分布在所有频带上。相比早期编码器采用的固定量化步长,这种基于掩蔽阈值的噪声整形方法可以在同等码率下获得显著更优的主观音质。
3.5 常见误区与工程复盘
一个典型的工程案例是:某流媒体服务在低码率(64 kbps AAC)下处理播客节目时,发现人声齿音(如“s”、“sh”等高频辅音)出现明显的“金属感”。排查后发现,编码器在 8~12 kHz 频段的掩蔽阈值计算过于激进,导致该区域量化噪声过大。修复方案是:在心理声学模型中增加对人声高频能量的保护偏移量,将 8 kHz 以上的掩蔽阈值降低 3~5 dB,从而保留更多高频细节。修改后,主观试听评分(MUSHRA)从 68 分提升至 82 分,而码率几乎未变。
3.6 小结与编码实践要点
心理声学模型是感知音频编码的“大脑”,它通过临界频带划分和掩蔽效应计算,为每个频带确定“可闻性”边界。编码器据此分配比特,使量化噪声始终低于掩蔽阈值,从而实现透明或接近透明的编码质量。在实际工程中,需要注意以下几点:
- 频带划分精度:Bark 刻度是理论参考,实际编码器(如 AAC)使用比例因子频带,需根据采样率和帧长进行微调。
- 扩展函数建模:不同编码标准(MP3、AAC、Opus)使用不同的扩展函数模型,直接影响掩蔽阈值的准确度。
- 瞬态检测联动:心理声学模型应与编码器的瞬态检测(如 AAC 的块切换)协同工作,在瞬态帧使用更短的窗长,并调整时域掩蔽参数。
- 低码率下的权衡:当比特预算严重不足时,掩蔽阈值只能作为参考,编码器需要结合音频内容分类(语音/音乐/混合)做出优先级决策。
理解心理声学模型的工作原理,是进行码率控制优化的前提。只有知道噪声应该藏在哪里,才能用最少的比特换取最大的主观音质收益。