基于Blackfin561的JPEG2000压缩算法实现
362组成,可以实现系统和PC机的互连。FLASH用来存放加载文件LDR。
4 JPEG2000算法移植
如果用户导入的Blackfin处理器的C代码能够兼容ANSI C语言,那么,就能直接在Blackfin上进行构建并执行这个"现成的"代码程序。但是结合嵌入式应用环境,移植时还需注意以下几点:
首先要注意不同的平台对数据类型的长度定义可能是不一样的。在程序移植中可以对数据类型使用typedef宏进行定义,如"typedef intINT32;"这样便于移植时更改。
其次,因为嵌入式系统中的存储空间有限,而且是分级的,且不同级别的处理器大小和运算速度均不同。因此,在定义变量时需要考虑其存放地址。通过section("存储器段名")语句可以将变量和代码放入指定地址。其中"存储器段名"可在ldf件中设置。
第三为了程序调用方便,PC平台下的C程序会经常使用大量的动态内存分配(如calloc、realloc、new等)。考虑到嵌入式系统的特点,即需要不停的循环处理,因此,应该用静态数组代替动态内存分配。这样不仅可以避免动态内存分配造成的内存碎片问题,同时存储结构也更加清楚明了。
此外,由于源程序中有许多文件操作,而嵌入式系统并不直接支持文件操作,所以应予以剔除,用读写数组的方式来替代。
最后应注意Visual DSP++兼容的C语言库函数。由于它不能识别<malloc.h>等库文件名称,而calloc、malloc等动态内存分配函数均包含在<stdlib.h>中。所以,若要使用malloc,只需在程序中包入<stdlib.h>即可。注意以上几点,C语言源程序就可以在VisualDSP++下运行,从而实现其功能了。
5 程序优化
由于移植后的算法只是简单的实现了图像编码功能,而远不能保证其实时性,因而需要对其进行优化。优化主要涉及浮点转定点运算、代码优化和存储器优化。
5.1 浮点运算转定点运算
Blackfin处理器是一款定点处理器。该处理器本身并不支持float、double等浮点数据类型,而只能通过仿真实现,所以,用Blackfln直接进行浮点运算是很费时的。因而应将小波变换及其它涉及浮点运算的模块全部定点化。
可以将浮点系数乘以一个尺度因子,使其变换成整数。然后在运算过程中再除以尺度因子,这样就避免了浮点操作。同时,Blackfin处理器是针对小数形式进行优化设计的,它提供了大量的运算指令,可以快速的执行定点和小数运算。若用汇编编写,则可以充分发挥处理器的性能,优化幅度更大。下面给出小波变换定点化的一段程序:
5.2 代码优化
设计时可以结合具体的硬件环境对代码本身做出大量优化,以使得编译器能够充分的使用硬件循环、软件流水化、矢量化等技术。但是,也应注意一下几个方面:
首先,因为循环是程序中时间消耗最大的部分,所以要把主要精力集中在循环程序的设计上。应尽量使用短循环;避免循环执行的依赖性;确保内部循环次数比外部的多;在循环中应避免条件代码,否则会出现大量控制流延迟;在循环体中不要放函数调用语句,这样会妨碍编译器用硬件循环结构。
其次,定点处理器本身不直接支持除法操作,所以,应该尽量避免除法。如"if(X/Y>A/B)"可以写成"if(X*B>A*Y)"。通过移位操作同样可以避免除法,如除以8可以用左移3位来代替。最后,通过查询表的方法也可以避免一些复杂运算。
5.3 存储器优化
Blackfin56l中的存储器采用分层结构,距离核最近的Ll存储器运行速度最快,但容量很小。因此需要对图像数据进行合理的存储器资源分配,以使得绝大多数操作都集中在L1存储器。下面以小波变换为例来进行说明。
本系统中待处理的图像位于SDRAM中。图3所示是DMA双缓冲操作示意图,DMA优化的总体思想是以一行图像数据为基本单位,然后通过DMA把要处理的数据转移到Ll,实现数据的高效处理。传输可采用双缓冲乒乓操作,这样可避免DMA传输数据所耗费的时间。
为了验证JPEG2000编码器在BF56l上移植和优化后的效果,我们对一幅512x512x8bit图像进行测试并给出了相关数据。表l所列为16倍压缩率下优化前后的数据对比。
6 结束语
JPEG2000是新一代图像压缩国际标准。本设计可实现JPEG2000图像压缩算法在DSP上的移植和优化,压缩后的图像具有较高的信噪比。同时经过优化,其编码器的运算速度也得到了很大的提高,可以满足实际应用的需要。最后的结果。所以,为了在高频输入时,系统也能正常工作,可以把CA3140替换成高频特性比较好的LM616l,这样可以提高系统的高频特性。
Blackfin561 JPEG2000 压缩算法 相关文章:
- 基于ADSP-BF561处理器的视频编码器平台(01-16)
- 基于Blackfin561的嵌入式车牌识别系统(10-08)
- JPEG2000核心算法的研究及DSP实现(05-23)
- 基于JPEG2000小波提升在DSP上的缓存管理(05-14)
- 基于ADV202的嵌入式视频压缩系统设计(07-10)
- 基于FPGA的JPEG2000数据压缩实现(04-04)