一、实验目的
了解MP3文件的结构,掌握MP3音频解码的原理,并实现基于SYSBIOS系统,将MP3格式的音频解码为PCM格式。
二、实验原理
1、MP3音频格式
MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。
传统的MP3算法需要完成大量的高精度浮点计算,其解码速度和效率依赖于通用浮点运算单元的支持。大部分的专用MP3解码播放系统均需要使用DSP处理器或浮点协处理器处理浮点指令并完成高速浮点运算过程。
2、MP3编解码
MP3音频压缩包含编码和解码两部分,编码是将原始信号转换成电平信号的过程,解码即是逆过程,人耳感受声音的频率范围是20Hz-20kHz,MP3截掉了大量的冗余信号和无关的信号,编码器将原始声音变换到频率域,经过量化和编码形成MP3位流。解码器要简单得多,它的任务是从编码后的谱线成分中,经过反量化和逆变换,提取出声音信号。
(1)编码:从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在时域和频域上具有相关性,也即存在数据冗余。将音频作为一个信源,音频编码的实质是减少音频中的冗余。通常我们采用的是PCM编码,PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字信号。
(2)解码:编码的逆过程,将MP3文件解码成PCM数据流输出。
3、MP3文件结构
MP3文件数据由多个帧组成,帧是MP3文件最小组成单位。每个帧又由帧头、附加信息和声音数据组成。每个帧播放时间是0.026秒,其长度随位率的不同而不等。有些MP3文件末尾有些额外字节存放非声音数据的说明信息。
MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1。
ID3一般位于一个MP3文件的开头或末尾的若干字节内,记录该MP3文件的歌手、标题、专辑名称、年代、风格等信息,ID3分为两个版本,V1版ID3在文件末尾的固定128字节,以TAG字符开头,若没有则认为无ID3V1信息,V2版ID3位于MP3的开头,长度可变。
4、音频数据解析
每个帧都有一个帧头,长度是四个字节,帧后面可能有2字节的CRC校验,取决于帧头的第16位,为0则无校验,为1则有校验,后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。
5、libmp3lame库
lame是一个有名的开源MP3编解码库,使用lame库只需要包含lame.h头文件。
6、SYS/BIOS 操作系统
SYS/BIOS 是一个可扩展的实时的操作系统(可拓展的实时内核)。
(1)具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性。
(2)SYS/BIOS提供了抢占式多线程,硬件抽象,实时分析和配置工具。
(3)优化的内存分配和堆栈管理(尽量少的消耗和碎片)。
(4)SYS/BIOS的设计是为了最大限度地减少对内存和CPU的要求.
能够实现系统的模块化并可裁剪。
(5)用于实时调度和同步的应用程序或实时的设备。
TASK任务
TASK任务模块是操作系统中最基本的模块,每个任务是一个单独的线程,各个线程(任务)具有各自的优先级。SYS/BIOS任务对象是被任务模块管理的线程。
(1)任务模块动态调度和抢占任务是基于任务的优先级和任务当前执行的状态的。这确保了处理器总是给予最高优先级的线程准备运行。
(2)SYS/BIOS的系统组件可以动态及静态创建任务,可以通过调用Task_create()动态创建Task对象,也可以在配置中静态创建Task对象。
(3)动态和静态创建任务的主要区别是:动态创建的线程可以在运行时删除,而静态创建的任务占用更少的内存资源。
7、程序流程设计
程序流程设计中首先要进行使能SD并配置SD设备驱动,接着初始化SD设备,检测SD卡的状态,注册SD卡的读写方式,然后在SD卡内创建PCM文件,打开MP3文件后初始化文件指针到起始点,接着初始化解码器数据结构并配置成解码模式,最后执行MP3文件解析,解码完成后卸载设备即可。
三、操作现象
1、实验设备
2、硬件连接
(1)将工程目录下的song.mp3文件拷贝到SD卡后,把SD卡插入卡槽内。
(2)连接仿真器和电脑的USB接口。
(3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。
3、软件操作
导入工程,选择Demo文件夹下的对应工程
编译工程,生成可执行文件
将CCS连接开发板并加载程序
点击运行程序
运行程序后,Console 窗口会打印信息,正在处理音频数据。
大概等待1分钟,解码完成。
实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电即可。