当前位置:首页 >> 信息与通信 >>

MPGE4+AAC音频编码器的DSP程序优化设计与实现研究


华中科技大学 硕士学位论文 MPGE-4 AAC音频编码器的DSP程序优化设计与实现研究 姓名:张成兴 申请学位级别:硕士 专业:模式识别与智能系统 指导教师:汪国有 20050512





MPEG-4 AAC(Advanced Audio Coding)编码标准是目前所有感知音频编码标准中 最新和最有效的高保真数字音频编码方法 它代表了当今最先进的音频编码技术 具 有压缩比高 重建音质好 声道配置灵活 不同层次的应用具有不同的算法复杂度等 特点 因此 MPEG-4 AAC 将在数字音频广播 数字声音的存储 家庭影院 网络传输 等领域得到越来越广泛的应用 美国模拟器件公司 ADI 的 Blackfin 系列定点 BF533 芯片具有高速的时钟 独特的硬件结构和高度并行化的指令集 使得在单片 DSP 上实 现 MPEG-4 AAC 编码器成为可能   然后讨论了

本文首先阐述了 MPEG-4 AAC 音频编码标准及编码器算法基本原理

AAC 音频编码器的关键技术及实现方案 提出了在 PC 平台上的软件实现和在 DSP 芯片 上的优化设计与实现方法 MPEG-4 AAC 编码器由心理声学模型 滤波器组 频域预测 瞬时噪声整形 量化等模块组成 且编码器的算法复杂度高 对运算量和存储器容量 都有很高的要求 因此 本文重点是对编码器中运算量最大的心理声学模型 滤波器 组和量化模块等进行优化 将浮点编码程序改编成定点程序 全部采用汇编代码实现 并在定点 BF533 芯片上实现了 MPEG-4 AAC 低复杂度层次的编码器 码器降低了 MPEG-4 AAC 的实现复杂度 音频质量   提高了程序的运行速度 试验表明 该编

获得了优良的重建

最后 针对该定点算法的 DSP 运行结果进行了分析和评估 从理论和实践两个方 面论证了该定点编码算法可在提供高压缩比的同时保证重建音频信号的质量  

关键词

感知音频编码

MPEG-4 AAC 数字信号处理器

心理声学模型

Abstract

The coding standard of MPEG-4 AAC(Advanced Audio Coding) is the latest and most efficient Hi-Fi digital audio coding method among all the existing perceptive audio coding standards. It stands for the most advanced audio coding technology, providing high compression ratio, excellent rebuilt timbre, flexible sound track configuration and diverse algorithm complexities for applications in different levels. Thus, the MPEG-4 ACC will be widely used in domains such as digital audio broadcast, digital voice reservation, home theater and network transmission. BF533, the fixed-point chip of the Blackfin series product by American Analog Devices, Inc., has high speed clock, unique hardware architecture and high collateral instruction set which makes it possible to implement MPEG-4 ACC encoder on single DSP chip. This theme introduces the audio coding standard and the algorithm principle of the encoder in MPEG-4 ACC, discusses the key technologies and implemental schemes of the ACC audio encoder, and presents the software implementation on PC platform as well as optimal design and implemental method based on DSP chips. The encoder is composed of various module such as psychoacoustic model, filterbank, frequency prediction, Temporal Noise Shaping, and quantization. The algorithm of encoder has high complexity, and requires large memory and processing capability. So, the emphases of this theme are presented as follows: The first is optimizing the psychoacoustic model which costs the biggest calculating quantity, as well as the filterbank and quantization module. The second is transforming floating-point programs into fixed-pointing programs and implementing them with assemblers. The third is implementing a MPEG-4 ACC coder with Low Complexity Profile on BF533. The experimentation shows that, with the above measures, the implemental complexity of MPEG-4 ACC has been reduced, the operative speed of the procedure has been enhanced and the satisfied rebuilt audio quality of the encoder based on BF533 has been acquired . At last, this theme also gives analysis and evaluations of the DSP results with the above fixed-point algorithm, demonstrating the fact, both theoretically and practically, that the proposed fixed-point algorithm can assure the quality of rebuilt audio signals with high compression ratio at the same time. Key words: Perceptual audio coding; MPEG-4 AAC; DSP; Psychoacoustic model

独创性声明 
本人声明所呈交的学位论文是我个人在导师的指导下进行的研究 工作及取得的研究成果 近我所知 除文中已标明引用的内容外 本论 文不包含任何其他人或集体已经发表或撰写过的研究成果 对本文的研 究做出贡献的个人和集体 均已在文中以明确方式标明 本人完全意识 到本声明的法律结果由本人承担 学位论文作者签名 张成兴 日期 2005 年 5 月 12 日

学位论文版权使用授权书 

本学位论文作者完全了解学校有关保留 使用学位论文的规定 即 学校有权保留并向国家有关部门或机构送交论文的复印件和电子版 允 许论文被查阅和借阅 本人授权华中科技大学可以将本学位论文的全部 或部分内容编入有关数据库进行检索 可以采用影印 缩印或扫描等复 制手段保存和汇编本学位论文                      保密 本论文属于 不保密 请在以上方框内打 学位论文作者签名   在______年解密后适用本授权数

张成兴

指导教师签名 汪国有 日期 2005 年 5 月 12 日

日期 2005 年 5 月 12 日

1

绪论

1.1 概述
数字音频是一门成熟的技术 其基本概念早在上个世纪就为人们所知 但是直到 1970 年才开始商业化进程 数字技术使高质量音频信号的采集 存储 处理 交换和 传输更为方便 美的听觉效果 重建质量也更高 在最近的二十年间 但是 CD 音质的数字音频由于其完 CD 所需存储成本很高 对数据

已经取代了传统的模拟音频

格式为 16bit PCM 编码 在 44.1kHz 采样率下 一张容量为 650MB 的 CD_ROM 只能 存储约一个小时的音乐 而且随着网络的普及和广泛使用 有限的带宽难以承受巨大 的数据传输量 所以就必须研究更高压缩率的算法 随着计算机处理能力的不断提高 和信号处理理论的逐渐完善 数字音频压缩技术也得到了突飞猛进的发展

传统的数字音频压缩技术主要采用数字波形编码 它采用数据熵冗余技术 没有 考虑到人耳听觉效果的主观特性 因此这种压缩方法复杂度低 压缩率也较低 而且 经压缩后的音质较差 例如 ? 律编码和 ADPCM 为了获得更高的压缩率和更好的音

质 一种基于人耳主观感知的音频压缩编码技术得到了发展 这种编码器主要考虑人 耳对输出的声音信号的有效感知 而不再追求输出信号与原始信号的相似程度 这种 基于人耳听觉效果的感知音频编码广泛应用于数字音频广播 数字音频工作站 卫星 广播和高清晰度电视伴音[1] MPEG-4 AAC Advanced Audio Coding 是 MPEG 标准[2]的音频编码规范 MPEG 声音标准是一个普遍适用的声音压缩标准 对声音源没有任何特殊的要求 它充分利 用人的听觉系统的感知特性 压缩率的取得来自去掉信号中人耳听不到的信号细节

虽然压缩后的编码是有失真的 但对于人耳来说这些失真是听不到的 也就是说 对 人耳而言 MPEG 声音压缩算法是不失真的 由于以上特点 MPEG 声音标准的应用 范围十分广泛 涉及数字声音的地方几乎都可以利用 MPEG 声音标准

在当前信息化 数字化进程中 信号作为信息的传输和处理对象 逐渐由模拟信 号变成数字信号 信息化的基础是数字化 而数字化的核心技术之一就是数字信号处 理 数字信号处理技术已成为人们日益关注的并得到迅速发展的前沿技术 DSP作为

一种特别适合于进行数字信号处理运算的微处理器 凭借其独特的硬件结构和出色的
1

数字信号处理能力 在数字音频广播

广泛应用于通讯 数字电视

语言识别

图像处理

自动控制等领域 DSP芯片除了要对一路

移动多媒体通信等应用中

甚至多路音频进行处理外 通常还要处理视频 甚至网络通信等其它任务 此时 就 要求音频编码器不仅要能确保音频质量 还要不能占用DSP系统太多的资源 因此

研究音频编码在DSP平台上的实现及其优化技术具有非常重要的现实意义

1.2 数字音频编码技术的发展
目前 音频压缩编码已有了多种不同的算法标准 1988 年 国际标准化组织和国 际电子技术委员会组织了运动图像专家组 已经制定了 MPEG 系列标准 1 MPEG-1 音频编码标准 它 MPEG-1 (ISO/IEC 11172-3)是在 1992 年 MPEG 组织制定的第一个国际标准[3] MPEG 研究高质量音视频压缩技术 现

能对最多两个声道编码 支持每声道比特率约为 32~224kb/s 的 32 44.1 和 48kHz 的 PCM 数据 MPEG-1 采用 MUSICAM Masking Pattern Adapted Universal Subband Integrated Coding And Multiplexing 自适应掩蔽模式通用子带综合编码与多路复用 Adaptive Spectral Perceptual Entropy Coding 自适应频谱感知熵编码 和 ASPEC

两种算法

MPEG-1 按照编码复杂度分三层编码机制 每个层次的复杂度 压缩率有所不同 第 层复杂度最小 它用来处理相对高的数据传输速率 第 层是在第 层的基础上用 比较复杂的方法来处理较低数据传输速率 第 层是最复杂的 对最低数据传输速率

进行处理 第 层在对双声道立体声编码时, 在 128Kbit/s 对绝大多数音乐编码可达到 接近 CD 的音质效果 也就是我们熟知的 MP3 它已成为网络音乐和便携电子设备的 首选标准 2 在商业上获得了极大的成功 MPEG-2 音频编码标准

MPEG 组织在 1994 年制定了 MPEG-2 (ISO/IEC 13818-3) [4] 它是 MPEG-1 音频编 码标准的补充 并向后兼容 MPEG-1 表示为 MPEG-2 BC 与 MPEG-1 相比 MPEG-2 也按照编码复杂度分三层编码机制 但增加了三个采样频率 分别为 16, 22.05, 24kHz 这些附加频率不向后兼容 MPEG-1 这部分标准就是 MPEG-2 LSF

MPEG-2 能够提供广播级的视像和 CD 级的音质 MPEG-2 的音频编码可提供左

2

右中及两个环绕声道

以及一个低频增强声道和多达 7 个伴音声道(DVD 可有 8 种语

言配音的原因) [5-6] 由于 MPEG-2 在设计时的巧妙处理 使得大多数 MPEG-2 解码器 也可播放 MPEG-1 格式的数据 3 MPEG-2 AAC 使用 如 VCD 等

MPEG-2 AAC 标准[7]完成于 1997 年 经 BBC U.K. 和 NHK Japan

测试表明已达到最优化 ITU R601 推荐的分辨率 并且对于低比特率的多声道编码能 提供相当高的声音质量 MPEG-2 AAC 不向后兼容 MPEG-1 除去兼容性限制 其它性能均比 MPEG-2 优 越 它支持 32, 44.1 和 48kHz 的采样频率 也支持其它 8 到 96kHz 的采样频率 适用 于从比特率在 8kbit/s 单声道的电话音质到 160kbit/s 多声道高质量音频编码 道的配置为单声道 4 数字杜比 双声道 AC-3 美国杜比实验室的 AC-3 音频编码[8]提供对 32 5.1 声道 最多可达到 48 声道 输入声

在多声道环绕立体声编码方面

44.1 和 48KHz 采样 从单声道到 5.1 环绕立体声的音频信号的编码 并支持码率范围 从 32kbit/s 的单声道码流到 640kbit/s 的多声道高质量音频码流 AC-3 采用自适应变 换编码 具有很多优点 它使用的滤波器组的频率选择性非常接近人耳的掩蔽效应

更好地模拟了人耳的听觉特性 目前 Dolby AC-3 已经凭借其良好的声场和声像重现能力 赢得了电影 家庭影 院 DVD 和数字电视伴音等领域的广泛应用 5 MPEG-4 AAC ISO/IEC 14496-3 和长时预测 以 MPEG-2 AAC 为核心 在此基础上增加了

MPEG-4 AAC 感知噪声替代 的音频信号 PNS

LTP 功能模块

PNS 应用于具有类似噪声频谱 并向下兼容 MPEG-2 AAC

LTP 则针对具有明显基音特征的音频信号

为了针对不同的要求提供不同的服务 MPEG-4 分为 4 个层次的应用 即主层次 MAIN Main 低复杂度层次 LC Low Complexity 采样率可分级层次 SSR Scaleable

Sampling Rate 和长时预测层次 LTP Long Term Prediction 一样

各层编 解码复杂度不

用 AAC 对单声道音频编码 在 64Kbit/s 下对绝大多数音乐编码可达到接近 CD 的 音质效果 因此和 MP3 的单声道 128Kbit/s 相比 编码效率已经有了很大提高 被认

3

为是下一代音频编码标准 AAC 是唯一一个在欧洲广播联盟主办的 64Kbps 听力测试 中被评为 优秀 的因特网音频数字多媒体编解码器 鉴于其卓越的性能和质量 AAC 已成为 MPEG-4 规范的核心 同时它还是因特网 无线网以及数字广播网领域中的新 一代音频数字解码器的选择[9] 我国在数字音频编码领域起步较晚 还没获得较成熟和完整的成果 数字音视频编解码技术标准(Audio Video coding Standard 中国自己的

简称 AVS)正在制订中 包括编 音

AVS 音频编解码技术标准的目标是使 AVS 音频编解码技术的综合技术指标 码效率 复杂度和延迟等 基本达到或超过 MPEG AAC 编码技术 未形成正式标准

到目前为止

频编解码技术标准化的工作正在进行中

1.3 研究内容
本文的主要工作是对MPEG-4 AAC音频编码标准进行算法和软件实现优化 即研 究快速算法替代原有算法 并将浮点算法改为定点算法 最终在美国模拟器件公司

ADI 的Blackfin 系列BF533定点DSP芯片上实现AAC的低复杂度级别的编码器 全文共分四章 第一章是绪论 主要介绍了音频编码技术的概况 以及当前主要 的音频编码标准 模块进行了分析 第二章介绍了音频压缩的基本原理 对 MPEG-4 AAC 的主要算法 介绍了 BF533 芯片的硬件

第三章对 AAC 编码算法模块做了改进

和编程特点 讨论了算法定点实现方法 然后针对 BF533 定点 DSP 对程序进行优化 第四章对运行结果进行分析 给出各项技术指标

4

2

音频压缩原理和 AAC 编码主要算法模块

2.1 音频压缩的基本原理
2.1.1 心理声学模型 它一般只能感知频率在 20

人耳的听觉系统是一个相当复杂的生理系统

20kHz 的声音 在这个频率段内的声音通过神经传输到大脑皮层 然后由大脑将声 音转化成不同的感知信号 观感知特性[10-15]来编码 AAC 算法及其它许多音频压缩算法都是基于人耳的主 感知模型即心理声学模型 它是包括 AAC 在内的所有感

知音频编码的核心 主要利用了音频三个特性来进行压缩编码 响度 高音和掩蔽 效应 2.1.1.1 响度

声音的响度就是声音的强弱 当声音弱到人的耳朵刚刚可以听见时 称此时的声 音强度为 听阈 当声音强到使人耳感到疼痛时 称此时的声音强度为 痛阈

不同的频率对人的耳朵来说具有不同的 听阈 和 痛阈

如图2-1所示 在 听阈

曲线和 痛阈 曲线之间的区域就是人的听觉范围 由图可见 具有不同频率 不同 声强的声音信号 在人耳听起来具有相同的响度

图2-1

听阈—频率

曲线

5

图 2-1 说明人耳对不同频率的敏感程度差别很大 其中对 2 号幅度要高得多 2.1.1.2 高音

4 kHz 范围的信号最

为敏感 幅度很低的信号都能被人耳听到 而在低频区和高频区 能被人耳听到的信

客观上用频率来表示声音的音高 其单位是 Hz 而主观感觉的音高单位则是 美 (Mel) ,主观音高与客观音高的关系是 Mel = 1000 log 2 (1 + f ) 其中 的单位为 Hz 这也是两个既不相同又有联系的单位 2-1

人耳对响度的感觉有一个范围 即从听阈到痛阈 同样 人耳对频率的感觉也有 一个范围 人耳可以听到的最低频率约 20 Hz 最高频率约 20000 Hz 测量主观音高时 让实验者听两个声强级为 40 dB 的纯音 固定其中一个纯音的 频率 调节另一个纯音的频率 直到他感到后者的音高为前者的两倍 就标定这两个 声音的音高差为两倍 2.1.1.3 掩蔽效应 实验表明 音高与频率之间也不是线性关系

一种频率的声音阻碍听觉系统感受另一种频率的声音的现象称为掩蔽效应 前者 称为掩蔽声音(masking tone) 后者称为被掩蔽声音(masked tone) 掩蔽可分成频域掩 蔽和时域掩蔽 1 频域掩蔽 一个强纯音会掩蔽在其附近同时发声的弱纯音 这种特性称为频域掩蔽 也称为 同时掩蔽 例如一个声强为 60 dB 频率为 1000 Hz 的纯音 另外还有一个 700 Hz 的 纯音 前者比后者高 45dB 在这种情况下我们的耳朵就只能听到那个 1000 Hz 的强音 图 2-2 给出了一个具体的掩蔽曲线

图 2-2

一个 1kHz 的掩蔽声的掩蔽曲线
6

不同的频率有不同的掩蔽曲线 我们用一组曲线分别表示频率为 250 Hz 1 kHz 4 kHz 和 8 kHz 纯音的掩蔽效应 它们的声强均为 60 dB 从图 2-3 中可以看到 1

在 250 Hz 1 kHz 4 kHz 和 8 kHz 纯音附近 对其他纯音的掩蔽效果最明显 也就是 说 纯音 两个声音的频率越接近 掩蔽效应越明显 2 低频纯音可以有效地掩蔽高频

但高频纯音对低频纯音的掩蔽作用则不明显

图 2-3

不同纯音的掩蔽效应曲线

由于声音频率与掩蔽曲线不是线性关系 为从感知上来统一度量声音频率 引入 了 临界频带(critical band) 的概念 人耳对于不同频率的声音信号的敏感度是不同

的 一般大约可分成二十多个不同宽度的频带 称之为临界频带 一个纯音可以被以 它为中心频率 而且具有一定带宽的连续噪声所掩蔽 如果在这一频带内噪声功率等 于该纯音的功率 这个该纯音刚好能被听到的临界状态 即称这一带宽为临界带宽

单位为Bark 若两个单频音出现于相同临界频带中 人耳只能听到类似于此二者能量 相加的单频音 但若两个单频音分别在不同临界频带中 临界带宽约为100Hz 就可听到两种不同的声音 在高于500Hz时 临界带宽约

一般在低于500Hz的频带内 为中心频率的20 临界频带 24.7

也有学者认为临界频带可以用下式来计算 4.37F+1 随频率而改变 以任何频率为中心 都有一个临界频带

临界频带是不固定的 2 时域掩蔽

除了同时发出的声音之间有掩蔽现象之外 在时间上相邻的声音之间也有掩蔽现 象 称为时域掩蔽 也称为异时掩蔽 如图2-4所示 时域掩蔽又分为超前掩蔽(pre-masking)和滞后 即一个声音影响

掩蔽(post-masking)

被掩蔽声音作用于掩蔽声以前

了时间上先于它的声音的听觉能力 这称为超前掩蔽 当掩蔽声作用在前 被掩蔽作 用在后 即当一个声音已经结束 它对另一个声音在听觉上还产生影响 这称为滞后
7

掩蔽 产生时域掩蔽的主要原因是人的大脑处理信息需要花费一定的时间 一般来说 超前掩蔽很短 疲劳有些相似 阈值就越高 只有大约5 在实际中 20 ms 而滞后掩蔽可以持续50 200 ms 前掩蔽和听觉

后掩蔽更为重要

当被掩蔽声在时间上越接近于掩蔽声 后掩蔽作用大于前掩蔽作用

掩蔽声和被掩蔽声时间上相距很近时

图2-4

时域掩蔽

2.1.1.4

掩蔽效应控制量化噪声

在一个临界频带内 低于掩蔽阈值的声音将被掩蔽掉 将掩蔽声和掩蔽阈值的 距 离”定义为信号掩蔽比 SMR 图中 A 点 如图 2-5 所示 它的最大值在临界频带的左边界处

若对音频信号进行 m 位的量化 其信号噪声比 SNR 只要大于 SMR

量化噪声就不会被听到 用噪声掩蔽比 NMR 来衡量可感知的失真 2-2

NMR(m)=SMR-SNR(m) (dB)

图 2-5

掩蔽阈值控制量化噪声

8

由图可见 只要 NMR 为负值 量化噪声就不可闻 当增加量化比特时 SNR(m) 增加 从而 NMR(m)减小 当 NMR(m)有较大余量时 降低量化位数 只要保持 NMR(m) 为负 就能达到节约比特数的目的 它只处理 10Hz

AAC 编码充分利用了听觉系统对声音的感知特性来编码

20000Hz 范围内的声音数据 另外由于掩蔽效应 对于有多个频率出现的情况下 某 个具有较高声强的频率的信号会掩蔽其附近的声强较低的信号 被掩蔽的信号也不用 编码 2.1.2 因此就大大提高了压缩率 子带编码

子带编码是在 20 世纪 90 年代初提出的 它将一个短周期内的连续时间取样信号 送入滤波器中 滤波器组将信号分成多个 最多 32 个 限带信号 以近似人耳的临

界频带响应 通过分析每个子带的取样值并与心理声学模型进行比较 编码器基于每 个子带的掩蔽阈值能自适应地量化取样值 每个子带都根据所分配的不同比特数来独立进行编码 子带内的信号会对噪声进

行掩蔽 量化噪声被限制在该子带内 所以子带内的量化噪声是可以容忍的 用心理 声学模型对信号进行分析来决定比特的分配 量化因子将作为边信息传送 用于在解 码端恢复量化阶 子带感知编码器利用 FFT 将信号从时域变换到频域分析其能量 学模型来分析这些数值 给出这组数据的合成掩蔽曲线 利用心理声

编码器通过分析每个子 用来计算

带的能量来判断该子带是否包含可听信息

计算每个子带的平均功率

当前子带及邻接子带的掩蔽级 最后根据最小闻阈推导出各个子带最后的掩蔽级 计算每个子带的峰值功率并与掩蔽级进行比较 不包含可听信息的子带则不编码

也不对子带中被其它强度大的声音掩蔽的声音信号进行编码 在一些情况下 被另 一子带完全掩蔽的子带也不进行编码 但峰值高于掩蔽级包含可听信号的子带必须 进行编码 2.1.3 变换编码 将时域音频信号变换到频率域
9

在变换编码中

变换方法可采用离散傅里叶变



DFT

或改进的离散余弦变换

MDCT

变换的系数根据心理声学模型进行

量化 与通过频率分析对时间取样进行编码的子带编码不同 变换编码对频谱系数 编码 [16] 时域信号变化到频域产生频谱系数 析过程 将系数分成 32 个子带来仿效临界频带的分 每个子带的频谱系数根据编码器的心理 子带内的系数都被量化到相同 以达到要求的信噪比 循环

这个频谱代表时域输入的取样值

声学模型来量化 的位数

编码时对每个独立子带进行量化

比特分配算法计算每个子带的最佳量化噪声

分配提供附加的比特数来增加编码的余地 再经过熵编码再传输 信号 2.1.4 立体声编码

而且保持比特速率

经过量化后的数据

解码器对系数进行反量化

并且进行相反的变换来恢复时域

在立体声音频编码中 左右声道存在一定的相关性[17] 立体声编码有两种方法 强度立体声 IS 编码和边中 MS 编码 强度立体声编码的原理是人耳听觉系统

在听 4kHz 以上的信号时 双耳的定位对左右声道的强度差比较敏感 而对相位差不 敏感 IS 就利用这一原理 在某个频带以上的各子带使用左声道代表两个声道的联

合强度 右声道谱线置为 0 由于右声道谱线为 0 不参与编码 就大大减少了编码 的比特数 当左右声道信号频谱具有相似性时 使用 MS 编码 将两个声道频谱值 就

分别相加和相减存入两个声道 能减小编码的比特数

这样两个频谱值相减的声道频谱值大部分为 0

2.2 AAC 编码的主要算法模块
AAC 编码的主要算法模块如图 2-6 所示

10

input time signal Legend: data control

Psychoacoustic model window length decission threshold calculation

AAC gain control block switching fiterbank

TNS

long term prediction

intensity spectral processing prediction bitstream payload formatter coded audio stream

PNS

M/S

quantization

Huffman coding

图 2-6

AAC 算法编码流程图

图 2-6 是 AAC 编码的完整框图 在实际应用中 需的 表 2-1 列出了各模块的可选性

并不是所有的功能模块都是必

11

表 2-1 工具

MPEG-4 AAC 编码器各模块的可选性 可选性 Required/Optional Required Required Required Optional Optional Optional Optional Optional Optional Required Optional Required

Bitstream formatter Noiseless Coding Quantization M/S PNS Prediction Intensity stereo Long term prediction TNS Filterbank control Gain control Psychoacoustic model

2.2.1

心理声学模型 心理声学模型是 AAC 的核心部分之一 MPEG 标准建议了两种心理声学模型 在 MPEG-1 中

只在编码器中使用该模块

而且简单的编码器不使用心理声学模型 模型 2 用在第三层中

心理声学模型 1 用在第一层和第二层中 模型 2 原理上与 MP3 相同

AAC 采用心理声学

但在帧长 频率分辨率与 MP3 不同 其处理块的长度为 2048 点和 256 点

心理声学模型输入 1024 点的 PCM 信号 时域上与上一块有 50 的重叠

心理声学模型的计算结果用于滤波器组和量化模块 它依据当前的 FFT 频谱与前 一帧 FFT 频谱之间的差别度量来决定 MDCT 模块中用什么类型的窗函数 如果差别

超过了一定的限度 表明现在音频信号处在非平稳态 MDCT 采用短窗 如果差别较 小 表明音频信号处在准平稳态 MDCT 中就采用长窗 心理声学模型同时还向量化 模块提供信息 以决定量化模块如何来量化音频信号的频域样值 量化的形式要求和 人耳的听觉特性最大限度地相适应 实验证明 人耳可分成 24 个频带 当信号中有

一个较强的单音 该单音会掩蔽其所在的临界频带中的弱信号 使之不为人耳所察觉 这就是我们所利用的掩蔽效应 掩蔽效应允许对临界频带中的弱信号进行相当粗糙的

12

量化

而不会引入听觉失真

AAC 采用比例因子段来近似临界频带

心理声学模型

分析 FFT 频谱 判断当前的临界频带中是否有主单音的存在 当主单音存在时 计算 相应的掩蔽阈值 根据该掩蔽阈值可以得出可分配给量化因子频带的比特数的上限

心理声学模型使用原始输入的音频信号经 FFT 变换所得到的频域值 这是因为在 计算掩蔽阈值时 需要更精确的频率分辨率 而 MDCT 变换得到的频域值不能精确

地代表输入信号的幅频特性和相频特性 用以前时刻的 FFT 谱线幅度和相位值预测当 前的幅度和相位 然后计算实际值和预测值之间的欧基里德距离 再进行归一化 这 个归一化值被称为“不可预测性” 由于对于音频信号中的谐音分量和类噪声的非谐音分量来说 其掩蔽能力是不同 的 因此声学模型首先要区分出这两种不同类型的信号分量 AAC 采用的心理声学

模型 2 不直接区分出谐音分量和非谐音分量 而是把频谱数据变成“分区”区域 分区 区域有着与临界频带空间差不多的线性关系 对于 1 个 FFT 频谱线或 1/3 临界频段中 的较宽者提供一种近似的解决方案 在低频 一个 FFT 的单谱线将构成一个计算分区 在高频 多条频线将被合并成一个计算分区 并且把频域的幅度值转化为能量值来表 示 按照标准计算并通过测量频谱随时间的不可预测性确定频谱线是否为谐音成份

即把每个分区频谱线的不可预测性作为每个计算分区的谐音索引值 这个索引值就是 一个判断标准 来判断这个分量是更接近于谐音或者噪声 谐音成分的可预测性好

因此它的谐音索引值相对要高一些 由于这一过程的计算需要较多的数据 因此它比 模型 1 对谐音成分和非谐音成分的分辨要好一些 由于一个给定信号的掩蔽能力可以 跨越它周围的整个临界带宽 为了更有效地利用这个掩蔽能力 模型 2 使用扩展函数 经过扩展卷积来决定噪声掩蔽阈值 然后根据分区的能量和不可预测性计算出每个分 区的谐音索引值 再经过内插就可以得到每个分区的信掩比 SMR 任何特定分区

掩蔽阈值等于分区能量乘以衰减系数

由于在 AAC 中考虑了预测回声的控制问题

因此基于现行计算方法得出的掩蔽阈值 要通过与前两个计算分区的掩蔽阈值以及绝 对掩蔽阈值比较 得出较大的阈值 整个阈值才是该分区的实际掩蔽阈值

心理声学模型的实现按如下步骤进行 1 计算扩展函数 也会在频带之间产生一

由于各临界频带内的掩蔽效应并不仅局限于一个频带内 种可预先估定的掩蔽效应 称为扩展掩蔽效应

计算函数如下

13

if j ≥ i tmpx = 3.0( j ? i ) else tmpx = 1.5( j ? i )

tmpz = 8 * min imun (tmpx ? 0.5) ? 2(tmpx ? 0.5),0
2

(

else sprdngf (i, j ) = 10 [(tmpz + tmpy ) / 10 ] 式中 i 表示扩展信号的巴克值 j 表示被扩展频段的巴克值 tmpx 是一个临时变量 2 计算输入信号的复频谱

tmpy = 15.811389 + 7.5(tmpx + 0.474) ? 17.5 1.0 + (tmpx + 0.474) if tmpy < ?100 sprdngf (i, j ) = 0

(

)

2 0.5

)

将新输入的 1024 个采样点会同前一帧的 1024 个样点值组成一个 2048 点的处理块 s(i) 给这个处理块加上一个 Hann 窗得到 sw(i)

sw(i ) = s (i ) ? (0.5 ? 0.5 cos[π (i + 0.5) / 1024]) 对 sw(i)做 FFT 变换 得到处理块的复数谱 r(i), f(w) 分别代表幅度部分和相位部
分 再由前两个处理块的结果计算出本处理块的可预测部分: r _ pred (w) = 2.0 * r (t ? 1) ? r (t ? 2 ) f _ pred (w) = 2.0 * f (t ? 1) ? f (t ? 2) 式中 t-1 表示前一块数据 3 计算不可预测性 可以得到不可预测的度量:

根据预测值及本帧的频谱值

c(w) = ((r (w) * cos( f (w)) ? r _ pred (w) * cos( f _ pred (w))) 2

+ (r (w) * sin ( f (w)) ? r _ pred (w) * sin ( f _ pred (w))) 2 ) 0.5 ) / r (w) + abs(r _ pred (w)) 对长块而言 最低频的6个系数用此公式 而高频部分

这个公式用于对短块的计算 则全部设为0.40

然后对每一个掩蔽域值区域计算分区能量e(b)以及不可预测的能量部分c(b) 其中 b是区域的序号 不同的采样率对应不同的区域划分 在低频时 一条频线就组成一

个区域 而在高频时 多条频线才组成一个区域 标准中提供了各种采样率的区域划 分参数 对每一个分区 e(b)和c(b)的计算公式如下 e(b ) =
max_ line

i = min_ line

∑ r (i )

2

14

c(b ) = 4

max_ line

i = min_ line

∑ r (i )

2

* c(i )

用扩展函数卷积分区能量和不可预测度 用扩展函数对分区能量和不可预测性进行卷

考虑到相邻区域之间的相互影响 积 得到修正后的结果 ecb(b)和 ct(b): ecb(b ) = ct (b ) = cb(b) = ct (b) / ecb(b) 由于扩展函数的非归一化属性
max_ partition m=0

∑ e(m) * sprdngf [bval (m ), bval (b )]
需要将它重新归一化得到 cb(b)

max_ partition m=0

∑ c(m ) * sprdngf [bval (m), bval (b )]

不可预测度 ct(b)是经过信号能量加权的

ecb(b)也需要归一化

得到归一化的能量 en(b)

1 en(b) = ecb(b) * max_ partition ∑ sprdngf [bval (m), bval (b )]
m =0

5

计算音调索引 tb(b)及信噪比 SNR(b)

tb(b) = ?0.299 ? 0.43 ln (cb(b )) 由音调索引可以计算出各个分区的信噪比 SNR (b) = tb(b) * TMN (b) + (1 ? tb(b)) * NMT (b) 式中 TMN(b)为噪声掩蔽音调值 固定为 6 dB NMT(b)为音调掩蔽噪声值 固定 为 18 dB 6 计算实际的能量阈值 并考虑到安静阈值 nb(b) = en(b) * 10 ? SNR ( b ) / 10 该值将用于后面的联合立体声编码 为了进行前回声控制 qsthr(b) nb(b)值作如下的修正 nb(b) = max(qsthr (b), min(nb(b), nb _ l (b) * rpelev)) 式中 nb_l(b)表示上一帧对应的 nb 值 rpelev 在短块时值为 1 长块时值为 2 7 计算感知熵 PE 及决定编码采用块类型 PE =
max_ partition b =0

∑ ? [(w _ high(b) ? w _ low(b))]* lg[nb(b) / e(b) + 1]
则编码采用 short_block_type 否则采用

如果 PE 大于一个给定值 switch_pe

long_block type 如果上一帧采用长块类型而本帧判断为短块类型 则采用 start_type

15

否则采用 short_block_type 8 计算信掩比 SMR(n)和最大允许能量误差 xmin(n)

定义 swb 为比例因子段的索引 swb_offset_long/short_window 为比例因子的频谱 的偏移量 对每个比例因子段
n = swb

w _ low(n) = swb _ offset _ long / short _ window(n) w _ high(n) = swb _ offset _ long / short _ window(n + 1) ? 1 w_low(n)和 w_high(n)值可以从标准提供的表中查出 则每个比例因子段的 FFT 能量 epart(n)和噪声能量 npart(n)为 epart (n) =
w _ high ( n )

m = w _ low ( n )

∑ r ( m)

2

npart (n) = min[thr ( w _ low(n)),......thr ( w _ high(n))] * [w _ high(n) + 1 ? w _ low(n)] 式中 thr 为每根频谱线的掩蔽阈值 计算如下 thr ( w _ low(b),......, w _ high(b)) = nb(b) /( w _ high(b) + 1 ? w _ low(b)) 则用于量化模块的信掩比 SMR(n)计算如下 SMR(n) = epart (n) / npart (n) 最大允许能量误差 xmin(n)为
w _ high ? ? x min(n) = ?npart (n) * ∑ mdct _ line(m) 2 ? / epart (n) m = w _ low ? ? 最后根据感知熵计算编码所需要的比特数

当使用长块时

bit _ allocation = pew1 * PE + pew2 * sqrt ( PE ) pew1=0.3 pew2=6.0 当使用短块时 pew1=0.6 pew2=24

需要附加的比特数为 more_bits=bit_allocation - (mean_bits - side_info_bits) 2.2.2 滤波器组 AAC的分析滤波器组使用改进的离散余弦变换(MDCT) 数据变换成频域信息 滤波器组把输入的时间样本作为块 并乘以窗函数 然后执行MDCT 输入信号 的每个块都由前一块和当前块的50 叠加组成 变换块的长度为2048或256个样本 把时间域上的输入音频

由于窗函数对滤波器的频率响应有很大影响 滤波器组设计成允许改变窗形状以适应
16

信号的改变 根据输入信号的特征将滤波器的分辨率设为每块2048或256个样本 长块的频域

分辨率高 编码效率高 而过长的窗函数又会使时域分辨率下降 产生严重的 前回 声” 前回声”的产生原因是由于存在冲击信号或类似的时域事件[18] 有效地抑制 前 切换的标准根据心理声学模型的计算结果确定 为了平滑

回声”的措施是使用短窗

过渡 长短块之间的过渡不是突变的 中间引入了过渡窗 见图2-7 过渡窗分为 长 起始窗”和 长结束窗” 窗类型转换规则如下

从长窗到长窗或长起始窗 从长起始窗到短窗或长结束窗 从长结束窗到长窗或长起始窗 从短窗到短窗或长结束窗
长窗 长起始窗 短窗 长结束窗

图2-7

窗口组合示意图

由于余弦变换在边界处存在固有的不连续性 因此在块边界处可能产生很大的噪 声 相邻块的采样值在时间上重叠 有利于消除这种噪声 这种技术称为时域混叠抵 消 真 TDAC 技术[19] MDCT和IMDCT都采用TDAC技术 在分析过程中引进混叠失

可以在合成过程中抵消

图2-8是TDAC在MDCT和IMDCT中的应用的示意图
混叠 MDCT

量化

编码

IMDCT

混叠抵消

图2-8

TDAC示意图
17

MDCT的表达式为
N ?1 ? 2π 1 ?? ? X ( k ) = 2 ∑ x ( n ) w ( n ) cos ? ? N ( n + n 0 )? k + 2 ? ? ? for 0 ≤ k < N/2 ? ?? n=0 ?

2-3

解码器中用的IMDCT表达式为 x(n ) = 2 N
N / 2 ?1



k =0

? 2π 1 ?? ? X ( k ) w ( k ) cos ? ? N ( n + n 0 )? k + 2 ? ? ? ? ?? ?

for 0 ≤ n < N

2-4

w(n) 为窗函数 AAC提供了两种窗函数 正弦窗和凯塞 n0 = N / 2 +1 2 是一个固定的时间偏移量

贝赛尔窗 KBD 窗

正弦窗使滤波器组能较好地分离出相邻的

频谱分量 适合于具有密集谐波分量 频谱间隔<140Hz 的信号 对于频谱成分间隔 较宽 >220Hz 时采用KBD窗 AAC系统允许正弦窗和KBD窗之间的连续无缝切换 2.2.3 增益控制 增益控制模块(Gain control module)主要是由多相正交滤波 PQF bank 增益检

测 gain detectors 及增益修改 gain modifiers 组成 该模块接收输入的时域数据 输出增益控制数据和增益控制信号
window_ sequence

其长度等于 MDCT 的长度
gain_ control_ data

算法原理详图 2-9

256 or 32 MDCT

增益 修改 PQF 增益 检测 增益 修改 增益 检测 增益 修改 增益 检测

256 or 32 MDCT

Spectral reverse

256 or 32 MDCT

256 or 32 MDCT

Spectral reverse

增益控制 时域信号 增益控制

图 2-9

增益控制算法

18

PQF bank 将其输入信号分为四个频带 除了最低频带不做增益控制外 其余频带 再利用 gain detector 与 gain modifier 去做能量的控制与衰减 某个程度的控制与衰减 使原来信号的能量范围变小 因此 因为它能将声音信号做 可以在经过 MDCT 之

前 将此声音看作是较平缓的讯号 此信号在解码后 可降低前回声发生的机会 在 经过上述增益控制后 必须将其衰减变化的能量转换成增益控制参数 最后再将此参 数传至解码端 1 PQF 每个段的 PQF 系数由下式计算
0 ≤ n ≤ 95 0 ≤ i ≤ 3

PQF 将输入信号分成四个相等宽度的频段 h j ( n) = 1 ? (2i + 1)(2n + 5)π ) ? cos? ?Q(n ) 16 4 ? ?
48 ≤ n ≤ 95

2-5

式中 Q(n) = (95 ? n) Q(n)的值同样用于解码器 2 增益检测

增益检测产生满足比特流语法的增益控制数据 它包含了增益改变的次数 增益 改变的位置等信息 输出的增益控制数据用于前一帧输入的时域信号 因此 增益检 测有一帧的延迟 增益改变点的检测用于 MDCT 窗区域的后半区域和非叠加区域 结束窗 因此区域的数量对长窗为 1 对长起始窗和长结束窗为 2 长起始窗和长 对短窗为 8

每个区域的样本又被分为子区域 子区域有 8 个样本点 在每个子区域选出一个 值 例如样本峰值 计算这个值与最后一个子区域的值的比率 如果比率大于或小 比率的指数就设 于 2n

n 为-4 到 11 的整数 这个子区域就被认为是信号的改变点

为增益数据 3 增益修改

对每个 PQF 段的增益修改控制每个信号段的增益 增益控制的窗函数 增益修改 函数 GMF 从增益和增益改变点得到 对对应的信号段运用 GMF 就得到增益控制信 号 2.2.4 频域预测编码 特别对于稳态信号有很高的效率 该预测方法用于

频域预测用于改善信号冗余

声道内预测 多声道 或单声道 由于短窗表示输入的信号是非稳态的信号 所以预
19

测不用于短窗 频域预测是一种后向自适应预测 预测参数从前面已量化的谱分量中得到 而不

需要附加的边信息 对每一个谱分量 使用一个二阶后向自适应结构预测 因此 每 一个谱分量由前两帧的谱分量值计算出来 预测参数适应于帧与帧之间的信号统计 也就是使用基于自适应算法的最小均方根值来计算 如果使用预测 则只量化预测的 差而不是原始的谱分量 1 预测器的结构

编码器的预测器结构如图 2-10 所示
xest(n)

e0 (n) + ╳ k1(n) b ╳ a z-1 r0 (n-1) + a

e1 (n) +
xest,1(n)

xest,2(n)

xest,2(n)

k2(n)

b ╳ z-1 r1 (n-1)

图 2-10

频谱分量的频域预测器

解码器采用与编码器同样的结构 预测器由两个基本单元级连而成 估计值 xest,m(n) m=1,2 2-6 xest , m (n) = b * k m (n) * rm ?1 (n ? 1) 其中 r0 (n) = ax rec (n), r1 (n) = a(r0 (n ? 1) ? b * k1 (n) * e0 (n)) em (n) = em ?1 (n) ? xest ,m (n) 因此 总的估计值为 对稳态信号而言 km = xest (n) = x est ,1 (n) + x est , 2 (n)

E e q , m ?1 (n) × rq ,m ?1 (n ? 1)

2 2 0.5 × E eq , m ?1 ( n) + E rq , m ?1 ( n ? 1)

{[

[

上面的系数计算如下

] [

]

]},m=1,2

2-7

e q , 0 (n) = rq , 0 (n) = x rec (n) 为了自适应于当前信号的特性 k m (n + 1) = CORm (n) VAR n (n)

a=b=1 上面的等式用时间平均估计来代替 2-8

20

CORm (n) = α × CORm (n ? 1) + rq ,m ?1 (n ? 1) × eq ,m ?1 (n)
2 VARm (n) = α × VARm (n ? 1) + 0.5(rq2,m ?1 (n ? 1) + eq , m ?1 (n ))

2-9 2-10 自适应 时间常数 α 取

预 测 器的参数逐帧地自适应于当前信号的统计特性 0.90625 2 衰减因子 a=b=0.953125 预测器的控制

对每个频谱分量 x(n)有一个预测值 xest(n) 在编码端只计算预测误差 e(n)=x(n)-xest(n) 预测误差被传输到量化器 2-11 因此只传输量化的预测误差而不传输量化的谱分量 需要进行预测控制和传输一些预测控制信

为保证当引起编码增益时才使用预测 息到解码端 对预测控制

预测值被组成比例因子段 决定对每一个

对每一帧被作为边信息而传输的预测控制信息由两步决定 首先 比例因子段是否使用预测 为1 其次 如果引起编码增益 则使用预测

prediction_used 位设置 如果本帧

在所有的比例因子段进行完后

再决定是否在本帧使用预测

由预测引起的编码增益大于附加的预测边信息所需要的位 predictor_data_present 位设置为 1 测误差值被传输到量化器 全部的边信息

则本帧使用预测 和预

包括用于预测复位的位

否则

predictor_data_present 位 被 设 置 为 0 在这种情况下 只传输频谱分

prediction_used 位全部复位置为 0 量值到量化器端 对于单声道和双声道

不传输到量化器

如果 common_window=0

对每一声道的预测组



别计算控制信息 对于双声道 如果 common_window=1 控制信息同时用于两个 声道 3 预测器的复位

当编码开始时 所有的预测状态变量初始化 设置如下 r0=r1=0 COR1=COR2=0 VAR1=VAR2=1 在编码器端应用一个循环复位机制 在一定的时间间隔后所有的预测变量要重新 初始化 一方面 这种方法增加了编码器的同步的稳定性 另一方面 可以定义比特 流的入口点 全部的预测值按照 30 个组来复位 如表 2-2 所示
21

表 2-2 复位组 1 2 3 …… 30

预测值的复位组 复位组预测值 P0 P30 P1 P31 P2 P32 P60 P90 … P61 P91 … P62 P92 … …… P29 P59 P89 P119 …

式中 Pi 表示对应于频谱分量 i 的预测值 每经过 8 帧编码器至少需要复位其中一组 则每一组全部复位需要 8 过4 30=120 帧就全部复位 一个典型的复位循环开始时复位组为 1 然后复位组加 1 直到数量达到 30 种情况下 对解码器有下列三种可能的操作 又重 30=240 帧 在比特流中支持短的复位间隔 例如 如果一组每隔 4 帧就复位 则所有的预测值经

新从 1 开始 然而 有可能在程序转换或剪切和粘贴时导致复位组数量不连续 在这 1 忽略不连续的情况 继续执行程序 这可能有一个短暂的声音失真 它由在 编码和解码端的数据不匹配引起 经过一个完整的复位循环后 预测值又重新同步了 2 检测不连续 继续执行程序 程序不输出失真的数据 直到一个完整的复位 循环执行完 3 预测值又重新同步 pred_reset 通常当 复位所有的预测值

复位机制由 pred_reset 位和 pred_reset_group_number 位控制

predictor_data_present 位被设为 1 时传输 指定预测组被复位的位 pred_reset_group_number 仅当 pred_reset 位被设为 1 时传输 如果组复位被应用到当前帧 pred_reset 位被设置为 1 被复位的预测组的数量用 5 位无符号的二进制位 pred_reset_group_number 编码和传输 在被量化的值被重建后 指定组的复位要重新初始化 如果当前帧没有组复位 和每个声道的控制信息 则 pred_reset 位被设为 0 复位被应用到每个声道的预测组 复位被应用到两个 它必须在编码器 对于单声道和 common_window=0 时的双声道 声道的两个预测组和两个声道的控制信息 因为已量化的谱分量的重建值要用于输入信号的预测值 端被计算 因此 重建的值是量化的谱分量或量化的预测误差由 prediction_used 位决定

对于双声道 如果 common_window=1

如果 prediction_used 为 1 则量化的预测误差被传输 加上预测值 xest(n),得到频谱
22

分量的重建值

xrec(n)=xest(n)+eq(n) 则频谱分量的量化值直接从被传输的数据重建

如果 prediction_used 为 0 2.2.5 瞬时噪声整形 TNS

TNS (Temporal Noise Shaping)是一种控制前回声的处理技术 整形为与需要使用TNS的处理块的信号形状类似[20]

适用于通过预测发

现可能产生前回声的信号块 这种技术通过对频谱系数进行处理 将量化噪声的包络 TNS 主要利用了时间与频率双重性的概念 对于一般信号而言 若在时间上属于 稳态信号 可以在时域上做预测的工作 传出的预测差值相对之下会很小 进而达到 其数据压缩的目的 例如在时域上是正弦波 在时域上可直接使用预测编码 若换至 频域 会发现其频谱变化会很大 而且其能量大部分会集中于少数的频谱 反之 如 果信号在时域上是属于瞬变信号 例如脉冲信号) 因为此信号在频域中变化较小 故 可将此信号在频域内以预测方式编码 TNS 就是利用在频域的预测 来修饰时域的信 号 1 TNS 算法流程
Number of bands per window Sampling rate, Profile, TNS order, Block type

Spectral coefficients

TNS_Init

Levinson-Durbin recursion Reflection coefficients, gain gain > DEF_TNS_THRESH Yes Quantize Reflection Coefficients No

Truncate Some Reflection Coefficients tnsFilterOrder=truncatedOrder Compute prediction coefficients

TNS Filter data control prediction residual

original spectral coefficients

图 2-11 TNS 模块算法流程
23

2

TNS算法实现

首先将 MDCT 所产生的频谱系数传入 此外也要将 TNS 所需要的基本信息传入 例如 采样频率 TNS 阶数与块的类型 (Block type)等 然后选定应用的频带 这根

据实现的方案的不同稍有区别

一般是从 1.5KHz 直到最高频

然后再对选定频率范

围对应的频谱系数进行线性预测编码(LPC) 这里采用 Levinson-Durbin 算法 得到预 测增益和反射系数数组 此后再比较预测增益与一个常数(MPEG 标准建议此常数为

1.4)值的大小 若预测增益大于该值则启动 TNS 启动 TNS 模块后 将 Levinson-Durbin 所算出的反射系数组做量化 在最后决定预测系数之前 对得到的系数数组进行 截 尾 操作来降低 TNS 模块的计算量 因为一开始 TNS 的预测阶数是固定的 但在其

运算的过程中 可以根据其信号的不同而做一些适当的调整 也就是说实际的预测阶 数可能会比原来一开始所定义的预测阶数还小 将绝对值小于阈值 p=0.1 的系数全部去掉 截尾”操作就是从数组右端开始 经

剩下来的系数数目就是滤波器的阶数

过以上的运算之后 最后可以求得其预测系数 继而传出其预测差值 反之 若预测 增益小于 DEF_TNS_GAIN_THRESH 的值 则传出其原始频谱值 2.2.6 长时预测 LTP 1 LTP 算法流程 带有 LTP 预测的感知音频编码如图 2-12 所示
T/F Long-Term Prediction F/T

LTP 算法不用于短窗

Long-Term Sysnthesis

T/F

Long Term Prediction Error & Gains

Quantize and Coding

Bitstream Encoder/ Mulitplexer

Psychoacoustic Model 图 2-12 LTP 算法流程

Side Information

24

2

LTP 算法实现 当量化 Xm+1 时 编码和解码器端已量化的数据

编码过程是一帧接一帧的

Xk,k=m,m-1, … ., 是已知的 在时域范围内 意味着已量化的时域样本 x(i),i=mN,mN-1, … , 是可用的 为了减小当前帧 m+1 的冗余度 P(z)= 利用前面已量化的数据进行线性预测编码 2-12

∑b z
k

? (α + k )

式中 α 表示长延迟

范围从 1 到 2048 延迟 α 用 11 位来量化 有 2048

参数 α 和 bk 由全部窗口的最小均方误差来决定 表得到 LTP 决定后 就可以获得第
k

个可能的值范围从 1 到 2048 对预测系数 bk 用 3 个比特进行非均一化的量化 可查

m+1 帧的预测信号 2-13

x(i)=

∑ b x(i ? 1 ? k ? α ) ,

i=mN+1,mN+2,….,(m+1)N 使用前向 MDCT 可以获得第 m+1 帧的谱分量 Xm+1 为了保证预测仅用于引 起编码增益时 需要使用预测控制和传输少量的预测控制信息到解码器 例如 每个 比例因子段要传输一个 bit 作为边信息来标明在那个比例因子段是否要使用预测 对每一个比例因子段 通过比较预测能量和边信息的数量来计算 LTP 引起的预测 增益 当引起预测增益时才使用 LTP 并设置对应的边信息 最后 检查整帧 所有 的比例因子段 2.2.7 的纯编码增益 并设置该帧是否使用 LTP

立体声编码 1 M/S 立体声 例如左声道与右声道 左 后面的声道称为 左环绕声道与 右”,左右声道

M/S联合编码应用于按对匹配的音频声道 右环绕声道 在声道对中 前面的声道称为

具有一定的相关性 来附加的噪音

M/S联合立体声编码可以消除这些相关性 这个编码步骤不会带 M/S方法使用M, S声道来代替原来的L, R声道

属于无噪编码过程

对于每一个编码带

计算M/S信号

25

M=(L+R)/2, S=(L-R)/2 不是每个频带都需要使用M/S联合立体声编码 只有左 右声道相关性较强的子

带才使用M/S 分别计算L/R以及M/S量化编码后所需的比特数 选取所需比特数小的 方式 2 强度立体声 IS 编码是为了充分消除匹配声道高频区域之间的相关性 它

使用强度立体声

利用了人耳听觉系统双耳的定位对左右声道在4kHz以上频率的强度差比较敏感 而对 相位差不敏感的特点,对某个频带以上的各子带使用左声道表示两个声道的联合强度 右声道谱线置为0 不再参与量化和编码 具体过程是 在每一个比例因子子带内

求出该子带的强度位置信息: ? ? El [ sfb] ?? is _ position[ sfb] = NINT ?2 log 2 ? ? E [ sfb] ? ?? ? r ?? ? 然后计算频谱系数强度信号 specl [i ] = ( specl [i ] + spec r [i ]) × El [ sfb] E r [ sfb] 2-15 2-14

最后将左声道的频谱系数用强度信号取代 右声道的相应信号则全部置为0 这样 得到的信号送入后面的量化和编码模块 2.2.8 量化和编码 MPEG标准中应用双循环的量化编码结构 outer iteration loop 两部分 在

为了将AAC的量化和编码做到最佳化
[21]

它分为内循环

inner iteration loop 与外循环

外循环过程中调用内循环 在不断的循环过程中 内层循环调整比例因子 以求将量 化所需的比特数限定在可用比特数范围之内 而外层循环则检查量化误差 调整各编 码子带的比例因子 以保证在量化噪声不超过掩蔽阈值的情况下 得到尽可能大的编 码增益 1 图2-13和2-14显示了量化模块的循环过程 inner iteration loop 其主要的工作核心就是调整量化器的

图 2-13 为 inner iteration loop 的工作流程

步长 直到该帧所能用的位数足以编码输入的频谱数据 经过量化后 若该帧所需要 的位数大于可用的位数时 就增加其量化器的步长 使所需要的位数减少 重复上述 步骤直到可以满足位数的要求为止
26

Begin

非线性量化

计算所用的 位数

使用的位数是否小于 可用的位数
no yes

增加量化步长

End
图 2-13 AAC inner iteration loop

频谱值采用非线性量化 x _ quant = int abs (mdct _ line ) × 2 0.25×( scalefactor ? common _ scalefac )

((

(

))

0.75

+ MAGIC _ NUMBER

)

2-16 其中 scalefactor 是各编码子带的比例因子 common_scalefactor 是处理块的共享比 例因子 2 MAGIC_NUMBER 是一个调整偏差 outer iteration loop 为固定值 0.4054

对于 inner iteration loop 过程所得的结果 必须由 outer iteration loop 去检查编码后 的量化噪声人耳是否能听到 在此处应用了听觉心理模型 以求得人耳听觉所能接受 的最大失真能量为比较的依据 其工作流程如图 2-14 所示

27

Begin

inner iteration loop

计算每个频段 的失真

存贮每个比例因 子段的比例因子

放大每个频段的比 例因子 让它们大 于允许的失真 yes 所有的比例因子都被放大 no
至少有一个频段 大于允许的失真

no

存贮比例因子

yes End

图 2-14

AAC outer iteration loop

1 2

首先调用 inner iteration loop 完成量化与编码的过程 以频带为单位 并利用 1 的量化结果计算每个频带的量化噪声的能量

3 将 2 计算出的量化噪声与听觉心理模型求得人耳能接受的最大失真能量 (allowed distortion energy)进行比较 高编码质量的要求 4 若所有频带的量化噪声都小于人耳能接受之最大失真能量 或所有频带的 结束量化 否则重复以上步骤 且 若人耳能接受的最大失真能量较大 则将该频带

的比例因子加一 其目的在于将更多的位分配到此频带 从而提高其信噪比 达到提

比例因子都已加一循环就停止 在理想情况下

结束量化的条件是各子带的量化噪声全部位于掩蔽曲线以下

所需比特数不高于可获得比特数 但在许多情况下
28

这两个条件是不能同时满足的

因此 标准中规定了两种结束循环的条件 所有的比例因子都已放大过 或循环次数 超过了规定的次数 3 Huffman 编码 利用编码信号的分布不均匀性降低平均码长 在AAC

Huffman编码是无损编码 中

需要进行Huffman编码的参数包括各子带的比例因子和经过量化的MDCT谱线 对比例因子的编码比较简单 不需要进行矢量编码,具体方法是每个声道的第一个

比例因子 码

使用8bit量化

称为全局比例因子

以后所有子带的比例因子使用差分编

对谱系数进行霍夫曼编码时

允许一个频谱使用几个二维或四维 有或无符号的

霍夫曼码表 编码时 一共使用了12本码表 表2-3列出了每个码表能表示的量化系数 最大值 系数个数和有无符号 对应于每个最大值有两本码表 每本码表反映了一个 截然不同的概率分布函数 通过比较选择其中最合适的码表来进行编码 利用这些码 表 对系数的绝对值进行编码 并把非零系数的符号位添加到码字中去
表2-3 Huffman码表 Codebook index 0 1 2 3 4 5 6 7 8 9 10 11 n-Tuple size 4 4 4 4 2 2 2 2 2 2 2 2 Maximum absolute value 0 1 1 2 2 4 4 7 7 12 12 16(ESC) yes yes no no yes yes no no no no no Signed values

29

有两个码本需要特别说明:码本 0 专门针对在一个编码区内的各系数都为 0 的情 况 码本 11 能够表示绝对值超过 16 的量化值 在量化值超过 16 时 使用一种称为

escape coding 的机制来实现编码 为了使整组量化频谱系数所需的比特数最少 谱系数分成一些区 同的Huffman码表 section Huffman编码把一组1024个量化频 使用相

每个区由一个或多个相邻的比例因子段组成 首先 每个比例因子段组成一个区

区合并过程是

每一个区选

取一张哈夫曼表 根据段内谱线最大值的幅度 尽量选序号小的码表 然后 相邻区 进行试合并 若区合并后所需的比特数减少了 则把这两个区合成一区 如此不断进 行区合并 4 直到所需比特数不能再减少

比特池缓冲技术 这一技术称为比特池 每个音频帧编码所

AAC可以实现一定程度的变码率调整

需的比特数是不一样的 当一帧所需的比特数少于平均比特数时 可把余下来的比特 存入比特池中 以后 当某些帧所需的比特数多于平均数时 AAC从比特池中取出存 下的比特分配给该帧 使该帧得到额外的比特 从总体上来说 每帧平均比特数是由 采样率和码率而定的 而对具体的每一帧其比特数可以变化很大 一是前面的帧不能向后面的帧借比特 即一定要在 AAC规定

使用比特池技术有一些限制 时间上是因果的 ;第二

比特池的大小受到解码缓冲存储器大小的限制

了码流缓冲区的最小值 每个独立声道码流缓冲区的最小尺寸是 6144比特 相应编 码器中比特池的最大值是6144比特减每声道平均比特数 多声道之间可共用一个比 特池 但编码器必须保证每一个声道的帧长不超过解码器中每声道码流缓冲区的最 大值

2.3 AAC 编码文件数据结构
AAC编码文件是以逐帧存放 开始 然后是音频数据 每帧的数据是以adts头 audio data transport frame

最后是结束标志

它的基本架构如图2-15所示

30

ID3

第0帧

第1帧

第2帧

...

第n帧

返回到adts_header 直到 id_syn_ele等于END标志 Adts_header id_syn_ele (3bit) cpe ics id_syn_ele=END

adts_fixed_header adts_variable_headeradts_error_header

Channel_pair_element()

element_instance_tag common_window ics_info() (4bit) (1bit)

ms_mask_present ms_used individual_channel_ individual_channel_ (2bit) (num_window_groups*max_sfb ) stream()(ics1) stream()(ics2)

reserved_bit window_sequence window_shape max_sfb Wpredict_data_present (1bit) (2bit) (1bit) (6bit) (1bit)

Global_gain Pulse_data_present Tns_data_present Gain_control_data_pre Section_data() Scaler_factor_data() spectral_data() (8bit) (1bit) (1bit) sent(1bit)

图 2-15 AAC 文件结构示意图

2.3.1

adts 文件头格式 adts_ariable_header adts_error_check 三部分

adts 头主要包括 adts_fixed_feader 每部分的 bit 分配如下 Adts_fixed_header ( ) { Synoword ID Layer Protection absent Profile objectType sampling frequency index private bit channel configuration original/copy home Emphasis } Adts_variable_header ( ) { copyright_identification_bit

12 1 2 1 2 4 1 3 1 1 2

bit bit bit bit bit bit bit bit bit bit bit

1
31

bit

copyright_identification_start aac_frame_length adts_buffer_fullness no_raw_data_blocks_in_frame } Adts_error_header ( ) { if (protection_absent = =’0’ ) crc_check } 其中一些重要位的含义如下

1 bit 13 bit 11 bit 2 bit

16

bit

profile_ObjectType 根据 ID 标识 ID 为 1 表示 MPEG2 为 0 表示 MPEG4 如表 2-4 所示
表 2-4 ID==1(MPEG2 profile) Main profile Low Complexity profile(LC) Scalable Sampling Rate profile(SSR) (reserved) profile_ObjectType 含义 ID==0(MPEG-4 profile) AAC Main AAC LC AAC SSR AAC LTP

2.3.2

声道对单元 CPE channel_pair_element

由两个individual_channel_element( )和附加的联合信道编码信息组成 这两个信道 可以共享所谓的公共边信息 common side information
No 4bits common_window(1bit)=1? Yes element_instance_tag() ms_mask_present 图2-16 CPE结构示意图 ics_info() 2bits ms_used() individual_channel_stream(0) individual_channel_stream(1)

如果信道对中的两个信道公用一个ics_info 即common_window=1 位流中紧跟着 公用ics_info 如果不公用ics_info 即common_window=0 位流中紧跟着两个独立的 individual_channel_stream(0)
32

2.3.3

独立声道流 ics_info 窗口形状 window shape

ics_info主要描述了描述了窗口序列 window sequence 1 窗口序列和窗口形状

在编码器中将时域信号变换到频域信号时 为了提高压缩效率

要根据不同的信

号特征使用不同的解析度 在AAC中 定义了两种不同的变换长度 变换窗口 来进 行时域变换 分别为LONG_WINDOW和SHORT_WINDOW 为了能在两种窗口之间

转换 还定义了两种过渡窗口 LONG_START_WINDOW和LONG_STOP_WINDOW
WINDOW ONLY_LONG_SEQUENCE LONG_START_SEQUENCE EIGHT_SHORT_SEQUENCE LONG_STOP_SEQUENCE 表2-5 Value 0 1 2 3 窗口序列 图示

WINDOW LONG_WINDOW SHORT_WINDOW LONG_START-WINDOW LONG_STOP_WINDOW

长度 1024 1024 1024 128

表2-6 窗口形状 num_swb 49 49 49 14

图示

2

ICS

ics 语法如下
Global_gain Pulse_data_present Tns_data_present Gain_control_data_pre Section_data() Scaler_factor_data() spectral_data() (8bit) (1bit) (1bit) sent(1bit)

1

段数据 section_data

它描述的是应用于比例因子段的Huffman codes 其结构为 sect_cb表示比例因子段的码本数 sect_len 表示比例因子段的长度 如 果 aacSetionDataResilienceFlag 为 真 sect_len_incr的值 7或者是31
33

sect_len_incr 是 不 传 的

否则读取

每个组内 长窗时只有一个组 的sfb 1024点 47段 又被分成若干section 即 一个section包含了若干个段 ics->sfb_cb[g][sfb] 落在同一section内的sfb使用相同的codebook 都与之相同 第g组中 第 i 个 sect_sfb 的 codebook 记 录 在 ics->sect_cb[g][i] 从 sect_start -> sect_end 并 且 属 于 该 section 的 sfb 的 ics->sect_start[g][i] 和 以 sfb 为 单 位

ics->sect_end[g][i] 记 录 了 每 个 section 的 起 始 和 结 束 偏 移 值 ics->num_sec[g]记录了当前组中section个数 2 比例因子数据scale_factor_data

即比例因子scale_factor的数据 编码过程是将全局比例因子用8位编码 然后其它 组与全局比例因子进行差分编码 3 3 频谱数据spectral_data 这是ICS的最后一段 在数值上等于7 END数据格式结构说明

编码频谱数据

标志着当前帧数据的结束 2.3.4

帧数据格式解析程序流程图

帧的数据格式流程图如图 2-17 所示
Start

音频数据传输流 Adts_frame()

读取同步元素 id_syn_ele

id_syn_ele END?

Yes

NO

ID_SCE ID_LFE

ID_CPE ID_CCE

ID_DSE

ID_PCE Program_config _element

ID_FIL

Decode_sce_lfe()

Decode_cpe

Data_stream _element

Fill_element

END

图 2-17

帧数据格式解析流程图
34

3

算法优化及定点 DSP 实现

3.1 算法优化
MPEG-4 AAC 编码算法复杂度高 为了提高程序效率和运行速度 需要对算法中 复杂度高的模块进行优化 编码模块中 心理声学模型和量化模块复杂度最高 而且 运算量较大 3.1.1 因而是算法优化的重点[22]

心理声学模型优化 标准建议使用 FFT

AAC 的心理声学模型用音调预测方法来计算心理声学参数

进行心理声学模型分析 即使用 FFT 变换后的幅值和相位来计算不可预测度 信噪比 信掩比 MDCT 在随后的滤波器组使用 MDCT 来进行时频转换 由于 MDCT 变换本身的属性[25] 为了避免两次执行 FFT 和 MDCT 是一 有的文献提出用 MDCT 代替 FFT 进行心理声学模型分析[23-24]

个纯实数的变换

如果输入信号有一个超过 MDCT

基函数 π / 2 相位的强分量 这就有可能使对应的频谱分量为 0 因此 基于 MDCT 的 心理声学模型还是存在缺陷 但是利用 FFT 变换后的幅值和相位进行音调预测时 相 位分析需要进行大量的三角转换 影响了编码的速度 所以我们采用谱平面法(Spectral Flatness Measure)来代替音调预测[26] 谱平面法(SFM)是在临界子带内确定信号是类音调还是类噪声 FFT 的相位进行分析 号的掩蔽阈值能量 首先 信号从时域到频域的转换通过 FFT 心理声学模型在频域里通过公式(3-1) 该方法不需要对

只对 FFT 幅值进行分析 系数 SFM 确定每个临界子带内的信

来计算频谱 P( w) = Re 2 ( w) + Im 2 ( w) 在每个临界子带里
bhi bli

(3-1) i 代表临界子带的索引 (3-2) 每个临界子带里的离散巴克谱修

频谱相加得到离散巴克谱

Bi = ∑ P( w) 考虑到噪声掩蔽噪声产生的扩展函数的影响

35

正为 C i = Bi × SFi 其中 在 MPEG-4 AAC 中 SF 由下面的方法计算(单位为 dB): tmpx=3.0(j-i) j>=i tempx=1.5(j-i) j<i 式中 i 表示被扩展信号 即掩蔽信号 的巴克值 j 表示被扩展进的信号 即被掩 蔽信号 的巴克值 tmpz=8*minimum((tmpx-0.5)2-2(tmpx-0.5),0) tmpy=15.811389+7.5(tmpx+0.474)-17.5(1.0+(tmpx+0.474)2)1/2 如果 tmpy<-100,则 SF=0; 如果 tmpy>=-100,则 SF=tmpy+tmpz 接着 用谱平面法确定系数 SFM 并转换为以分贝为单位 Gm Am Am 是频谱 P(w)的算术均值 3-4 (3-3)

SFM db = 10 log10 SFM = 10 log10 其中 Gm 是频谱 P(w)的几何均值

由上式可得每个临界子带里音调系数索引 α 为 ? SFM dB ? α = min? ,1? ? ? 60 ? 3-5

根据心理声学规则 综合噪声掩蔽音调(NMT)和音调掩蔽噪声(TMN) 在 MPEG-4 AAC 中给定为 NMT(i) 界子带里的信噪比 SNRi = α × TMN (i ) + (1 ? α ) × NMT (i ) (dB) 通过公式 3-3 和 3-6 可以计算出每个临界子带的阈值能量 T:
log
10

6dB TMN(i)=18dB 我们用 TMN(i) 14.54+i 来计算每个临

3-6

T i = 10
实值

( C i ) ? SNR

i

/ 10

最后将计算的能量阈值和安静绝对阈值比较

较大的能量阈值作为该临界子带的 再通过编码器的

该实际能量阈值用来确定每个比例因子带内的信掩蔽(SMR)

量化编码环节 对不同信掩比的信号分配不同的编码比特数 理论和试验分析表明 用谱平面法进行音调预测比相位分析方法平均提高 40
36



编码速度 3.1.2 使用 MDCT 的快速算法 采用了基于 N / 2 点 FFT 的 N 点 MDCT 快速算法[27] 利用余弦函数的对称性进行快速变换 以余弦

在实现 MDCT 时 函数 cos(x)为变换核 学的 FFT 重用

FFT 变换可以与心理声

从而节省了程序空间 利用余弦 即可实

MDCT 的变换核是余弦函数 cos(x) 由于它是指数函数 exp(jx)的实部 函数的对称性 只要对输入序列做平移 预处理 FFT 后处理 再取实部

现 MDCT 的快速算法 算法如下 MDCT 的表达式
N ?1 ? 2π 1 ?? ? X ( k ) = 2 ∑ x ( n ) cos ? ? N ( n + n 0 )? k + 2 ? ? ? ? ?? n=0 ?

0 ≤ k < N / 2 ?1

3-7

n0 =

N / 2 +1 2

将 MDCT 作如下变换
N ?1 ? 2π ? N 1 ?? 1 ?? X (k ) = 2∑ x(n) cos ? ? n + + ?? k + ?? 4 2 ?? 2 ?? n =0 ?N ?

? 2π = 2 ∑ x(n) cos ? n =0 ?N ? 2π = 2 ∑ x(n) cos ? n =0 ?N
N ?1

3N ?1 4

N ?1 N 1 ?? 1 ?? ? 2π ? n k 2 x(n) cos ? + + + + ? ?? ?? ∑ 4 2 ?? 2 ?? 3N ? ?N n= 4

N 1 ?? 1 ?? ? ? n + + ?? k + ?? 4 2 ?? 2 ?? ? N 1 ?? 1 ?? ? ? n + + ?? k + ?? 4 2 ?? 2 ?? ?

3N ?1 4

N ?1 ? 2π N 1 ?? 1 ?? ? n + + k + + 2 x(n) cos ? ? ?? ?? ∑ 4 2 ?? 2 ?? 3N ? ?N n= 4
N ?1 4

? N ? ? 2π ? N N 1 ?? 1 ?? ? 3N ? ? 2π ? 3N N 1 ?? 1 ?? = 2 ∑ x? n ? ? cos? ? n ? + + ?? k + ?? + 2∑ x? n + + + ?? k + ? ? cos ?n + 4? ?N ? 4 4 2 ?? 2 ?? n=0 ? 4 ? ? 4 4 2 ?? 2 ?? N ? ?N ? ? n=
4

N ? ? 2π ? 1 ?? 1 ?? ? = 2 ∑ x? n ? ? cos? ? n + ?? k + ?? 4? ?N ? 2 ?? 2 ?? N ? n=
N ?1 4

3N ? ? 2π ? 1 ?? 1 ?? ? ? 2 ∑ x? n + ? cos ? ? n + ?? k + ?? 4 ? ?N ? 2 ?? 2 ?? n =0 ?

N ?1 4

k=0, , N/2-1

3-8

37

3N ? ? 令 x1 (n) = ? x? n + ? 4 ? ? N? ? x1 (n) = x? n ? ? 4? ? 则 3-8 变为

n=0, ,N/4 n= N/4, ,N-1

3-9 3-10

N ?1 ? 2π ? 1 ?? 1 ?? X (k ) = 2∑ x1 (n) cos? ? n + ?? k + ?? n=0, ,N/2 3-11 2 ?? 2 ?? n =0 ?N ? 由余弦函数的对称性 把 x1(n) n=0, N-1 分成 x1(2n)和 x1(N-1-2n) n=0

N/2-1

得到偶数部分

n + ?? k + ?? ∑ x (2n) cos? N / 2 ? 4 ?? 2? ?
n =0 1

N ?1 2

? 2π ? ?

1 ??

1 ?? ? 1 ?? ?

3-12

和奇数部分

N ? 1 ? 2n + ?? k + ?? ∑ x (N ? 1 ? 2n) cos? N ? 2 ?? 2? ?
n =0 1

N ?1 2

? 2π ? ?

1 ??

? 2π ? 1 ? ?? 1 ?? ? ? = ∑ x1 ( N ? 1 ? 2n) cos? ? N ? 2 n + k + ? ? ? ?? ? 2 ?? 2 ?? ? n =0 ?? ?N ? ? 2π ? 1 ?? 1 ?? = ?∑ x1 ( N ? 1 ? 2n) cos? ? n + ?? k + ?? 4 ?? 2 ?? n =0 ?N / 2?
再令 x2(n)=x1(2n)-x1(N-1-2n)
N ?1 2 N ?1 2

N ?1 2

3-13 则 3-11 N/2-1 变为 3-14

n=0

N/2-1 n=0

? 2π ? 1 ?? 1 ?? x(k ) = ∑ x2 (n) cos? ? n + ?? k + ?? 4 ?? 2 ?? n =0 ?N / 2?
式中 cos ?
N ?1 2 n =0

? 2π ? ? 1 ?? 1 ?? 2π ? 1 ?? 1 ?? ? n + ?? k + ?? 是 exp?? j ? n + ?? k + ?? 的实部 4 ?? 2 ?? N /2? 4 ?? 2 ?? ?N /2? ?

n + ?? k + ?? ∑ x (n) exp?? j N / 2 ? 4 ?? 2? ?
2

? ?

2π ?

1 ??

1 ?? ?

? 2π ? n 1? 1 ??? = ∑ x2 (n) exp?? j + nk + k + ? ?? ? 4? 2 ?? n =0 ?? ? N / 2 ?2

N ?1 2

38

?1 ?N ? ? π? 1 ?? 2π 2π ? ? ?2 ? ?? = ?∑ x2 (n) exp?? j n? exp?? j nk?? × exp?? j ? k + ?? n=0 2 ?? ? N / 2 ? ? N / 2 ?? ? N? ? n=0 ? ?

N/2-1 (3-15)

2π ? ? 令 x3 (n) = x 2 (n) exp? ? j n? N /2 ? ? 再对 x3(n)做 N/2 的 FFT x 4 (k ) =
N ?1 2 n=0

n=0

N/2-1

3-16

nk ?j ∑ x (n )exp? N /2 ? ? ?
3

?



?

k=0

N/2-1

3-17

? 2π ? 1 ?? 然后乘以 exp?? j ? k + ?? 再取实部即可得到 MDCT 的输出 X(k) N ? 2 ?? ? ? ? 2π ? 1 ?? ? X (k ) = Re? x 4 (k ) exp ?? j ? k + ?? ? N ? 2 ?? ? ? ? 采用快速算法后 N log 2 3.1.3 3.1.3.1 N +N 2 与直接计算相比 k=0 N/2-1 3-18

实数乘法的次数从 N2 /2 减少到 N N + 2 2

实数加法的次数从 N ( N ? 1) / 2 减少到 N log 2

改进量化方法 初始化全局比例因子

通常 全局比例因子值初始值为 0 步长为 4 在确定全局比例因子时 首先要保 证编码后的最大值不大于 8191 global _ gain = 因此可设置初始比例因子值为 3-19

16 log 2 (max_ spectrum _ line 3 / 4 / 8191) 3

global_gain 为全局比例因子 max_spectrum_line 为帧内最大的频谱分量 这就保 证了编码器输出的结果不大于解码器能解码的最大值 而且减少了调整步长时间 由 于前后帧有较强的相关性 对以后各帧的全局比例因子 每帧使用前一帧的全局比例 因子作为初始值 3.1.3.2 确定比例因子步长 增加量化步长 使编码后的比特率小于期望的比特率 大量的

调整比例因子值

数据测试表明 比例因子多集中在 30~60 从初始的全局比例因子值调整到期望的值
39

要经过 10~17 次的调整步长 其间每调整一次步长 都要进行量化 查找 huffman 码 表等 因此如果能减少调整步长的次数 就能大大减少运算量 本文采用二分法选择 适当的步长 3.1.3.3 可使调整步长的次数由 N 次减少到 log2N 次

计算反量化值 需要计算反量化值 其反量化公式为 3-20

在计算每个比例因子段的量化噪声时
1

x _ deq(i ) = Sign( x(i )) | x(i ) | 4 / 3 *2 4 式中 x(i ) 为经过量化的频谱值

( global _ gain ? scf ( i ))

scf (i ) 为比例因子 在计算 x(i ) 的 4/3 次方时 可

使用直接计算和查表法 由于直接计算运算量太大 而全部采用查表法需要较大的存 储空间 本文综合计算量 存储空间及精度考虑 采用查表法和少量计算结合的方法 来减少计算量[28] 制作一个 256 点的查找表 f (X ) = X 1 2
4/3

其值为 1~256 的 4/3 次方 查找方法如下 ?X? × 16 = ? ? ?8?
4/3

?X ? = ? × 8? ?8 ?

4/3

× 16

3-21

对于值为 1~256 的输入 对于 257~2048 的输入

直接查表

X X X X ? ? X 4 / 3 = 2 × ? f (int( + 1))? ? f (int( )) × rem( ) + f (int( )) × 16 8 8 8 8 ? ? 3 对于 2049~8191 的输入 X X X X ? ? X 4 / 3 = 4 × ? f (int( + 1))? ? f (int( )) × rem( ) + f (int( )) × 256 64 64 64 64 ? ? 式中int表示取整

3-22

3-23

rem表示取余 用这种计算方法 节省了31 kBytes的存储空间

计算也只是简单的乘加运算 虽然这种简化运算与实际值有误差 但从计算结果来看 对解码的音质基本上没有显著影响

3.2 算法定点化
在定点 DSP 芯片[29-30]中 采用定点数进行数值运算 其操作数一般采用整型数来 表示 一个整型数的最大表示范围取决于 DSP 芯片所给定的字长 字长越长 所能表 示的数的范围越大 精度也越高

40

对于字长为 16 位的定点芯片 可以表示的有符号数的范围为 32767 -32768 表示无符号数的范围为 号数的范围为 0 定标 65535 0 对字长为 32 位的定点芯片 可以表示的有符 表示无符号数的范围为 4294967295 即对小数进行 例如

2147483647

-2147483648

当处理小数时

实际上就是用这些整型数来表示要处理的小数

本文采用 Q 表示法定标

也就是用 Qn 表示小数点在 0-31 中的第 n 位

Q0 表示小数点在第 0 位 代表整数 Q8 表示小数点在第 8 位 不同的 Q 所表示的数 不仅范围不同 越小 而且精度也不相同 但精度就越低 Q 越大 数值范围越小 但精度越高 相反 Q

数值范围越大

浮点数与定点数的转换关系可表示为 x q = (int) x × 2 Q x = ( float ) x q ×2 ? Q 15 则定点数 x q = ?0.5 × 32768? = 16384 式中

浮点数(x)转换为定点数(xq) 定点数(xq)转换为浮点数(x) 例如 浮点数 x=0.5 定标 Q

? ? 表示下取整 反之 一个用 Q 15 表示的定点数 16384 其浮点数为 16384
2-15 3.2.1 16384/32768=0.5 数据定标 数据定标包括常数定标和变量定标两大类 编码中数学计算的大部分操作数都是 变量 因而给各个变量定标就成为非常严峻的问题 因此必须清楚该变量的精度和数 值变化的动态范围 定标方法可以分为静态定标和动态定标 汉明窗 量化表等可采

静态定标有理论分析和统计分析两种方法 如三角函数

用理论分析法 对于理论上无法确定其动态范围的变量 则采用统计分析法 统计分 析过程中必须注意用足够多的输入信号样值来确定程序中变量的动态范围 这里的输 入信号不但要有一定的数量 动态定标 而且必须尽可能地涉及各种情况

即不能事先主观限定动态范围的变量 只能在程序运行过程中根据该

变量的当前动态范围自适应的确定其定标 复杂情况下是对一个数组的动态定标 先 找出数组中的最大值 然后以该最大值的冗余符号位来决定整个数组的定标 这个过 程也称作正规化 动态定标带来的问题是开发者必须记录每一个采用这种方法得到的 定标 在实际的应用中 我们采用了静态定标法 因为编码过程需要用到大量的中间变

量 如果用动态定标 就需要用大量的数据空间来存储变量的标值 增大存储器的开

41

销 而且确定每个数组的动态范围时 需要找出数组中的最大值 这也需要耗费大量 的CPU时间 对理论上无法确定其动态范围的变量 我们采用了统计分析法分析其动 态范围 我们测试了各种类型的音频文件 并最终确定其中间变量的标值 对溢出这 个动态范围的变量 则用饱和处理 取最大值 例如在心理声学模型中 存储频谱能 量时 我们将能量值定标为Q-12 对掩蔽扩展函数 由于其最大值小于1 为了保证

其精度 我们将它定标为Q31 3.2.2 定点算术运算 在定点的算术运算中 必须要明确操作数和结果数的定标之间的因果关系 同时 还要考虑溢出 1 移位运算 左移加 右移减 如Q12的数左移一位后定标 取低位相当

在移位时定标结果数据的方法是 变为Q13 特殊的

从32位的数转换成16位

若取高位相当于右移16位

于左移16位

左移的操作可能会产生溢出

Blackfin的汇编指令集提供饱和操作符(S)

来处理溢出 即当溢出发生时用16位数的最大值0x7FFF和最小值0x8000分别代替上溢 和下溢情况下的结果 2 加法和减法运算 结果的定标也与它

加法和减法的两个操作数在参与计算时必须具有相同的定标 们相同 加法也可能会产生溢出 除了饱和操作符(S)外

可采用其他方法避免溢出 且运算的中间结果

如在高通滤波器中为了防止溢出

对输入的音频数据都缩小2倍

都用32位来表示 这样可以保证足够的精度 如果两个操作数的定标值不一样 而且结果的定标也不一样 那么就要进行换算 例如设 x 的 Q 值为 Qx y 的 Q 值为 Qy 且 Qx>Qy 加法/减法结果 z 的定标值为 Qz 则 z x+y ?
?Q y

z q ? 2 ?Qz = x q ? 2 ? Qx + y q ? 2

( Q ?Q ) = x q ? 2 ? Q x + y q ? 2 x y ? 2 ?Q x ( Q ?Q ) = [ x q + y q ? 2 x y ] ? 2 ? Qx

?

zq = [ xq + y q ? 2

( Q x ?Q y )

] ? 2 ( Q z ?Q x )

42

3

乘法运算

两个16位定点数相乘得到的32位乘积中会有多余的一位符号位 消除它势必需要 把乘积左移一位 使结果形如S1.15 * S1.15 = S1.31 当然这样校正完全看实际运算中 是否需要 如果乘积取 16 位 则只需取 32 位乘积中第 30..15 位作为有效数值 其实

Blackfin 的 汇 编 指 令 集 提 供 了 各 种 定 标 格 式 的 乘 法 运 算 S16.0*S16.0 S32.0 有符号小数的 S1.15 * S1.15 = S1.31

例如有符号整数的 有符号乘无符号小数

S1.15*S0.16=S1.31等

因此可以很灵活的选择其中一个来实现所需要的定点乘法 其结果也要进行换算 则 例如

如果进行乘法的两个操作数和结果的定标值不一样 浮点乘法z=xy x的定标值为Qx z = xy ?
z q ? 2 ?Q z zq
? ( Q x +Q y )

y的定标值为Qy 乘积z的定标值为Qz

=

xq ? y q ? 2

?

=

( x q y q )2

Q z ? ( Q x +Q y )

4

除法运算 如果被除数A的定标是Qa 除数B是Qb 有C =

定点除法中计算定标比较复杂

A/B 则商C的定标为(Qa - Qb) 在汇编指令中要求不考虑定标的被除数小于除数 且 都非负 若除数大于被除数 则可将除法分解为一系列的减法和移位 设商的定标值 为Qn 用汇编指令实现小数除法的过程如下 1 将除数左移一位 设商值为0

2 将商值左移一位 比较除数和被除数大小 如果被除数小于除数 跳到第 4 步 否则进行下一步 3 4 跳到第 3.2.3 被除数减去除数 被除数左移一位 2 步 结果存入被除数 如果循环了n次 商值加1 则循环结束 所得商值就是结果 否则

非线性算法定点运算 编码计算中常遇到三角函数 对数运算等复杂的非线性计算 实现其定点运算的

一般方法是查表法 混合法和利用泰勒公式展开法 查表法比较通用 事先计算好一 些函数值存在一个常数数组里 使用的时候在该表中查找即得 查表法的缺点是精度 有限 若想提高它的精度就意味着表体积迅速膨胀 利用泰勒级数展开法的缺点就是

43

计算量较大 1

折衷的做法是采用混合法

即将查表法与线性近似法相结合起来

查表法

采用这种方法必须根据自变量的范围和精度要求制作一张表格 显然输入的范围 越大 精度要求越高 则所需的表格就越大 即存储量也越大 查表法求值所需的计 算就是根据输入值确定表的地址 根据地址就可得到相应的值 因而运算量较小 在 程序设计中 2 正弦计算就采取了查表法来处理

混合法

查表所得结果的精度随表的大小而变化 表越大 则精度越高 但存储量也越大 当系统的存储量有限而精度要求也较高时 查表法就不太适合 混合法采用查表结合 少量运算计算非线性函数来提高精度 这种方法适用于在输入变量的范围内函数呈单 调变化的情形 混合法是在查表的基础上采用插值计算的方法以提高当输入值处于表格两点之间 时的精度 一个简便方法是采用线性近似法[31] 对一个落在表中两个点之间的值 可 以将两个点做条连线 由要计算的点到表中一点的距离来确定其在连线上的位置 从 而可以确定其值 3 在计算反量化值时 我们就采用了混合法

泰勒级数展开法

对一些自变量变化范围很大的非线性运算,可以采用泰勒级数展开 取有限的级数 即可 例如 ln(y) y<1 可做如下运算 (?1) n (? x) n +1 n=0 n + 1


ln y = ln(1 ? x) = ∑ ? ?x ?

x2 x3 x4 x5 ? ? ? 2 3 4 5 对自变

上式中的乘方运算 可以利用 Blackfin 的汇编指令集中提供的小数乘法

量大于 1 的值 可做移位处理 因为数据格式对 DSP 来说是“透明”的 也就是说它并 不知道数据的 Q 值 因此 它还是将数据作为小数来计算 例如对 16 位的整数

16384,DSP 将它看成是有符号的 16 位小数 0.5 来参与运算 为了获得正确结果 我们 只需将结果加以修正即可 ln(214)=ln(215*0.5) =15ln2+ln0.5 ln0.5就可以直接调用ln(y)函数来计算 然后加上15ln2的值即为最终的数据

44

3.3 ADSP-BF533 芯片简介
Blackfin系列DSP[32-40]是16位产品的一个大系列 是ADI与Intel联合开发的体现高 性能体系结构的首款第四代产品 这一新产品是专为通信和互联网应用而设计的通用 DSP芯片 能处理广泛用于互联网的大量图像 例如可视电话 游戏设备 声音 文本和数据流 适用于电信和

各种互联网设备

网络终端

网络电视和智能手持设备

其中的BF533接口丰富 性能优良 性价比很高 最高时钟频率为600MHz 主要应用 于高速运算的多媒体处理等领域中 BF533核心处理器有两个16 bit的乘法器 两个40 bit的加法累加器 两个40 bit算术逻辑单元(ALU) 四个8 bit视频ALU(多应用在运动补 偿算法中) 并且支持8 bit 16 bit和32 bit的数据运算 存储器采用统一的地址编码 32bit地址使其具有

BF533提供了丰富的存储资源

高达4G Byte的寻址空间 内部存储器有80K Byte指令SRAM 4K Byte的L1缓存 包括扩展存储器和I/O控制寄存器在内 BF533处理器有如下特点

64K Byte数据SRAM和

所有资源都分别占用公共

地址空间中的互相独立的区域  16 位定点 DSP 内核

可以实现 600MHz 的持续工作

 灵活的软件控制动态电源管理  4GB 统一寻址空间  L1 指令存储器包括 80KB SRAM 其中 16KB 可配置成 4 路组联合 Cache  L1 数据存储器包括 2 个 32KB SRAM 的 Bank 每个 Bank 均由两个 16KB SRAM 组成 其中 1 个 16KB 可配置成 Cache 不可

 4KB L1 暂存数据 SRAM,访问速度与 L1 存储器同样为处理器最快速度 配置为 Cache  支持片外同步或异步存储器  灵活的引导方式 包括 PC133SDRAM

SPI 或外部存储资源

 内存管理单元提供内存保护  事件处理  RTC 模块  Watch Dog 定时器  3 个定时/计数器  16 个 GPIO
45

支持 PWM

 1 个支持 IrDA 的通用串行口  并行外设接口支持 ITU R656 视频数据格式  1 个 SPI 兼容端口  2 个双通道全双工同步串行接口  12 通道 DMA  片内自带 1  0.7 63xPLL 3.3V I/O ADSP-BF533的系统框 支持 8 个立体声通道

1.2V 核心电压

所有外设都是通过几个高带宽的总线连接到处理器内核 图如图3-1所示

图3-1 BF533处理器的系统结构框图

ADSP-BF533 支持一整套软件和硬件开发工具 包括 ADI 公司的仿真器和 Blackfin DSP 开发环境下的 Visual DSP++ 程序员通过 Blackfin DSP 的 Visual DSP++项目管理环境 开发和调试一个应用程 连

序 该环境包括基于代数语法的汇编器 文档管理器 库管理程序 库编辑器

接程序 加载程序 准确到指令周期级的软件模拟器 C/C++编译器以及包括 DSP 和 数学函数的 C/C++动态数据库 Blackfin DSP 的结构经过精心设计 可以从编译的

C/C++代码取得令人瞩目的性能和效率 用 Visual DSP++调试器调试 C/C++和汇编程序时
46

程序员可以实现以下功能

查看 C/C++和汇编语言混合的程序代码 插入断点 寄存器

源和目标信息交叉在一起

存储器和堆栈上设置有条件的断点

跟踪指令的执行 对程序的执行进行线性和统计分析 填充 清空和以图形方式显示内存器内容

进行源程序级的调试 创建用户调试窗口 Blackfin DSP 的 Visual DSP++ IDE 允许程序员定义和管理 DSP 的软件开发 程序 员通过对话框和属性页配置和管理所有的 ADSP-BF533 开发工具 这些功能允许程序 员执行以下任务 控制开发工具如何处理输入和产生输出 保持工具命令行开关的一一对应 除了 ADI 公司所用的软件和硬件开发工具外 还有第三方提供的支持 Blackfin

DSP 家族的种类繁多的工具 硬件工具包括 ADSP-BF533 EZ-Kit 评价/开发插件 第 三方软件包括 DSP 库 实时操作系统和方框图设计工具等

3.4 定点算法的 DSP 实现
所有模块都定点化后 还需要利用汇编语言编写程序代码 由于汇编语言可以直 接调用一些特殊的 DSP 指令 所以可以大大提高程序的运行速度 并能充分发挥定点 DSP 在进行数字信号处理运算方面的优势 另外 作为一个可实际应用的 DSP 系统 成本问题是非常关键的 在 PC 机环境中 不会考虑太多内存耗费问题 而在现实 DSP 系统上 使用内存的多少是决定成本的一个关键方面 因此 还要对源代码进行不断 改进 3.4.1 尽量压缩程序结构空间和数据空间 存储资源分配的优化 处理器对于片外存储器的存取操作 需要更多的指令周期 DSP 利用等待状态发 生器来与外部的低速存储器进行数据的存取 从而使系统的运行速度变慢 相反 片 内 SRAM 的访问速度与处理器相同 不需要延迟 在 Blackfin533 芯片内部 只有 2

个 32KB SRAM 的 Bank 对这些有限的片内存储器分配不同 对系统性能造成的影响
47

也不同

因此

如何充分利用存储器

也是一个需要考虑的问题 DSP 系统将一部分片内 SRAM 作为高速缓 片外内存被划分成

为了加快 DSP 访问片外内存的速度 存 cache

将它作为存储在片外内存中的数据对象的缓冲区域

连续的数据对象块 称为块 类似 片内缓存被划分成较少的块的集合 每个块的大 小与片外内存中的块的大小一样 在任何时刻 片内缓存包含片外内存的一个子集的 拷贝 数据总是以块大小为传送单元在片内缓存和片外内存之间来回拷贝的 当程序 需要片外内存中的某个数据对象时 它首先在当前存储在片内缓存的一个块中查找

如果该数据对象刚好缓存在片内缓存中 那么就是缓存命中 该程序直接从片内缓存 读取该数据对象 这比从片外内存中读取更快 如果片内缓存中没有缓存该数据对象 片内缓存从片外缓存中取出包含该数据对象的那个块 如果片内缓存中的缓存已经满 了的话 可能就会覆盖现存的一个块 片内缓存根据一定的策略 例如随机替换策略 最近最少被使用策略等等 来找出一个现存的块被覆盖 而当片内缓存从片外内存中 取出那个块后 程序就能像前面一样从片内缓存中读取了

Blackfin533 芯片包括两个 32KB SRAM 的 Bank 每个 Bank 均由两个 16KB SRAM 组成 其中 1 个 16KB 可配置成 Cache 我们将每个 Bank 的 16KB 共 32KB SRAM 配置成 Cache 各种系数表及可重用的中间变量因为经常使用 所以将它们放在片内内存 而非 常用的数据放到片外 如 Huffman 码表只在编码时才调用 因此将它们放在片外内存 所有的局部变量和参数传递都是利用堆栈来实现的 ADSP-BF533 的堆栈的大小 定为 1KB 设在片内 SRAM 中 3.4.2 汇编代码的优化

由于汇编代码比 C 代码有更高的执行效率 所以将 C 语言代码全部改为汇编代码 移植到 BF533 上以提高实时性 率可提高 10 倍以上 C 语言程序在全汇编移植到 BF533 后 虽然执行效

但实际上汇编程序中仍然存在很大的优化空间 DSP 程序优化

的目标是提高 DSP 计算资源和 I/O 资源的有效利用率 提高 DSP 计算和 I/O 资源有效 利用率的方法是充分挖掘算法中的并行和流水操作的并发特性 数据流以及它们之间 的相互关系等 1 具体方法如下

充分利用寄存器

BF533内核有8个32位的数据寄存器 6个32位的指针寄存器 4个32位的索引寄存
48

器等 因为访问寄存器比访问内存中某个地址要快三至四倍 因此在汇编代码的编写 中尽量使用寄存器来代替一些局部变量 2 硬件循环的优化 结合双累加器和矢量指令可以一次读/ 相应的有

编码过程中有很多地方连续读/写16位数 写32位数来代替 这样循环次数可以减半

BF533只提供了两个硬件循环

两组寄存器保存循环的参数 当遇到多于两层的嵌套循环时 我们采用硬件循环实现 较内部的循环体 较外面的循环体用判断跳转语句实现 这两个硬件循环是有优先级 差别的 只有设置为LC0外LC1内才可以保证程序正确的先内后外的执行

BF533还提供硬件循环寻址方式 它可以在数据寻找范围超出指定的缓存大小时 数据地址自动修改为当前地址减去缓存大小后的地址然后取值 3 压缩内存空间

有些函数内部局部变量太多 以至于全部寄存器用尽也不能胜任 因而面临为局 部变量分配内存的困难 在实现编码器时没有采取在堆栈中动态分配局部变量的方

法 对于多个模块都会用到的变量将其定义为全局变量 然后定义一个大小适当的全 局数组变量作为上述函数内部的局部变量 这样省去了在堆栈中频繁分配 释放内存 和数据拷贝 移动等操作 也就是说 只要定义了一个变量就

在DSP中定义的数据存储空间是连续分配的

会分配一段数据空间 而不像一般的高级语言一样有全局变量和局部变量之分 局部 变量使用结束就可以被释放 因此 为了在汇编代码中节约数据存储空间 可以考虑 多组变量的复用 只要该变量不被重复多次调用 就可以在它使用完毕之后把它的空 间分配给其他变量使用 即可以把同一段空间分配给前后不相关的几组变量 达到节 约数据空间的目的 在心理声学模块和量化模块中都需要使用中间变量数组 我们将一部分数组设置

为全局变量 为它们分配固定的内存空间 供心理声学模块和量化模块以及其它需要 的地方重用 该变量数组分配在片内内存SRAM段 因为这些中间变量被经常调用

所以分配在片内可以提高运行速度 4 使用并行指令和向量指令

并行指令和向量指令是Blackfin系列DSP的两大特点 使用并行指令和向量指令 可以充分利用DSP内部的硬件资源的重复性 减少指令执行次数和提高指令执行效率

49

使用1条并行指令相当于同时执行2条或者3条有用的非并行指令 用了体系结构的好处 同时对多个数据流进行相同的操作 进行FFT变换的蝶形运算时

向量指令则充分利

在心理声学和滤波器组模块中 结构的特点 5

由于其运算和数据

我们采用大量的并行运算和向量指令来实现

函数调用

函数的调用需要消耗大量CPU时间 比如参数进栈 出栈 地址跳转等 如果在 循环体内部调用函数 更是大幅度提高了运算量 对这种情况 我们对代码较短 调 用次数较多的函数在调用位置展开 这虽然增加了程序空间 但降低了函数调用损耗 的CPU时间 3.4.3 硬件仿真 我们采用 ADI 公司提供的 ADSP-BF533 EZ-Kit 评估 / 开发板来调试运行 MPEG-4 AAC编码程序 该开发板可用于器件评估 程序检查 系统调试等工作

ADSP-BF533 EZ-Kit评估/开发板具有所有基本的软件动态调试功能 查看代码 插入断点 来实现软 跟踪指令的执行 硬件评估和仿真 对程序的执行进行线性统计分析等 用户可使用EZ-Kit

具体编码结果及其分析将在第四章讨论

50

4

实验结果及分析

在 ADSP-BF533 EZ-Kit 开发板上 本文实现了 MPEG-4 AAC LC 级编码器 原始 声音信号为 16 位的 PCM 文件格式 其采样频率和采样精度分别为 44100Hz 和 16 位 双声道 原始声音文件存储在 PC 机上 经 EZ-Kit 编码后 再用 AAC 浮点解码器解

码 为了对编码结果进行比较 我们还对原始信号使用了浮点程序编码和解码 对定 点和浮点程序编解码的数据 我们比较了其波形和频谱值 并对解码后的数据通过

D/A 将数字信号还原成模拟信号 送入音响设备播放 然后由测试者对音响设备放出 的重建声音与原始的声音进行比较 评价该系统的性能

4.1 编码效率
对输入的声音文件编码
表 4-1

测试 100 帧的数据

平均的运行效率如表 4-1 所示

MPEG-4 AAC LC 级编码器运行效率 58.4ms 7

每帧平均编码时间 系统资源占用率

在 EZ-Kit 开发板上 每帧平均的编码时间达到了 58.4ms

而实时处理要保证每 若要达到实

帧的编码在 23.2ms 内完成 所以本编码程序是达不到实时处理要求的 时编码 可以升级开发平台

采用更高的 CPU 主频 还可以对编码器中运算量较大

的心理声学模型和量化模块作进一步简化

4.2 运算量
AAC 编码各模块的运算量占总的运算量的百分比如表 4-2 所示
表 4-2 模块 心理声学模型 滤波器组 M/S 立体声 量化和编码 AAC 编码各模块的运算量 运算量百分比 83 6 3 8

51

由于量化和编码模块的运算量与每帧的信号特点有关 表中的运算量百分比是一个平均值 实际值会有所浮动

所以是一个不固定的量

4.3 内存使用量
本文将所有程序代码段放在从地址 0xffa00000 起始的 SRAM 段 空间是 0x6eb8 Bytes 程序代码占用

用于重用的全局变量数组存放在从地址 0xff800000 起始的

SRAM 段 Huffman 码表存放在从地址 0x4000 起始的 SDRAM 段 需要时通过 DMA 搬移到片内内存 所有数据段占用空间一共是 0x59eb6 Bytes

4.4 编码质量
声音编码质量是指经传输 处理后音频信号的保真度 对数字音频 一般来说

采样频率越高 量化比特数越大 声道数越多 则音质就越好 目前公认的声音质量 标准分为 4 级 即数字激光唱盘 CD-DA 质量 量 电话的话音质量 对于音频质量的评价 多年来人们提出了许多方法 归纳起来大致可分为两类 调频广播 FM 质量 调幅广播 AM 质

主观评价和主观评价 客观评价用客观测量的手段来评价声音编码的质量 常用的方 法有信噪比 加权信噪比 平均分段信噪比等 它们都建立在均方误差的基础上 特 点是计算简单 但不能完全反映人对声音质量的感觉 特别对于传输速率为 16Kbit/s

以下的中 低速率主音编码尤为突出 因此主要适用于传输速率较高的波形编码类型 主观评价方法是以人为主体来评价声音的质量 符合人耳对声音质量的感觉 因

此目前得到广泛应用 其缺点是受人的主观影响较大 重复性和稳定性较差 最主要 的主观评定方法是主观评定等级 Subjective Opinion Scale Opinion Score 简称为 MOS 或称为平均意见分 Mean

MOS 得分采用 5 级评分标准 其方法是 由数十名试

听者在相同环境中试听并给予评分 然后对评分进行统计处理 求出平均得分 由于主 观和客观上的原因 每次试听的评分会有所波动 为了减小波动的误差 除了试听者人 数要足够多之外 用于测试的语音材料也要足够丰富 试听环境也要尽量保持相同 4.4.1 客观分析 MPEG-4 AAC 是感知音频编码 它是基于人耳对信号的有效感知 与追求重建信 号与原始信号波形相同的波形编码不同 感知音频编码尽量使人在主观感觉上与原始
52

信号相同

所以我们不用相对原始信号的信噪比等客观量来评价 AAC 编码效果



文仅对用定点和浮点程序分别进行编码的信号波形及频谱进行分析 最后再进行主观 评价 本文对多种不同的信号进行了测试 测试信号有各种乐器 音乐 语音等 并随 机选取了信号的一段进行分析 图 4-1 是用浮点程序编码和解码得到的时域波形 从图中可以看出 可以发现 图 定点

4-2 是用定点程序编码再用浮点程序解码后得到的时域波形 和浮点编解码的 PCM 信号波形基本一致 比较两条波形曲线

定点程序

的波形相对要平滑一些 抖动不如浮点程序明显 这说明定点化处理消除了部分高频 分量 使得其高频分量不如浮点程序丰富

图 4-1

浮点程序的编解码波形图

图 4-2

定点程序的编解码波形图

图 4-3 和图 4-4 分别是浮点和定点编解码结果的频谱图

比较两频谱图

可以发

现 在低频部分 两者的频谱基本相同 在高频部分则存在一定的误差 其主要原因
53

一是根据心理声学模型 人耳对低频段信号比较敏感 对高频段的感知能力较弱 因 此在编码时低频段分配的量化比特数较多 高频段分配的比特数较少 这样在定点化 过程中会给高频段带来较大的量化误差 二是在定点化的处理过程中 定点化处理抑 制了部分高频分量 使得定点结果在较高频段的频谱幅度略小于浮点结果在较高频段 的频谱幅度 另外 定点化处理将精度较高的浮点数据转换成精度较低的定点数据 使得定点结果在高频段存在较大的误差

也会产生一些高频分量

图 4-3

浮点程序的编解码频谱图

图 4-4

定点程序的编解码频谱图

4.4.2

主观测试 为了对 MPEG-4 AAC 编码的声音质量进行评价 我们组织了一些测试人员进行

听音测试 测试方法为 首先让测试人员听一遍原始的测试信号 并以此为参考给随 后的浮点和定点解码声音打分 事先不告知听音人员所听到的是何种解码信号 采用
54

ITU-R 的 5 分损伤标准[41]来对听到的声音进行打分 打分标准如表 4-3 所示
表 4-3 分数 5.0 4.0 3.0 2.0 1.0 测试打分标准 质量级别 优 良 中 差 劣 失真级别 无听见的损伤 有可听见的损伤但不厌恶 轻微厌恶 厌恶 极厌恶

共选取了 7 名测试人员进行测试 选取的人员均进行了听音训练 对声音信号有较 好的鉴别能力 由于没有专业的听音室 我们只能选择一个相对安静的环境进行测试 测试过程使用耳机 每段声音信号之间间隔 2 秒 测试声音信号选用了键琴 响板 风笛 萨克斯等乐器和男高音 女高音等声音 将他们的打分平均后 列于表 4-4 中
表 4-4 测试信号 编码方法 原始信号 浮点编码信号 定点编码信号 键琴 5.0 4.5 4.6 试听打分结果 风笛 5.0 4.6 4.6 萨克斯 5.0 4.6 4.4 男高音 5.0 4.8 4.7 女高音 5.0 4.8 4.8

响板 5.0 4.2 4.1

测试结果表明 浮点编码信号与定点编码信号的打分差别非常小 这说明定点编 码程序达到了浮点编码程序的主观听音效果 证明我们的定点编码是成功的

55

结束语
随着数字压缩技术对信息技术发展所产生的深远影响 MPEG 音频标准也将在数 字音频编码领域中日益显示出主导地位 对 MPEG 音频标准的深入探讨及其实际产品 的开发运用具有非常现实的意义 首先 本文介绍了当今数字音频编码技术的发展状况 讨论了目前流行的几种音

频编码标准的特点 面的阐述

并对音频压缩原理和 MPEG-4 AAC 音频编码算法进行了较为全

分析了各个功能模块在标准中的具体实现

其次 针对算法中最耗时的功能模块提出了优化算法 对算法中的心理声学模型 MDCT 模块采用了快速算法来实现 对量化及编码模块 综合计算量 存储空间及精 度考虑 采用了查表与少量计算相结合的方法来计算反量化值 经过以上优化 可以 在总体水平上提高大约 20 第三 的计算速度

为了满足定点 DSP 的要求及充分利用 DSP 的特性 本文将所有的 C 代码

进行了定点化处理 并全部用汇编代码来实现 在此基础上 充分利用 BF533 内部体 系结构的特点 使用并行指令以减少指令执行次数 使用向量指令使多个数据流进行 相同的操作 最后 进一步提高了运算速度 同时也减少了代码空间

本文将在定点 DSP 上实现的结果与在 PC 机上实现的浮点结果采用了主观 测试结果表明 定点编码与浮点编码的听音效果基本上无差别 编码后的压 的存储空

测试方法来评价

本文在 Blackfin 定点 BF533 芯片上实现了 MPEG-4 AAC 的编码器 缩率能够达到 12 1 在相同音质的条件下 比现在流行的 MP3 节省 50

间 作为最新的音频编码国际标准 MPEG-4 AAC 总结了 MPEG-1 MPEG-2 和 AC-3 等音频编码的长处 在保证重建音频质量的基础上最大限度地压缩了码率 目前 这 一标准已越来越受到更多的重视 并被广泛应用到数字音频广播 数字音频工作站

网络传输和高清晰度电视伴音等各个领域

56


在本论文完成之际 学和亲人


教诲 关心以及帮助过我的老师 同

我由衷地感谢指导

首先感谢导师汪国有教授 汪老师学识渊博 治学严谨 思想敏锐 视野开阔 为我营造了一种良好的学术氛围 善诱的指导 三年来 正是汪老师平时孜孜不倦的教诲 循循

由浅入深的任务布置以及理论联系实际的教学方法引领我一步一步走 其朴实无华 平易近人的人格魅力 无微不至 感人至深的人

向科研工作的道路

文关怀都使我备受感动并受益匪浅 其次感谢与我一同在精伦电子公司华工多媒体研究所工作的同学 杨永祥硕士 段敏涛硕士 振学博士 长补己之短 此外 姜远利硕士 朱里博士等 李乔亮硕士 张朋飞硕士 刘琪硕士 邹光宇硕士 陈

他们经常与我就课题相关问题进行讨论

使我能够取人之

让我深深体会到这是一个欣欣向荣 感谢我的朋友杨晓峰硕士

团结向上的研究集体 张留洋硕士 张波硕士等 没

邹飞勇硕士

有他们适时的鼓励和帮助

没有他们真挚的友情

我想我的研究生生活不会这么丰

富多彩 感谢我所有的同班同学 让我在这样一个和谐 团结的集体中学会了协作 奉献精神 最后 爱护 感谢父母辛勤的培育和无限的关爱 感谢岳父岳母对我生活上的照顾和 感谢她在专业上对我的帮助和在生活 正是有他们的爱护

感谢我的爱人对我学业的支持和理解

上对我无微不至的关心 和关心

感谢所有关心和支持我的亲人和朋友

我才能全身心地投入到工作和学习中去

57

参考文献
[1] [2] [3] [4] [5] P. Noll. Wideband Speech and Audio Coding. IEEE Comm. Mag, Nov. 1993: 34-44 ISO/IEC 14496-3: Information Technology – Coding of audio-visual objects, part 3: Audio, 2001 ISO/IEC 11172-3: Information Technology Coding of Moving Picture and Associated Audio for Digital Storage at up to About 1. 5Mbit/s ISO/IEC 13818-3: Information Technology – Generic Coding of Moving Pictures and Associated Audio Information, part 3: Audio D. Pan. A Tutorial on MPEG/Audio Compression. IEEE Multi-Media, 1995, 2(2): 60-74 [6] P. Papamichalis. MPEG Audio Compression: Algorithms and Implementation. in Proc. DSP 95 Int. Conf. on DSP, June 1995: 72-77 [7] [8] [9] ISO/IEC 13818-7: Information Technology – Generic Coding of Moving Pictures and Associated Audio Information, part 7: Advance Audio Coding(AAC) Digital Audio Compression (AC-3) Standard. United States Advanced Television Systems Committee. Doc. A/52. 10 Nov 94, 12 Apr 95 R. K. Jurgen. Broadcasting with Digital Audio. IEEE Spectrum, Mar. 1996: 52-59 版社, 2002 [11] N. S. Jayant, J. D. Johnston, and R. Safranck. Signal Compression Based on Models of Human Perception. IEEE, 1993, 81(10): 1385-1422 [12] N. Jayant, et al.. Signal Compression Based on Models of Human Perception. Proc. IEEE, Oct. 1993: 1385-1422 [13] T. Painter and A. Spanias. Perceptual Coding of Digital Audio. Proceedings of the IEEE, April 2000, 88(4) [14] J. Johnston. Transform Coding of Audio Signals Using Perceptual Noise Criteria. IEEE J. Sel. Areas in Comm, Feb. 1988: 314-323 [15] N. Jayant, et al.. Signal Compression Based on Models of Human Perception. Proc. IEEE, Oct. 1993: 1385-1422 [16] 梁彬, 吴镇扬. 数字音频压缩中的变换编码算法. 电声技术, 1999(7): 3-6 [17] J. Johnston. Sum–Difference Stereo Transform Coding. IEEE ICASSP, 1992: 569-571
58

[10] Ken C. Pohlmann 著. 数字音频原理与应用(第四版). 苏菲译. 北京 电子工业出

[18] D. Sinha and J. Johnston. Audio Compression at Low Bit Rates Using a Signal Adaptive Switched Filterbank. in Proc. Int. Conf. Acous, Speech, and Sig. Proc. (ICASSP-96), May 1996: 1053-1056 [19] J. P. Prince. Subband/Transform Coding Using Filter Bank Designs Based on Time Domain Aliasing Cancellation. ICASSP, 1987 [20] J. Herre and J. D. Johnston. Enhancing the Performance of Perceptual Audio Coders by Using Temporal Noise Shaping (TNS). 101st AES convention, Preprint 4384 [21] S. R. Quackenbush, and J. D. Johnston. Noiseless coding of quantized spectral components in MPEG-2 Advanced Audio Coding. IEEE Workshop on ASSP, Oct. 1997 [22] 包益平, 陈健. MPEG-2 先进音频编码(AAC)的研究和软件仿真. 应用声学, 1999, 18(5): 19-23 [23] T. H. Tsai, S. W. Huang, L. G. Chen. Design of a Low Power Psychoacoustic Model Co-Processor for MPEG-2/4 AAD LC Stereo Encoder. 0-7803-7761-3/03, IEEE. [24] Yuichiro Takamizawa, Toshiyuki Nomura, and Masao Ikekawa. High-Quality and Processor-Efficient Implementation of an MPEG-2 AAC Encoder. 0-7803-7041-4/01, IEEE [25] Ye Wang, Leonid Yaroslavsky, Miikka Vilermo, Mauri Vaananen. Some Peculiar Properties of the MDCT. 0-7803-5747-7/00, 2000, IEEE [26] A. Ferreira. Tonality detection in perceptual coding of audio. in Proc. AES, February 1995: 3947 [27] 梁彬, 吴镇扬. 数字音频压缩中的变换编码算法. 电声技术, 1999(7): 3-6 [28] Tsung-Han Tsai, Chuh-Chu Yen. A High Quality Re-quantization/Quantization Method for MP3 and MPEG-4 AAC Audio coding. 0-7803-7448-7/02, 2000, IEEE [29] 陆心如. 数字信号处理原理及应用. 北京 [30] 王念旭. DSP 基础与应用系统设计. 北京 2001(3): 3-7 [32] 陈峰编著. Blackfin 系列 DSP 原理与系统设计. 北京 电子工业出版社, 2004 [33] Analog Devices, Inc. Blackfin? Processor Instruction Set Reference[DB/OL] http: //www. analog. com/ Analog_ Root/ static/ library/ dspManuals/ Blackfin _DSP _Instructions_set. html, 2003 电子工业出版社, 1996 北京航空航天大学出版社, 2001

[31] 王华明, 徐盛, 陈健. 用定点 DSP 实现 MPEG-2 AAC 实时解码器. 电声技术,

59

[34] Analog Devices, Inc. ADSP-BF533 Blackfin ? Processor Multi-cycle Instructions and Latencies[DB/OL] http: //www. analog. com/ UploadedFiles/Application_Notes/51976396264892EE171. pdf [35] Analog Devices, Inc. Visual DSP++ 3. 1 C/C++ Compiler and Library Manual for Blackfin Processors[DB/OL] http: //www. analog. com/Analog_Root/static/library/dspManuals/cc_index. html, 2003 [36] Analog Devices, Inc. Visual DSP++ 3. 1 Assembler and Preprocessor Manual for Blackfin Processors[DB/OL] http: //www. analog. com/Analog_Root/static/library/dspManuals/asm_index. html [37] Analog Devices, Inc. Visual DSP++ 3. 1 Linker and Utilities Manual for Blackfin DSPs http: //www. analog. com/Analog_Root/static/library/dspManuals/lnk_index. html [38] Analog Devices, Inc. Visual DSP++ Kernel(VDK)User’s Guide http: //www. analog. com/Analog_Root/static/library/dspManuals/vdkm. html [39] Analog Devices, Inc. Visual DSP++ 3. 1 User’s Guide for Blackfin Processors http: //www. analog. com/Analog_Root/static/library/dspManuals/ug_index. html [40] Analog Devices, Inc. Visual DSP++ 3. 1 Getting Started Guide for Blackfin Processors http: //www. analog. com/Analog_Root/static/library/dspManuals/gsg_index. html [41] David Meares, UKKaoru Watanabe, Erie Scheirerr. Report on the MPEG-2 AAC Stereo Verification Tests http: //www. cselt. it/mpeg/public/, 1998

60

附录 1
[1]

攻读学位期间发表论文目录

汪国有, 张成兴. MPEG-4 AAC 实时音频编码器设计与实现研究. 计算机与数字 工程, 2005(8) (已录用)

61

MPGE-4 AAC音频编码器的DSP程序优化设计与实现研究
作者: 学位授予单位: 张成兴 华中科技大学

相似文献(2条) 1.期刊论文 卢尧.安建平.吕品.LU Yao.AN Jian-ping.LV Pin 全球数字广播系统音频编码器的软件实现 -计算机工程与应用 2007,43(12)
全球范围的数字广播系统DRM(Digital Radio Mondiale),是一种针对30 MHz以下频段的数字声音广播系统.和传统广播系统相比,DRM数字广播系统在声音质量上是模拟调幅广播 无法比拟的.这其中的关键之一在于DRM系统引入了新的信源编解码技术--MPEG-4标准的AAC(Advanced Audio Coding,先进音频编码).在分析符合DRM标准的AAC音频编码器原理基础上 ,提出了一种改进的离散余弦变换算法,并在PC上实现了基于该算法的AAC音频编码器.实验表明,该软件编码器能够满足DRM系统实时性要求.

2.学位论文 陆文玲 MPEG-1/2到MPEG-4码流转换的研究与实现 2002
该文主要研究了MPEG-1/2码流到MPEG-4码流的转换,包括MPEG-1/2码流的解码,MPEG-4视音频码流的编码,及编码后生砀MPEG-4视音频码流的合成.该文首先详细分析了MPEG-1/2标 准及其层次结构,由此给出MPEG-1/2解码的数据结构及MPEG-1/2视音频解码器基本框架图.在以上的基础上,把各种MPEG-1/2码流的视音频解码分别生成视频YUV数据与音频PCM数据.接 着详细分析了MPEG-4标准及其层次结构,由此给出MPEG-4编码的数据结构及MPEG-4视音频编码器基本框图.在以上的基础上,把前面解码生成的视频YUV数据与音频PCM数据分别编码成 MPEG-4视音频码流.最后把前面生成的MPEG-4视音频码流进行同步合成,写成标准的AVI数据输出文件.

本文链接:http://d.g.wanfangdata.com.cn/Thesis_D009587.aspx 授权使用:黄小强(wfxadz),授权号:5ee7b615-b2ee-4e71-b2c2-9dc300a45bed 下载时间:2010年7月30日


相关文章:
更多相关标签: