利用TMS320C6201芯片进行图像压缩
时钟周期数=48+160*num_fdcts;
要在自己的工程中使用这个函数,必须把img62x.lib函数库添加到工程中,并且在主程序文件中包含fdct_8×8.h头文件。
3.2.2.2 标量量化
所谓标量量化就是对8×8图像块的DCT变换系数使用量化表逐个相除并四舍五入。CCS2.0提供了一个量化函数,其原型如下:
void quantize
(
short *data, /* Data to be quantized. */
int num_blks, /*Number of 64-element blocks.?*/
int blk_size, /*Block size (multiple of 8). */
const short *recip_tbl, /*Quant. values (reciprocals). */
int q_pt /*Q-point of Quant values.*/
);
将图4(b)所示的量化表元素代入程序,blk_size为64,q_pt为16,data指向量化数据,即可进行快速的量化。该程序同样经过了优化,具体的程序开销可按如下公式计算:
时钟周期数= 25+(blk_size/16)*4+num_blks*12)
该函数同样包含在img62x.lib库中,
程序中应包含quantize.h头文件。
3.2.2.3 ZigZag扫描
ZigZag扫描就是对数据进行重排列。该部分功能简单、运算量也不大,但是对存储器的访问非常频繁,而且影响处理器执行速度的主要是对存储器的访问速度。一般情况下,CPU访问内部存储器需要4个时钟周期,访问外部存储器的速度要比内部存储器的速度慢得多,具体情况应根据实际使用的外部存储器的类型而定。由于TMS3206201 DSP芯片每秒钟最多可以执行8条指令,如果让DSP芯片经常处于等待状态是非常大的浪费。解决该问题的最有效的办法是充分利用数据总线的宽度并让软件进行流水线执行。TMS320C6201的数据总线宽度是32位,一般情况下DCT系数使用一个短整型数,只有16位宽度,如果每次同时从存储器中读写两个数,则可以减少一半访问存储器的次数。由于TMS320C6201有8个功能单元,CPU可以在处理当前数据的同时去存储器取下一个数据。通过流水线,CPU可以做到每周期访问一次存储器,这样可以使程序的执行效率大大提高。一般情况下软件的流水线安排是由编译优化系统完成的,程序员所要做的是让自己的程序符合流水线执行的要求,并且让优化后的流水线周期尽量短。流水线的要求主要有以下几点:
(1)程序所使用的寄存器数目不能超过32个;
(2)程序所使用的条件寄存器数目不能超过5个;
(3)程序中不能含有分支语句,可能的话尽量使用条
《利用TMS320C6201芯片进行图像压缩(第4页)》