首页 > 其他分享 >国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验

时间:2023-11-03 15:32:48浏览次数:35  
标签:文件 教学实验 解码 任务 实验 mp3 SD 音频 MP3

一、实验目的

了解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的开头,长度可变。

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_初始化

4、音频数据解析

每个帧都有一个帧头,长度是四个字节,帧后面可能有2字节的CRC校验,取决于帧头的第16位,为0则无校验,为1则有校验,后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_数据_02

5、libmp3lame库

lame是一个有名的开源MP3编解码库,使用lame库只需要包含lame.h头文件。

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_SYS_03

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文件解析,解码完成后卸载设备即可。

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_SYS_04

三、操作现象

1、实验设备

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_SYS_05

2、硬件连接

(1)将工程目录下的song.mp3文件拷贝到SD卡后,把SD卡插入卡槽内。

(2)连接仿真器和电脑的USB接口。

(3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_初始化_06

3、软件操作

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接开发板并加载程序

点击运行程序

运行程序后,Console 窗口会打印信息,正在处理音频数据。

大概等待1分钟,解码完成。

实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电即可。

国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验_初始化_07

标签:文件,教学实验,解码,任务,实验,mp3,SD,音频,MP3
From: https://blog.51cto.com/u_16123606/8171607

相关文章

  • 实验三
     #include<stdio.h>intfunc(intn,intm);intmain(){intn,m;while(scanf("%d%d",&n,&m)!=EOF)printf("n=%d,m=%d,ans=%d\n",n,m,func(n,m));return0;}intfunc(intn,intm){if(n<m)......
  • JVM 调优实验
    JVM调优理论前言关于性能优化Therealproblemisthatprogrammershavespentfartoomuchtimeworryingaboutefficiencyinthewrongplacesandatthewrongtimes;prematureoptimizationistherootofallevil(oratleastmostofit)inprogramming.—D......
  • Linux 实验
    知识补充框架设计Linux操作可以分为本地操作和网络操作,操作对象主要是文件和目录,根据上述分类设计框架如下本地操作基础指令:系统一般内置目录目录切换:cd增删改查mkdirrmdir权限管理:chmodchmod命令的具体用法如下:chmod[选项]模式文件其中,模式是......
  • 操作系统实验——进程管理的算法实现
    前言笔者在大学下属的事业单位上班,最近去帮着带下操作系统的实验课,这里随手水点参考代码,欢迎各位领导老师莅临指正实验目标编写一个简单的进程调度器实验内容进程控制块(PCB)的定义与管理进程调度算法的实现进程创建、销毁和切换给定一批进程对比3-4种调度算法的时间(自选算......
  • 【单片机】I/O口实验
    要求:拨动开关,让所亮小灯位置左移或者右移#include<STC8.H>#include<intrins.h>voiddelay(){ inti,j; for(i=0;i<1000;i++){ for(j=0;j<1000;j++); }}charmove_left(charvalue,intnumber){ value=_crol_(value,number); returnvalue; }charmov......
  • 0. 实验工具准备以及后续实验目的
    该系列课程需要使用到RISC-V(极简指令集)版本的四个工具:1.QEMU5.1+2.GDB8.3+3.GCC4.Binutils下面逐个介绍这四个工具。GCCGNUCompilerCollections,GNU系统中的编译器套件。GDBGNUDebugger,GNU系统中的调试器。QEMU开源的硬件虚拟化仿真器(Emulator)。是一个托管的虚......
  • 实验3 类与数组、指针
    实验任务1Point.hpp源码1#pragmaonce23#include<iostream>4usingstd::cout;5usingstd::endl;67classPoint{8public:9Point(intx0=0,inty0=0);10~Point()=default;1112intget_x()const;13intget_y()c......
  • 实验3
    #include<stdio.h>longlongfunc(intn);//函数声明intmain(){intn;longlongf;while(scanf("%d",&n)!=EOF){f=func(n);//函数调用printf("n=%d,f=%lld\n",n,f);}return0;}longlongfunc(int......
  • 作战实验与兵棋推演的区别有哪些呢
    智慧华盛恒辉作战实验和兵棋推演在以下五个方面存在区别:目的:作战实验的目的是通过实际作战来检验和完善作战理论和计划,积累实践中的数据和经验,以改进指挥和控制能力,更好地应对实际情况。1:华盛恒辉科技有限公司上榜理由:华盛恒辉是一家专注于高端软件定制开发服务和......
  • 实验三
    task.11#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);//函数声明8voidprint_spaces(intn);//函数声明9voidprin......