AAC 文件解析及解码流程Word下载.docx
《AAC 文件解析及解码流程Word下载.docx》由会员分享,可在线阅读,更多相关《AAC 文件解析及解码流程Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
AAC共有9种规格,以适应不同的场合的需要:
MPEG-2AACLC低复杂度规格(LowComplexity)--比较简单,没有增益控制,但提高了
编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点
MPEG-2AACMain主规格
MPEG-2AACSSR可变采样率规格(ScaleableSampleRate)
MPEG-4AACLC低复杂度规格(LowComplexity)------现在的手机比较常见的MP4文件中
的音频部份就包括了该规格音频文件
MPEG-4AACMain主规格------包含了除增益控制之外的全部功能,其音质最好
MPEG-4AACSSR可变采样率规格(ScaleableSampleRate)
MPEG-4AACLTP长时期预测规格(LongTermPredicition)
MPEG-4AACLD低延迟规格(LowDelay)
MPEG-4AACHE高效率规格(HighEfficiency)-----这种规格适合用于低码率编码,有
NeroACC编码器支持
目前使用最多的是LC和HE(适合低码率)。
流行的NeroAAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。
HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术;
Hev1和HEv2用此图简单表示:
(图中AAC即指的是原来的AAC-LC)
HE:
“HighEfficiency”(高效性)。
HE-AACv1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)+SBR技术。
SBR其实代表的是SpectralBandReplication(频段复制)。
简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。
如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;
若是保存了低频的主要成分而失去高频成分就会丧失音质。
SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。
HEv2:
用容器的方法包含了HE-AACv1和PS技术。
PS指“parametricstereo”(参数立体声)。
原来的立体声文件文件大小是一个声道的两倍。
但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。
所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。
三、AAC特点
(1)AAC是一种高压缩比的音频压缩算法,但它的压缩比要远超过较老的音频压缩算法,
如AC-3、MP3等。
并且其质量可以同未压缩的CD音质相媲美。
(2)同其他类似的音频编码算法一样,AAC也是采用了变换编码算法,但AAC使用了分辨率
更高的滤波器组,因此它可以达到更高的压缩比。
(3)AAC使用了临时噪声重整、后向自适应线性预测、联合立体声技术和量化哈夫曼编码等最新技术,这些新技术的使用都使压缩比得到进一步的提高。
(4)AAC支持更多种采样率和比特率、支持1个到48个音轨、支持多达15个低频音轨、具有
多种语言的兼容能力、还有多达15个内嵌数据流。
(5)AAC支持更宽的声音频率范围,最高可达到96kHz,最低可达8KHz,远宽于MP3的16KHz-48kHz的范围。
(6)不同于MP3及WMA,AAC几乎不损失声音频率中的甚高、甚低频率成分,并且比WMA在频谱结构上更接近于原始音频,因而声音的保真度更好。
专业评测中表明,AAC比WMA声音更清晰,而且更接近原音。
(7)AAC采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力。
四、AAC音频文件格式
1.AAC的音频文件格式有ADIF&ADTS:
ADIF:
AudioDataInterchangeFormat音频数据交换格式。
这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。
故这种格式常用在磁盘文件中。
ADTS:
AudioDataTransportStream音频数据传输流。
这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。
它的特征类似于mp3数据流格式。
简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。
ADIF只有一个统一的头,所以必须得到所有的数据后解码。
且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。
两者具体的组织结构如下所示:
AAC的ADIF格式见下图:
AAC的ADTS的一般格式见下图:
图中表示出了ADTS一帧的简明结构,其两边的空白矩形表示一帧前后的数据。
2.ADIF和ADTS的header
ADIF的头信息:
ADIF头信息位于AAC文件的起始处,接下来就是连续的rawdatablocks。
组成ADIF头信息的各个域如下所示:
ADTS的固定头信息:
ADTS的可变头信息:
(1)帧同步目的在于找出帧头在比特流中的位置,13818-7规定,aacADTS格式的帧头
同步字为12比特的“111111111111”.
(2)ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。
固定头信息中
的数据每一帧都相同,而可变头信息则在帧与帧之间可变。
3.AAC元素信息
在AAC中,原始数据块的组成可能有六种不同的元素:
SCE:
SingleChannelElement单通道元素。
单通道元素基本上只由一个ICS组成。
一个
原始数据块最可能由16个SCE组成。
CPE:
ChannelPairElement双通道元素,由两个可能共享边信息的ICS和一些联合立体
声编码信息组成。
一个原始数据块最多可能由16个SCE组成。
CCE:
CouplingChannelElement藕合通道元素。
代表一个块的多通道联合立体声信息
或者多语种程序的对话信息。
LFE:
LowFrequencyElement低频元素。
包含了一个加强低采样频率的通道。
DSE:
DataStreamElement数据流元素,包含了一些并不属于音频的附加信息。
PCE:
ProgramConfigElement程序配置元素。
包含了声道的配置信息。
它可能出现在
ADIF头部信息中。
FIL:
FillElement填充元素。
包含了一些扩展信息。
如SBR,动态范围控制信息等。
4.AAC文件处理流程
(1) 判断文件格式,确定为ADIF或ADTS
(2) 若为ADIF,解ADIF头信息,跳至第6步。
(3) 若为ADTS,寻找同步头。
(4)解ADTS帧头信息。
(5)若有错误检测,进行错误检测。
(6)解块信息。
(7)解元素信息。
五、AAC解码流程
(AAC解码流程图)
在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字
得到一帧的起始,找到后,根据ISO/IEC13818-7所述的语法开始进行NoislessDecoding(无
噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint
Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制
(SBR)这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到
声音播放设备。
技术解析:
1.主控模块:
所谓的主控模块,它的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。
其中,输入输出缓冲区均由DSP控制模块提供接口。
输出缓冲区中将存放的数据为解码出来的
PCM数据,代表了声音的振幅。
它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接
口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的
音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。
2.NoislessDecoding(无噪解码):
无噪编码就是哈夫曼编码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,
即将尺度因子和量化后的频谱信息进行哈夫曼编码。
全局增益编码成一个8位的无符号整数,
第一个尺度因子与全局增益值进行差分编码后再使用尺度因子编码表进行哈夫曼编码。
后续
的各尺度因子都与前一个尺度因子进行差分编码。
量化频谱的无噪编码有两个频谱系数的划分。
其一为4元组和2元组的划分,另一个为节划分。
对前一个划分来说,确定了一次哈夫曼表
查找出的数值是4个还是2个。
对后一个划分来说,确定了应该用哪一个哈夫曼表,一节中
含有若干的尺度因子带并且每节只用一个哈夫曼表。
——分段
无噪声编码将输入的1024个量化频谱系数分为几个段(section),段内的各点均使用
同一个哈夫曼表,考虑到编码效率,每一段的边界最好同尺度因子带的边界重合。
所以每一段
必段传送信息应该有:
段长度,所在的尺度因子带,使用的哈夫曼表。
——分组和交替
分组是指忽略频谱系数所在窗,将连续的,具有相同尺度因子带的频谱系数分为一组放在
一起,共享一个尺度因子从而得到更好的编码效率。
这样做必然会引起交替,即本来是以
c[组][窗][尺度因子带][系数索引]
为顺序的系数排列,变为将尺度因子带同的系数放在一起:
c[组][尺度因子带][窗][系数索引]
这样就引起了相同窗的系数的交替。
——大量化值的处理
大量化值在AAC中有两种处理方法:
在哈夫曼编码表中使用escape标志或使用脉冲
escape方法。
前者跟mp3编码方法相似,在许多大量化值出现时采用专门的哈夫曼表,这个表
暗示了它的使用将会在哈夫曼编码后面跟跟一对escape值及对值的符号。
在用脉冲escape
方法时,大数值被减去一个差值变为小数值,然后使用哈夫曼表编码,后面会跟一个脉冲结构
来帮助差值的还原.
3.尺度因子解码及逆量化
在AAC编码中,逆量化频谱系数是由一个非均匀量化器来实现的,在解码中需进行其逆运算。
即保持符号并进行4/3次幂运算。
在频域调整量化噪声的基本方法就是用尺度因子来进行噪声整形。
尺度因子就是一个用来改
变在一个尺度因子带的所有的频谱系数的振幅增益值。
使用尺度因子这种机制是为了使用非
均匀量化器在频域中改变量化噪声的比特分配。
——尺度因子带(scalefactor-band)
频率线根据人耳的听觉特性被分成多个组,每个组对应若干个尺度因子,这些组就叫做尺度
因子带。
为了减少信息含有短窗的边信息,连续的短窗可能会被分为一组,即将若干个短窗
当成一个窗口一起传送,然后尺度因子将会作用到所有分组后的窗口去。
4.联合立体声(Joint
Stereo)
联合立体声的是对原来的取样进行的一定的渲染工作,使声音更”好听”些。
5.知觉噪声替换(PNS)
知觉噪声替换模块是一种以参数编码的方式模拟噪声的模块。
在判别出音频值中的噪
声后,将些噪声不进行量化编码,而是采用一些参数告诉解码器端这是某种噪声,然后解
码器端将会对这些噪声用一些随机的编码来制造出这一类型的噪声。
在具体操作上,PNS模块对每个尺度因子带侦测频率4kHz以下的信号成分。
如果这个
信号既不是音调,在时间上也无强烈的能量变动,就被认为是噪声信号。
其信号的音调及能
量变化都在心理声学模型中算出。
在解码中,如果发现使用了哈夫曼表13(NOISE_HCB),则表明使用了PNS。
由于M/S立体
声解码与PNS解码互斥,故可以用参数ms_used来表明是否两个声道都用同样的PNS。
如果
ms_used参数为1,则两个声道会用同样的随机向量来生成噪声信号。
PNS的能量信号用
noise_nrg来表示,如果使用了PNS,则能量信号将会代替各自的尺度因子来传送。
噪声能量
编码同尺度因子一样,采用差分编码的方式。
第一个值同样为全局增益值。
它同强度立体声位
置值及尺度因子交替地放在一起,但对差分解码来说又彼此忽略。
即下一个噪声能量值以上一
个噪声能量值而不是强度立体声位置或尺度因子为标准差分解码。
随机能量将会在一个尺度
因子带内产生noise_nrg所计算出的平均能量分布。
此项技术只有在MPEG-4AAC中才会使用。
6.瞬时噪声整形(TNS)
这项神奇的技术可以通过在频率域上的预测,来修整时域上的量化噪音的分布。
在一
些特殊的语音和剧烈变化信号的量化上,TNS技术对音质的提高贡献巨大!
TNS瞬态噪声整形用于控制一个转换窗口内的瞬时噪声形态。
它是用一个对单个通道的
滤波过程来实现的。
传统的变换编码方案常常遇到信号在时域变化非常剧烈的问题,特别是语
音信号,这个问题是因为量化后的噪声分布虽然在频率域上得到控制,但在时域上却以一个常
数分布在一个转换块内。
如果这种块中信号变化得很剧烈却又不转向一个短块去,那这个常数
分布的噪声将会被听到。
TNS的原理利用了时域和频域的二元性和LPC(线性预测编码)的时频对称性,即在其中的
任意一个域上做编码与在另一域上做预测编码等效,也就是说,在一个域内做预测编码可以在
另一域内增加其解析度。
量化噪声产生是在频域产生的,降低了时域的解析度,故在这里是在
频域上做预测编码。
在AACplus中,由于基于AACprofileLC,故TNS的滤波器阶数被限制在
12阶以内。
7.反离散余弦变换(IMDCT)
将音频数据从频域转换到时域的过程主要是由将频域数据填入一组IMDCT滤波器来实现
的。
在进行IMDCT变换后,输出数值经过加窗,叠加,最后得到时域数值。
8.频段复制(SBR)
简要叙述,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了
音质。
如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;
若是
保存了低频的主要成分而失去高频成分就会丧失音质。
SBR把频谱切割开来,低频单独编码保存
主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了
音质,完美的化解这一矛盾。
9.参数立体声(PS)
对于之前的立体声文件来说,其文件大小是单声道的两倍,但是两个声道的声音存在
某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。
所以PS技术
存储了一个声道的全部信息,之后,用很少的字节当作参数来描述另一个声道和它不同的地方。
术语说明:
AAC:
AdvancedAudioCoding高级音频编码
AACLC:
AACwithLowComplexityAAC的低复杂度配置
AACplus:
也叫HE-AAC,AAC+,MPEG4AACLC加入SBR模块后形成的一个AAC版本
MPEG:
MotionPictureExpertGroup
IMDCT:
反离散余弦变换
ADIF:
AudioDataInterchangeFormat音频数据交换格式
ADTS:
AudioDataTransportStream音频数据传输流
SCE:
SingleChannelElement单通道元素
CPE:
ChannelPairElement双通道元素
CCE:
CouplingChannelElement藕合通道元素
DSE:
DataStreamElement数据流元素
PCE:
ProgramConfigElement程序配置元素
FIL:
FillElement填充元素
ICS:
IndividualChannelStream独立通道流
PNS:
PerceptualNoiseSubstitution知觉噪声替换
SBR:
SpectralBandReplication频段复制
TNS:
TemporalNoiseShaping瞬时噪声整形
ch:
channel通道
PS:
parametricstereo参数立体声
SBR:
SpectralBandReplication频段复制