AAC解码算法详细原理解析介绍.doc

上传人:小** 文档编号:807891 上传时间:2019-07-16 格式:DOC 页数:18 大小:316.50KB
返回 下载 相关 举报
AAC解码算法详细原理解析介绍.doc_第1页
第1页 / 共18页
AAC解码算法详细原理解析介绍.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《AAC解码算法详细原理解析介绍.doc》由会员分享,可在线阅读,更多相关《AAC解码算法详细原理解析介绍.doc(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、AACAAC 解码算法原理详解解码算法原理详解原作者:龙帅 () 此文章为便携式多媒体技术中心提供,未经站长授权,严禁转载,但欢迎链接到此地 址。本文详细介绍了符合本文详细介绍了符合 ISO/IECISO/IEC 13818-7(MPEG213818-7(MPEG2 AACAAC audioaudio codec)codec) , , ISO/IECISO/IEC 14496-3(MPEG414496-3(MPEG4 AudioAudio CodecCodec AACAAC LowLow Complexity)Complexity)进行压缩的的进行压缩的的 AACAAC 音频音频的解码算法。的

2、解码算法。1 1、程序系统结构、程序系统结构下面是 AAC 解码流程图:AACAAC 解码流程图解码流程图在主控模块开始运行后,主控模块将 AAC 比特流的一部分放入输入缓冲区,通 过查找同步字得到一帧的起始,找到后,根据 ISO/IEC 13818-7 所述的语法开 始进行 Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通 过反量化(Dequantize)、联合立体声(Joint Stereo),知觉噪声替换(PNS), 瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制(SBR)这几个模 块之后,得出左右声道的 PCM 码流,再由主控模块将其放入

3、输出缓冲区输出到 声音播放设备。2.2. 主控模块主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。其中, 输入输出缓冲区均由 DSP 控制模块提供接口。输出缓冲区中将存放的数据为解 码出来的 PCM 数据,代表了声音的振幅。它由一块固定长度的缓冲区构成,通 过调用 DSP 控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后, 调用中断处理输出至 I2S 接口所连接的音频 ADC 芯片(立体声音频 DAC 和 DirectDrive 耳机放大器)输出模拟声音。3.3. 同步及元素解码同步及元素解码同步及元素解码模块主要用于找出格式信息,并进行头信息解码,以及对元素

4、信息进行解码。这些解码的结果用于后续的无噪解码和尺度因子解码模块。AAC 的音频文件格式有以下两种:ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征 是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解 码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它 是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似 于 mp3 数据流格式。AAC 的 ADIF 格式见下图:3.13.1 ADIFAD

5、IF 的组织结构的组织结构 AAC 的 ADTS 的一般格式见下图:3.23.2 ADTSADTS 的组织结构的组织结构 图中表示出了 ADTS 一帧的简明结构,其两边的空白矩形表示一帧前后的数据。ADIF 和 ADTS 的 header 是不同的。它们分别如下所示:3.33.3 ADIFADIF 的头信息的头信息3.43.4 ADTSADTS 的固定头信息的固定头信息ADTSADTS 的可变头信息的可变头信息3.53.5 帧同步帧同步帧同步目的在于找出帧头在比特流中的位置,13818-7 规定,aac ADTS 格式的 帧头为 12 比特的“1111 1111 1111”. 3.63.6 头

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

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

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

9、分。其一为 4 元组和 2 元组的划分, 另一个为节划分。对前一个划分来说,确定了一次哈夫曼表查找出的数值是 4 个还是 2 个。对后一个划分来说,确定了应该用哪一个哈夫曼表,一节中含有 若干的尺度因子带并且每节只用一个哈夫曼表。4.14.1 分段分段无噪声编码将输入的 1024 个量化频谱系数分为几个段(section),段内的各 点均使用同一个哈夫曼表,考虑到编码效率,每一段的边界最好同尺度因子带 的边界重合。所以每一段必段传送信息应该有:段长度,所在的尺度因子带, 使用的哈夫曼表。4.24.2 分组和交替分组和交替分组是指忽略频谱系数所在窗,将连续的,具有相同尺度因子带的频谱系数分 为一

10、组放在一起,共享一个尺度因子从而得到更好的编码效率。这样做必然会 引起交替,即本来是以c组窗尺度因子带 系数索引为顺序的系数排列,变为将尺度因子带同的系数放在一起:c组尺度因子带窗 系数索引这样就引起了相同窗的系数的交替。4.34.3 大量化值的处理大量化值的处理大量化值在 AAC 中有两种处理方法:在哈夫曼编码表中使用 escape 标志或使用 脉冲 escape 方法。前者跟 mp3 编码方法相似,在许多大量化值出现时采用专门 的哈夫曼表,这个表暗示了它的使用将会在哈夫曼编码后面跟跟一对 escape 值 及对值的符号。在用脉冲 escape 方法时,大数值被减去一个差值变为小数值, 然后

11、使用哈夫曼表编码,后面会跟一个脉冲结构来帮助差值的还原。无噪解码的流程图如下:无噪声解码流程图无噪声解码流程图5.5.尺度因子解码及逆量化尺度因子解码及逆量化在 aac 编码中,逆量化频谱系数是由一个非均匀量化器来实现的,在解码中需 进行其逆运算。即保持符号并进行 4/3 次幂运算。在频域调整量化噪声的基本方法就是用尺度因子来进行噪声整形。尺度因子就是一个用来改变在一个尺度因子带的所有的频谱系数的振幅增益值。使用尺度 因子这种机制是为了使用非均匀量化器在频域中改变量化噪声的比特分配。5.15.1 尺度因子带(尺度因子带(scalefactor-bandscalefactor-band)频率线根

12、据人耳的听觉特性被分成多个组,每个组对应若干个尺度因子,这些 组就叫做尺度因子带。为了减少信息含有短窗的边信息,连续的短窗可能会被 分为一组,即将若干个短窗当成一个窗口一起传送,然后尺度因子将会作用到 所有分组后的窗口去。5.25.2 反量化公式:反量化公式:x_invquant = sign(x_quant) * | x_quant| (4/3)其中x_invquant 表示反量化的结果sign (x)表示取 x 的符号 表示幂运算5.35.3 应用尺度因子公式:应用尺度因子公式:x_rescal = x_invquant * gaingain = 2 (0.25 * (sf SF_OFFS

13、ET)其中x_rescal 为应用了尺度因子公式之后的值gain 为一个增益sf 为尺度因子值SF_OFFSET 为一个常数,设为 1006 6、联合立体声解码、联合立体声解码联合立体声有两种,M/S stereo(中间旁道立体声)和 intensity stereo(强度 立体声) 6.16.1 M/SM/S stereostereo在 M_S 立体声模式中,传送的是规格化的中间/旁边声道的信息,计算公式如下:其中,l, r 表示转换后的左右声道值m 表示中间声道值s 表示旁边声道值 6.26.2 IntensityIntensity stereostereo在强度立体声模式中,左声道传的是

14、幅值,右声道的 scalefactor 传的是立体 声的位置 is_pos。如果仅在一个指定了 common_window 为 1 的 CPE 中的右通道 中指定哈夫曼表为 INTENSITY_HCB 或 INTENSITY_HCB2,则解码时使用强度立体 声模式。其计算公式如下:is_pos += dpcm_is_posscale = invert_intensity * 0.5 (0.25 * ispos)r_spec = scale * l_spec从完全备份中还原从完全备份中还原数据库非常简单,在 9.3.2 节中会详细地is_pos 是右声道传送的 scalefactordpcm_i

15、s_pos 是上一个 is_pos,初值为 0scale 为强度因子invert_intensity 为是否反转哈夫曼表(表 14 和表 15)这个变量由 ms_used 指定,关系为:invert_intensity = 1 2 * ms_used,另外,当 ms_mask_present 为 0 时,invert_intensity 恒为 1。6.36.3 处理流程处理流程联合立体声解码流程图联合立体声解码流程图7 7、PNSPNSPNS(Perceptual Noise Substitution) 知觉噪声替换模块是一种以参数编码的 方式模拟噪声的模块。在判别出音频值中的噪声后,将些噪声

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

17、声信号。PNS 的能量信号用 noise_nrg 来表示,如果使用了 PNS,则能量信号将会代替各自的尺度因子来传送。噪声能量编码同尺度因子一样,采用差分编码的方式。第一个值同样为全局增 益值。它同强度立体声位置值及尺度因子交替地放在一起,但对差分解码来说 又彼此忽略。即下一个噪声能量值以上一个噪声能量值而不是强度立体声位置 或尺度因子为标准差分解码。随机能量将会在一个尺度因子带内产生 noise_nrg 所计算出的平均能量分布。7.17.1 处理流程处理流程PNSPNS 解码流程图解码流程图8 8、TNSTNSTNS 瞬态噪声整形用于控制一个转换窗口内的瞬时噪声形态。它是用一个对单 个通道的

18、滤波过程来实现的。传统的变换编码方案常常遇到信号在时域变化非常剧烈的问题,特别是语音信 号,这个问题是因为量化后的噪声分布虽然在频率域上得到控制,但在时域上 却以一个常数分布在一个转换块内。如果这种块中信号变化得很剧烈却又不转 向一个短块去,那这个常数分布的噪声将会被听到。TNS 的原理利用了时域和频域的二元性和 LPC(线性预测编码)的时频对称性,即 在其中的任意一个域上做编码与在另一域上做预测编码等效,也就是说,在一 个域内做预测编码可以在另一域内增加其解析度。量化噪声产生是在频域产生 的,降低了时域的解析度,故在这里是在频域上做预测编码。在 AACplus 中,由于基于 AAC prof

19、ile LC,故 TNS 的滤波器阶数被限制在 12 阶以内。8.18.1 处理流程处理流程TNSTNS 解码流程图解码流程图9.9. IMDCTIMDCT将音频数据从频域转换到时域的过程主要是由将频域数据填入一组 IMDCT 滤波 器来实现的。在进行 IMDCT 变换后,输出数值经过加窗,叠加,最后得到时域 数值。9.19.1 IMDCTIMDCT 公式公式for 0= n N其中n 为采样点索引值i 为窗索引值k 为频谱系数索引值N 为窗函数的长度,全为短窗 N = 256,其余情况为 2048n0=(N/2 +1)/29.29.2 块型块型由于长块的频域分辨率较高而短块的时域分辨率较高,

20、故长块较适合相对平稳 的时域信号,而短块较适合变化相对较快的时域信号。长块长度为 2048 个点,短块长度为 256 个点。9.39.3 加窗加窗AAC 用到两种窗函数,分别为 Kaiser-Bessel 类(KBD)窗和正弦窗。KBD 窗如下所示:其定义为:for 0 = n = N/2其中使用 KBD 窗时,window_shape 为 1正弦窗如下所示:其定义为使用正弦窗时,window_shape 为 0另定义:对应于四种不同的窗序列分别进行不同的加窗变换:1.) 仅有长块:window_shape 为 1:window_shape 为 0:加窗后,时域信号可用 w(n)表示为:2.)

21、 长开始块:window_shape 为 1:window_shape 为 0:加窗后,时域信号可用 w(n)表示为:3.) 只有短块:window_shape 为 1:window_shape 为 0:加窗后,时域信号可用 w(n)表示为:2.) 长结束块:window_shape 为 1:window_shape 为 0:加窗后,时域信号可用 w(n)表示为:9.49.4 覆盖叠加覆盖叠加在加窗完成后得到的时域信号值 z 经过前后窗相互叠加计算,得出最后的 PCM 值:术语说明术语说明AAC: Advanced Audio Coding 高级音频编码AAC LC: AAC with Low

22、 Complexity AAC 的低复杂度配置AAC plus: 也叫 HE-AAC, AAC+,MPEG4 AAC LC 加入 SBR 模块后形成的一个 aac 版本MPEG:Motion Picture Expert GroupIMDCT:反离散余弦变换ADIF:Audio Data Interchange Format 音频数据交换格式ADTS:Audio Data Transport Stream 音频数据传输流SCE: Single Channel Element 单通道元素CPE: Channel Pair Element 双通道元素CCE: Coupling Channel Element 藕合通道元素DSE: Data Stream Element 数据流元素PCE: Program Config Element 程序配置元素FIL: Fill Element 填充元素ICS: Individual Channel Stream 独立通道流PNS: Perceptual Noise Substitution 知觉噪声替换SBR: Spectral Band Replication 频段复制TNS: Temporal Noise Shaping 瞬时噪声整形ch:channel 通道

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com