感知音频编码原理:人耳听觉特性、掩蔽效应、临界频带、心理声学模型

AAC 之所以能在相同码率下获得比 MP3 更好的音质,核心并不在于它使用了更先进的数学变换,而在于它更精准地利用了人耳的听觉特性。感知音频编码的本质是:只编码人耳能听到的声音,丢弃人耳听不到的信息。要理解这一过程,必须先建立三个关键概念:听觉阈值、临界频带与掩蔽效应,它们共同构成了心理声学模型的物理基础。

3.1 人耳听觉的基本特性

人耳对声音的感知并非线性。在安静环境中,人耳能感知的最小声压级称为绝对听觉阈值(Absolute Threshold of Hearing)。该阈值随频率变化显著:在 2kHz~4kHz 区域最灵敏,阈值最低(接近 0dB SPL);而在低频(<100Hz)和高频(>16kHz)区域,阈值大幅升高。这意味着,一个 50Hz、30dB 的声音可能听不见,而 3kHz、5dB 的声音却清晰可闻。

另一个重要特性是频率选择性。人耳基底膜对不同频率的响应位置不同,相当于一组重叠的带通滤波器。这组滤波器的带宽并非恒定,而是随频率升高而变宽。我们将人耳能分辨的每个最小频带称为一个临界频带(Critical Band)。整个可听范围(约 20Hz~20kHz)被划分为 24 个 Bark 刻度(临界频带单位),如表所示:

Bark 序号中心频率 (Hz)临界带宽 (Hz)典型感知特征
150100极低频,带宽窄
5500280中低频,语音能量区
101500700中频,人耳最敏感区
1740001400高频,辅音信息区
24150003500极高频,带宽最宽

临界频带的意义在于:掩蔽效应只在同一或相邻临界频带内显著发生。跨频带的掩蔽(如低频掩蔽高频)虽然存在,但强度远弱于频带内掩蔽。

编码启示:AAC 的滤波器组(MDCT)采用 1024 点窗长,在 48kHz 采样率下频率分辨率约为 23Hz,远高于临界频带分辨率。但心理声学模型并不直接使用每个 MDCT 谱线,而是先将频谱映射到 24 个 Bark 频带(或更细的 49 个子带)上计算掩蔽阈值,再决定每个频带的量化噪声预算。

3.2 掩蔽效应:频域掩蔽与时域掩蔽

掩蔽效应是指一个声音(掩蔽声)的存在使另一个声音(被掩蔽声)的听觉阈值升高的现象。AAC 编码器主要利用两种掩蔽:

  • 频域掩蔽(同时掩蔽):当两个频率相近的声音同时出现时,响度较高的声音会抬高响度较低声音的阈值。掩蔽曲线呈不对称三角形——低频声更容易掩蔽高频声(掩蔽曲线向高频方向延伸更远),而高频声对低频的掩蔽作用较弱。
  • 时域掩蔽(非同时掩蔽):强声音消失后,人耳对紧随其后(约 5~100ms)的弱声音仍存在暂时性阈值升高,称为后掩蔽;强声音出现前约 5~20ms 也存在较弱的前掩蔽。AAC 的长窗(2048 样本)与短窗(256 样本)切换正是为了适应时域掩蔽的时间特性——瞬态信号用短窗减少预回声。

下图展示了频域掩蔽的核心机制:一个 1kHz 强音(80dB)在临界频带内产生的掩蔽阈值曲线,以及低于该阈值的量化噪声如何被“隐藏”:

频域掩蔽效应与量化噪声隐藏示意 0.1k 0.5k 1k 2k 4k 8k 频率 (Hz) 0 30 60 90 声压级 (dB SPL) 绝对听觉阈值 掩蔽声 (1kHz, 80dB) 掩蔽阈值曲线 临界频带 (Bark 10) 量化噪声 (可隐藏) 噪声 > 阈值 → 可闻 绝对阈值 掩蔽阈值 掩蔽声

图中可见,掩蔽声在其临界频带内产生一个“山丘状”的掩蔽阈值。编码器将量化噪声控制在阈值曲线以下,人耳便无法察觉。值得注意的是,掩蔽阈值曲线在低频侧较陡(斜率约 -100dB/倍频程),在高频侧较缓(约 -20dB/倍频程),这解释了为何低频强音能有效掩蔽高频弱音,反之则困难。

3.3 心理声学模型的工作流程

AAC 编码器中的心理声学模型(Psychoacoustic Model)是一个实时计算模块,其核心任务是为每个频带计算最小掩蔽阈值(即该频带允许的最大量化噪声能量)。标准流程如下:

  1. 频谱分析:对输入 PCM 信号加窗(Hanning 或 Kaiser-Bessel 窗)并进行 FFT,得到高分辨率功率谱(通常 2048 点)。
  2. 频带划分:将 FFT 谱线按 Bark 刻度映射到 24 个临界频带,计算每个频带的声压级(SPL)。
  3. 谱平滑与扩展:考虑临界频带间的掩蔽扩展(Spread Function),将相邻频带的掩蔽能力叠加。
  4. 噪声阈值计算:结合绝对听觉阈值与频带内掩蔽,取两者较大值作为该频带的全局掩蔽阈值。
  5. 信掩比(SMR)计算:每个频带的信号能量与掩蔽阈值之比即为 SMR,编码器据此分配量化比特——SMR 大的频带分配更多比特,SMR 小的频带少分配甚至不分配。

核心公式(简化):

MASK[i] = max( ABS_THRESH[i], 
                sum( SPREAD[j] * SPL[j] ) )   // j 为所有掩蔽源频带
SMR[i]  = SPL[i] - MASK[i]                    // 单位:dB
bits[i] = TOTAL_BITS * SMR[i] / sum(SMR)      // 比特分配比例

其中 SPREAD[j] 是频带 j 对其他频带的掩蔽扩展函数,通常用三角函数或指数函数近似。

3.4 实际编码案例:AAC 如何利用掩蔽效应

以 44.1kHz 采样、128kbps 立体声 AAC 编码为例,观察一个包含 1kHz 响弦乐(90dB)和 4kHz 弱笛声(35dB)的片段:

  • 无掩蔽时:4kHz 笛声的 35dB 高于绝对阈值(约 5dB),理论上可闻,需要编码。
  • 有掩蔽时:1kHz 强音在 4kHz 处产生的掩蔽阈值约为 45dB(因掩蔽曲线向高频延伸),笛声 35dB 低于阈值 10dB,人耳完全听不到。
  • 编码决策:心理声学模型将 4kHz 所在频带的 SMR 设为负值,编码器对该频带分配极少量比特(甚至直接置零),节省的比特用于增强 1kHz 附近的量化精度。

实测表明,在 128kbps 下,AAC 能保持 20Hz~20kHz 几乎透明的音质,正是因为心理声学模型平均可丢弃约 60%~70% 的频谱信息而不被感知。

3.5 常见误区与设计复盘

误区一:认为“掩蔽阈值越高越好”。阈值过高意味着丢弃过多信号,虽然听不到量化噪声,但信号本身(如音乐厅混响尾音)也被抹除,导致音质“干瘪”。AAC 编码器通常设置安全余量(如 3~6dB),避免过度激进。

误区二:忽略时域掩蔽的预回声问题。对于打击乐等瞬态信号,若使用长窗(2048 样本),量化噪声会扩散到信号之前,产生可闻的“预回声”。AAC 通过块切换(检测到瞬态时切换为 8 个短窗)来缩短噪声时间范围,但短窗的频率分辨率降低,需在时域与频域间权衡。

误区三:将临界频带视为固定滤波器组。实际人耳滤波器是非线性、信号相关的。AAC 的 MPEG-4 版本引入了感知噪声替换(PNS)和频带复制(SBR)等增强技术,进一步利用噪声特性与高频相关性,但这已超出基础心理声学模型范畴。