AAC解码算法原理详解,MP3解码算法原理解析

作者:新闻中心

如果大家对音视频技术感兴趣,可以订阅我的专题 视频播放器和音视频基础知识。

如果大家对音视频相关知识感兴趣,可以订阅我的专题 视频播放器和音视频基础知识。

参考资料:

声音

如何将现实生活中的声音转换成数字信号?

图片 1MP3解码流程

图片 2AAC解码流程图

AAC以adts格式封装的分析:

脉冲编码调制(PCM)

图片 3

pcm.png

看懵逼了是吧。这里面有很多概念需要一一讲解。

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

aac编码介绍:

脉冲编码调制示意图

  • 图3-2(a),是一个以Ts为时间间隔的窄脉冲序列p(t)。因为要用它进行抽样,所以称为#抽样脉冲。
  • 图3-2(b),v(t)是待抽样的模拟电压信号,抽样后的离散信号k(t)的取值分别为k(0)=0.2,k(Ts)=0.4,k(2Ts)=1.8,k(3Ts)=2.8,k(4Ts)=3.6,k(5Ts)=5.1,k(6Ts)=6.0,k(7Ts)=5.7,k(8Ts)=3.9,k(9Ts)=2.0,k(10Ts)=1.2,可见取值在0-6之间是随机的,也就是说可以有无穷个可能的取值。
  • 图3-2(c),为了把无穷个可能取值变成有限个,我们必须对k(t)的取值进行量化(即四舍五入),得到m(t)则m(t)的取值变为:m(0)=0.0,m(Ts)=0.0,m(2Ts)=2.0,m(3Ts)=3.0,m(4Ts)=4.0,m(5Ts)=5.0,m(6Ts)=6.0,m(7Ts)=6.0,m(8Ts)=4.0,m(9Ts)=2.0,m(10Ts)=1.0,总共只有0-6等7个可能的取值。
  • 图3-2(d),m(t)已经变成数字信号,但还不是实际应用中的二进制数字信号,因此对m(t)用3位二进制编码元进行自然编码就得到图3-2(d)的数字信号d(t),从而完成了A/D转换,实现了脉冲编码调制,即PCM全过程。
![](https://upload-images.jianshu.io/upload_images/1718623-4b01420302130e7b.png)

图3-2.png

模拟电压信号V(t)通过乘法器与一个抽样窄脉冲序列p(t)相乘,就会得到一个幅度值随V(t)的变化而变化的窄脉冲序列k(t)

图片 4

图.png

  • 比特流:比特流是一种内容分发协议。它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),并使每个用户像网络重新分配结点那样提供上传服务。(因为没有专业学过这方面的内容,我暂且把它理解为一段数据,里面的内容有时间再探讨)。

  • 同步及差错检查:mp3的数据流的传输和同步工作中都是以帧为单位的。帧是MP3最小的格式单元,它不可以再被分割。每一帧头部包含了当前帧的一些基本信息,其中就包括同步信息。同步信息的组成是包含连续的12比特的‘1’。mp3视频解码工作的第一步就是使解码器和输入数据流同步。在启动解码器之后,可以搜索数据中连续12个比特的‘1’来完成。在取得同步信息之后,帧头部后续的信息是:帧头信息,包括采样率、填充位、比特率等信息。

  • 哈夫曼解码:你可以这样理解,我把不同的数据通过一个表格进行一一对应,用这个对应的码来表示原来的信息,那么出现频率高的数,我用尽可能短的码来表示。出现频率低的数用长一点的码来表示。这样可以减少表示信息的内容量。而且传输过去之后,再按照这个对照码可以进行还原。大概原理就是这个。

  • 逆量化 量化过程的逆过程,想了解这个各位需要学习一下量化的过程。

  • IMDCT:IMDCT是缩写,全称是:Inverse Modified Discrete Cosine Transform(反向修正离散余弦变换)。在MP3中需要使用此算法将输入数据从频域变换到余弦域,对子带滤波进行补偿运算。使用逆向离散余弦变换的公式,对反量化得出的信号进行变换。IMDCT运算公式大概长这样:图片 5IMDCT运算公式IMDCT运算过程如下图:图片 6IMDCT运算过程

  • 频率反转:对逆向离散余弦变换的输出值中的奇数号子带(0到31号子带中的1,3,5,...,31)中的奇数号样本值(每个子带中的0到17号样本值的1,3,5,...,17号样本值)进行反相处理,用来补偿编码时为提高离散余弦变换效率而进行的频率反转。

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

AAC音频压缩编码标准的ADTS与LATM的格式分析:

了解量化过程

量化就是将一个连续函数的无限个数值的集合映射为一个离散函数的有限个数值的集合。

  • 量化值—— 确定的量化后的取值
  • 量化级—— 量化值的个数
  • 量化间隔—— 相邻的2个量化值之差
    v(t)的样值信号k(t)和量化后的量化信号m(t)是不一样的。
    例如:k(0) = 0.2 而 m(0) = 0

接收端只能是量化后的信号m(t),而不能恢复出k(t),这样就使得收发信号之间的误差,这称为量化误差或量化噪声。

采用的是"四舍五入"进行量化,因此量化噪声的最大值是0.5,一般来说,量化噪声,最大绝对误差值是0.5个量化间隔。这个量化间隔都一样的量化叫做均匀量化。

针对以上的概念,如果有不清楚的,可以看我的另外一篇博客:MP3头帧解析,里面有一些和帧头信息相关的知识。

同步及元素解码模块主要用于找出格式信息,并进行头信息解码,以及对元素信息进行解码。这些解码的结果用于后续的无噪解码和尺度因子解码模块。

AAC解码算法原理详解:(详细讲解了解码的过程,及每一步的操作原理)

音频压缩编码原理&标准

数字音频的质量取决于:采样频率和量化位数这2个参数为了保证在时间变化方向上取样点尽量密,取样频率要高,在幅度取值上尽量细,量化比特率要高,直接的结果就是存储容量及传输信道容量要求的压力。

  • 音频信号的传输率 = 取样频率 * 样本量化比特数 * 通道数

     取样频率 = 44.1kHz
    
     样本值的量化比特率 = 16
    
     普通立体声的信号通道数= 2
    
     数字信号传输码流大约 1.4Mbit(8/Byte)
    
     达176.4Byte(字节),等于88200个汉字的数据量
    
  • 数字音频信号包含的对人们感受信息影响可以忽略的成分成为冗余
    — 时域冗余
    — 频域冗余
    — 听觉冗余

MPEG-1 音频压缩编码标准    高保真压缩

杜比AC-3 音频压缩编码

MPEG-2 AAC       压缩到20:1都不损音质,支持多声道48个,更高的解析度96hz,提升编码效率,解码占用内存少   高效的处理方式

MPEG-4 音频压缩编码

同步及差错检查包括了头部信息解码模块 在主控模块开始运行后,主控模块将比特流的数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码,根据它们的信息进行 尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混淆缩减, IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的 PCM 码 流 , 再由主控模块将其放入输出缓冲区输出到声音播放设备。

AAC的音频文件格式有以下两种:

 

AAC解码算法原理详解

本文详细介绍了符合ISO/IEC 13818-7(MPEG2 AAC audio codec) , ISO/IEC 14496-3(MPEG4 Audio Codec AAC Low Complexity)进行压缩的的AAC音频的解码算法。

AAC音频格式有ADIF(适用于磁盘) & ADTS

主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。 其中,输入输出缓冲区均由 DSP 控制模块提供接口。

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

 

将PCM转换为AAC音频流

1.设置编码器(codec),并开始录制
2.收集PCM数据,传给编码器
3.编码完成后回调callback,写入文件


输入缓冲区中放的数据为原始 mp3 压缩数据流,DSP 控制模块每次给出大于最大 可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据 连接在一起,构成新的缓冲区。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

 

1、程序系统结构

下面是AAC解码流程图:

图片 7

屏幕快照 2017-08-01 上午10.53.39.png

在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通 过查找同步字得到一帧的起始,找到后,根据ISO/IEC 13818- 7所述的语法开始进行Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequanti ze)、联合立体声(Joint Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IM DCT),频段复制(SBR)这几个模块之后,得出左右声道的PCM码流,再由主控 模块将其放入输出缓冲区输出到声音播放设备。
2. 主控模块
主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。其中 ,输入输出缓冲区均由DSP控制模块提供接口。输出缓冲区中将存放的数据为解 码出来的PCM数据,代表了声音的振幅。它由一块固定长度的缓冲区构成,通过 调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用 中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive 耳机放大器)输出模拟声音。
3. 同步及元素解码
同步及元素解码模块主要用于找出格式信息,并进行头信息解码,以及对元素
信息进行解码。这些解码的结果用于后续的无噪解码和尺度因子解码模块。
AAC的音频文件格式有以下两种:
ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始, 不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处 进行。故这种格式常用在磁盘文件中。
ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在 这个流中任何位置开始。它的特征类似于mp3数据流格式。
AAC的ADIF格式见下图:

图片 8

ADIF.png

输出缓冲区中将存放的数据为解码出来的 PCM 数据,代表了声音的振幅。它由一 块固定长度的缓冲区构成,通过调用 DSP 控制模块的接口函数,得到头指针,在 完成输出缓冲区的填充后,调用中断处理输出至 I2S 接口所连接的音频 ADC 芯片 (立体声音频 DAC 和 DirectDrive 耳机放大器)输出模拟声音。

AAC的ADIF格式见下图:

OUTLINE:

AAC音频格式有ADIF & ADTS

同步及差错检测模块主要用于找出数据帧在比特流中的位置,并对以此位置开始 的帧头、CRC 校验码及帧边信息进行解码,这些解码的结果用于后继的尺度因子 解码模块和哈夫曼解码模块。Mpeg1 layer 3 的流的主数据格式见下图:

图片 9ADIF格式AAC的ADTS的一般格式见下图:图片 10ADTS一般格式

         * AAC概述

图片 11主数据的组织结构图

图中表示出了ADTS一帧的简明结构,其两边的空白矩形表示一帧前后的数据。ADIF和ADTS的header是不同的。它们分别如下所示:

         * AAC规格简述

其中 granule0 和 granule1 表示在一帧里面的粒度组 1 和粒度组 2,channel0 和 channel1 表示在一个粒度组里面的两个通道,scalefactor 为尺度因子 quantized value 为量化后的哈夫曼编码值,它分为 big values 大值区和 count1 1 值区

图片 12ADTS一帧的结构图片 13ADIF头信息图片 14ADTS固定头信息

         * AAC特点    

CRC 校验:表达式为 X16 X15 X2 1

帧同步目的在于找出帧头在比特流中的位置,13818-7规定,aac ADTS格式的帧头为12比特的“1111 1111 1111”.

         * AAC音频文件解析

3.1 帧同步

帧同步目的在于找出帧头在比特流中的位置,ISO 1172-3 规定,MPEG1 的帧头 为 12 比特的“1111 1111 1111”,且相邻的两个帧头隔有等间距的字节数,这 个字节数可由下式算出:

N= 144 * 比特率 / 采样率

如果这个式子的结果不是整数,那么就需要用到一个叫填充位的参数,表示间距 为 N 1。

ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变。

            ——ADIF&ADTS格式

3.2 头信息解码

头信息解码目的是找出这一帧的特征信息,如采样率,是否受保护,是否有填充 位等。头信息见下图:图片 15帧头信息结构图

其长度为 4 字节,数据结构如下:

typedef struct tagHeader {unsigned int sync : 11 ; / / 同步信息unsigned int version : 2 ; / / 版本unsigned int layer : 2 ; / / 层unsigned int error2protection : 1 ; / / CRC 校正 unsigned int bit2rate2index : 4 ; / / 位率索引unsigned int sample2rate2index : 2 ; / / 采样率索引 unsigned int padding : 1 ; / / 空白字unsigned int extension : 1 ; / / 私有标志 unsigned int channel2mode : 2 ; / / 立体声模式 unsigned int mode extension : 2 ; / / 保留unsigned int copyright : 1 ; / / 版权标志unsigned int original : 1 ; / / 原始媒体unsigned int emphasis : 2 ; / / 强调方式} HEADER

在AAC中,原始数据块的组成可能有六种不同的元素。它们分别是

            ——ADIF&ADTS头信息

3.3 帧边信息解码

帧边信息解码的主要目的在于找出解这帧的各个参数,包括主数据开始位置,尺 度因子长度等。帧边信息如下图所示:图片 16帧边信息(side_infomation)表

  • SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个原始数据块最可能由16个SCE组成。

  • CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的ICS和一些联合立体声编码信息组成。一个原始数据块最多可能由16个SCE组成。

  • CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息或者多语种程序的对话信息。

  • LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道。

  • DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息。

  • PCE: Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在ADIF 头部信息中。

  • FIL: Fill Element 填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。

            ——ADIF&ADTS数据信息

3.4 main_data_begin

main_data_begin是一个偏移值,指出主数据是在同步字之前多少 个字节开始。需要注意的是,1.帧头不一定是一帧的开始,帧头 CRC 校验字和帧 边信息在帧数据中是滑动的。2.这个数值忽略帧头和帧边信息的存在,如果 main_data_begin = 0, 则主数据从帧边信息的下一个字节开始。 参见下图:图片 17同步示意图

. 判断文件格式,确定为ADIF或ADTS

            ——AAC文件处理流程

3.5 block_type

block_type 指出如下三种块类型:

block_type = 0 长块block_type = 1 开始块 block_type = 3 结束块 block_type = 2 短块

在编码过程中进行 IMDCT 变换时,针对不同信号为同时得到较好的时域和频域 分辨率定义了两种不同的块长:长块的块长为 18 个样本,短块的块长为 6 个样 本。这使得长块对于平稳的声音信号可以得到更高的频率分辨率,而短块对跳变 信号可以得到更高的时域分辨率。由于在短块模式下,3 个短块代替 1 个 长 块 , 而短块的大小恰好是一个长块的 1/3,所以 IMDCT 的样本数不受块长的影响。对 于给定的一帧声音信号,IMDCT 可以全部使用长块或全部使用短块,也可以长短 块混合使用。因为低频区的频域分辨率对音质有重大影响,所以在混合块模式下 , IMDCT 对最低频的 2 个子带使用长块,而对其余的 30 个子带使用短块。这样, 既能保证低频区的频域分辨率,又不会牺牲高频区的时域分辨率。长块和短块之 间的切换有一个过程,一般用一个带特殊长转短(即,起始块 block_type = 1) 或短转长(即终止块,block_type = 3)数据窗口的长块来完成这个长短块之间 的切换。因此长块也就是包括正常窗,起始块和终止块数据窗口的数据块;短块 也包含 18 个数据,但是是由 6 个数据独立加窗后在经过连接计算得到的。

. 若为ADIF,解ADIF头信息,跳至第6步。

         * AAC解码流程

3.6 big_values, count1

每一个粒度组的频谱都是用不同的哈夫曼表来进行编码的。编码时,把整个从 0 到奈奎斯特频率的频率范围(共 576 个频率线)分成几个区域,然后再用不同的 表编码。划分过程是根据最大的量化值来完成的,它假设较高频率的值有较低的 幅度或者根本不需要编码。从高频开始,一对一对的计算量化值等于“0”的数 目,此数目记为“rzero”。然后 4 个一组地计算绝对值不超过“1”的量化值(也 就是说,其中只可能有-1,0 和 1 共 3 个可能的量化级别)的数目,记为“count1”,在此区域只应用了 4 个哈夫曼编码表。最后,剩下的偶数个值的 对数记为“big values”, 在此区域只应用了 32 个哈夫曼编码表。在此范围 里的最大绝对值限制为 8191。此后,为增强哈夫曼编码性能,进一步划分了频 谱。也就是说,对 big values 的区域再细化,目的是为了 得到更好的错误顽健性和更好的编码效率。在不同的区域内应用了不同的哈夫曼 编码表。具体使用哪一个表由 table_select 给出。从帧边信息表中可以看到: 当 window_switch_flag == 0 时,只将大值区在细分为 2 个区,此时 region1_count 无意义,此时的 region0_count 的值是标准默认的;但当 window_switch_flag == 1 时再将大值区细分为 3 个区。但是由于 region0_count 和 region1_count 是根据从 576 个频率线划分的, 因此有可能 超出了 big_values *2 的范围,此时以 big_values *2 为准. region0_count 和 region1_count 表示的只是一个索引值,具体频带要根据标准中的缩放因子频带 表来查得.

参见下图:

图片 18缩放因子、大值区、1 值区和零值区分布图

. 若为ADTS,寻找同步头。

            ——技术解析

3.7 处理流程

图片 19处理流程

缩放因子用于对哈夫曼解码数据进行逆量化的样点重构。根据帧边信息中的 scalefactor_compress 和标准中的对应表格来确定的 slen1 和 slen2 对缩放因 子进行解码,即直接从主数据块中读取缩放因子信息并存入表 scalefac_l[gr][ch][sfb]和 scalefac_s[gr][ch][sfb]中。对第 2 粒度组解码 时,若为长块,则必须考虑尺度因子选择信息。

. 解ADTS帧头信息。

         * 术语说明

4.1 尺度因子带(scalefactor-band)

在 mpeg layer 3 中 576 条频率线根据人耳的听觉特性被分成多个组,每个组对 应若干个尺度因子,这些组就叫做尺度因子带,每个长窗有 21 个尺度因子带而 每个短窗有 12 个尺度因子带。

. 若有错误检测,进行错误检测。

 

4.2 scfsi

scfsi用于指出是否将粒度组 1 的尺度因子用于粒度组 2。 如果为 0 表示不用,则在比特流中需读取粒度组 2 的尺度因子。

. 解块信息。

 一.AAC概述

4.3 处理流程

图片 20缩放因子解码流程图

哈夫曼编码是一种变长编码,在 mp3 哈夫曼编码中,高频的一串零值不编码,不 超过 1 的下一个区域使用四维哈夫曼编码,其余的大值区域采用二维哈夫曼编 码,而且可选择地分为三个亚区,每个有独立选择的哈夫曼码表。通过每个亚区 单独的自适应码表,增强编码效率,而且同时降低了对传输误码的敏感度。 在程序实现上,哈夫曼表逻辑存储采用了广义表结构,物理存储上使用数组结构 。 查表时,先读入 4bit 数据,以这 4bit 数据作为索引,其指向的元素有两种类型 , 一种是值结构,另一种是链表指针式结构,在链表指针式结构中给出了还需要读 取的 bit 数,及一个偏移值。如果索引指向的是一个值结构,则这个值结构就包 含了要查找的数据。如果索引指向的是一个链表指针式结构,则还需再读取其中 指定的比特数,再把读取出的比特数同偏移值相加,递归的找下去,直到找到值 结构为止。

. 解元素信息。

 

5.1 处理流程

图片 21处理流程

无噪编码就是哈夫曼编码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,即将尺度因子和量化后的频谱信息进行哈夫曼编码。

    AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。

6.1 逆量化公式

逆量化由下面公式算出:短窗模式:

图片 22

is[i] 由 huffman 编码构造的频率线
sbg subblock_gain
scalefac_multiplier = (scalefac_scale 1) / 2

长窗模式:

图片 23

其中:

is[i] 由 huffman 编码构造的频率线
sbg subblock_gain
scalefac_multiplier = (scalefac_scale 1) / 2

其它值均可在帧边信息中找到。

全局增益编码成一个8位的无符号整数,第一个尺度因子与全局增益值进行差分编码后再使用尺度因子编码表进行哈夫曼编码。后续的各尺度因子都与前一个尺度因子进行差分编码。

    AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于AAC SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC SBR PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC。

7.1 强度立体声转换

在强度立体声模式中,左声道传的是幅值,右声道的 scalefactor 传的是立体声 的位置 is_pos。需要转换的频率线有一个低边界,这个低边界是由右声道的 zero_part 决定的,并且使用右声道的尺度因子来作为 is_pos。

强度立体声比图片 24

左声道:

图片 25右声道:图片 26其中 Mi 是 channel[0]的值,Si 是 channel[1]的值

量化频谱的无噪编码有两个频谱系数的划分。其一为4元组和2元组的划分,另一个为节划分。对前一个划分来说,确定了一次哈夫曼表查找出的数值是4个还是2个。对后一个划分来说,确定了应该用哪一个哈夫曼表,一节中含有若干的尺度因子带并且每节只用一个哈夫曼表。

 

7.3 处理流程

强度立体声模式:图片 27

MS_STEREO 因公式单一,较易理解,故流程图略去。

重排序的目的在于把哈夫曼解码之后的短块的每个尺度因子带 3 个窗,每个窗 sfbwidth个采样的顺序整理成为每个子带三个窗,每个窗六个 采样 xr[sb][window][freq_line]的顺序。

4.1 分段

无噪声编码将输入的1024个量化频谱系数分为几个段,段内的各点均使用同一个哈夫曼表,考虑到编码效率,每一段的边界最好同尺度因子带的边界重合。所以每一段必段传送信息应该有:段长度,所在的尺度因子带,使用的哈夫曼表。

二、AAC规格简述

8.1 处理流程

图片 28重排序处理流程图对于长块,在进入 IMDCT 之前应当先进行混淆缩减。其算法思想是用蝶形算法进 行相邻块相邻频率线的调整。如图:图片 29混淆缩减算法图

其计算公式如下:

图片 30其中 ci 可由 ISO 1172.3 table B.9 查得

计算流程如下(pascal 描述):

For sb = 1 to 32 do For i = 0 to 7 do Xar[18sb- i -1] = xr[18sb – i - 1]cs[i] – xr[18sb   i]ca[i] Xar[18sb i] = xr[18sb  i]cs[i]   xr[18sb -i- 1]ca[i] End forEnd for

MDCT 的目的在于进行时域到频域的转换,减少信号的相关性,使得信号的压缩 可以更加高效地完成,而它的反变换 IMDCT 的目的在于将信号还原为没有变换之 前的数值,使频域值向时域值过渡。

其公式如下:

图片 31

在进行了 IMDCT 变换之后,需对频率信号进行加窗、覆盖、叠加。

4.2 分组和交替

分组是指忽略频谱系数所在窗,将连续的,具有相同尺度因子带的频谱系数分为一组放在一起,共享一个尺度因子从而得到更好的编码效率。这样做必然会引起交替,即本来是以c[组][窗][尺度因子带][ 系数索引]

为顺序的系数排列,变为将尺度因子带同的系数放在一起:c[组][尺度因子带][窗][ 系数索引]这样就引起了相同窗的系数的交替。

 

10.1 加窗:

长块:

图片 32

开始块:

图片 33

结束块:

图片 34

短块的每个窗口分别计算:

图片 35

4.3大量化值的处理

大量化值在AAC中有两种处理方法:在哈夫曼编码表中使用escape标志或使用脉冲escape方法。前者跟mp3编码方法相似,在许多大量化值出现时采用专门的哈夫曼表,这个表暗示了它的使用将会在哈夫曼编码后面跟跟一对escape值及对值的符号。在用脉冲escape方法时,大数值被减去一个差值变为小数值,然后使用哈夫曼表编码,后面会跟一个脉冲结构来帮助差值的还原。

无噪解码的流程图如下:

图片 36无噪解码的流程图

在aac编码中,逆量化频谱系数是由一个非均匀量化器来实现的,在解码中需进行其逆运算。即保持符号并进行4/3次幂运算。

在频域调整量化噪声的基本方法就是用尺度因子来进行噪声整形。尺度因子就是一个用来改变在一个尺度因子带的所有的频谱系数的振幅增益值。使用尺度因子这种机制是为了使用非均匀量化器在频域中改变量化噪声的比特分配。

      AAC共有9种规格,以适应不同的场合的需要:

10.2 叠加:

将每一块变换出来的值的前半部分与前一块的后半部分相加,并把后半部分保留 来和下一块的前半部分相加。如下公式:

resulti = zi   sifor i = 0 to 17si = zi 18 for i = 0 to 17

5.1 尺度因子带(scalefactor-band)

频率线根据人耳的听觉特性被分成多个组,每个组对应若干个尺度因子,这些组就叫做尺度因子带。为了减少信息含有短窗的边信息,连续的短窗可能会被分为一组,即将若干个短窗当成一个窗口一起传送,然后尺度因子将会作用到所有分组后的窗口去。

       MPEG-2 AAC LC 低复杂度规格(Low Complexity)--比较简单,没有增益控制,但提高了

10.3 Szu-Wei Lee 的快速算法

Szu-Wei Lee 的 IMDCT 快速算法是针对非 2 的 n 次幂个点的 IMDCT 快速算法。他 的主要步骤如下:

  1. 将 N 点 MDCT 化为 N/2 点 DCT-IV
  2. 将 N/2 点 DCT-IV 化为 N/2 点 SDCT-II
  3. 将 N/2 点 SDCT-II 化为 2 个相同的 N/4 点 SDCT-II
  4. 计算 SDCT-II

在本程序中,因为对短块使用这个快速算法并没有带来较大的速度改善,故只对 长块使用此快速算法,相较于直接运算的 648 次乘和 612 次加来,它只用 43 次 乘和 115 次加。

在 IMDCT 之后,进入合成多相滤波之前必须进行频率反转补偿以校正多相滤波器 组的频率反转。方法是将奇数号子带的奇数个采样值乘以-1.

合成多相滤波的目的是将频域信号转化为时域信号。其原理流程如下:

图片 37合成多相滤波算法图

上图流程可简述如下:

  1. 将从 32 个子带抽来的 32 个 sample 值通过一个矩阵运算算 出 64 个中间值

  2. 将这 64 个中间值放入一个长度为 1024 的 FIFO 缓冲区(这个 缓冲区初始化为 0)。

  3. 从这个缓冲区中每连续的 128 个值中取头尾各 32 个值,合 为 64 个值。完成后组成 512 值的向量 U

  4. 加窗,即将 Ui 与窗口系数 Di 相乘,得到另一 512 值向量 W

  5. 最后将这 512 值向量 W 每连续的 32 个值中顺次取一个值, 一次共取得 512/32 = 16 个值相加。完成后一共取得 32 个 最终的时域信号值。

Byeong Gi Lee 的 dct 快速算法

Byeong Gi Lee 的 DCT 快速算法是用于 2 的 n 次幂个点的 dct 快速算法。它用于 N 点的 DCT 时仅需 * log2N 次乘法和小于 3·log2 N ) 次加法。 其基本思想是,将 N 个点的 DCT 转化为两个 N/2 个点的 DCT 的和。 进一步分解, 即重复这个过程,减少乘法数量。

由于向量 Vi 的运算是一个类似于 DCT 的变换,故使用了此快速算法。32 点运算 共使用了 80 次乘法和 80 次加法 119 次减法。

MPEG Motion Picture Expert Group
IMDCT 反离散余弦变换
gr granule 粒度组
ch channel 通道

5.2 反量化公式

 x_invquant = sign * | x_quant| ^

其中:

x_invquant 表示反量化的结果
sign 表示反量化的结果
^ 标识幂运算

  编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点

5.3 应用尺度因子公式:

x_rescal = x_invquant * gaingain = 2 ^ (0.25 * (sf – SF_OFFSET))
x_rescal 为应用了尺度因子公式之后的值
gain 为一个增益
sf 为尺度因子值
SF_OFFSET 为一个常数,设为100

其中:

x_rescal 为应用了尺度因子公式之后的值
gain 为一个增益
sf 为尺度因子值
SF_OFFSET 为一个常数,设为100

联合立体声有两种,M/S stereo和intensity stereo

       MPEG-2 AAC Main 主规格

6.1 M/S stereo

在M_S立体声模式中,传送的是规格化的中间/旁边声道的信息,计算公式如下:

图片 38

l, r 表示转换后的左右声道值
m 表示中间声道值
s 表示旁边声道值

       MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)

6.2 Intensity stereo

在强度立体声模式中,左声道传的是幅值,右声道的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
is_po 是右声道传送的scalefactor
dpcm_is_pos 是上一个is_pos,初值为0
scale 为强度因子
invert_intensity 为是否反转哈夫曼表这个变量由ms_used指定,关系为:invert_intensity = 1 – 2 * ms_used,另外,当ms_mask_present为0时,invert_intensity恒为1。

从完全备份中还原,从完全备份中还原数据库非常简单

is_po 是右声道传送的scalefactor
dpcm_is_pos 是上一个is_pos,初值为0
scale 为强度因子
invert_intensity 为是否反转哈夫曼表这个变量由ms_used指定,关系为:invert_intensity = 1 – 2 * ms_used,另外,当ms_mask_present为0时,invert_intensity恒为1。

       MPEG-4 AAC LC 低复杂度规格(Low Complexity)------现在的手机比较常见的MP4文件中

6.3 处理流程

图片 39联合立体声解码流程图

PNS(Perceptual Noise Substitution) 知觉噪声替换模块是一种以参数编码的方式模拟噪声的模块。在判别出音频值中的噪声后,将些噪声不进行量化编码,而是采用一些参数告诉解码器端这是某种噪声,然后解码器端将会对这些噪声用一些随机的编码来制造出这一类型的噪声。

在具体操作上,PNS模块对每个尺度因子带侦测频率4kHz以下的信号成分。如果这个信号既不是音调,在时间上也无强烈的能量变动,就被认为是噪声信号。其信号的音调及能量变化都在心理声学模型中算出。

在解码中,如果发现使用了哈夫曼表13(NOISE_HCB),则表明使用了PNS。

由于M/S立体声解码与PNS解码互斥,故可以用参数ms_used来表明是否两个声道都用同样的PNS。如果ms_used参数为1,则两个声道会用同样的随机向量来生成噪声信号。

PNS的能量信号用noise_nrg来表示,如果使用了PNS,则能量信号将会代替各自的尺度因子来传送。

噪声能量编码同尺度因子一样,采用差分编码的方式。第一个值同样为全局增益值。它同强度立体声位置值及尺度因子交替地放在一起,但对差分解码来说又彼此忽略。即下一个噪声能量值以上一个噪声能量值而不是强度立体声位置或尺度因子为标准差分解码。

随机能量将会在一个尺度因子带内产生noise_nrg所计算出的平均能量分布。

  的音频部份就包括了该规格音频文件

7.1 处理流程

图片 40PNS解码流程图

TNS瞬态噪声整形用于控制一个转换窗口内的瞬时噪声形态。它是用一个对单个通道的滤波过程来实现的。

传统的变换编码方案常常遇到信号在时域变化非常剧烈的问题,特别是语音信号,这个问题是因为量化后的噪声分布虽然在频率域上得到控制,但在时域上却以一个常数分布在一个转换块内。如果这种块中信号变化得很剧烈却又不转向一个短块去,那这个常数分布的噪声将会被听到。

TNS的原理利用了时域和频域的二元性和LPC的时频对称性,即在其中的任意一个域上做编码与在另一域上做预测编码等效,也就是说,在一个域内做预测编码可以在另一域内增加其解析度。量化噪声产生是在频域产生的,降低了时域的解析度,故在这里是在频域上做预测编码。

在AACplus中,由于基于AAC profile LC,故TNS的滤波器阶数被限制在12阶以内。

       MPEG-4 AAC Main 主规格 ------包含了除增益控制之外的全部功能,其音质最好

8.1 处理流程

图片 41TNS解码流程图

将音频数据从频域转换到时域的过程主要是由将频域数据填入一组IMDCT滤波器来实现的。在进行IMDCT变换后,输出数值经过加窗,叠加,最后得到时域数值。

       MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)

9.1 IMDCT公式

图片 42IMDCT公式

 for 0<= n <N
n 采样点索引值
i 窗索引值
k 频谱系数索引值
N 窗函数长度,全为短窗N = 256,其余情况为2048
 n0=/2

       MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)

9.2 块型

由于长块的频域分辨率较高而短块的时域分辨率较高,故长块较适合相对平稳的时域信号,而短块较适合变化相对较快的时域信号。

长块长度为2048个点,短块长度为256个点。

      MPEG-4 AAC LD 低延迟规格(Low Delay)

9.3 加窗

AAC用到两种窗函数,分别为Kaiser-Bessel 类窗和正弦窗。

KBD窗如下所示:

图片 43KBD窗定义为:图片 44

 for 0 <= n <= N/2

图片 45

使用KBD窗时,window_shape 为1

正弦窗如下所示:

图片 46

定义如下图:

图片 47使用正弦窗时,window_shape 为0

另定义:

图片 48

对应于四种不同的窗序列分别进行不同的加窗变换:1.) 仅有长块:window_shape 为 1:

图片 49

window_shape 为0:

图片 50加窗后,时域信号可用w表示为:图片 512.) 长开始块:

window_shape 为 1:

图片 52

window_shape 为0:

图片 53

加窗后,时域信号可用w表示为:

图片 543.) 只有短块:window_shape 为 1:图片 55

window_shape 为0:

图片 56加窗后,时域信号可用w表示为:图片 57

2.) 长结束块:window_shape 为 1:

图片 58

window_shape 为0

图片 59加窗后,时域信号可用w表示为:图片 60

      MPEG-4 AAC HE 高效率规格(High Efficiency)-----这种规格适合用于低码率编码,有

9.4 覆盖叠加

在加窗完成后得到的时域信号值z经过前后窗相互叠加计算,得出最后的PCM值:

图片 61

AAC Advanced Audio Coding 高级音频编码
AAC LC AAC with Low Complexity AAC的低复杂度配置
AAC plus HE-AAC, AAC ,MPEG4 AAC LC加入SBR模块后形成的一个aac版本
MPEG Motion Picture Expert Group
IMDCT 反离散余弦变换
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 通道

  Nero ACC 编码器支持

       

      目前使用最多的是LC和HE(适合低码率)。流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC) SBR技术,HEv2就是AAC(LC) SBR PS技术;

   图片 62

 

              Hev1和HEv2用此图简单表示:

            (图中AAC即指的是原来的AAC-LC) 

 

      HE:“High Efficiency”(高效性)。HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC) SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。

 

      HEv2:用容器的方法包含了HE-AAC v1和PS技术。PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以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:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

       ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

       简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。两者具体的组织结构如下所示:

      AAC的ADIF格式见下图:

      图片 63

  

      AAC的ADTS的一般格式见下图:

     

         图片 64

      图中表示出了ADTS一帧的简明结构,其两边的空白矩形表示一帧前后的数据。

  

     2. ADIF和ADTS的header

        ADIF 的头信息:

 

       图片 65

   

 

  ADIF头信息位于AAC文件的起始处,接下来就是连续的 raw data blocks。

     组成ADIF头信息的各个域如下所示:

 

      图片 66

     ADTS 的固定头信息:

    图片 67

     

 

     ADTS的可变头信息:

   图片 68

    

(1)帧同步目的在于找出帧头在比特流中的位置,13818-7规定,aac ADTS格式的帧头

             同步字为12比特的“1111 1111 1111”.

           

      (2)ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中

           的数据每一帧都相同,而可变头信息则在帧与帧之间可变。

 

       3.AAC元素信息

            

       在AAC中,原始数据块的组成可能有六种不同的元素:

       SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个

           原始数据块最可能由16个SCE组成。

       CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的ICS和一些联合立体

            声编码信息组成。一个原始数据块最多可能由16个SCE组成。

       CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息

           或者多语种程序的对话信息。

       LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道。

       DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息。

       PCE: Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在

            ADIF 头部信息中。

       FIL: Fill Element 填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。

 

       4.AAC文件处理流程

       (1) 判断文件格式,确定为ADIF或ADTS

       (2) 若为ADIF,解ADIF头信息,跳至第6步。

       (3) 若为ADTS,寻找同步头。

       (4)解ADTS帧头信息。

       (5)若有错误检测,进行错误检测。

       (6)解块信息。

       (7)解元素信息。

 

五、AAC解码流程

  图片 69

 (AAC解码流程图)

      

       在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字

   得到一帧的起始,找到后,根据ISO/IEC 13818-7所述的语法开始进行Noisless Decoding(无

   噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint

   Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制 

 (SBR)这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到

  声音播放设备。

      

     技术解析:

         1.主控模块:

         所谓的主控模块,它的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。

     其中,输入输出缓冲区均由DSP控制模块提供接口。输出缓冲区中将存放的数据为解码出来的

     PCM数据,代表了声音的振幅。它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接  

     口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的

     音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。

 

         2.Noisless Decoding(无噪解码):

         无噪编码就是哈夫曼编码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,

     即将尺度因子和量化后的频谱信息进行哈夫曼编码。全局增益编码成一个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-4 AAC中才会使用。

           6.瞬时噪声整形(TNS)

           这项神奇的技术可以通过在频率域上的预测,来修整时域上的量化噪音的分布。在一

     些特殊的语音和剧烈变化信号的量化上,TNS技术对音质的提高贡献巨大!

           TNS瞬态噪声整形用于控制一个转换窗口内的瞬时噪声形态。它是用一个对单个通道的

    滤波过程来实现的。传统的变换编码方案常常遇到信号在时域变化非常剧烈的问题,特别是语

    音信号,这个问题是因为量化后的噪声分布虽然在频率域上得到控制,但在时域上却以一个常

    数分布在一个转换块内。如果这种块中信号变化得很剧烈却又不转向一个短块去,那这个常数

    分布的噪声将会被听到。

          TNS的原理利用了时域和频域的二元性和LPC(线性预测编码)的时频对称性,即在其中的

    任意一个域上做编码与在另一域上做预测编码等效,也就是说,在一个域内做预测编码可以在

    另一域内增加其解析度。量化噪声产生是在频域产生的,降低了时域的解析度,故在这里是在

    频域上做预测编码。在AACplus中,由于基于AAC profile LC,故TNS的滤波器阶数被限制在 

    12阶以内。

           7.反离散余弦变换(IMDCT)

          将音频数据从频域转换到时域的过程主要是由将频域数据填入一组IMDCT滤波器来实现

    的。在进行IMDCT变换后,输出数值经过加窗,叠加,最后得到时域数值。

           8.频段复制(SBR)

           简要叙述,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了

    音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是    

    保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存

    主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了

    音质,完美的化解这一矛盾。

           9.参数立体声(PS)

           对于之前的立体声文件来说,其文件大小是单声道的两倍,但是两个声道的声音存在

    某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术

    存储了一个声道的全部信息,之后,用很少的字节当作参数来描述另一个声道和它不同的地方。

 

 

 

 

  

术语说明:

AAC: Advanced Audio Coding 高级音频编码

AAC LC: AAC with Low Complexity AAC的低复杂度配置

AAC plus: 也叫HE-AAC, AAC ,MPEG4 AAC LC加入SBR模块后形成的一个AAC版本

MPEG:Motion Picture Expert Group

IMDCT:反离散余弦变换

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 通道

PS:parametric stereo 参数立体声

SBR:Spectral Band Replication 频段复制

转载自:

本文由新葡京8455发布,转载请注明来源

关键词: