AAC编解码

AAC(Advanced Audio Coding,高级音频编码)是一种基于心理声学原理的有损音频编解码技术,广泛应用于流媒体、数字广播、移动音频等场景。其编解码流程围绕 "保留人耳可感知信息、去除冗余" 设计,分为编码(从音频信号到 AAC 比特流) 和解码(从 AAC 比特流到音频信号) 两部分,具体流程如下:

一、AAC 编码流程(音频信号 → AAC 比特流)

编码的核心是通过心理声学模型筛选 "人耳可感知的关键信息",并通过变换、量化、熵编码等步骤压缩数据,最终生成紧凑的比特流。流程可分为以下关键步骤:

1.1 预处理与心理声学模型

信号预处理

首先对输入的原始音频信号(时域连续信号)进行预处理:

  • 采样与量化:将模拟音频信号通过 ADC(模数转换)转换为数字信号(如 44.1kHz 采样率、16bit 量化);
    声道处理:对多声道信号(如立体声、5.1 声道)进行联合编码(如 M/S 立体声编码,将左右声道转换为中间声道和侧面声道,减少冗余);
  • 分帧:将数字音频按固定长度(通常 2048 或 1024 样本 / 帧)分成帧,逐帧处理。

心理声学模型计算

这是 AAC 编码的核心,基于人耳听觉特性(如掩蔽效应)去除 "不可感知的冗余信息":

  • 利用傅里叶变换将时域信号转换为频域,分析各频率成分的能量;
  • 计算掩蔽阈值:根据人耳对不同频率、响度的敏感度(如低频掩蔽高频、强音掩蔽弱音),确定每个频率成分的 "可接受失真上限"(即人耳无法察觉的最大失真);
  • 筛选有效频率成分:仅保留能量高于掩蔽阈值的频率成分,其余成分被视为 "冗余",可被压缩或丢弃。

1.2 频域变换与增强处理

通过变换将时域信号转换为频域,便于按频率成分进行精细化处理,核心技术包括:

  • MDCT(改进离散余弦变换)
    将每帧时域信号转换为频域系数(子带能量),相比传统 DCT,MDCT 通过重叠变换减少频谱泄漏,提高频率分辨率(尤其适合音频的非平稳特性)。
  • TNS(时域噪声整形)
    针对变换后可能出现的 "预回声"(快速变化信号在变换后产生的噪声扩散),通过在频域施加滤波,将噪声能量集中到信号强的区域,使人耳难以察觉。
  • LTP(长时预测)
    对具有周期性的信号(如语音、乐器持续音),通过分析历史帧的周期性特征,预测当前帧的信号,减少冗余(类似 "差分编码",仅传输预测误差)。

1.3. 量化与缩放因子调整

根据心理声学模型的掩蔽阈值,对频域系数进行量化(用有限比特表示连续值),平衡压缩率与音质:

  • 缩放因子(Scale Factors):为每个子带(或子带组)计算缩放因子,表示该子带的能量级别(类似 "量级"),用于解码时恢复绝对振幅。
  • 量化:根据缩放因子和掩蔽阈值,对频域系数进行量化 ------ 能量越高、越容易被人耳感知的系数,用更多比特表示(减少失真);反之用更少比特(甚至丢弃)。量化过程会引入失真,但需控制在掩蔽阈值内。

1.4. 熵编码与比特流打包

将量化后的系数、缩放因子、控制信息(如采样率、声道数、帧同步信息)编码为紧凑比特流,进一步减少冗余:

  • 熵编码:采用 Huffman 编码(主流)或算术编码,对量化结果进行 "变长编码"------ 出现概率高的符号用短码,低概率用长码,降低总比特数。
  • 比特流组织:按 AAC 标准格式打包,加入帧头(同步字、帧长度)、边信息(缩放因子、声道模式)、数据块(量化系数)等,确保解码端可正确解析。

(可选)扩展技术(如 HE-AAC)

低比特率场景下(如 32-64kbps),HE-AAC(高效 AAC)会引入SBR(频谱带宽扩展) 技术:

  • 编码时仅传输低频部分(如≤7kHz),高频部分(>7kHz)由解码端根据低频信号的谐波特性 "重建",大幅降低比特率同时保持音质。

二、AAC 解码流程(AAC 比特流 → 音频信号)

解码是编码的逆过程,目标是从比特流中恢复出接近原始的音频信号,流程如下:

2.1. 比特流解析与熵解码

首先解析比特流的帧结构,提取帧头(同步、采样率等)、边信息(缩放因子、声道模式)和数据块(量化系数)。

通过熵解码(如逆 Huffman 编码),将压缩的比特流还原为量化系数、缩放因子等原始量化数据。

2.2. 反量化与频域系数恢复

根据缩放因子和量化参数,对量化系数进行反量化,恢复频域系数的相对振幅。

若存在 LTP 或 TNS,需执行逆操作(如逆 LTP 预测、逆 TNS 滤波),还原频域信号的原始特性。

2.3. 逆 MDCT 与时域信号重建

对频域系数执行逆 MDCT,将频域信号转换回时域信号(每帧信号通过重叠相加,消除帧间 discontinuity)。

2.4. 后处理与输出

若为多声道信号,执行声道合成(如 M/S 解码为左右声道);

若为 HE-AAC,通过 SBR 模块重建高频信号,扩展频谱带宽;

最后通过 DAC(数模转换)将数字信号转换为模拟音频,输出到扬声器或耳机。

总结

AAC 的编解码流程核心是 "基于心理声学的选择性保留":编码通过频域变换、量化和熵编码去除冗余,解码通过逆过程恢复信号。其高效性源于多种技术的结合(MDCT、TNS、LTP、SBR 等),使其在相同比特率下音质优于 MP3,成为主流音频编码标准之一。

相关推荐
LBY_XK3 小时前
前端实现 web获取麦克风权限 录制音频 (需求:ai对话问答)
前端·音视频
居然是阿宋4 小时前
数字音视频存储揭秘:如何计算PCM音频与YUV/RGB视频的原始文件大小
音视频·pcm
rjszcb5 小时前
rtsp协议之.c++实现,rtsp,rtp协议框架,模拟多路音视频h264,265,aac,数据帧传输,接收(二)
c++·音视频·aac
随心记IT5 小时前
AAC音频格式
网络·php·aac
音视频牛哥9 小时前
四足机器人远程视频与互动控制的全链路方案
机器人·音视频·大牛直播sdk·四足机器人·rtsp播放器·人形机器人·rtmp播放器
aqi0011 小时前
FFmpeg开发笔记(七十五)使用qrencode和quirc对视频画面读写二维码
ffmpeg·音视频·直播·流媒体
猫头虎11 小时前
首个直播流扩散(LSD)AI模型:MirageLSD,它可以实时把任意视频流转换成你的自定义服装风格——虚拟换装新体验
人工智能·计算机视觉·音视频·实时音视频
脑子缺根弦16 小时前
融合优势:SIP 广播对讲联动华为会议 全场景沟通响应提速
华为·音视频·广播对讲系统
肥or胖1 天前
【FFmpeg 快速入门】本地播放器 项目
开发语言·qt·ffmpeg·音视频