微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 常用图像处理方法在ADSP2189上的实现

常用图像处理方法在ADSP2189上的实现

时间:06-28 来源:互联网 点击:


由图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,量化效应对某些算法有较大影响。例如在数字滤波器的设计当中,传输函数的系数必须用固定长度的二进制表示,这样的量化处理就会引起量化误差,使得滤波器实际系数偏离原来设计系数,造成极零点位置偏离理论设计位置,从而使滤波性能变差。严重时极点移到单位圆上,破坏了滤波器的稳定性。因此在DSP上进行滤波处理时,应合理选择算法和运算字长。

(4)延时问题 当DSP需要对每个输入信号进行顺序处理时,输入信号频率就对处理器的执行速度提出了要求。通常的处理延时主要由DSP的速度和所执行算法的复杂程度来决定,也与外围逻辑及存储器件的时间特性有关。所以要想提高系统的实时性,必须选用高速的器件,并尽量简化处理算法。

从以上讨论可以看出,即使是很常用的算法,在DSP上的实现过程与在PC机上的实现过程也会有很大不同,如何针对不同的芯片选取合适的算法,充分利用各芯片所支持指令集是保证高速处理图像的关键。

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

网站地图

Top