微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 基于多任务嵌入式应用的MP3实时解码系统设计

基于多任务嵌入式应用的MP3实时解码系统设计

时间:12-22 来源:现代电子技术 点击:

在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实时播放功能。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top