AAC的ADTS格式及解码算法详解
- 格式:doc
- 大小:303.00 KB
- 文档页数:12
AAC解码算法原理详解AAC(Advanced Audio Coding)是一种高级音频编码格式,它是MPEG-2和MPEG-4标准中定义的一种音频压缩算法。
AAC算法通过使用一系列的信号处理技术,能够在保持高音质的同时实现较高的压缩率。
本文将详细解释AAC解码算法的原理,包括主要的信号处理步骤和算法流程。
一、AAC解码算法的主要信号处理步骤1. 帧解析(Frame Parsing):AAC音频数据以一帧一帧的形式进行传输和存储。
解码器首先需要对输入的AAC数据进行帧解析,将音频数据按照帧的格式进行划分和组织。
2. 音频元数据提取(Audio Metadata Extraction):在AAC数据中,包含了一些音频元数据,如采样率、声道数、比特率等信息。
解码器需要从AAC数据中提取这些元数据,以便后续的解码处理。
3. 预处理(Preprocessing):预处理是为了减少音频数据中的冗余信息和噪声,提高解码的准确性和音质。
预处理步骤包括滤波、降噪、均衡化等。
4. 频谱分析(Spectrum Analysis):频谱分析是将音频数据从时域转换到频域的过程。
在AAC解码中,常用的频谱分析算法有快速傅里叶变换(FFT)和短时傅里叶变换(STFT)。
频谱分析可以提取音频数据的频谱特征,用于后续的声音重建。
5. 音频解码(Audio Decoding):音频解码是将压缩的AAC数据解码为原始的音频信号的过程。
在AAC解码中,主要使用了两种解码算法:MDCT(Modified Discrete Cosine Transform)和TNS(Temporal Noise Shaping)。
MDCT算法将频域的音频数据转换为时域的音频数据,而TNS算法则用于降低音频数据中的噪声。
6. 声音重建(Audio Reconstruction):声音重建是将解码后的音频信号进行还原和重建的过程。
在AAC解码中,声音重建主要采用了滤波、插值和重采样等技术,以提高音质和还原度。
音频编码流程:硬件采集→PCM编码[原始量化点|样值] →分帧[960|1024][生成原始帧raw frame|原始数据块] →封装[ADTS|LATM(较主流)] 待续Ps:原始数据块以帧的形式存在,故又称为原始帧。
AAC:最初为MPEG-2音频编码标准,后来经过优化又被加入到MPEG-4音频标准之中;相对于mp3,wmv,mp2,ac3,等在相同播放质量码率更低,有效地节约了传输带宽,在移动广播领域,互联网流媒体,IPTV中有着很广泛的应用。
其最常见的封装格式为:ADTS AND LATM这是广播电视、通信领域常用的封装格式。
RTP 协议采用的AAC封装格式是LATM格式,这里ADTS LATM间的转换尤为重要,AAC格式压缩编码标准:AAC编码规格:LC-AAC:地复杂度编码HE-ACC:高效率编码,这里引入了SBR[频段复制技术]技术,又称为AAC+技术HE-AAC-V2:在AAC+的基础之上又引入了PS[参数化立体声]技术封装格式:ADTS格式:short for :audio data transform stream对前述原始帧进行ADTS封装就形成ADTS帧,ADTS帧:帧头+帧净荷组成,帧头存储了音频的相关参数信息:采样率,声道数,帧长度等关键信息[用帧净荷数据的解析解码]。
帧净荷主要有原始帧组成[960|1024个样值]。
可包含1~4个原始帧。
LATM格式:Low overhead MPEG-4 audio transport Multiplex.[低开销因音频传输复用] LATM也以帧为单位,组成为:AudioSpecificConfig+音频负载组成。
AudioSpecificConfig描述了一个LATM帧的信息,音频负载主要由PayloadLengthInfo及音频负载组成[多组]。
AudioSpecificConfig可以是带内传输也可以带外传输,AudioSpecificConfig一般不变,所以只需发送一次,由此可见AudioSpecificConfig采用带内传输可以适应编码信息不断变化的情况,而采用带外传输,可以节省音频传输码率,带内和带外由muxConfigPresent标志决定[0:带外|1:带内]。
AAC音频格式分析与解码AAC(Advanced Audio Coding)是一种高级音频编码格式,它是MPEG-2音频的继承者,广泛应用于数字音频传输和存储中。
在本文中,我们将对AAC音频格式进行分析和解码。
AAC音频格式是一种有损压缩格式,它能够提供与其他音频格式相同的音频质量,但文件大小更小。
AAC通过采用一些先进的编码技术,如感知音频编码(Perceptual Audio Coding)、熵编码等,对音频信号进行压缩。
这样一来,就能够在相同的比特率下提供更高的音频质量。
AAC格式的音频文件通常以文件扩展名".aac"或".m4a"存储。
这些文件可以在许多不同的设备和平台上播放,如音频播放器、个人电脑、智能手机和流媒体服务等。
下面我们来分析AAC的编码和解码过程。
编码过程:1.音频采样:首先,原始音频信号通过麦克风或其他音频设备进行采样。
采样率通常为44.1kHz,与标准的CD音质相同。
2.信号预处理:采样的音频信号经过预处理步骤,如重采样、滤波等,以准备好用于编码的信号。
3.频域分析:音频信号通过傅立叶变换等方法转换为频域信号。
4.感知音频编码:这是AAC编码的核心步骤。
通过对频域信号进行感知编码,过滤掉人耳听觉不敏感的频率成分,从而减少编码数据量。
5. 熵编码:对感知编码后的信号进行熵编码,使用Adaptive Huffman Coding等算法进行数据压缩。
6.输出压缩数据:将编码后的数据写入AAC文件。
解码过程:1.读取AAC文件:首先,解码器读取存储在AAC文件中的压缩数据。
2.数据解压:对读取的压缩数据进行解压缩,恢复为编码前的数据。
3.熵解码:对解压后的数据进行熵解码,还原为感知编码后的频域信号。
4.逆变换:通过逆傅立叶变换等方法将频域信号转换回时域信号。
5.音频重构:将逆变换得到的时域信号进行音频重构处理,还原为原始的音频信号。
6.输出音频:将重构的音频信号输出到音频设备进行播放。
mp4、AAC数据格式、解析⽂件的创建修改时间AAC⽂件资料:AAC的⾳频⽂件格式有ADIF & ADTS:ADIF:Audio Data Interchange Format ⾳频数据交换格式。
这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。
故这种格式常⽤在磁盘⽂件中。
ADTS:Audio Data Transport Stream ⾳频数据传输流。
这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。
它的特征类似于mp3数据流格式。
:.⼀加⼿机的录⾳⽂件是AAC格式的。
经过观察,这个⾳频⽂件格式为ADTS。
对这种类型⽂件分析,可以参考下mp3⽂件的⾳频数据帧---------------------------------------------------------------------------------------------------------------------------------------------MP4⽂件格式M4A⽂件头:MP4⽂件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4⽂件由若⼲个box组成,每个box有类型和长度,可以将box理解为⼀个数据对象块。
box中可以包含另⼀个box,这种box称为container box。
⼀个MP4⽂件⾸先会有且只有⼀个“ftyp”类型的box,作为MP4格式的标志并包含关于⽂件的⼀些信息。
Box说明:⾸先需要说明的是,box中的字节序为⽹络字节序,也就是⼤端字节序(Big-Endian),简单的说,就是⼀个32位的4字节整数存储⽅式为⾼位字节在内存的低端。
Box由header和body组成,其中header统⼀指明box的⼤⼩和类型,body根据类型有不同的意义和格式。
标准的box开头的4个字节(32位)为box size,该⼤⼩包括box header和box body整个box的⼤⼩,这样我们就可以在⽂件中定位各个box。
1.综述1.1背景早期的声音是用模拟信号的方式进行记录,并存储在磁盘和唱片上,这种方式能够准确地记录原声源的特性,并重放,但此方式不利于长期存储和复制。
随着数字化音频编码技术的产生,可以将原始模拟信号进行数字化离散处理,再保存,在保证声音的音质同时,减小存储空间。
发展过程中,越来越多的标准被制定出来。
如(MP3)、AAC、Dolby AC-3、WMA等,其中MPEG组织制定的一系列音频编码标准占据主要地位,成为商业领域最广泛的音频编码技术,AAC是具有代表性的编码技术。
MPEG 先进音频编码技术(Advanced Audio Coding,简称AAC)是在MP3(MPEG -1 Layer 3)基础上发展而来,出现于1997年,基于MPEG-2的音频编码技术。
由Fraunhofer IIS、杜比实验室、AT&T、Sony(新力)等公司共同开发。
具有压缩比高、重建音质好、编码和解码过程高度模块化、以及声道配置灵活等特点。
目前已被广泛应用于多媒体、信息通讯、网络广播电视等领域。
1.2数字音频编码概述音频编码压缩算法是为了保证在重构的音频信号不失真的前提下,以尽量少的位数来描述原始音频信号,以便于有限地存储或传输高音质的音频信号。
根据压缩编码原理的不同,可将音频编码方式分为四种,分别是波形编码、参数编码、混合编码和感知编码。
对于不同的音频编码方式,其运算复杂度、重构信号的质量、压缩率、编码和解码的延迟等都会有很大的不同,因此它们的应用场合也不会相同。
其中,感知编码主要是利用人耳听觉系统的心理声学特征,即人耳对音频信号的时间和频率的分辨能力是有限的,凡是人耳不能感知的成分不进行编码和传输,而人耳能够感知的部分运用心理声学原理进行压缩编码,并且在量化噪声低于掩蔽阈值的前提下允许有较大的量化失真。
感知编码一方面运用信号的统计特性移除了信号之间的冗余度,另一方面利用了心理声学中的掩蔽特性去掉了人耳系统无法感知的部分,从而使信号得到进一步的压缩。
AAC ADTS 格式分析一、ADTS格式:ADTS的全称是Audio Data Transport Stream。
是AAC音频的传输流格式。
AAC音频格式在MPEG-2(ISO-13318-7 2003)中有定义。
AAC后来又被采用到MPEG-4标准中。
1. adts_sequence(){while (nextbits() == syncword) {adts_frame();}}2. adts_frame(){adts_fixed_header();adts_variable_header();if (number_of_raw_data_blocks_in_frame == 0) {adts_error_check();raw_data_block();}else {adts_header_error_check();for (i = 0; i <= number_of_raw_data_blocks_in_frame; i++) {raw_data_block();adts_raw_data_block_error_check();}}}3.adts_fixed_header(){syncword; 12 bslbfID; 1 bslbflayer; 2 uimsbfprotection_absent; 1 bslbfprofile; 2 uimsbfsampling_frequency_index; 4 uimsbfprivate_bit; 1 bslbfchannel_configuration; 3 uimsbforiginal/copy; 1 bslbfhome; 1 bslbf}adts_variable_header(){copyright_identification_bit; 1 bslbfcopyright_identification_start; 1 bslbfframe_length; 13 bslbfadts_buffer_fullness; 11 bslbfnumber_of_raw_data_blocks_in_frame; 2 uimsfb}详细说明下ADTS头的重要数据部分:syncword 同步字The bit string ‘1111 1111 1111’,说明一个ADTS帧的开始。
AAC音频编码格式,完整名称叫做"高级音频编码(Advanced Audio Codec)”。
这种先进而高级的编码规范,是由Fraunhofer IIS公司(前MP3标准的制定者)、Dolby、AT&T、索尼、苹果等产业巨头共同开发的。
AAC音频编码技术早在1997年就制定成型,当时在MPEG-2中作为了MPEG2-AAC 音频编码规格之一,后来,在2000年被用在MPEG-4中(ISO 14496-3 Audio),所以现在变更为MPEG-4 AAC标准,也就是说,AAC已经成为MPEG4家族的主要成员之一,它是MPEG4第三部分中的音频编码系统。
AAC可提供最多48个全音域音频通道。
其中,AAC音频编码在不同的领域,分为九种规格:MPEG-2 AAC MainMPEG-2 AAC LC (Low Complexity)MPEG-2 AAC SSR (Scalable Sampling Rate)MPEG-4 AAC MainMPEG-4 AAC LC (Low Complexity)MPEG-4 AAC SSR (Scalable Sample Rate)MPEG-4 AAC LTP (Long Term Predicition)MPEG-4 AAC LD (Low Delay)MPEG-4 AAC HE (High Efficiency) AACPlusV1/V2(3GPP)其中,前三种估计很难用到,后六种中,LC和HE两种比较常用,因此就主要介绍这两种:MPEG-4 AAC LC (Low Complexity) 是最常用的规格,我们叫“低复杂度规格”,我们简称“LC-AAC”,这种规格在中等码率的编码效率以及音质方面,都能找到平衡点。
所谓中等码率,就是指:96kbps-192kbps之间的码率。
因此,如果要使用LC-AAC规格,请尽可能把码率控制在之前说的那个区间内。
AAC格式介绍AAC格式介绍AAC(Advanced Audio Coding),中文称为“高级音频编码”,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。
2000年,MPEG-4标准出台,AAC重新集成了其特性,加入了SBR技术和PS技术,为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。
作为一种高压缩比的音频压缩算法,远胜MP3;在音质方面,由于采用多声道,和使用低复杂性的描述方式,使其比几乎所有的传统编码方式在同规格的情况下更胜一筹。
一般来说,AAC可以在对比MP3文件缩小30%的前题下提供更好的音质。
AAC是目前唯一一个,能够在所有的EBU试听测试项目的获得“优秀”的网络广播格式。
AAC格式扩展名.AAC - 基于MPEG-2的音频编码技术,属于传统的AAC编码。
.MP4 - 基于MPEG-4的音频编码技术。
.M4A - 苹果(Apple)公司对纯音频MP4文件采用的扩展名,本质和音频MP4相同。
(包含视频的MP4文件为".M4V")支持AAC的播放器及设备支持AAC的音乐播放器(部分)(点击下载)iTunes | 千千静听 | Windows Media Player 11 | foobar2000支持视频AAC(M4V)的音乐播放器(部分)(点击下载)iTunes & Quicktime | Windows Media Player 11 | 暴风影音支持AAC的设备:苹果的全线iPod和iPhone产品;国内外各大品牌的主流随身听机型,如索尼、艾利和、创新、三星、爱国者、纽曼等;各大手机品牌的主流机型,如诺基亚、索尼爱立信、三星、摩托罗拉、夏普等。
AAC与MP3规格对比比特率:AAC - 最高超过400kbps / MP3 - 32~320kbps采样率:AAC - 最高96kHz / MP3 - 最高48kHz声道数:AAC - (5.1)六声道 / MP3 - 两声道采样精度:AAC - 最高32bit / MP3 - 最高16bit。
AAC⾳频格式----ADTS基础:AAC⾳频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主要的贡献者。
AAC⾳频格式分两种:ADIF和ADTS:ADIF:Audio Data Interchange Format ⾳频数据交换格式。
这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。
故这种格式常⽤在磁盘⽂件中。
ADTS:Audio Data Transport Stream。
是AAC⾳频的传输流格式。
AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。
AAC后来⼜被采⽤到MPEG-4标准中。
这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。
它的特征类似于mp3数据流格式。
简单说,ADTS可以在任意帧解码,也就是说它每⼀帧都有头信息。
ADIF只有⼀个统⼀的头,所以必须得到所有的数据后解码。
且这两种的header的格式也是不同的,⽬前⼀般编码后的和抽取出的都是ADTS格式的⾳频流。
两者具体的组织结构如下所⽰:ADIF格式:ADTS格式(空⽩处表⽰前后帧):AAC(ADTS)⾳频结构:每⼀帧的ADTS的头⽂件都包含了⾳频的采样率,声道,帧⻓度等信息,这样解码器才能解析读取。
⼀般情况下ADTS的头信息都是7个字节,分为2部分:adts_fixed_header();adts_variable_header();其⼀为固定头信息,紧接着是可变头信息。
固定头信息中的数据每⼀帧都相同,⽽可变头信息则在帧与帧之间可变。
adts_fixed_header:syncword:同步头总是0xFFF, all bits must be 1,代表着⼀个ADTS帧的开始ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2Layer:always: '00'protection_absent:表⽰是否误码校验。
1.综述1.1背景早期的声音是用模拟信号的方式进行记录,并存储在磁盘和唱片上,这种方式能够准确地记录原声源的特性,并重放,但此方式不利于长期存储和复制。
随着数字化音频编码技术的产生,可以将原始模拟信号进行数字化离散处理,再保存,在保证声音的音质同时,减小存储空间。
发展过程中,越来越多的标准被制定出来。
如(MP3)、AAC、Dolby AC-3、WMA等,其中MPEG组织制定的一系列音频编码标准占据主要地位,成为商业领域最广泛的音频编码技术,AAC是具有代表性的编码技术。
MPEG 先进音频编码技术(Advanced Audio Coding,简称AAC)是在MP3(MPEG -1 Layer 3)基础上发展而来,出现于1997年,基于MPEG-2的音频编码技术。
由Fraunhofer IIS、杜比实验室、AT&T、Sony(新力)等公司共同开发。
具有压缩比高、重建音质好、编码和解码过程高度模块化、以及声道配置灵活等特点。
目前已被广泛应用于多媒体、信息通讯、网络广播电视等领域。
1.2数字音频编码概述音频编码压缩算法是为了保证在重构的音频信号不失真的前提下,以尽量少的位数来描述原始音频信号,以便于有限地存储或传输高音质的音频信号。
根据压缩编码原理的不同,可将音频编码方式分为四种,分别是波形编码、参数编码、混合编码和感知编码。
对于不同的音频编码方式,其运算复杂度、重构信号的质量、压缩率、编码和解码的延迟等都会有很大的不同,因此它们的应用场合也不会相同。
其中,感知编码主要是利用人耳听觉系统的心理声学特征,即人耳对音频信号的时间和频率的分辨能力是有限的,凡是人耳不能感知的成分不进行编码和传输,而人耳能够感知的部分运用心理声学原理进行压缩编码,并且在量化噪声低于掩蔽阈值的前提下允许有较大的量化失真。
感知编码一方面运用信号的统计特性移除了信号之间的冗余度,另一方面利用了心理声学中的掩蔽特性去掉了人耳系统无法感知的部分,从而使信号得到进一步的压缩。
解码放大顺序
1 对音频内容的顺序解码格式
AAC LC (low complexity)低复杂度规格,码流128k,音质较好,但是码流太大了。
AAC HE V1:AAC LC + SBR(special band replication)拿到频谱之后,把低频(也就是基频)保存主要成分,高频单独放大,保存音质。
码流在64k左右。
AAC HE V2:AAC LC + SBR(special band replication) + PS (parametric stereo)双声道声音有相似度,只需要存储一个声道,另一个用参数进行描述
2 对音频每个数据包的头文件格式选项
ADIF(audio data interchange format),相当于AAC前面的文件头,保证解码的顺序性,必须从音频的头开始,不能从中间。
ADTS(audio data transport stream),每一帧都有一个同步字,音频的任何地方都可以触发,比如拖动进度条,就可以向后找到第一个ADTS进行解码与播放,找不到就继续向后找。
AAC文件格式解析AAC文件格式解析(今天有了一个新任务,要把RTSP的音频流存成文件,格式是AAC的。
网上找了很久,也没有找到关于AAC文件的格式。
后来请教了一个专门作编解码的同事,在ISO MPEG的文档里可能会有相关的信息。
花了很长时间去找ISO的文档,ISO是收费的,网络是免费了,虽然难了点,但还是找到了部分的文档。
其中辛苦不足为外人道也。
在找了个quicktime可以播放的aac文件,边看文档,边分析一下,总算是基本搞定了。
但是有的文档没找到,还有些字段不知是什么意思。
不管了,反正能放了:)AAC格式是frame head + frame length, 没有文件头。
感到比较奇怪的,我觉得应该是有文件头的,文档上也有adts_fixed_header,但是好像没有头quicktime也能放,那就先不管了吧。
参见ISO/IEC 11496-3 1.1 Interchange format streamsadts_frame(){byte_alignment()adts_fixed_header()adts_variable_header()adts_error_check()óISO/IEC ISO/IEC CD 14496-3 Subpart 4: 1998MPEG-4 CD 14496-3 Subpart 4 / 20:09 / 22.06.98 11for( i=0; i<number_of_raw_data_blocks_in_frame+1; i++) { raw_data_block()}}adts_fixed_header(){syncword 12 bslbfID 1 bslbflayer 2 uimsbfprotection_absent 1 bslbfprofile 2 uimsbfsampling_frequency_index 4 uimsbfprivate_bit 1 bslbfchannel_configuration 3 uimsbforiginal/copy 1 bslbfhome 1 bslbfemphasis 2 bslbf}adts_variable_header(){copyright_identification_bit 1 bslbf copyright_identification_start 1 bslbfframe_length 13 bslbfadts_buffer_fullness 11 bslbfnumber_of_raw_data_blocks_in_frame 2 uimsfb }存文件的代码:static char head1[7];int temp = frame_len + 7;head1[0] = (char)0xff;head1[1] = (char)0xf9;int sr_index = rtp_aac_get_sr_index(aac_param_ptr->sample_rate);head1[2] = (0x01<<6)|(sr_index<<2)|0x00;//head1[3] = (char)0x80; //双声道?a=rtpmap:97 mpeg4-generic/44100/2head1[3] = (char)0x40; //单声道?a=rtpmap:97 mpeg4-generic/44800head1[4] = (temp>>3)&0xff;head1[5] = ((temp&0x07)<<5|0x1f);head1[6] = (char)0xfc;fwrite(head1,1,sizeof(head1),g_file_audio);fwrite(frame_buf,1,frame_len,g_file_audio);其中frame_buf是一帧的数据,framec_len是帧长度。
aacADTS头解析参考资料:功能:解析出来aacADTS头中各个字段缺点:打印出来的格式有点乱。
1 #include <stdio.h>23int sampling_frequency[] = {96000, 88200, 64000, 48000, 44100,32000,424000, 22050,16000,12000,11025,8000, 7350,0,0,-1};56 typedef struct {7 unsigned syncword:12; // FFF8 unsigned ID:1; //MPEG标识符,0标识MPEG-4,1标识MPEG-29 unsigned layer:2; // always: '00'10 unsigned protection_absent:1; //表⽰是否误码校验。
Warning, set to 1 if there is no CRC and 0 if there is CRC11 unsigned profile:2; //表⽰使⽤哪个级别的AAC,如01 Low Complexity(LC)--- AAC LC。
有些芯⽚只⽀持AAC LC 。
12 unsigned sampling_frequency_index:4;//表⽰使⽤的采样率下标,通过这个下标在 Sampling Frequencies[ ]数组中查找得知采样率的值。
13 unsigned private_bit:1;14 unsigned channel_configuration:3; /*15 0: Defined in AOT Specifc Config16 1: 1 channel: front-center17 2: 2 channels: front-left, front-right18 3: 3 channels: front-center, front-left, front-right19 4: 4 channels: front-center, front-left, front-right, back-center20 5: 5 channels: front-center, front-left, front-right, back-left, back-right21 6: 6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel22 7: 8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel23 8-15: Reserved24*/25 unsigned original_copy:1;26 unsigned home:1;27 } adts_fixed_header; // 28bits2829 typedef struct {30 unsigned copyright_identification_bit:1;31 unsigned copyright_identification_start:1;32/*33 aac_frame_length = (protection_absent == 1 ? 7 : 9) + size(AACFrame)34 protection_absent=0时, header length=9bytes35 protection_absent=1时, header length=7bytes36*/37 unsigned aac_frame_length:13;38 unsigned adts_buffer_fullness:11; //0x7FF 说明是码率可变的码流。
新版解码算法原理详解集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-A A C解码算法原理详解原作者:龙帅此文章为提供,未经站长授权,严禁转载,但欢迎链接到此地址。
本文详细介绍了符合ISO/IEC13818-7(MPEG2AACaudiocodec),ISO/IEC14496-3(MPEG4AudioCodecAACLowComplexity)进行压缩的的AAC音频的解码算法。
1、程序系统结构下面是AAC解码流程图:AAC解码流程图?在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字得到一帧的起始,找到后,根据ISO/IEC13818-7所述的语法开始进行NoislessDecoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(JointStereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制(SBR)这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。
2.主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。
其中,输入输出缓冲区均由DSP控制模块提供接口。
输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。
它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。
3.同步及元素解码同步及元素解码模块主要用于找出格式信息,并进行头信息解码,以及对元素信息进行解码。
这些解码的结果用于后续的无噪解码和尺度因子解码模块。
AAC的音频文件格式有以下两种:ADIF:AudioDataInterchangeFormat音频数据交换格式。
AAC的ADTS格式及解码算法详解本文详细介绍了符合ISO/IEC 13818-7(MPEG2 AAC audio codec) , ISO/IEC 14496-3(MPEG4 Audio Codec AAC Low Complexity)进行压缩的的AAC音频的解码算法。
1、程序系统结构下面是AAC解码流程图:AAC解码流程图在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字得到一帧的起始,找到后,根据ISO/IEC 13818-7所述的语法开始进行Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制(SBR)这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。
2. 主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。
其中,输入输出缓冲区均由DSP控制模块提供接口。
输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。
它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC 芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。
3. 同步及元素解码同步及元素解码模块主要用于找出格式信息,并进行头信息解码,以及对元素信息进行解码。
这些解码的结果用于后续的无噪解码和尺度因子解码模块。
AAC的音频文件格式有以下两种:ADIF:Audio Data Interchange Format 音频数据交换格式。
这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。
aac编码流程-回复AAC编码流程:全面了解音频编码技术AAC(Advanced Audio Coding)是一种高级音频编码技术,旨在提供更高质量的音频压缩,并减少数据传输或存储所需的带宽。
这种编码技术广泛应用于音乐、电影、广播和流媒体等领域。
在本篇文章中,我们将详细介绍AAC编码的步骤和流程,带领读者逐步了解AAC编码技术的原理和实现方法。
一、背景介绍在探讨AAC编码流程之前,我们先了解一下音频编码的基本概念。
音频编码是将原始音频信号转换为数学模型的过程,以便更有效地传输或存储音频数据。
编码过程包括两个主要步骤:压缩和解压缩。
压缩过程将原始音频信号转换为较小的数据量,而解压缩过程则将压缩后的数据恢复为原始音频信号。
二、AAC编码的步骤AAC编码过程主要包括以下几个步骤:PCM分析、MDCT变换、量化、熵编码和ADTS封装。
接下来,我们将详细讨论每个步骤的作用和实现方法。
1. PCM分析PCM(脉冲编码调制)是一种无损的音频编码格式,作为AAC编码的输入数据。
PCM分析的目的是将音频信号从时域转换为频域。
常用的PCM分析方法有短时傅里叶变换(STFT)和帧加窗技术。
STFT可以将时域信号分解成一系列频域谱线,而帧加窗技术则将音频信号划分为一帧帧的数据,每一帧包含多个采样点。
2. MDCT变换MDCT(Modifed Discrete Cosine Transform)变换是AAC编码中最重要的步骤之一。
它将时域信号转换为频域信号,并减少冗余信息。
MDCT变换方法采用了高效的算法,如FFT(快速傅里叶变换)和IMDCT(反变换)。
3. 量化量化是AAC编码中的关键步骤,它将频域信号的精度降低到较低的位数,从而减少数据量。
AAC使用了基于掩蔽效应的掩盖阈值算法来确定量化精度。
掩蔽效应是指当较强的音频信号和较弱的音频信号同时出现时,较弱的信号对较强信号的影响较小。
AAC根据这个原理,对频域信号进行掩蔽阈值计算,从而进行量化操作。
AAC音频AAC(Advanced Audio Coding),中文称为“高级音频编码”,出现于1997年,基于MPEG-2的音频编码技术。
由F raunhofer IIS、杜比实验室、AT&T、Sony(索尼)等公司共同开发,目的是取代MP3格式。
2000年,MPEG-4标准出现后,AAC 重新集成了其特性,加入了SBR技术和P S技术,为了区别于传统的MPE G-2 AAC 又称为MPE G-4 AAC。
AAC(Advanced Audio Coding)音频格式Advanced Audio Coding。
一种专为声音数据设计的文件压缩格式,与Mp3类似。
利用AAC格式,可使声音文件明显减小,而不会让人感觉声音质量有所降低aac标志AAC格式可以用苹果iTunes转换或千千静听(六组件)苹果ipod也支持AAC格式的音频文件优点:相对于mp3格式,AAC格式的音质更佳,文件更小。
不足:AAC属于有损压缩的格式,相对于A PE和FLA C等时下流行的无损格式,音色“饱满度”差距比较大。
目前传输速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC头上“小巧”的光环不再。
前景:由于所支持的设备少,因此不很流行,但也不会被淘汰。
从MP3到AAC早在1987年,Fraunhofer IIS就开始了“EUREKA project EU147,Digital Audio Broadcasting(D AB)”的研发,而这就是MP3的前身。
通过和Dieter Seitzer教授的合作,他们开发出了著名的ISO-MPEG Audio Layer-3压缩算法。
1993年这个算法被整合到MPEG-1标准中,从此MP3被投入使用。
1996年底F raunhofer IIS在美国获得MP3的专利,并在1998年对外声明将收取MPAAC瑞声声学科技股份有限公司3的专利使用费。
而从1999年初开始,MP3格式广泛流行起来。
AAC的ADTS格式及解码算法详解本文详细介绍了符合ISO/IEC 13818-7(MPEG2 AAC audio codec) , ISO/IEC 14496-3(MPEG4 Audio Codec AAC Low Complexity)进行压缩的的AAC音频的解码算法。
1、程序系统结构下面是AAC解码流程图:AAC解码流程图在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字得到一帧的起始,找到后,根据ISO/IEC 13818-7所述的语法开始进行Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制(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格式见下图:3.1 ADIF的组织结构AAC的ADTS的一般格式见下图:3.2 ADTS的组织结构图中表示出了ADTS一帧的简明结构,其两边的空白矩形表示一帧前后的数据。
ADIF和ADTS的header是不同的。
它们分别如下所示:3.3 ADIF的头信息3.4 ADTS的固定头信息ADTS的可变头信息3.5 帧同步帧同步目的在于找出帧头在比特流中的位置,13818-7规定,aac ADTS格式的帧头为12比特的“1111 1111 1111”.3.6 头信息解码ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。
固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变。
3.7 元素信息解码在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,动态范围控制信息等。
3.8 处理流程(1).判断文件格式,确定为ADIF或ADTS(2).若为ADIF,解ADIF头信息,跳至第6步。
(3).若为ADTS,寻找同步头。
(4).解ADTS帧头信息。
(5).若有错误检测,进行错误检测。
(6).解块信息。
(7).解元素信息。
4.无噪声解码无噪编码就是哈夫曼编码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,即将尺度因子和量化后的频谱信息进行哈夫曼编码。
全局增益编码成一个8位的无符号整数,第一个尺度因子与全局增益值进行差分编码后再使用尺度因子编码表进行哈夫曼编码。
后续的各尺度因子都与前一个尺度因子进行差分编码。
量化频谱的无噪编码有两个频谱系数的划分。
其一为4元组和2元组的划分,另一个为节划分。
对前一个划分来说,确定了一次哈夫曼表查找出的数值是4个还是2个。
对后一个划分来说,确定了应该用哪一个哈夫曼表,一节中含有若干的尺度因子带并且每节只用一个哈夫曼表。
4.1 分段无噪声编码将输入的1024个量化频谱系数分为几个段(section),段内的各点均使用同一个哈夫曼表,考虑到编码效率,每一段的边界最好同尺度因子带的边界重合。
所以每一段必段传送信息应该有:段长度,所在的尺度因子带,使用的哈夫曼表。
4.2 分组和交替分组是指忽略频谱系数所在窗,将连续的,具有相同尺度因子带的频谱系数分为一组放在一起,共享一个尺度因子从而得到更好的编码效率。
这样做必然会引起交替,即本来是以c[组][窗][尺度因子带][ 系数索引]为顺序的系数排列,变为将尺度因子带同的系数放在一起:c[组][尺度因子带][窗][ 系数索引]这样就引起了相同窗的系数的交替。
4.3大量化值的处理大量化值在AAC中有两种处理方法:在哈夫曼编码表中使用escape标志或使用脉冲escape 方法。
前者跟mp3编码方法相似,在许多大量化值出现时采用专门的哈夫曼表,这个表暗示了它的使用将会在哈夫曼编码后面跟跟一对escape值及对值的符号。
在用脉冲escape方法时,大数值被减去一个差值变为小数值,然后使用哈夫曼表编码,后面会跟一个脉冲结构来帮助差值的还原。
无噪解码的流程图如下:无噪声解码流程图5.尺度因子解码及逆量化在aac编码中,逆量化频谱系数是由一个非均匀量化器来实现的,在解码中需进行其逆运算。
即保持符号并进行4/3次幂运算。
在频域调整量化噪声的基本方法就是用尺度因子来进行噪声整形。
尺度因子就是一个用来改变在一个尺度因子带的所有的频谱系数的振幅增益值。
使用尺度因子这种机制是为了使用非均匀量化器在频域中改变量化噪声的比特分配。
5.1 尺度因子带(scalefactor-band)频率线根据人耳的听觉特性被分成多个组,每个组对应若干个尺度因子,这些组就叫做尺度因子带。
为了减少信息含有短窗的边信息,连续的短窗可能会被分为一组,即将若干个短窗当成一个窗口一起传送,然后尺度因子将会作用到所有分组后的窗口去。
5.2 反量化公式:x_invquant = sign(x_quant) * | x_quant| ^(4/3)其中x_invquant 表示反量化的结果sign (x)表示取x的符号^ 表示幂运算5.3 应用尺度因子公式:x_rescal = x_invquant * gaingain = 2 ^ (0.25 * (sf – SF_OFFSET))其中x_rescal 为应用了尺度因子公式之后的值gain为一个增益sf 为尺度因子值SF_OFFSET为一个常数,设为1006、联合立体声解码联合立体声有两种,M/S stereo(中间旁道立体声)和intensity stereo(强度立体声)6.1 M/S stereo在M_S立体声模式中,传送的是规格化的中间/旁边声道的信息,计算公式如下:其中,l, r表示转换后的左右声道值m表示中间声道值s表示旁边声道值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从完全备份中还原从完全备份中还原数据库非常简单,在9.3.2节中会详细地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、PNSPNS(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 处理流程PNS解码流程图8、TNSTNS瞬态噪声整形用于控制一个转换窗口内的瞬时噪声形态。