AAC解码算法原理详解

上传人:s9****2 文档编号:500331545 上传时间:2023-08-22 格式:DOCX 页数:9 大小:20.69KB
返回 下载 相关 举报
AAC解码算法原理详解_第1页
第1页 / 共9页
AAC解码算法原理详解_第2页
第2页 / 共9页
AAC解码算法原理详解_第3页
第3页 / 共9页
AAC解码算法原理详解_第4页
第4页 / 共9页
AAC解码算法原理详解_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《AAC解码算法原理详解》由会员分享,可在线阅读,更多相关《AAC解码算法原理详解(9页珍藏版)》请在金锄头文库上搜索。

1、AAC解码算法原理详解原作者:龙帅(I)此文章为便携式多媒体技术中心提供,未经站长授权,严禁转载,但欢迎链接到此地址。 本文详细介绍 了符合 ISO/IEC 13818-7(MPEG2 AAC audio codec) , ISO/IEC 14496-3(MPEG4 Audio Codec AAC Low Complexity)进行压缩的的 AAC 音频的解码算法。1. 程序系统结构下面是AAC解码流程图:AAC解码流程图AAC解码流程图在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同 步字得到一帧的起始,找到后,根据 ISO/IEC 13818-7所述的语法开始

2、进行 Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立 体声(Joint Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT), 频段复制(SBR)这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输 出缓冲区输出到声音播放设备。2. 主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。其中,输入输出缓 冲区均由DSP控制模块提供接口。输出缓冲区中将存放的数据为解码出来的PCM数据, 代表了声音的振幅。它由一块固定长度的缓冲区构成,通过调用DSP控制模

3、块的接口函数, 得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC 芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。3. 同步及元素解码同步及元素解码模块主要用于找出格式信息,并进行头信息解码,以及对元素信息进行解码。 这些解码的结果用于后续的无噪解码和尺度因子解码模块。AAC的音频文件格式有以下两种:ADIF: Audio Data Interchange Format音频数据交换格式。这种格式的特征是可以确定的 找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确 定义的开始处进行。故这种格式常用在磁盘文

4、件中。ADTS: Audio Data Transport Stream音频数据传输流。这种格式的特征是它是一个有同 步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。AAC的ADIF格式见下图:3.1 ADIF的组织结构AAC的ADTS的一般格式见下图:3.2 ADTS的组织结构图中表示出了 ADTS 一帧的简明结构,其两边的空白矩形表示一帧前后的数据。ADIF和ADTS的header是不同的。它们分别如下所示:3.3 ADIF的头信息3.4 ADTS的固定头信息ADTS的可变头信息3.5帧同步帧同步目的在于找出帧头在比特流中的位置,13818-7规定,aac A

5、DTS格式的帧头为12比 特的 “1111 1111 1111”.3.6头信息解码ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的 数据每一帧都相同,而可变头信息则在帧与帧之间可变。3.7元素信息解码在AAC中,原始数据块的组成可能有六种不同的元素。它们分别是SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个原 始数据块最可能由16个SCE组成。CPE: Channel Pair Element双通道元素,由两个可能共享边信息的ICS和一些联合立体声 编码信息组成。一个原始数据块最多可能由16个SCE组成

6、。CCE: Coupling Channel Element藕合通道元素。代表一个块的多通道联合立体声信息或 者多语种程序的对话信息。LFE: Low Frequency Element低频元素。包含了一个加强低采样频率的通道。DSE: Data Stream Element数据流元素,包含了一些并不属于音频的附加信息。PCE: Program Config Element程序配置元素。包含了声道的配置信息。它可能出现在ADIF 头部信息中。FIL: Fill Element填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。3.8处理流程(1).判断文件格式,确定为ADIF或ADTS

7、(2) .若为ADIF,解ADIF头信息,跳至第6步。(3) .若为ADTS,寻找同步头。(4) .解ADTS帧头信息。(5) .若有错误检测,进行错误检测。(6) .解块信息。(7) .解元素信息。4. 无噪声解码无噪编码就是哈夫曼编码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,即将尺 度因子和量化后的频谱信息进行哈夫曼编码。全局增益编码成一个8位的无符号整数,第一个尺度因子与全局增益值进行差分编码后再使 用尺度因子编码表进行哈夫曼编码。后续的各尺度因子都与前一个尺度因子进行差分编码。量化频谱的无噪编码有两个频谱系数的划分。其一为4元组和2元组的划分,另一个为节划 分。对前一个划分来

8、说,确定了一次哈夫曼表查找出的数值是4个还是2个。对后一个划分 来说,确定了应该用哪一个哈夫曼表,一节中含有若干的尺度因子带并且每节只用一个哈夫 曼表。4.1分段无噪声编码将输入的1024个量化频谱系数分为几个段(section),段内的各点均使用同一个 哈夫曼表,考虑到编码效率,每一段的边界最好同尺度因子带的边界重合。所以每一段必段 传送信息应该有:段长度,所在的尺度因子带,使用的哈夫曼表。4.2分组和交替分组是指忽略频谱系数所在窗,将连续的,具有相同尺度因子带的频谱系数分为一组放在一 起,共享一个尺度因子从而得到更好的编码效率。这样做必然会引起交替,即本来是以C组窗尺度因子带系数索引为顺序

9、的系数排列,变为将尺度因子带同的系数放在一起:C组尺度因子带窗系数索引这样就引起了相同窗的系数的交替。4.3大量化值的处理大量化值在AAC中有两种处理方法:在哈夫曼编码表中使用 escape标志或使用脉冲 escape方法。前者跟mp3编码方法相似,在许多大量化值出现时采用专门的哈夫曼表,这 个表暗示了它的使用将会在哈夫曼编码后面跟跟一对escape值及对值的符号。在用脉冲 escape方法时,大数值被减去一个差值变为小数值,然后使用哈夫曼表编码,后面会跟一 个脉冲结构来帮助差值的还原。无噪解码的流程图如下:无噪声解码流程图无噪声解码流程图5尺度因子解码及逆量化在aac编码中,逆量化频谱系数是

10、由一个非均匀量化器来实现的,在解码中需进行其逆运 算。即保持符号并进行4/3次幕运算。在频域调整量化噪声的基本方法就是用尺度因子来进行噪声整形。尺度因子就是一个用来改 变在一个尺度因子带的所有的频谱系数的振幅增益值。使用尺度因子这种机制是为了使用非 均匀量化器在频域中改变量化噪声的比特分配。5.1 尺度因子带(scalefactor-band)频率线根据人耳的听觉特性被分成多个组,每个组对应若干个尺度因子,这些组就叫做尺度 因子带。为了减少信息含有短窗的边信息,连续的短窗可能会被分为一组,即将若干个短窗 当成一个窗口一起传送,然后尺度因子将会作用到所有分组后的窗口去。5.2反量化公式:x_in

11、 vqua nt = sig n( x_qua nt) * | x_qua nt| A(4/3)其中xnvquant表示反量化的结果sign (x)表示取x的符号A表示幕运算5.3应用尺度因子公式:x_rescal = x_in vqua nt * gaingain = 2 a (0.25 * (sf -SF_OFFSET)其中x_rescal为应用了尺度因子公式之后的值gai n 为一个增益sf为尺度因子值SF_OFFSET为一个常数,设为1006、联合立体声解码联合立体声有两种,M/S stereo(中间旁道立体声)和intensity stereo(强度立体声)6.1 M/S stere

12、o在M_S立体声模式中,传送的是规格化的中间/旁边声道的信息,计算公式如下:其中,I, r表示转换后的左右声道值m表示中间声道值s表示旁边声道值6.2 Inten sity stereo在强度立体声模式中,左声道传的是幅值,右声道的 scalefactor传的是立体声的位置 is_pos。如果仅在一个指定了 common_window为1的CPE中的右通道中指定哈夫曼表为INTENSITY_HCB或INTENSITY_HCB2,则解码时使用强度立体声模式。其计算公式如下: is_pos += dpcm_is_pos scale = in vert_i nten sity * 0.5 A(0.2

13、5 * ispos) r_spec = scale * l_spec从完全备份中还原 从完全备份中还原数据库非常简单,在932节中会详细地is_pos是右声道传送的scalefactordpcm_is_pos 是上一个 is_pos,初值为0scale为强度因子invert_intensity为是否反转哈夫曼表(表14和表15)这个变量由ms_used指定,关系为: invert_intensity = 1 -2 * ms_used,另夕卜,当 ms_mask_present 为0时,invert_intensity 恒为1。6.3处理流程联合立体声解码流程图 联合立体声解码流程图7、PNSP

14、NS(Perceptual Noise Substituten)知觉噪声替换模块是一种以参数编码的方式模拟噪声 的模块。在判别出音频值中的噪声后,将些噪声不进行量化编码,而是采用一些参数告诉解 码器端这是某种噪声,然后解码器端将会对这些噪声用一些随机的编码来制造出这一类型的 噪声。在具体操作上,PNS模块对每个尺度因子带侦测频率4kHz以下的信号成分。如果这个信号 既不是音调,在时间上也无强烈的能量变动,就被认为是噪声信号。其信号的音调及能量变 化都在心理声学模型中算出。在解码中,如果发现使用了哈夫曼表13(NOISE_HCB),则表明使用了 PNS。由于M/S立体声解码与PNS解码互斥,故可

15、以用参数ms_used来表明是否两个声道都用 同样的PNS。如果ms_used参数为1,则两个声道会用同样的随机向量来生成噪声信号。PNS的能量信号用noise_nrg来表示,如果使用了 PNS,则能量信号将会代替各自的尺度 因子来传送。噪声能量编码同尺度因子一样,采用差分编码的方式。第一个值同样为全局增益值。它同强 度立体声位置值及尺度因子交替地放在一起,但对差分解码来说又彼此忽略。即下一个噪声 能量值以上一个噪声能量值而不是强度立体声位置或尺度因子为标准差分解码。随机能量将会在一个尺度因子带内产生noise_nrg所计算出的平均能量分布。7.1处理流程PNS解码流程图PNS解码流程图8、TNSTNS瞬态噪声整形用于控制一个转换窗口内的瞬时噪声形态。它是用一个对单个通道的滤 波过程来实现的。传统的变换编码方案常常遇到信号在时域变化非常剧烈的问题,特别是语音信号,这个问题 是因为量化后的噪声分布虽然在频率域上得到控制,但在时域上却以一个常数分布在一个转 换块内。如果这种块中信号变化得很剧烈却又不转向一个短块去,那这个常数分布的噪声将 会被听到。TNS的原理利用了时域和频域的二元性和LPC(线性预测编码)的时频对称性,即在其中的 任意一个域上做编码与在另一域

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号