新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM946E处理器的MP3解码优化设计

基于ARM946E处理器的MP3解码优化设计

作者:时间:2009-05-21来源:网络收藏

根据硬件特点,对实时性要求较高的关键程序进行C语言和ARM级代码
4.1 减计数循环体
IMDCT和子带合成滤波器组2个运算量最大部分中有多个循环体运算,为了提高执行效率,推荐使用减计数循环体。
如表3所示,对于固定次数的循环,减计数循环比增计数循环速度快。这是因为每次增计数循环体外加3条指令,而减计数循环体外只有2条指令,减循环终止条件为减计数到零,而不是计数增加到某个特定的限制值。由于减计数结果已存储在指令条件标志里,省去与零比较指令。

本文引用地址:http://www.eepw.com.cn/article/152480.htm

4.2 和内嵌
算法中定点化乘法都是通过函数调用来实现,每次调用需要开销23~28个时钟周期,其中超过15个周期用于函数调用时PC指针以及寄存器压栈保护上。采用方式(使用关键字_inline声明)或宏指令,在编译阶段代码段将被直接展开。另外armcc编译器允许在C源程序中使用内嵌(但代码可移植性差),使用包括汇编的内嵌函数,可以使编译器支持通常不能有效使用的ARM指令和方法,例如C编译器不支持的ARM v5E扩展指令。使用结合内嵌汇编实现移位乘法,可使平均时钟周期缩短为6~8个。
4.3 ARM DSP扩展指令的运用
支持ARMDSP扩展指令,主要包括3个类型:
(1)单周期的16×16和32×16 MAC操作;
(2)对原有的算术运算指令增加了饱和处理扩展;
(3)前导零(CLZ)运算指令,提高归一化、浮点运算以及除法操作的性能。
ARM不支持浮点运算,经过测试及分析,定点运算中数值的截断误差选择为28 b,其可以达到较好的音质,不会因为爆音过多而影响播放效果。
完成类似的乘法功能,ARM的SMULL(32×32)指令需要3个周期,而ARMDSP扩展指令SMULWT(32×16)只需要1个周期。从数据的准确性上分析,由于乘数的精度为16 b,最终结果有些差异,但由于运算都是28 b的定点数值的,所以通常的运算都是一个运算结果跟某一个固定定点表中的数据相乘的。若选择固定定点表中数据的高16 b数据进行运算,运算的结果误差在1 b以内。
为了验证使用ARMDSP扩展指令的效果,在系统120 MHz主频下,以128 Kb/s的压缩速率进行编码测试,采用的测试文件如表4所示。

上述3个测试文件的比特率均为128 Kb/s,使用这三首MP3歌曲进行解码分析结果如图3所示。

实验表明,使用ARMDSP扩展指令比使用ARM一般指令解码性能平均提高17.5%,主观听觉上音质效果无差异。


5 结 语
这里充分利用处理器的DSP扩展指令特点提高程序代码的执行效率,对3个关键模块:Huff-man解码,IMDCT运算,合成子带滤波进行算法优化及简化处理,减少了各模块的运算量,同时从C语言和ARM汇编层次来优化代码,取得了较好的实时MP3解码效果。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭