基于S3C2410处理器的的MP3设计.docx
《基于S3C2410处理器的的MP3设计.docx》由会员分享,可在线阅读,更多相关《基于S3C2410处理器的的MP3设计.docx(8页珍藏版)》请在冰豆网上搜索。
基于S3C2410处理器的的MP3设计
一、引言4
二、MP3编码和解码原理4
2.1、MP3编码原理5
2.1.1、滤波器段5
2.1.2、神经听觉模型6
2.1.3、量化和编码7
2.2、MP3解码原理7
三、MP3的设计与实现8
3.1、硬件设计9
3.1.1、SDRAM10
3.1.2、FLASH10
3.1.3、输出电路11
3.2、软件设计12
3.2.1、驱动程序基础12
3.2.2、UDA1341声卡驱动程序13
3.2.3、Madplay播放软件13
四、参考文献14
基于S3C2410处理器的的MP3设计
摘要:
设计一种基于S3C2410的MP3播放器。
该播放器是基于嵌入式linux操作系统、应用S3C2410为平台。
详细介绍了MP3编码和解码的原理、设计及实现过程。
由于采用的是嵌入式linux实现的,该种MP3播放器可以很容易地移植到其他微控制器系统中,使设备兼具MP3播放功能的设备。
关键字:
嵌入式linux;MP3;编码和解码原理;设计及实现
一、引言
MP3(MPEGAudioLayer-3)是一种数字音频压缩技术,数字压缩速率达到每通道128kbps,数比例可以达到12:
1。
MP3播放器的主要作用就是解压压缩的MP3数字音频,再现MP3音乐,同时为携带方便还要能存贮MP3文件,MP3歌曲可以从电脑上下载。
MP3播放器主要由MP3文件解码部分、文件存贮部分、文件下载接口和语音播放部分构成。
根据解码的方法播放器可分为软解码和硬解码两种:
软解码是利用控制软件解压缩MP3文件,它要求控制器处理速度要快。
MPEG-1音频标准是一个普遍适用的音频压缩标准,它对音频源没有任何要求。
它利用人耳听觉系统的感知特性,压缩率的取得来自去掉人耳听不到的信息细节,虽然压缩是有失真的,但对人耳来说这些失真是听不到的。
也即对人耳而言,MPEG-1音频压缩是不失真的。
因此,MPEG-1音频标准的应用非常广泛。
二、MP3编码和解码原理
音频压缩由编码和解码两个部分组成。
把波形文件里的数字音频数据转换为高度压缩的形式(称为比特流)即为编码;要解码则把比特流重建为波形文件。
2.1MP3编码原理
图1
MP3是MPEG-1音频标准中的LayerIII的简称,它基于感知音频编码,结合了MUSICAM(掩蔽模式通用子带集成编码与多路复用)算法和ASPEC(自适应频谱感知熵编码)算法的优势,利用人耳的听觉特性,在保证高品质的音响效果的前提下,可以把原始的音乐数据压缩为原来的十二分之一,目标编码速率为声道,适合于网络上音频数据64kbps的传输。
数字音频采样通过由两个滤波器组成的滤波器组输入到心理声学模型中,由心理声学模型的输出控制音频屏蔽等参数,最终通过量化和霍夫曼Huffman)编码得到输出的比特流。
2.1.1滤波器段
数字音频信号以脉冲的形式送进编码器,首先会经过一滤波器段(filterbank),它由两个串联的滤波器段组成:
一个多相分析滤波器段和一个MDCT(ModifiedDiscreteCosineTransform,经改良的离散余弦转换),前者也应用到layer-1和layer-2中,后者是MP3独有的。
输入的音频信号在20Hz-20kHz的频率范围内,通过第一个滤波器段后,把信号按频率分成32个小频带,称为子带(Subband)。
20000Hz/32=625Hz,那么每个子带的宽度就是625Hz。
人耳对不同频段的灵敏度是不同的,编码器可对不同的子带进行不同的量化分层。
不过等宽的子带并没有准确反映人耳的听觉特性,这样进行等宽划分并没有考虑到不同信号的临界宽度,也就是该信号的影响范围,以及不同信号的相互影响,所以这样会产生大量的信号重叠。
MDCT转换就是为了解决这问题,它能对子带进行细分,清楚重叠部分,得到更高的频谱解析度。
2.1.2神经听觉模型
神经听觉模型可以说是感受编码的重中之中,它决定着编码器的编码质量。
最主要的原因是它采用了声音心理模型来模拟人耳的听觉,利用人耳听觉感知上的遮蔽效应所得到的遮噪门槛曲线,决定各个子频带所容许的最大量化误差,使得了量化后的失真能被听见。
声音心理模有两种,其中第一声音心理模型比较简单,适用于高传输率;第二声音心理模型比较复杂,在较低的传输率的情况下,也能维持声音的品质。
此两模型皆先将音讯经傅里叶频谱变换,在对映射到临界频带,并区分出单频以及非单频成分,依其所在的频率位置与强度大小,分别计算遮噪门槛曲线,而整合成整体遮噪门槛曲线,并对映成每个子频带信号编码时所需的位元素。
2.1.3量化和编码
当PCM讯号被分成好几个频段并经过一系列的处理后,最后经过MDCT,将波型转换为一连串的系数。
这些系数就由Huffman编码器会选择最合适的Huffman表来做最后的压缩。
Huffman编码一般是双路工作的,但是在某些需要精密编码的情况下,它会进行四路工作。
编码器一般会有很多的Huffman编码表,很多时候为了更好的声音质量和更有效屏蔽量化噪音,编码器甚至能为每一个频段选择最合适的Huffman编码表。
不过编码不是一次就能成功的,要采取TryandError的方式循环进行。
因为编码器一方面要削减量化噪音,让它在人耳遮蔽曲线以下;另一方面要保证bitrate满足要求。
所以两个回路是嵌套工作的,互相协调,中止条件是量化噪音降到屏蔽临界线以下而码率也足够小。
良好的编码器会让两个回路有条不紊的工作,因为一旦处理不好就很容易陷入死循环。
2.2MP3解码原理
对于一个MP3文件的解码,本质上就是循环地对每一个Frame进行解码,直到完成所有Frame的解码,或者中途出现错误而中止。
MP3文件的解码流程如图2所示。
而对于每一帧的解码,首先是要获取每一帧的同步字符和帧头信息,从而获得相应的参数,并根据对帧头信息的分析进而得到实际一帧的音频数据;然后读取主要数据并获得缩放因子数据和霍夫曼码字,接着进行霍夫曼解码;其次进行反量化,并根据帧头的立体声信息对反量化结果进行立体声处理;最后通过混迭处理、IMDCT和合成滤波器重建数字音频信号,这一程如图3所示。
图2图3
MP3文件解码播放的简化流程可用图4表示。
图4解码播放简化流程
由图4可知,MP3文件或者其它音频文件,经过解码库(解码器)的解码,生成PCM数据,然后将PCM数据写入声卡设备,即可实现音频文件的播放。
三、MP3的设计与实现
一个完整MP3播放机要分几个部分:
中央处理器、解码器(软件解码)、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键。
其中中央处理器和解码器是整个系统的核心。
这里的中央处理器我们通常称为cpu(微处理器)。
它运行MP3的整个控制程序,也称为fireware(或者固件程序)。
控制MP3的各个部件的工作:
从存储设备读取数据送到解码器(软件解码)解码;与主机连接时完成与主机的数据交换;接收控制按键的操作,显示系统运行状态等任务。
MP3播放机是软件解码,由高速中央处理器完成。
它可以直接完成各种格式MP3数据流的解码操作,并输出PCM或I2S格式的数字音频信号。
图5系统总体结构图
3.1硬件设计
处理器:
硬件电路以处理器为中心。
Samsung公司的ARM9处理器———S3C2410X,是一款基于ARM920T内核的16位/32位RISC嵌入式处理器。
ARM920T核由ARM9TDMI、存储管理单元(MMU)和高速缓存三部分组成。
其中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。
S3C2410芯片集成了大量的功能单元。
3.1.1SDRAM
随机存取存储器RAM(RandomAccessMemory)是易失性的存储器,在掉电以后数据即消失,不能长期保存。
但与ROM器件不同的是,它的随机读写速度非常快,写入数据之前也不需要进行擦除,常用的RAM分为SRAM(静态RAM)和DRAM(动态RAM),我们这里采用SDRAM(同步动态RAM),S3C2410X芯片本身提供对SDRAM进行直接接口的解决方案,因此不需要通过编程来实现它们所需的接口时序,而只须对与存储器控制器相应的寄存器进行适当配置。
SDRAM是多bank结构,例如在一个具有两个bank的SDRAM的模组中,其中个bank在进行预充电期间,另一个bank却可以马上被读取,这样当进行一次读取后,又马上去读取已经预充电bank的数据时,就无需等待而是可以直接读取了。
这也就大大提高了存储器的访问速度。
具体芯片采用现代HY57V641620,分成4个Bank,每个Bank的容量为1M×16位。
Bank的地址由BA1,BA0决定,00对应Bank0,01对应Bank1,10对应Bank2,11对应Bank3。
在每个Bank中,分别用行地址脉冲选通RAS和列地址脉冲选通CAS进行寻址。
3.1.2FLASH
NOR和NAND是目前市场上两种主要的非易失散存技。
Nor-flash存储器的容较小、写入速度慢,但其随即读取速度快,因此在嵌入式系统中,常应用在程序代码的存储中。
另外,Nor-flash存储器的内部结构决定了它不适合朝大容量方向发展;而Nand-flash存储器结构能提供极高的单元密度,可以达到很大的存储容量,并且写入和擦除速度也很快。
Nand-flash存储器内部采用非线性宏单元模式,为固态大容量存储器的实现提供了廉价有效的解决方案,因而现在得到了越来越广泛的应用。
例如体积小巧的U盘就是采用Nand-flash存储器。
在这里我们也采用Nand-flashK9F2808U。
3.1.3输出电路
UDA1341是飞利浦公司的一款经济型音频CODEC,用于实现模拟音频信号的采集(音频AD)和数字音频信号的模拟输出(DA),并通过IIS数字音频接口,实现音频信号的数字化出理。
UDA1341的IIS引脚分别接到S3C2410对应的IIS引脚上,音频输入输出(VIN,VOUT)分别和麦克风扬声器连接;UDA1341的L3接口相当于一个Mixer控制器接口,可以用来控制输入/输出音频信号的音量大小,低音等。
L3接口的引脚L3MODE,L3DATA和L3CLOCK分别链接到S3C2410的IICSCL,IICSDA和GPF6引脚上。
3.2软件设计
我们选择在此MP3播放器上运行arm-Linux操作系统。
嵌入式Linux系统从软件角度来可以分为5个层次:
(1)引导加载程序,固化固件中的启动代码和Bootloader两大部分。
(2)内核特定于具体硬件的定制内核以及控制内核引导系统的参数。
(3)文件系统包括根文件和建立于Flash存储器设备上的文件系统。
(4)UDA1341声卡驱动程序。
这个驱动主要涉及S3C2410DMA的使用。
(5)用户应用程序。
特定于用户的应用程序。
对于本系统来说就是播放程序。
3.2.1驱动程序基础
Linux设备驱动程序将设备看成文件。
设备驱动程序是操作系统内核和机器硬件之间的接口。
设备驱动程序为应用程序屏蔽了硬件的细节,这样使硬件对应用程序来说是透明的,在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。
设备驱动程序是嵌入式Linux内核的一部分,它完成以下的功能:
(1)对硬件设备初始化和释放。
(2)把数据从内核传送到硬件,或从硬件读取数据。
(3)读取应用程序给设备文件的数据和回送应用程序请求的数据。
(4)检测和处理设备出现的错误和异常。
用户进程通过设备文件实现与硬件的交流。
Linux给每个设备都分配一个主设备号(MajorNumber)和次设备号(MinorNumber)。
主设备号一般用来定义这个设备的类型,次设备号是一个8位的数字,它指定一个特定的设备。
设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。
3.2.2UDA1341声卡驱动程序
该音频系统采用的音频设备是Philips公司的UDA1341TS芯片。
UDA1341支持IIS总线数据格式,采用位元流转换技术进行信号处理,完成声音信号的模数转换,具有可编程增益放大器和数字自动增益控制器,其低功耗、低电压的特点使其非常适合用于MP3、笔记本电脑等便携式设备。
驱动程序主要包括几个模块:
设备的初始化和卸载、内存和DMA缓存区的设置、声音的播放和录制、其它相关控制,当然也包含相关的实现功能函数。
UDA1341音频芯片提供如下功能数字化音频。
这个功能有时被称为DSP或Codec设备。
其功能是实现播放数字化声音文件(数字信号转变为模拟信号)或录制声音(模拟信号转变为数字信号)。
混频器。
用来控制各种输入输出的音量大小,在本系统中对应L3接口。
数字音频设备(audio)、混频器(mixer)对应的设备文件分别是/dev/dsp和/dev/mixer。
3.2.3Madplay播放软件
播放MP3的软件我们选用MAD(MPEGAudioDecoder),MAD是一个高品质的MPEG音频解码软件,能够输出24-bit的音频,完全是定点计算,非常适合没有浮点支持的平台上使用。
它现在支持MPEG-1和MPEG-2扩展到低频采样的部分,以及实际的MPEG-2.5格式。
所以三个音频层——LayerI,LayerⅡ,和LayerⅢ(也就是MP3)被完全实现。
MAD还不支持MPEG-2多波段音频,并且现在还不支持AAC。
MAD具有以下特点:
24位的PCM输出;100%的定点(整数)计算;基于ISO/IEC标准的全新实现。
在GPL协议下可用MAD提供完全24位的PCM输出,所以使用MAD的应用程序能够产生高品质的音频。
即使输出设备仅支持16位PCM,应用程序也能够利用额外的分辨率来增加动态音频的范围。
MAD运用整数运算而不是浮点运算,这使得它能够很好地适应没有浮点处理单元的体系结构。
所有的计算都是由32位定点整数表示执行的。
对于我们的MP3而言,想要运行MAD,必须进行交叉编译,生成ARM体系结构的可执行代码,要进行交叉编译,我们要编写为交叉编译准备的配置脚本,然运行配置脚本,最后交叉编译,然后下载到板子上就可以运行了。
四、参考文献
【1】宋宝华Linux设备驱动开发详解。
人民邮电出版社
【2】孙天泽,袁文菊嵌入式设计及Linux驱动开发指南(第二版)。
电子工业出版社
【3】刘淼嵌入式系统接口设计与Linux驱动程序开发。
北京航天航空大学出版社
【4】赵炯Linux内核完全剖析机械工业出版社
【5】韦东山嵌入式Linux应用开发完全手册人民邮电出版社
【6】李善平,施韦,林欣.Linux教程.北京:
清华大学出版社,2005.
【7】王道乾,刘定智,文俊浩.基于ARM处理器的MP3播放器分析与实现,计算机工程与计,2007
【8】李亚锋,欧文盛.ARM嵌入式Linux系统开发从入门到精通.北京:
清华大学出版社,2007.
【9】徐睿,李斐,王申康.基于IIS总线的嵌入式音频系统设计.计算机应用,2004
【10】高建华,王姝.基于S3C2410型微处理器和UDA1341型立体声音频编解码器的嵌入式音频系统设计.国外电子元器件,2006