微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ADSP2189常用图像处理方法

基于ADSP2189常用图像处理方法

时间:06-02 来源:3721RD 点击:

乘法和896次加法,难以满足实时要求。因此人们研究了许多DCT的快速算法,如何选取一种适合ADSP结构的算法是提高运算速度的关键。计算DCT的快速算法大体上可以归纳为三类[3~6]:(1)间接计算法。利用FFT和Walsh-Hadamard变换计算DCT,这类算法包含许多多余的过程,降低了运算速度;(2)直接矩阵分解法。利用稀疏矩阵直接分解,使计算速度优于其它算法,仅需较少的乘法和加法,但需对余弦系数进行求反和除法,因而数值不稳定;(3)递归算法。Kashef提出的递归算法[4]需要计算N阶三角矩阵,而Hou[5]提出的算法不仅具有规则的递归结构,并且具有稳定的数值特性,适合于在DSP上实现,因为它通过少量的乘加运算就可实现DCT,并且对DSP的片内存储区占用少。这一算法的基本思想类似于Cooley- Tukey FFT算法,它用两个相同的低阶DCT来构成一个高阶DCT。以8点一维DCT为例,其信号流程图如图2所示。



由图2可以看出,利用这种方法计算8×8的DCT仅仅需要计算192次乘法和464次加法,计算量远远小于标准算法。由于算法的递归性以及对各行各列做同样的处理,所以将分解计算过程以子程序方式调用可以大大降低对存储区的要求。另外,如果采用"同址计算"的方式,即把运算结果放回到参加运算的输入数据的原存储地址,还可以节省存储空间。以8×8的数据块为例,应用这种算法的程序流程图如图3所示。


在Visual DSP++2.0环境下编译执行,可以得到8×8数据块快速算法和标准算法的指令周期数和执行时间,如表1所示。

很明显,采用快速算法将大大减少处理时间,因此对于实时图像处理选取合适的算法很重要。

在图像编码中,DCT本身并不减少数据。真正的数据量减少出现在将DCT的结果也就是DCT系数进行量化,量化后大部分系数接近于零,最后把经之字形扫描的系数进行熵编码,就达到了压缩效果。之字形扫描在ADSP2189上实现起来简单方便,因为对于8×8的数据块进行之字形扫描仅需要四个地址调整变量。而ADSP2189的数据内存和程序内存各有4个用于产生地址的指针寄存器,每个指针寄存器都可以被四个调整寄存器调整进行更新,即被I0~I3和M0~M3以任何组合进行调整,因此定义M0~M3分别为1、-7、7和8,就可以方便地进行之字扫描。在这个过程中,间接寻址和其它数值计算并行进行,因此不会增加指令执行时间和代码大小。所以在ADSP2189上实现JPEG编码,可以在量化的同时进行之字扫描,无需额外开销。

4 常见问题和解决方法

在ADSP218X上实现各种处理时,算法本身或者某型号的处理器会出现各种各样的问题,常见原因主要有:

(1)内存问题 对于ADSP218X系列处理器来讲,其主要区别就在于内部存储区大小的不同。但由于受内部总线的限制,无论程序存储区还是数据存储区每次只能处理16K,因此在编译程序的过程中,应预先估算一下占用内存的情况,以避免运行错误,尤其是C语言源程序在使用默认的LDF(Linker Description File)文件时很容易发生超出内存范围的情况。在Visual DSP编译环境下可利用MAP文件查看存储区的分配。由于DSP采用数据区与程序区分离的哈佛结构,所以可利用这一特点将较大的数据块放在不同的区域,充分利用片内资源。其次是采用原址运算,即输出变量和输入变量占用同样的存储区,从而节省空间,或者通过LDF文件使用内存重叠区。

(2)溢出问题 在ADSP2189中通常采用1.15数据格式,而它属于定点DSP,动态范围有限,两个1.15格式的数相乘后,结果字长变成了2.30格式,在多次相乘累加后,32位的MAC(乘加器)有可能溢出。如果用舍位方法使结果仍然保持为预定的位数,则会引入误差。多次舍位可能造成严重的误差积累。因此在存放运算结果的字长一定的情况下,需要防止计算结果特别是中间结果的溢出。如果这个溢出能够预期的话,可以预先确定运算的标度,即预先确定应空出的高位位数(称为预定标度)。预定标度防止了数据溢出,但是以丢失精度为代价的,同时这样又增加了运算量。为了保证结果不溢出,预先空出来的位数不仅与待处理数据有关,还与处理数据的函数和该函数的实现过程有关。在实际图像处理应用中,要从精度和溢出两方面综合考虑,选择一个最佳的定标方案,在保证不产生溢出的情况下尽量降低误差。另外还有一种输入溢出,此时输入值被截取为可表示数据的最大或最小值,从而使得输入失真。解决方法同样是对输入值进行预定标处理。

(3)量化效应 对于定点的处理器ADSP2189,量化效应对某些算法有较大影响。例如在数字滤波器的设计当中,传输函数的系数必须用固定长度的二进制表示,这样的量化处理就会引起量化误差

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

网站地图

Top