一 引言
本文对AAC(Advanced Audio Coding)音频编码算法进行总结。首先简要介绍MPEG音频(包括AAC)的发展历程及AAC概况,然后结合FAAC(Free AAC)的代码对AAC编码算法的各个模块进行比较详尽的分析。
二 AAC概况
1 MPEG及其AAC音频的发展历程
1988年ISO/IEC标准化组织成立了运动图像专家组(MPEG)(正式名称ISO/IEC JTC1/SC29/WG11)来开发通用的运动图像,相关声音以及图像声音的组合的国际标准。从1988年以来,ISO/MPEG承担了很多的视频和音频编码的标准化工作。它所制定的标准在许多方面得到了广泛的应用。
1992年末,MPEG完成了MPEG-1视频编码标准。最后被采纳为ISO/IEC IS 11172标准。与之对应的音频部分分为三种操作模式(被称为层:Layer),从Layer-1 到Layer-3编码,提供逐级增进的音频质量,当然,与此同时复杂度也逐级增高。Layer-3提供具有最高的复杂度和最好的音频质量的编码方法,就是广泛被人们所知的MP3。
MPEG-2的音频部分在两方面对于MPEG-1进行了扩展,同时保持音频编码的后向兼容性:对于5.1声道的支持,适应通常所谓的电影院音响效果;增加了对于16kHz,22.5kHz,24kHz采样率的支持。这就是MPEG-2 BC(Back-Compatible)。
根据1994年提出的效验模型发现如果引进新的算法,放弃兼容性可以显著地提高编码的效率,MPEG于是便放弃了原有的兼容性要求,于是成立了一个新的工作项目,定义为AAC(Advanced Audio Coding),并于1997年形成了国际标准ISO 13818-7。这个标准是不兼容MPEG-1的,被称为MPEG-2 NBC(Non Back Compatible)编码。
MPEG-4规定了两种编码方法来对音频部分编码。对于中到高比特率的音频是由改进了的AAC编码实现的,低比特率的音频,则采用NTT(日本电信电话公司)等开发的TwinVQ编码方法。
MPEG-4之后的MPEG-7和MPEG-21的注意力已经不是集中在提高质量降低码率方面,而是转而解决多媒体数据的表达检索等问题。所以AAC是迄今为止MPEG所提出的质量最好的音频编码标准。
AAC综合了许多新的技术,有很多新的特性。它支持从8k到96k的各种采样率,支持多种声道配置方案。与MPEG Layer-3相比,AAC提高了频率分辨率,增加了线性预测和时域噪声整形,改进了联合立体声编码以及哈夫曼码本,在时-频变换中使用了自适应的长短窗切换机制,有效地增加了压缩比,提高了音频质量。这一切都使AAC拥有较其他编码标准更加优异的编码质量和性能。
2 AAC算法简介
AAC系统包含了滤波器组、心理声学模型、量化与编码、预测、TNS、立体声处理和增益控制等多种高效的编码工具。这些模块或过程的有机组合形成了AAC系统的基本编解码流程。在实际应用中,并不是所有的功能模块都是必需的,下表列出了各模块的可选性:
工具(模块) |
可选性 |
码流打包 |
必需 |
无噪声编码 |
必需 |
量化器 |
必需 |
缩放因子处理 |
必需 |
M/S立体声处理 |
可选 |
预测 |
可选 |
IS(强度立体声) / 耦合声道处理 |
可选 |
TNS |
可选 |
滤波器组 |
必需 |
增益控制(预处理) |
可选 |
心理声学模型(感知模块) |
必需 |
MPEG-2 AAC编码器各模块的可选性
为了能够适应于不同的应用场合,在AAC标准中定义了三种不同复杂度的框架(Profile)。分别为:
Main Profile:在这种框架具有最高的复杂度,可以用于存储量和计算能力都很充足的场合。在这种框架中,利用了除增益控制以外的所有编码工具来提高压缩效率。
LC(Low Complexity) Profile:这种框架用于要求在有限的存储空间和计算能力的条件下进行压缩场合。在这种框架中,没有预测和增益控制这两种工具,TNS的阶数比较低。
SSR(Scalable Sample Rate) Profile:在这种框架中,使用了增益控制工具,但是预测和耦合工具是不被允许的,具有较低的带宽和TNS阶数。对于最低的一个PQF子带不使用增益控制工具。当带宽降低时,SSR框架的复杂度也可降低,特别适应于网络带宽变化的场合。
Main和LC框架式变化编码算法,采用MDCT作为其时/频分析模块,SSR框架则采用混合滤波器组,先将信号等带宽地分成4个子带,再作MDCT变换。在三种方案里,通过选用不同模块在编码质量和编码算法复杂度之间进行折衷。
AAC属于感知音频编码。与所有感知音频编码类似,其原理是利用人耳听觉的掩蔽效应,对变换域中的谱线进行编码,去除将被掩蔽的信息,并控制编码时的量化噪声不被分辨。
在编码过程中,时域信号先通过滤波器组(进行加窗MDCT变换)分解成频域谱线,同时时域信号经过MPEG中II型心理声学模型获得信掩比,掩蔽阈值,M/S以及强度立体声编码需要的控制信息,还有滤波器组中应使用长短窗选择信息。暂态噪声整形(TNS)模块将噪声整形为与能量谱包络形状类似,控制噪声的分布。强度立体声编码和预测以及M/S立体声编码都能有效降低编码所需比特数,随后的量化模块用两个嵌套循环进行了比特分配并控制量化噪声小于掩蔽阈值,之后就是改进了码本的哈夫曼编码。这样,与前面各模块得到的边带信息一起,就能构成AAC码流了。
以下将分别对各主要模块的算法原理和相应的实现代码进行分析。