本节摘要:AAC-LC 的质量来自四件工具的协作——可切换长短窗的 MDCT、时域噪声整形 TNS、按带分配精度的尺度因子循环、按相关性切换的联合立体声。本节逐件拆解它们"解决什么听感问题、付出什么代价",并给出可验证的调参观察点。
2.1 节确认了 LC 是主干,本节把主干拆到零件级。这些零件在 Opus 那边大多能找到对应物或反例——短窗策略、噪声整形、立体声降维——第 3 章会逐一回照。
MDCT 是重叠变换:相邻窗各有 50% 重叠,配合恰当的窗函数可在临界采样下完美重构。AAC 长窗 2048 点(对应 1024 个系数,48 kHz 下约 21.3 ms),频率分辨率好、压缩效率高,适合稳态内容;问题出在瞬态——若鼓点落在长窗中部,整窗能量被变换摊开,量化噪声铺满整个窗宽,其中"提前于鼓点出现"的那部分就是预回声(1.3 节埋的雷在此引爆)。
对策是块切换:检测到瞬态时,本帧改用 8 个连续短窗(每个 256 点、128 系数,约 2.7 ms),噪声被限制在短窗内,预回声显著缩短;帧与帧之间用长-短过渡窗衔接以维持重构条件。代价是短窗频率分辨率骤降(约 187.5 Hz/线),高频精细结构编码效率下降——所以切换决策必须保守,AAC 编码器普遍用能量突变检测(相邻子带能量差超阈值计数)来触发。

TNS(时域噪声整形)解决的是窗切换的遗留问题:即便短窗限制了噪声时长,噪声的时间包络仍可能与信号包络不匹配——信号已经安静下来,噪声还在响。TNS 的做法出人意料:对 MDCT 系数序列再做一次线性预测滤波。因为 MDCT 系数的排列顺序对应频率,对其做预测等效于在时域对噪声包络整形——预测滤波器把量化误差的能量分布"贴"到信号自身的包络上,安静段噪声自动变小。
编码端传输少量滤波器系数(量化为整数索引),解码端逆向恢复。工具开销小、收益集中在瞬态密集的内容(打击乐、语音爆破音),是 LC 相对 MP3 的重要改进点之一。Opus 的 CELT 没有照搬 TNS,而是用更短的块从源头限制噪声时间跨度——同一问题的两种解法,又一次呼应 1.4 的分岔。
1.3 节讲过阈值怎么算,这里讲比特怎么落。MDCT 系数按"尺度因子频带"分组(分组近似临界频带,随采样率有一套预设表),每个带由一个尺度因子控制量化步长。编码器的核心是一个双循环结构:
两循环互相拉锯直到收敛或达到迭代上限。这个结构的工程含义:AAC 编码器的速度与质量主要由它决定,也是各实现差距的主要来源(fdk-aac 与 FFmpeg 原生编码器的差异多出于此)。调参时能观察到的外显行为是码率分配:-v debug 级别的日志能打出逐帧尺度因子表,对比语音与音乐帧的差异可以直接看到"感知账本"在翻页。
左右声道通常高度相关,独立编码浪费明显。AAC 按尺度因子频带粒度在三种模式间切换:
切换判据通常是基于带内左右声道的相关性与能量比。听感上的风险点在强度立体声启用过度:声场会"收窄成一点",人声位置发飘。低码率立体声出问题时,第一件事就是查强度立体声的启用范围。
四件工具都有外部可观察的行为,养成看日志的习惯比背参数更重要。窗切换:多数编码器能输出逐帧的块类型(长窗/短窗序列),对照音频的瞬态位置看切换是否及时——切换滞后是预回声的前兆,切换过频(稳态内容也频繁换挡)则说明检测阈值过敏感,码率在白白浪费。TNS:帧级日志里 TNS 的启用标志与滤波器阶数;打击乐密集段 TNS 应该高频启用,若长期关闭,检查编码器实现是否默认禁用(部分实现为了速度牺牲了它)。
尺度因子循环:调试级别日志能打出逐帧的迭代次数与最终码率偏离度;迭代频繁触顶(达到上限仍未收敛)说明码率预算与内容难度严重失配——该升码率或换 Profile,调其他参数都是缘木求鱼。联合立体声:逐带的模式标记(LR/MS/强度);立体声声场问题的工单,第一眼就该看这个标记的分布是否异常(强度模式占比过高)。
把这些观察点整理成一页"体检单",编码器侧的很多问题在听感投诉之前就能在日志里现形——这也是 5.3 节工具链里"核查段"的具体内容之一。
⚠️ 常见坑:四个工具彼此耦合,单独调任何一个都可能帮倒忙。典型如关掉 TNS 去救 CPU,结果瞬态内容的预回声立刻抬头;又如强制长窗提高压缩率,鼓点噪声立刻扩散。排障时按"瞬态问题查窗切换与 TNS、空间问题查联合立体声、码率问题查双循环"的顺序定位,比逐参数试错快得多。
💡 关键直觉:AAC-LC 的四件工具分别在治四种病——预回声(短窗)、噪声包络错位(TNS)、比特落点(尺度因子)、空间冗余(联合立体声)。判断一段 AAC 音质问题时,先辨认症状属于哪种病,再找对应工具的参数与日志。
下一节看 AAC 在码率压力下的"省流大招":SBR 与 PS 如何用参数化重建把立体声压进几十 kbps。