DSP ARM FPGA实验箱_嵌入式实验箱:3-4 mp3音频解码实验
<h1 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">1、</span>实验目的</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">认识</span>MP3文件的结构,<span style="color: black;">把握</span>MP3音频解码的原理,并实现基于SYSBIOS系统,将MP3格式的音频解码为PCM格式。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">2、</span>实验原理</h1>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">1、MP3音频格式</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">MP3是一种音频压缩技术,其全<span style="color: black;">叫作</span>是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简<span style="color: black;">叫作</span>为MP3。它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 <span style="color: black;">乃至</span> 1:12 的压缩率,压缩成容量较小的文件,而<span style="color: black;">针对</span>大<span style="color: black;">都数</span>用户<span style="color: black;">来讲</span>重放的音质与最初的不压缩音频相比<span style="color: black;">无</span><span style="color: black;">显著</span>的下降。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">传统的MP3算法需要完成<span style="color: black;">海量</span>的高精度浮点计算,其解码速度和效率依赖于通用浮点运算单元的支持。大部分的专用MP3解码播放系统均需要<span style="color: black;">运用</span>DSP处理器或浮点协处理器处理浮点指令并完成高速浮点运算过程。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">2、MP3编解码</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">MP3音频压缩<span style="color: black;">包括</span>编码和解码两部分,编码是将原始信号转换成电平信号的过程,解码即是逆过程,人耳感受声音的频率范围是20Hz-20kHz,MP3截掉了<span style="color: black;">海量</span>的冗余信号和无关的信号,编码器将原始声音变换到频率域,经过量化和编码形成MP3位流。解码器要简单得多,它的任务是从编码后的谱线<span style="color: black;">成份</span>中,经过反量化和逆变换,提取出声音信号。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)编码:从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在时域和频域上具有<span style="color: black;">关联</span>性,<span style="color: black;">亦</span>即存在数据冗余。将音频<span style="color: black;">做为</span>一个信源,音频编码的实质是减少音频中的冗余。<span style="color: black;">一般</span><span style="color: black;">咱们</span>采用的是PCM编码,PCM<span style="color: black;">经过</span>抽样、量化、编码三个<span style="color: black;">过程</span>将连续变化的模拟信号转换为数字信号。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)解码:编码的逆过程,将MP3文件解码成PCM数据流输出。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">3、MP3文件结构</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">MP3文件数据由多个帧<span style="color: black;">构成</span>,帧是MP3文件最小<span style="color: black;">构成</span>单位。<span style="color: black;">每一个</span>帧又由帧头、附加信息和声音数据<span style="color: black;">构成</span>。<span style="color: black;">每一个</span>帧播放时间是0.026秒,其长度随位率的<span style="color: black;">区别</span>而不等。有些MP3文件末尾有些额外字节存放非声音数据的说明信息。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">ID3<span style="color: black;">通常</span><span style="color: black;">位置于</span>一个MP3文件的开头或末尾的若干字节内,记录该MP3文件的歌手、标题、专辑名<span style="color: black;">叫作</span>、年代、风格等信息,ID3分为两个版本,V1版ID3在文件末尾的固定128字节,以TAG字符开头,若<span style="color: black;">无</span>则认为无ID3V1信息,V2版ID3<span style="color: black;">位置于</span>MP3的开头,长度可变。</span></p>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-axegupay5k/f763a79ee5774a0faf54aeed566b8cc6~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=SuYqRpuYeIG1fhiQP1olPBc4iIE%3D" style="width: 50%; margin-bottom: 20px;"></div>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">4、音频数据解析</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">每一个</span>帧都有一个帧头,长度是四个字节,帧后面可能有2字节的CRC校验,取决于帧头的第16位,为0则无校验,为1则有校验,后面是可变长度的附加信息,<span style="color: black;">针对</span>标准的MP3文件<span style="color: black;">来讲</span>,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。</span></p>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/a517adab8da24576b83ae8fc1ed25a48~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=prouFbMp%2BGt2UvFQl2yu1np23YU%3D" style="width: 50%; margin-bottom: 20px;"></div>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">5、libmp3lame库</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">lame是一个有名的开源MP3编解码库,<span style="color: black;">运用</span>lame库只需要<span style="color: black;">包括</span>lame.h头文件。</span></p>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/c1e499196dcf46f2a49dfd568100be2e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=rd9gutsanAm4B5wbONjqpVk9kZI%3D" style="width: 50%; margin-bottom: 20px;"></div>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">6、SYS/BIOS 操作系统</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">SYS/BIOS 是一个可扩展的实时的操作系统(可拓展的实时内核)。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)<span style="color: black;">拥有</span>非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)SYS/BIOS<span style="color: black;">供给</span>了抢占式多线程,硬件抽象,实时分析和配置工具。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)优化的内存分配和堆栈管理(<span style="color: black;">尽可能</span>少的消耗和碎片)。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(4)SYS/BIOS的设计是为了最大限度地减少对内存和CPU的<span style="color: black;">需求</span>.</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">能够实现系统的模块化并可裁剪。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(5)用于实时调度和同步的应用程序或实时的设备。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">TASK任务</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">TASK任务模块是操作系统中最基本的模块,<span style="color: black;">每一个</span>任务是一个单独的线程,各个线程(任务)<span style="color: black;">拥有</span>各自的优先级。SYS/BIOS任务对象是被任务模块管理的线程。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)任务模块动态调度和抢占任务是基于任务的优先级和任务当前执行的状态的。这<span style="color: black;">保证</span>了处理器总是给予最高优先级的线程准备运行。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)SYS/BIOS的系统组件<span style="color: black;">能够</span>动态及静态创建任务,<span style="color: black;">能够</span><span style="color: black;">经过</span>调用Task_create()动态创建Task对象,<span style="color: black;">亦</span><span style="color: black;">能够</span>在配置中静态创建Task对象。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)动态和静态创建任务的<span style="color: black;">重点</span>区别是:动态创建的线程<span style="color: black;">能够</span>在运行时删除,而静态创建的任务占用更少的内存资源。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">7、程序流程设计</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">程序流程设计中<span style="color: black;">首要</span>要进行使能SD并配置SD设备驱动,接着初始化SD设备,检测SD卡的状态,注册SD卡的读写方式,<span style="color: black;">而后</span>在SD卡内创建PCM文件,打开MP3文件后初始化文件指针到<span style="color: black;">初始</span>点,接着初始化解码器数据结构并配置成解码模式,最后执行MP3文件解析,解码完成后卸载设备<span style="color: black;">就可</span>。</span></p>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/83dc4d1173214c7d840ac049b6eb1d9d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=QOGe647nFR3OEUSLkNDphOaC5as%3D" style="width: 50%; margin-bottom: 20px;"></div>
<h1 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">3、</span>操作现象</h1>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">1、实验设备</h1>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/be0f4b892cac40adb5dfa59753bace8c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=429PkdafDpy8okhHLwE84G0yzic%3D" style="width: 50%; margin-bottom: 20px;"></div>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">2、硬件连接</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)将工程目录下的song.mp3文件拷贝到SD卡后,把SD卡<span style="color: black;">插进</span>卡槽内。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)连接仿真器和电脑的USB接口。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。</span></p>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/9423e7fbdd53421cbe172ae4d11b2703~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=noGXteqKm%2BaQPRFUy6q3EZmlODw%3D" style="width: 50%; margin-bottom: 20px;"></div>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">3、软件操作</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">导入工程,<span style="color: black;">选取</span>Demo文件夹下的对应工程</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">编译工程,生成可执行文件</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">将CCS连接<span style="color: black;">研发</span>板并加载程序</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">点击运行程序</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">运行程序后,Console 窗口会打印信息,正在处理音频数据。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">大概等待1分钟,解码完成。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电<span style="color: black;">就可</span>。</span></p>
<div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/1acb438f94f94e61a9d4e68a77618496~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729696945&x-signature=eAIPQpn3z0SHB%2Bx8T8h3nQ%2BQ4ao%3D" style="width: 50%; margin-bottom: 20px;"></div>
页:
[1]