嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验
一、实验目的
了解AAC音频格式,掌握AAC音频解码的原理,并实现将AAC格式的音频解码为PCM
二、实验原理
音频编解码的主要对象是音乐和语音,音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算法。本实验中使用的AAC格式属于有损音乐压缩格式。音频编解码的目的是减少传输的信息量和减少储存的信息。
音频的编解码的格式分类
无压缩的格式(PCM,WAV…)
无损压缩格式(APE,FLAC,LPAC,WMA_LS…)
有损音乐压缩格式(AAC,AACPlus,AC3,DTS,ATRAC,MP3,WMA,OGG,RA…)
有损语音压缩格式(AMR, GSM, LPC, SPEEX, CELP, G.7XX, ADPCM,…)
合成算法(MIDI,TTS)
AAC高级音频编解码(Advanced Audio Coding)
最初是基于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。
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采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力。
MPEG-4 AACLC解码器的基本框图
在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字得到一帧的起始。
找到后,开始进行无噪解码,无噪解码实际上就是哈夫曼解码,它的作用在于进一步减少尺度因子和量化后频谱的冗余,即将尺度因子和量化后的频谱信息进行哈夫曼编码。
通过反量化、
联合立体声、
知觉噪声替换、
瞬时噪声整形、
反离散余弦变换、
频段复制,这几个模块之后,
得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。

程序流程
程序流程设计中首先要打开/创建输入和输出的文件,接着进行aac解码并将解码后的数据保存到pcm文件,最后关闭文件即可。

三、操作现象
实验设备
本实验所需硬件为实验板、仿真器和电源。

硬件连接
(1)连接仿真器和电脑的USB接口。
(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

软件操作
导入工程,选择Demo文件夹下的对应工程
编译工程,生成可执行文件
将CCS连接实验箱并加载程序
点击运行程序
运行程序后,Console 窗口会打印信息。
大概等待5分钟,编码完成。
可看到工程目录下的song.aac文件解码生成的song.pcm文件。
可播放song.pcm,具体操作步骤如下:
(1)打开软件后,点击“文件->导入->原始数据”,
(2)选择工程目录下的song.pcm文件,数据配置如图,
(3)导入数据后,点击绿色剪头即可播放音频数据。
(4)对比后可发现其效果与AAC原文件播放内容一致。
实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

相关文章:
嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验
一、实验目的 了解AAC音频格式,掌握AAC音频解码的原理,并实现将AAC格式的音频解码为PCM 二、实验原理 音频编解码的主要对象是音乐和语音,音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算…...
【从浅学到熟知Linux】冯诺依曼体系结构及进程概念详谈!
🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 冯诺依曼体系结构操作系统如何理解管理操作系统概念设计操作系统目的系统调用和库函数概念 进程基本概念描…...
word转pdf(前后端最全保姆级别)
word转pdf vue2java 文章目录 word转pdf vue2java一、前端 vue-pdf1、下载依赖2、封装的组件 二、java使用aspose(付费)1.引入库2.封装的工具类3、付费密钥文件 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、前端 vue…...
深度学习简介
深度学习简介 一、引言:深度学习的兴起 简短介绍深度学习的历史背景 深度学习,作为人工智能领域的一颗冉冉升起的新星,其根源可以追溯到上世纪的感知机学习算法。这种算法模拟人类的神经元行为,是最早期的尝试之一。然而&#x…...
深入探索:使用C++构建顶级性能的网络服务器
在数字化浪潮的推动下,网络服务器作为信息交互的核心枢纽,其性能与稳定性直接决定了互联网应用的服务质量和用户体验。C++,作为一种兼具高效性与灵活性的编程语言,已然成为构建高性能网络服务器的首选工具。本文旨在深入剖析C++在构建顶级性能网络服务器中的关键技术、最佳…...
SpringBoot学习笔记四
SpringBoot学习笔记四-监听机制 1. SpringBoot监听器1.1 无需配置1.1.1 CommandLineRunner使用1.1.2 ApplicationRunner的使用1.1.3 CommandLineRunner与ApplicationRunner的区别 1.2 需要创建META-INF文件,并在其中创建spring.factories,配置相关的信息…...
雄安建博会:中矿雄安新区的总部开工建设
中矿落位雄安:助力国家战略与新区发展 雄安新区,作为中国未来发展的重要战略支点,正迎来一系列央企总部的疏解与建设。最近,中国矿产资源集团有限公司(简称“中矿”)在雄安新区的总部项目正式开工建设&…...
蒙特卡洛方法【强化学习】
强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程,个人觉得赵老师的课件深入浅出,很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实践—GridWorld 第…...
构建第一个ArkTS之声明式UI描述
ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。 创建组件 根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。 说明 创建组件时不需要new运算…...
pytest教程-25-生成覆盖率报告插件-pytest-cov
领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest多重断言插件pytest-assume,本小节我们讲解一下pytest生成覆盖率报告插件pytest-cov。 测量代码覆盖率的工具在测试套件运行时观察你的代码,并跟踪哪些行被运行,…...
特征工程总结
后期总结 Reference [1] 特征工程总结 - 知乎...
JUC并发编程2(高并发,AQS)
JUC AQS核心 当有线程想获取锁时,其中一个线程使用CAS的将state变为1,将加锁线程设为自己。当其他线程来竞争锁时会,判断state是不是0,不是自己就把自己放入阻塞队列种(这个阻塞队列是用双向链表实现)&am…...
Golang 为什么需要用反射
本质上是可以动态获取程序运行时的变量(类型) 比如现在我想实现一个通用的db插入函数,支持我传入所有类型的struct,每一种类型的struct是一个单独的表,以struct的名称作为表名,然后插入到不同的表中。 pa…...
【Linux的进程篇章 - 进程终止和进程等待的理解】
Linux学习笔记---008 Linux之fork函数、进程终止和等待的理解1、fork函数1.1、什么是fork?1.2、fork的功能介绍1.3、fork函数返回值的理解1.4、fork函数的总结 2、进程的终止2.1、终止是在做什么?2.2、进程终止的3种情况 3、进程的终止3.1、进程终止的三种情况3.2、…...
《策略模式(极简c++)》
本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案:策略模式是一种行为设计模式,它定义了一系列算法,将每…...
Python向文件里写入数据
直接上代码 name "测试" data name.encode("utf-8")# w特点:文件不存在则创建文件并在打开前清空 f open("db.txt", mode"wb")f.write(data)f.close()可以在 db.txt 文件里看到一句话 测试name "Testing" …...
【网站项目】校园订餐小程序
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
vue-指令v-for
<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>vue-指令v-for</title> </head> …...
Python项目1 外星人入侵_外星人
在本章中,我们将在游戏《外星人入侵》中添加外星人。首先,我们在屏幕上边缘附近添加一个外星人,然后生成一群外星人。我们让这群外星人向两边和下面移 动,并删除被子弹击中的外星人。最后,我们将显示玩家拥有的飞船数量…...
导入项目运行后,报错java: Cannot find JDK ‘XX‘ for module ‘XX‘
解决方案: 1、删除.idea和.iml文件 2、右击此module,点击 Open Module Settings 在 Module SDK 中选择所安装的java版本后,点击右下角 Apply,会再生成.idea文件; 那.iml文件呢?操作步骤: 按两下…...
VibeVoice与Vue3前端整合:浏览器端语音合成方案
VibeVoice与Vue3前端整合:浏览器端语音合成方案 1. 为什么要在浏览器里直接合成语音 你有没有遇到过这样的场景:在做一个在线教育应用时,想让系统自动朗读课文,但每次都要把文字发到后端服务器,等几秒钟再把音频文件…...
玩转LS-DYNA爆破模拟:倾斜长短孔布孔实战
ANSYS/ls-dyna隧道、巷道爆破倾斜长短孔布孔方式下爆破损伤数值模拟 1.讲述小间隔长短型炮孔爆破模型的建模及网格划分全过程,包含网格尺寸设计。 2.装药结构修改,可实现长短炮孔中间隔装药、设置空孔,延期起爆、起爆位置等设置,讲…...
SecGPT-14B赋能教育行业:高校网络安全实验室AI教学平台搭建
SecGPT-14B赋能教育行业:高校网络安全实验室AI教学平台搭建 1. 引言:当网络安全教学遇上AI大模型 想象一下,在高校的网络安全实验室里,学生面对一个复杂的漏洞分析报告,不再需要花费数小时翻阅厚重的教材和零散的在线…...
阿里云服务器上Certbot更新Let‘s Encrypt证书总超时?一个更换公网IP的实战解决记录
阿里云服务器Certbot更新Lets Encrypt证书超时问题深度解析与实战解决 最近在阿里云北京区域的服务器上更新Lets Encrypt证书时,遇到了一个看似简单却令人困扰的问题:Certbot在续签证书时频繁报错,提示acme-v02.api.letsencrypt.org连接超时。…...
Pixel Dream Workshop 对比测试:不同采样器与模型版本的出图效果
Pixel Dream Workshop 对比测试:不同采样器与模型版本的出图效果 1. 测试背景与目的 在AI绘画领域,采样器和模型版本的选择直接影响最终生成效果。本次测试旨在通过严谨的对比实验,帮助用户理解Pixel Dream Workshop中不同参数组合的实际表…...
AIO PathProb 时序概率路径系统
本文由(拓世网络技术开发工作室)技术支持,欢迎共同开发第一部分:伪代码 / 算法描述(给算法/工程侧)1. 全局定义(状态与概率)import numpy as npfrom dataclasses import dataclass# …...
边缘端模型部署卡壳?这7个Python量化工具配置错误正在悄悄拖垮你的IoT项目,立即排查!
第一章:边缘端Python量化部署的典型瓶颈诊断在边缘设备(如树莓派、Jetson Nano、RK3588等)上部署量化后的Python模型时,性能表现常显著低于预期。根本原因并非模型精度下降,而是运行时环境与硬件约束引发的隐性瓶颈。精…...
无人机飞控必看:MPU6050互补滤波实战对比测试(DMP vs Mahony)
MPU6050姿态解算实战:Mahony互补滤波与DMP深度对比 去年调试四轴飞行器时,我曾连续72小时盯着屏幕上的姿态角曲线发呆——为什么明明静止的飞控板,Roll角却以每小时5度的速度缓慢偏移?这个困扰无数开发者的经典问题,最…...
用Python脚本自动化Mininet拓扑测试:3个提升SDN实验效率的技巧
Python脚本自动化Mininet拓扑测试:3个提升SDN实验效率的技巧 在软件定义网络(SDN)的研究与开发中,Mininet作为轻量级网络仿真工具已成为行业标准。然而,随着实验复杂度的提升,手动配置拓扑和流表的方式往往…...
别再只写服务端了!Spring Boot WebSocket 完整双端配置与心跳保活指南
别再只写服务端了!Spring Boot WebSocket 完整双端配置与心跳保活指南 在实时通信领域,WebSocket早已不是新鲜事物,但许多开发者仍停留在"服务端能跑通就行"的初级阶段。当你的应用需要处理金融行情推送、在线协作编辑或IoT设备控制…...
