音频格式之AAC:(3)AAC编解码原理详解

系列文章目录

音频格式的介绍文章系列:
音频编解码格式介绍(1) ADPCM:adpcm编解码原理及其代码实现
音频编解码格式介绍(2) MP3 :音频格式之MP3:(1)MP3封装格式简介
音频编解码格式介绍(2) MP3 :音频格式之MP3:(2)MP3编解码原理详解
音频编解码格式介绍(3) AAC :音频格式之AAC:(1)AAC简介
音频编解码格式介绍(3) AAC :音频格式之AAC:(2)AAC封装格式ADIF,ADTS,LATM,extradata及AAC ES存储格式
音频编解码格式介绍(3) AAC :音频格式之AAC:(3)AAC编解码原理详解


文章目录

  • 系列文章目录
  • 1、AAC简介
  • 2、AAC编解码模块介绍
  • 3、AAC编码流程
    • 1:听觉心里模型(Psychoacoustic Model)
    • 2:增益控制(gain control)
    • 3:MDCT
    • 4:瞬时噪声整形TNS(Temporal Noise Shaping Module)
    • 5:Joint Stereo Coding与预测(Prediction)模块
    • 6:量化与编码
  • 4、AAC解码流程
    • 1)Bitstream Formatter,码流解析模块。
    • 2)Noiseless Decoding,无噪编解码模块。
    • 3)Inverse Quantization,量化和反量化模块。
    • 4)Rescaling,缩放因子处理模块。
    • 5)M/S,Mid/Side 立体声编解码模块。
    • 6)Prediction,预测模块。
    • 7)Intensity,强度立体声编解码模块。
    • 8)Dependently Switched Coupling,非独立交换耦合模块。
    • 9)TNS,瞬时噪音整形模块。
    • 10)Filterbank/Block Switching,滤波器组/块切换模块。
    • 11)Gain Control,增益控制模块。
    • 12)Independently Switched Coupling,独立交换耦合模块。
    • 1)LTP(Long Term Prediction),长时预测模块。
    • 2)PNS(Perceptual Noise Substitution),知觉噪声替换模块。
    • 3)SBR(Spectral Band Replication),频段复制技术。
    • 4)PS(Parametric Stereo),参数立体声技术。
  • 参考资料


1、AAC简介

AAC,英文全称 Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony 等公司共同开发,在 1997 年推出的基于 MPEG-2 的有损数字音频压缩的专利音频编码标准。

1997年制订不兼容MPEG-1的音频标准MPEG-2 NBC,即MPEG-2 AAC
1999年MPEG-2 AAC增加LTP(Long Term Prediction)和PNS(Perceptual Noise Substitution)工具,形成MPEG-4 AAC v1
2002年MPEG-4 AAC v1增加了SBR(Spectral Band Replication)和错误鲁棒性工具,形成MPEG-4 HE-AAC
2004年MPEG-4 HE-AAC引入PS(Parametric Stereo)模块,提升低码率性能,形成EAAC+

技术指标

ž采样率:8kHz - 96kHz
ž码率: 8kbps - 576kbps
ž声道:最多支持48个主声道,16个低频增强声道

AAC 作为 MP3 的后继者而被设计出来,综合了许多新的技术,有很多新的特性,它支持从 8k 到 96k 的各种采样率,支持多种声道配置方案。在相同的比特率之下,AAC 相较于 MP3 通常可以达到更好的声音质量。

AAC 属于感知音频编码。与所有感知音频编码类似,其原理是利用人耳听觉的掩蔽效应,对变换域中的谱线进行编码,去除将被掩蔽的信息,并控制编码时的量化噪声不被分辨。


2、AAC编解码模块介绍

MPEG-2 AAC 系统包含了增益控制、滤波器组、心理声学模型、量化与编码、预测、TNS、立体声处理等多种高效的编码工具。这些模块或过程的有机组合形成了 AAC 系统的基本编解码流程。

在实际应用中,并不是所有的功能模块都是必需的,下表列出了 MPEG-2 AAC 各模块的可选性:
请添加图片描述

相较于MPEG-2 AAC,MPEG-4 标准在原 AAC 的基础上加上了 LTP(Long Term Prediction)、PNS(Perceptual Noise Substitution)、SBR(Spectral Band Replication)、PS(Parametric Stereo)等技术,并提供了多种扩展工具。

为了允许其系统可对音频质量与内存/处理功率要求之间做一舍取,因此AAC 系统提供了三种profiles:Main profile、Low Complexity(LC) profile、Scaleable Sampling Rate(SSR) profile。且每一种profile所使用的tools皆不同,下表表示其三种不同profile所需使用的tools。
请添加图片描述

3、AAC编码流程

MPEG-4 AAC编码流程如下图:
请添加图片描述
其整体AAC 编解码系统,如图所示,其编码流程概述如下:

1:听觉心里模型(Psychoacoustic Model)

送至听觉心里模型(Psychoacoustic Model)以求得信掩比,掩蔽阈值,M/S 立体声编码以及强度立体声编码需要的控制信息,还有滤波器组中应使用长短窗选择信息。

2:增益控制(gain control)

同时送到增益控制(gain control)模块中,将信号做某个程度的衰减,以降低其峰值大小,如此可减少Pre-echo 的发生。

3:MDCT

通过滤波器组(进行加窗 MDCT 变换,)将时域信号转换至频率域。

4:瞬时噪声整形TNS(Temporal Noise Shaping Module)

瞬时噪声整形TNS(Temporal Noise Shaping Module)模块中,来判断是否需要启动TNS,此模块系利用开回路预测(open-loop prediction) 来修饰其量化噪声,如此可将其量化噪声的分布,修饰到原始信号能量所能含盖的范围之下,进一步的减少Pre-echo 的发生,若TNS 被启动,则传出其预测差值;反之,则传出原始频谱值。

5:Joint Stereo Coding与预测(Prediction)模块

Joint Stereo Coding与预测(Prediction)模块来进一步消除信号间的冗余成份。在Joint Stereo Coding中又可分为Intensity Stereo Coding 与M/S Stereo Coding。在Intensity Stereo Coding模块中,是利用信号在高频时,人耳只对能量较敏感,对于其相位不敏感之特性,将其左右声道之频谱系数合并,以节省使用之位;在M/S Stereo Coding 模块中,利用左右声道之和与差,做进一步地压缩,若其差值能量很小,如此便可以用较少之位编码此一声道,将剩余之位应用于另一声道上的编码,如此来提升其压缩率。而预测模块的主要架构是使用Backward Adaptive Predictors,利用前两个音频帧来预测现在的音频帧,若决定启动此模块,则传出其预测差值,如此一来可以减少其数据量,达数据压缩之目的。

6:量化与编码

量化与编码,为了达到量化编码的最佳化,AAC 使用了双巢状式循环(two nested loop)的量化编码结构,以得最佳的压缩质量。

4、AAC解码流程

MPEG-4 AAC解码流程图如下图:
请添加图片描述

1)Bitstream Formatter,码流解析模块。

在解码时,该模块将 AAC 数据流分解为各个工具模块对应的数据模块,并为每个工具模块提供与该工具相关的比特流数据信息。这个模块的输出包括:

无噪声编码频谱的分段信息
无噪声编码频谱
Mid/Side 决策信息
预测器状态信息
强度立体声控制信息和耦合通道控制信息
时域噪声修整(TNS)信息
滤波器组控制信息
增益控制信息

2)Noiseless Decoding,无噪编解码模块。

无噪编码就是哈夫曼编码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,即将尺度因子和量化后的频谱信息进行哈夫曼编码。在解码时,该模块从码流解析模块获得输入的数据流,从中解码霍夫曼编码数据,并重建量化频谱、霍夫曼编码和 DPCM 编码的比例因子。

这个模块的输入包括:

无噪声编码频谱的分段信息
无噪声编码频谱
输出包括:

比例因子的解码整数表示
频谱的量化值

3)Inverse Quantization,量化和反量化模块。

在 AAC 编码中,逆量化频谱系数是由一个非均匀量化器来实现的,在解码中需进行其逆运算。在解码时,该模块将频谱的量化值转换为整数值来表示未缩放的重建频谱。此量化器是非均匀的量化器。通过对量化分析的良好控制,比特率能够被更高效地利用。在频域调整量化噪声的基本方法就是用尺度因子来进行噪声整形,尺度因子就是一个用来改变在一个尺度因子带的所有的频谱系数的振幅增益值,使用尺度因子这种机制是为了使用非均匀量化器在频域中改变量化噪声的比特分配。

这个模块的输入包括:

频谱的量化值
输出包括:

未缩放的,逆量化的频谱
量化公式如下:
x_quant = int (( abs( mdct_line ) * (2^(- ¼ * (sf_decoder - SF_OFFSET))) )^(3/4) + MAGIC_NUMBER)
其中MAGIC_NUMBER=0.4054,SF_OFFSET = 100

4)Rescaling,缩放因子处理模块。

解码时,该模块将比例因子的整数表示转换为实际值,然后将未缩放的逆量化频谱乘以相关比例因子。

这个模块的输入包括:

比例因子的解码整数表示
未缩放的,逆量化的频谱
输出包括:

缩放后的逆量化的频谱

5)M/S,Mid/Side 立体声编解码模块。

是联合立体声编码(Joint Stereo)的一种方案,编码时兼顾了这两个声道的共同信息量。该模块基于 Mid/Side 决策信息将频谱对从 Mid/Side 模式转换为 Left/Right 模式,以提高编码效率。一般在左右声道信息相似度较高时使用,处理方式是将左右声道信息合并(L+R)得到新的一轨,再将左右声道信息相减(L-R)得到另外一轨,然后再将这两轨信息用心理声学模型和滤波器处理。

这个模块的输入包括:

Mid/Side 决策信息
和声道关联的缩放后的逆量化的频谱
输出包括:

在 M/S 解码之后,与声道对相关的缩放后的逆量化频谱

6)Prediction,预测模块。

解码时,该模块会在预测状态信息的控制下重新插入在编码时提取出的冗余信息。该模块实现为二阶后向自适应预测器。对音频信号进行预测可以减少重复冗余信号的处理,提高效率。

这个模块的输入包括:

预测器状态信息
缩放后的逆量化的频谱
输出包括:

应用了预测的缩放后的逆量化的频谱

7)Intensity,强度立体声编解码模块。

是联合立体声编码(Joint Stereo)的一种方案,编码时兼顾了这两个声道的共同信息量。一般在低流量时使用,利用了人耳对于低频信号指向性分辨能力的不足,将音频信息中的低频分解出来合成单声道数据,剩余的高频信息则合成另一个单声道数据,并记录高频信息的位置数据来重建立体声效果。解码时,该模块对频谱对执行强度立体声解码。Mid/Side Stereo 和 Intensity Stereo 都有利用部分相位信息的损失来换得较高的音色数据信息。

这个模块的输入包括:

逆量化的频谱
强度立体声控制信息
输出包括:

强度立体声道解码后的逆量化频谱

8)Dependently Switched Coupling,非独立交换耦合模块。

解码时,该模块基于耦合控制信息的指导,将非独立交换耦合声道中的相关数据添加到频谱中。

这个模块的输入包括:

逆量化的频谱
耦合控制信息
输出包括:

和非独立交换耦合声道耦合的逆量化频谱

9)TNS,瞬时噪音整形模块。

该模块实现了对编码噪声的精细时间结构的控制。在编码时,TNS 处理过程会修整声音信号的时域包络。在解码时,该模块会基于 TNS 信息的控制,在对应的逆处理过程中会还原实际的时域包络。这是通过对部分频谱数据进行滤波处理来实现的。这项神奇的技术可以通过在频率域上的预测,来修整时域上的量化噪音的分布。在一些特殊的语音和剧烈变化信号的量化上,TNS 技术对音质的提高贡献巨大。

这个模块的输入包括:

逆量化的频谱
TNS 信息
输出包括:

逆量化的频谱

10)Filterbank/Block Switching,滤波器组/块切换模块。

解码时,该模块应用了在编码器中执行的频率映射的逆函数。滤波器组工具使用了一个逆修正离散余弦变换(IMDCT),这个 IMDCT 可以配置为支持一组 128 或 1024,或四组 32 或 256 频谱系数。

这个模块的输入包括:

逆量化的频谱
滤波器组控制信息
输出包括:

时域重建的音频信号
IMDCT公式如下:
请添加图片描述
因为aac每帧1024或960个samples,window length有50%的重叠,所以window length为2048或1920。window分long,short,具体如下:
请添加图片描述

11)Gain Control,增益控制模块。

当输出时,该模块将单独的时域增益控制应用于已由编码器中的增益控制 PQF 滤波器组创建的 4 个频带中的每个频带。然后,它会组合 4 个频带,并通过增益控制工具的滤波器组来重建时间波形。该模块仅可用于 SSR(Scalable SampleRate) Profile。

这个模块的输入包括:

时域重建的音频信号
增益控制信息
输出包括:

时域重建的音频信号

12)Independently Switched Coupling,独立交换耦合模块。

解码时,该模块基于耦合控制信息的指导,将独立交换耦合声道中的相关数据添加到时间信号中。

这个模块的输入包括:

滤波器组输出的时间信号
耦合控制信息
输出包括:

和独立交换耦合声道耦合的时间信号
以上是 MPEG-2 AAC 各模块的介绍,在 MPEG-4 AAC 还新增了其他功能模块,比如:

1)LTP(Long Term Prediction),长时预测模块。

它用来减少连续两个编码音框之间的信号冗余,对于处理低码率的语音非常有效。

2)PNS(Perceptual Noise Substitution),知觉噪声替换模块。

当编码器发现类似噪音的信号时,并不对其进行量化,而是作个标记就忽略过去,当解码时再还原出来,这样就提高了效率。在具体操作上,PNS 模块对每个尺度因子带侦测频率 4k Hz 以下的信号成分。如果这个信号既不是音调,在时间上也无强烈的能量变动,就被认为是噪声信号。其信号的音调及能量变化都在心理声学模型中算出。

3)SBR(Spectral Band Replication),频段复制技术。

音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。对整个频段编码时,若为保护高频就会造成低频段编码过细导致编码效率较低;若只保存低频的主要成分而丢掉高频成分又会损失音质。SBR 把频谱切开,低频单独编码只保存主要成分,提高编码效率;高频单独放大编码,兼顾音质。

4)PS(Parametric Stereo),参数立体声技术。

原本立体声双声道的编码输出是一个声道的两倍,但是两个声道的声音存在某种相似性。PS 存储一个声道的全部信息,然后花较少的字节用参数描述另一个声道的差异部分来提升编码效率。


参考资料

[1]:ISO/IEC 13818-7
http://www.telemidia.puc-rio.br/~rafaeldiniz/public_files/normas/ISO-13818/ISO_IEC_13818-7_2006(E).pdf
[2]:ISO/IEC 14496-3
https://csclub.uwaterloo.ca/~ehashman/ISO14496-3-2009.pdf
[3]:音频编码:入门看这篇就够了丨音视频基础
https://zhuanlan.zhihu.com/p/499760382?utm_id=0
[4]:aac解码算法原理详解
https://www.doc88.com/p-5754123606296.html
[5]:AAC 系统算法分析
https://www.cnblogs.com/gaozehua/archive/2012/05/03/2479960.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文详解C++拷贝构造函数

文章目录 引入一、什么是拷贝构造函数?二、什么情况下使用拷贝构造函数?三、使用拷贝构造函数需要注意什么?四、深拷贝和浅拷贝浅拷贝深拷贝 引入 在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎。 相当…

5|领域建模实践(上):怎样既准确又深刻地理解业务知识?

上节课咱们完成了事件风暴,梳理了系统的行为需求。但你可能也发现了,其实还有些微妙的业务概念还没有澄清,这就要靠领域建模来完成了。 建立领域模型是 DDD 的核心。要建好领域建模,需要理论和实践相结合。由于我们的模型有一定的…

CSC签证费报销的相关规定及要求-主要国家签证费报销凭据

国家留学基金委(CSC)派出流程很多是在留学服务机构办理,即北京教育部留学服务中心及教育部出国人员上海集训部,其中含签证费报销。本篇知识人网小编以上海集训部为例,详细解读一下签证费报销的相关规定及要求&#xff…

sql 行转列 日周月 图表统计

目录 目录 需求 准备 月 分析 按月分组 行转列 错误版本 正确版本 日 分析 行转列 周 分析 按周分组 行转列 本年 需求 页面有三个按钮 日周月,统计一周中每天(日),一月中每周(周),一年中每月(月),设备台数 点…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文,本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…

Leetcode—114. 二叉树展开为链表【中等】

2023每日刷题(九十八) Leetcode—114. 二叉树展开为链表 Morris-like算法思想 可以发现展开的顺序其实就是二叉树的先序遍历。算法和 94 题中序遍历的 Morris 算法有些神似,我们需要两步完成这道题。 将左子树插入到右子树的地方将原来的右…

Java - OpenSSL与国密OpenSSL

文章目录 一、定义 OpenSSL:OpenSSL是一个开放源代码的SSL/TLS协议实现,也是一个功能丰富的加密库,提供了各种主要的加密算法、常用的密钥和证书封装管理功能以及SSL协议。它被广泛应用于Web服务器、电子邮件服务器、VPN等网络应用中&#x…

线性表--栈

1.什么是栈? 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈&#xff…

YOLOv5改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)

一、本文介绍 本文给大家带来的改进机制是一种重参数化的卷积模块OREPA,这种重参数化模块非常适合用于二次创新,我们可以将其替换网络中的其它卷积模块可以不影响推理速度的同时让模型学习到更多的特征。OREPA是通过在线卷积重参数化(Online Convolutional Re-parameteriza…

TensorFlow2实战-系列教程3:猫狗识别1

🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、项目介绍 基本流程: 数据预处理:图像数据处理&#xff0c…

Spring 的执行流程以及 Bean 的作用域和生命周期

文章目录 Bean 的作用域更改作用域的方式singletonprototype Spring 执行流程Bean 的生命周期 Bean 的作用域 Spring 容器在初始化⼀个 Bean 的实例时,同时会指定该实例的作用域。Bean 有6种作用域 singleton:单例作用域prototype:原型作用域…

Hadoop-MapReduce-MRAppMaster启动篇

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、上下文 在上一篇<Hadoop-MapReduce-源码跟读-客户端篇>中已经将到&#xff1a;作业提交到ResourceManager&#xff0c;那…

首发:2024全球DAO组织发展研究

作者&#xff0c;张群&#xff08;专注DAO及区块链应用研究&#xff0c;赛联区块链教育首席讲师&#xff0c;工信部赛迪特邀资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09; DAO&#xff08;去中心化自治组织&am…

adb测试冷启动和热启动 Permission Denial解决

先清理日志 adb shell logcat -c 打开手机模拟器中的去哪儿网&#xff0c;然后日志找到包名和MainActivity adb shell logcat |grep Main com.Qunar/com.mqunar.atom.alexhome.ui.activity.MainActivity 把手机模拟器的去哪儿的进程给杀掉 执行 命令 adb shell am start -W…

TensorFlow2实战-系列教程1:回归问题预测

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、环境测试 import tensorflow as tf import numpy as np tf.__version__打印结果 ‘…

深入理解Redis:如何设置缓存数据的过期时间及其背后的机制

目录 Redis 给缓存数据设置过期时间 Redis是如何判断数据是否过期的呢&#xff1f; 过期的数据的删除策略 Redis 内存淘汰机制 Redis 给缓存数据设置过期时间 一般情况下&#xff0c;我们设置保存的缓存数据的时候都会设置一个过期时间。为什么呢&#xff1f; 因为内存是有…

4小时精通MyBatisPlus框架

目录 1.介绍 2.快速入门 2.1.环境准备 2.2.快速开始 2.2.1引入依赖 2.2.2.定义Mapper ​编辑 2.2.3.测试 2.3.常见注解 ​编辑 2.3.1.TableName 2.3.2.TableId 2.3.3.TableField 2.4.常见配置 3.核心功能 3.1.条件构造器 3.1.1.QueryWrapper 3.1.2.UpdateWra…

Redis(八)哨兵机制(sentinel)

文章目录 哨兵机制案例认识异常 哨兵运行流程及选举原理主观下线(Subjectively Down)ODown客观下线(Objectively Down)选举出领导者哨兵选出新master过程 哨兵使用建议 哨兵机制 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新…

Java 基础知识-File类

大家好我是苏麟 , 今天聊聊File . 资料来自黑马程序员 File类 java.io.File 类是文件和目录路径名的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 构造方法 public File(String pathname) &#xff1a;通过将给定的路径名字符串转换为抽象路径名来创建…

盘古信息IMS OS 数垒制造操作系统+ 产品及生态部正式营运

启新址吉祥如意&#xff0c;登高楼再谱新篇。2024年1月22日&#xff0c;广东盘古信息科技股份有限公司新办公楼层正式投入使用并举行了揭牌仪式&#xff0c;以崭新的面貌、奋进的姿态开启全新篇章。 盘古信息总部位于东莞市南信产业园&#xff0c;现根据公司战略发展需求、赋能…