完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1 引 言
MP3是目前世界上流行的音频格式之一,采用MPEG-1标准的Audio LayerⅢ压缩编码格式,具有高压缩率和保真度。MP3的解码功能大多以专用解码芯片的形式应用于多种消费类电子产品中。采用软解码的方式实现MP3实时播放功能可以充分利用硬件资源,节省芯片面积,有利于降低设计成本,同时软件方式可移植性好,解码质量可通过软件参数设定,具有更大的灵活性,便于系统升级。随着主流嵌入式微处理器ARM的处理能力越来越强,这种实现方式也已经成为众多嵌入式设计公司研究的焦点。 与专用解码芯片相比,采用软件方式实现MP3实时解码的瓶颈在于解码效率。在多任务嵌入式系统中,单个任务的执行效率以及任务间的调度方式将直接影响整个系统在一定硬件资源条件下的实时响应速度。因此,在多任务嵌入式系统中采用软解码方式实现MP3实时播放,必须通过优化算法提高解码效率,在保证实时性的基础上降低对硬件资源的要求。 2 设计思想 MP3解码需要经过大量的数据处理。首先对MP3数据流进行帧同步并解出头信息和边信息供解码主数据使用,之后对主数据依次进行霍夫曼解码、反量化、IMDCT以及子带合成滤波,最终输出PCM码流。整个解码过程如图1所示。对定点化开源解码程序各模块执行时间进行测试,找出关键耗时模块并对其采用改进型快速算法;在保证一定音质的前提下,根据解码运算特征降低运算精度,从而在基于ARM926EJ-S处理器开发平台上实现对MP3音乐(码率为192 kb/s,采样率为44.1 kHz,立体声编码模式)的解码;在实时播放方面,提出双Buffer轮换DMA传送的设计方案,为高效任务调度的实现提供有利条件。 3 系统实现过程 3.1 硬件系统 本文采用的嵌入式系统是以ARM926EJ-S处理器为核心的SoC开发平台,最高运行主频为190 MHz,支持ARMv5T指令集,存储器包括SDRAM和NAND FLASHROM,外围设备包括DMA控制器、中断控制器、USB控制器、UART、控制器、I2S控制器以及定时/计数器。整个硬件系统的架构如图2所示。 MP3文件和程序代码通过USB线下载并分别存放入NAND FLASH ROM和SDRAM;解码MP3文件得到的PCM码流送入I2S控制器输出;UART控制器可实现串口打印输出调试信息,跟踪程序运行状态;定时/计数器用于测试解码时间,对解码各个模块进行耗时分析。 3.2 代码移植 搭建好硬件平台后,对各硬件模块进行初始化,并加载文件系统,完成软件平台的搭建。将开源的MP3解码程序代码移植到软件平台上,这一过程主要是针对平台的文件系统,对文件读写函数进行替换,并将屏幕打印替换为串口打印操作。移植后的代码实现对MP3文件进行解码,并输出为PCM码流文件。利用CoolEdit对输出PCM码流文件进行测试播放,输出音质良好。 3.3 耗时分析 成功移植后,对代码进行耗时分析,找出耗时最大的功能模块,确定重点优化对象。该系统采用硬件定时/计数器作为测试工具,将计数器的计数频率调配为1 MHz,可实现1μs的测试精度。在ARM工作主频为150 MHz的条件下,对100帧MP3数据的解码过程进行耗时测试,测试结果如表1所示。根据表1测试数据可知,子带合成滤波占了整个解码时间的60%以上,是决定解码速度的最关键模块;其次是长块IMDCT运算,占了整个解码时间的10%以上。因此,子带合成滤波与长块IMDCT成为优化重点。 3.4 解码算法分析与优化 3.4.1 子带合成滤波算法优化 子带合成滤波是MP3解码过程中最耗时的关键流程,该解码系统采用Konstantinos Konstantinides提出的改进型算法对其进行优化。子带合成滤波的标准算法涉及从32值变换到64值的矩阵运算,Konstantinos Konstantinides提出的改进型算法将矩阵运算进行一系列变化,最终归结于32点DCT变换,而DCT变换有类似于FFT的快速算法(FCT),从而加速了整个子带合成滤波过程。由DCT变换到矩阵运算的转换过程如图3所示,其中S和V分别为矩阵运算的32点输入序列和64点输出序列,A,B均为16点矢量。 3.4.2 IMDCT算法优化 IMDCT采用Szu-Wei Lee提出的快速算法进行优化,该算法充分利用余弦函数的对称性,将N点IMDCT运算经过一系列变形,最终转化为N/4点的SDCT-Ⅱ运算,其转化流程如图4所示。对短块IMDCT使用该算法并没有带来较大的速度改善,故只对长块应用。相比于直接运算的648次乘法和612次加法,优化后的长块。IM-DCT运算量下降为43次乘法和115次加法。 3.4.3 低精度乘法 在ARM指令集中的乘法指令有2类:32 b×32 b→64 b长乘法指令(MULL,MLAL)和32 b×32 b→32 b短乘法指令(MUL,MLA),前者的指令周期为3+m,而后者为2+m。由于解码过程中,尤其是子带合成滤波过程,乘法指令使用非常频繁,如果能够使用短乘法指令进行乘法运算,将会大大提高系统性能。 该系统的定点运算过程采用Q28定点表示法,若采用长乘法指令运算,得到的64位结果中有效位只有第28~59位,低28位和高4位都是无用的,需要通过移位去除。根据解码过程中运算系数的定点表示特征,可以在乘法运算前预先对操作数进行移位,以便使编译器采用短乘法指令进行运算。在子带合成滤波过程中,定点化滤波系数的低12位均为0。根据这一特征,可将滤波系数预先右移14位再进行乘法运算,这一过程仅损失2位精度。另外,在子带滤波快速算法的DCT运算结果参加乘法运算前,预先右移12位,最后将子带滤波的输出结果右移2位。经过3次右移操作后的输出结果共降低16位精度,对于16位PCM输出刚好满足精度要求。 经过以上一系列优化处理后,主要解码耗时模块的改善情况如表2所示。 3.5 实时播放方案设计 该系统采用双Buffer轮换DMA传送的方案实现实时播放,整个播放流程如图5所示。其中n为解码当前帧的帧序号,第一帧序号为0;buffer0和buffer1分别用于存放当前播放帧的PCM数据和下一帧的PCM数据。DMA传送采用LLI传送方式,可实现将2个buffer存放的PCM数据轮换向I2S FIFO传送,因此只需在解码完第1帧后启动一次DMA传送。 该方案的实现原理是在一帧MP3数据解码时间远小于1帧PCM数据播放时间(采样率为44.1 kHz时,一帧PCM播放时间为26.1 ms)这一前提条件下,播放当前帧PCM数据的同时开始解码下一帧MP3数据。因此在解码完下一帧数据后,需要等待当前帧播放完毕,再继续解码。在图5中,这一等待过程采用的是查询DMA传送结束标志的方式,这使得CPU一直处于忙状态,白白消耗了系统资源。然而在多任务嵌入式系统中,这段等待时间恰恰是非常有利用价值的。MP3实时解码可以一个任务的形式存在于多任务系统中,将图5中的查询过程改为休眠MP3解码任务,同时将DMA中断打开,在中断服务程序中唤醒解码任务,那么在解码完毕下一帧后便可释放CPU资源,将DMA中断发生前的这段等待时间用于调度其他进程,例如JPEG解码任务和GUI任务,从而实现播放音乐、播放图片和用户操作3者的高效协同工作。 4 结 语 本文给出的MP3实时解码系统在基于ARM926EJ-S核心的SoC硬件平台上,对MP3解码算法和实时播放方案进行优化设计。实验结果证明,该系统可在处理器主频仅为36 MHz的条件下流畅播放MP3音乐(码率为192 kb/s),可嵌入数码相框、MP4等产品中实现MP3实时播放功能。 |
|
|
|
只有小组成员才能发言,加入小组>>
663 浏览 0 评论
1083 浏览 1 评论
2454 浏览 5 评论
2783 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2618 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
639浏览 9评论
636浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
766浏览 6评论
610浏览 5评论
651浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 12:33 , Processed in 1.119012 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号