AAC编解码(一)

一、ADTS格式:

ADTS的全称是Audio Data Transport Stream。是AAC音频的传输流格式。

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 bslbf

 ID; 1 bslbf

 layer; 2 uimsbf

 protection_absent; 1 bslbf

 profile; 2 uimsbf

 sampling_frequency_index; 4 uimsbf

 private_bit; 1 bslbf

 channel_configuration; 3 uimsbf

 original/copy; 1 bslbf

 home; 1 bslbf

}

adts_variable_header()

{
 copyright_identification_bit; 1 bslbf

 copyright_identification_start; 1 bslbf

 frame_length; 13 bslbf

 adts_buffer_fullness; 11 bslbf

 number_of_raw_data_blocks_in_frame; 2 uimsfb

}

详细说明下ADTS头的重要数据部分:

syncword 同步字The bit string ‘1111 1111 1111’,说明一个ADTS帧的开始。

ID MPEG 标示符, 设置为1.

layer Indicates which layer is used. Set to ‘00’

protection_absent 表示是否误码校验

profile 表示使用哪个级别的AAC,如01 Low Complexity(LC)--- AACLC

sampling_frequency_index 表示使用的采样率下标

sampling_frequency_index sampling frequeny [Hz]

0x0 96000

0x1 88200

0x2 64000

0x3 48000

0x4 44100

0x5 32000

0x6 24000

0x7 22050

0x8 16000

0x9 2000

0xa 11025

0xb 8000

0xc reserved

0xd reserved

0xe reserved

0xf reserved

channel_configuration 表示声道数

frame_length 一个ADTS帧的长度包括ADTS头和raw data block.

adts_buffer_fullness 0x7FF 说明是码率可变的码流

number_of_raw_data_blocks_in_frame

表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧.

所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有一个AAC数据块并不是说没有。


二、编码算法处理流程

   首先对输入的PCM信号分段,每帧每声道1024个样本,采用1/2重叠,组合得到2048个样本。加窗后,进行离散余弦变化(MDCT),输出1024个频谱分量,依据不同采样率和变换块类型划分成10个不同带宽的比例因子频带。其中变化块类型由 心理声学模型 计算分析得到,该模型还将输出 信掩比,用于后续模块的处理。

    AAC 还使用了一种新的称为时域噪声整形的技术,简称为 TNS。 TNS 的作用机理在于利用了时域和频域信号的对偶性。在立体声编码方面, AAC 既支持 M/S,又支持L/R,两者的选择准则是看比特数的消耗。基于人耳对高频的定位主要取决于能量的特点,采用了增强立体声(IS)技术,对耦合声道只传一路包络。经过前述多个模块的预处理后,在量化和编码阶段才真正降低了数据量使用非均匀量化来改善小信号的信噪比,把比例因子频带合并成分区后再对频谱分量进行霍夫曼编码。量化和编码使用一种两层嵌套循环算法,以权衡码率和失真之间的矛盾。最后,进行比特流封装,得到压缩后的码流


AAC各个模块计算量的比重

                   

   由此可见,量化编码、心理声学模型以及滤波器组模块是编码算法中复杂度、计算量较高的模块。


猜你喜欢

转载自blog.csdn.net/audio_algorithm/article/details/79739634