AAC编码原理

2023-05-16

AAC编码原理


转自:http://www.hellotongtong.com/avcodecbase/avcodecbase-aaccodec-intro.html

 

一、AAC编码概述

    AAC高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。

 

    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。

 

二、AAC编码规格简述

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

 

      MPEG-2 AAC LC 低复杂度规格(Low Complexity) 注:比较简单,没有增益控制,但提高了编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点

 

      MPEG-2 AAC Main 主规格

 

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

 

      MPEG-4 AAC LC 低复杂度规格(Low Complexity)---现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件

 

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

 

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

 

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

 

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

 

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

 

目前使用最多的是LC和HE(适合低码率)。

 

    流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术;

 

这里再说明一下HE和HEv2的相关内容:

 

    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. ACC 音频文件格式类型

AAC的音频文件格式有:ADIF, ADTS

 

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

 

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

 

    简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。这两种的header的格式也是不同的,一般编码后的和抽取出的都是ADTS格式的音频流。

 

AAC的ADIF文件格式如下图:

AAC的ADTS文件中一帧的格式如下图:

其两边的空白矩形表示一帧前后的数据。

 

 

2. ADIF 的 Header 结构

ADIF 的头信息如下图:

 

 

 

ADIF头信息位于AAC文件的起始处,接下来就是连续的 Raw Data Blocks。

 

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

 

 

3. ADTS 的 Header 头结构

 ADTS 的固定头信息:

 

 

ADTS的可变头信息:

image.png

 

 

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

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

 

4. 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,动态范围控制信息等。

 

5. AAC文件处理流程

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

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

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

       (4). 解ADTS帧头信息。

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

       (6). 解块信息。

       (7). 解元素信息。

 

 

五、编码算法处理流程

 

    首先对输入的PCM信号分段,每帧每声道1024个样本,采用1/2重叠,组合得到2048个样本。

    加窗后,进行离散余弦变化(MDCT),输出1024个频谱分量,依据不同采样率和变换块类型划分成10个不同带宽的比例因子频带。其中变化块类型由 心理声学模型 计算分析得到,该模型还将输出 信掩比,用于后续模块的处理。

 

    AAC 还使用了一种新的称为时域噪声整形的技术,简称为 TNS。 

    TNS 的作用机理在于利用了时域和频域信号的对偶性。在立体声编码方面, AAC 既支持 M/S,又支持L/R,两者的选择准则是看比特数的消耗。基于人耳对高频的定位主要取决于能量的特点,采用了增强立体声(IS)技术,对耦合声道只传一路包络。经过前述多个模块的预处理后,在量化和编码阶段才真正降低了数据量使用非均匀量化来改善小信号的信噪比,把比例因子频带合并成分区后再对频谱分量进行霍夫曼编码。

    量化和编码使用一种两层嵌套循环算法,以权衡码率和失真之间的矛盾。

    最后,进行比特流封装,得到压缩后的码流。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AAC编码原理 的相关文章

  • CUJ:高效使用标准库:显式函数模板参数申明与STL

    Effective Standard C 43 43 Library Explicit Function Template Argument Specification and STL A New Language Feature and
  • 正则是如何判断有重复/由不重复的数字组成的串的。

    源自这里 xff1a http bbs csdn net topics 390804087 d 1 这个判断了有重复的数字 原理 xff1a 是非贪婪 xff0c 从最少的数量试起 是0 无穷大次 最小就是0 对于源串 1234567890
  • 《C++程序设计原理与实践》书评

    在2周内 xff0c 以1目10行的速度读过了这本书 小小书评如下 xff1a 这是一本主要面向初学者的极好的教材 在我看过的编程书籍中 xff0c 这是第二本适合于完全无编程经验的初学者的入门书籍 xff08 前面一本叫 C语言解析教程
  • 最近用了一把boost::range,哎,真方便。(水帖)

    难怪有老外大牛写文章 iterator must go 34 stl是该彻底重写了 嗯 xff0c 我的C 43 43 代码越来越向python代码靠拢了
  • 数据库左连接注意点

    left join on 即左连接 xff0c 把left join左边的表的记录全部找出来 进行左连接时 xff0c 就有涉及到主表 辅表 xff0c 这时 主表条件写在 WHERE之后 xff0c 辅表条件写在 ON后面 xff01 x
  • boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ)

    BOOST PP SEQ SIZE还可以展示一下 xff0c BEGIN BOOST PP SEQ FOLD LEFT SUB S 22 SEQ 61 61 10 END直接生产了2 6M的log过程 define SEQ 4 1 5 2
  • windows子系统固定IP和开启ssh

    Windows子系统固定IP地址 一 固定IP地址 windows子系统默认开机会变更随机ip 修改为固定的ip地址 1 获取子系统名 打开cmd或PowerShell输入 wsl l v 显示如图 获得Ubuntu在子系统中名字 Ubun
  • Centos 安装pyspider 必须成功

    Centos安装pyspider踩过的坑 xff01 xff01 xff01 一个接着一个 写在前面的话 xff1a 一直在本地机器小玩玩pyspider xff0c 今天心血来潮linux安排上 网上教程一大堆 xff0c 一个接着一个坑
  • Permutation Test

    常规步骤 xff1a 一般 多组间样本均数的比较是先做正态性检验和方差齐性 xff0c 然后在各组 都满足 正态性和方差齐性的前提下做方差分析 如果数据呈现正态分布 xff0c 但方差不齐 xff0c 则可以选择近似方法 Welch法 和
  • [vuejs] 在vuejs中使用websocket进行实时通讯

    在vuejs框架中使用websocket 可以比较方便的运用到vuejs框架的响应式系统 以及一些简单的生命周期函数 var app 61 new Vue el 39 app 39 data server 34 ws 127 0 0 1 8
  • [nginx] X-Cache: HIT的意思

    请求返回的数据是从缓存里拿到的X Cache HIT 缓存命中了 遇到一个返回接口数据总是不对 xff0c 在看到X Cache HIT才发现 给接口设置了缓存 xff01 xff01 xff01
  • [CSS] CSS display:flex实现内容水平垂直居中展示

    display flex实现内容水平垂直居中展示 需要增加下面两点就能实现 首先父级元素必须有高度 xff0c 没有高度就无法垂直居中 xff0c 如果想全屏垂直居中 xff0c 可以设置高度为100vh 比如body设置为这样 body
  • Java在字符串中查找匹配的子字符串

    示例 xff1a 在源字符串 You may be out of my sight but never out of my mind 中查找 my 的个数 输出 xff1a 匹配个数为2 三种方法 xff1a 1 通过String的inde
  • Ext4 vs XFS——你应该使用哪个文件系统

    运行 Linux 系统的用户几乎不会关注底层文件系统 事实上 xff0c 在安装 Linux 的过程中 xff0c 通常倾向于使用列出的默认文件系统而不探索其他可用选项 对于 Windows xff0c 事情要容易得多 xff0c 因为 N
  • Btrfs 与 Ext4 - 功能、优势和劣势

    文件系统控制从存储设备存储和检索数据的位置 方式和时间 日常系统进程需要一个高效的文件系统 Linux 内核支持多种文件系统 最常用的是 Ext4 Btrfs XFS 和 ZFS xff0c 这是 2018 年发布的最新文件系统 这些文件系
  • Extjs6 Tree 树数据筛选

    前端使用ExtJS6 xff0c 要求在菜单树上对菜单树的数据进行筛选 xff0c 提高用户的体验 现在功能已经完成 xff0c 这里记录下来便于后面遇到类似问题作为参考 xff0c 会贴上源码和官方Demo提供参考的源码 对Tree的筛选
  • apt update和apt upgrade命令 - 有什么区别?

    在之前的文章中 xff0c 我们查看了APT 命令以及您可以使用包管理器来管理包的各种方法 这是一个总体概述 xff0c 但在本指南中 xff0c 我们暂停并重点关注 2 个命令用法 这些是apt update和apt upgrade命令
  • 48 个 Linux 面试问题和答案

    你在准备 Linux 面试吗 xff1f 我们准备了一些常见的 Linux 面试问题及其答案 如果您是初学者 xff08 具有一定的 Linux 知识或获得认证 xff09 或具有专业的 Linux 管理经验 xff0c 那么下面的问答有助
  • 70 个 Shell 脚本面试问题和答案

    我们为您的面试准备选择了预期的 70 个 shell 脚本问题和答案 对于所有系统管理员来说 xff0c 了解脚本或至少基础知识真的很重要 xff0c 这反过来有助于在您的工作环境中自动执行许多任务 在过去的几年里 xff0c 我们已经看到
  • 如何使用命令行检查 KylinOS-Desktop 版本

    在本指南中 xff0c 我们将向您展示如何轻松检查系统上的KylinOS Desktop 版本 有两种主要方法可以实现这一目标 使用终端 使用图形用户界面 因此 xff0c 让我们深入了解如何使用上述方法来检查系统上的 KylinOS De

随机推荐