DSP 图像处理算法的实现III.docx
《DSP 图像处理算法的实现III.docx》由会员分享,可在线阅读,更多相关《DSP 图像处理算法的实现III.docx(30页珍藏版)》请在冰点文库上搜索。
DSP图像处理算法的实现III
本科毕业论文
(科研训练、毕业设计)
题目:
DSP图像处理算法的实现-III
姓名:
翁彬彬
学院:
信息技术与科学学院系:
电子工程系
专业:
电子信息工程专业年级:
2004
学号:
04140059
指导教师(校内):
杨涛职称:
教授指导教师(校外):
职称:
2008年5月20日
1
摘要本文研究的是基于TI公司DSP硬件平台的数字图像处理技术。
考
虑到可移植性,采用C语言编写代码。
采用空域法设计图像处理的算法,所涉及运算包括卷积,相关,中值滤波等。
由于图像处理要处理大量的数据,需用DSP处理器来提高效率。
TMS320C6000系列DSP是TI公司最新推出的一种并行处理的数字信号处理器,其特有的代码优化器也使得C优化更加方便。
我们根据TMS320C6000系列的结构特点,对C代码进行一系列优化,例如:
选用适当的编译器选项,内联函数的使用,字处理技术,打开循环,流水线技术,线性汇编等一系列方法对C代码进行优化,从而极大地提高了数字图像处理的工作效率。
关键字数字图像处理TMS320C6000系列DSPC语言优化
Abstract:
Inthisthesis,basedontheDSPhardwareplatformofTICo.,thealgorithmsofdigitalimageprocessingwerestudied.Clanguagewasusedtoprogramthesealgorithmsforthepurposeofmaximizingtheportabilityofprogrammodules.Thesealgorithms,whichincludeconvolutions,correlationsandmediumfilters,weredesignedbasedonspatialpatterns.Tomakereal-timeimageprocessingpossible,DSPprocessorsareusedtoprocessthemassivedatainimages.TheTMS320C6000DSPsfromTICo.areparalleldigitalimageprocessors,ofwhichtheC-compliermakesthecompilationandoptimizationof
C-codesseamlessandhighlyefficient.TheC-codeoptimizationwashighlyimprovedbasedontheuniquedesigningfeaturesofTMS320C6000series,suchasproperchoicesofcompilingoptions,theutilityofintrinsics,thewordprocessingtechnology,loopopening,pipelinetechnologies,linearassemblyandetc.
Keywords:
DigitalimageprocessingtechnologyTMS320C6000Ccodeoptimization
2
目录:
引言…………………………………………………………………….4第一章数字图像处理的基本知识............................4
1.1数字图像处理简述…………………………………………………4
1.2几种处理算法………………………………………………………4
第二章TMS320C6000DSP芯片的特点..........................6
2.1数字信号处理器的特点…………………………………………..6
2.2TMS320C6000的硬件结构简介……………………………...…..7
2.3TMS320C6000指令系统………………………………………...10.
第三章基于TMS320C6000DSP系列的代码优化…………………..…….11
3.1第一个阶段代码优化…………………………………………….….11
3.2第二个阶段代码优化…………………………………………….….13
3.3第三个阶段代码优化…………………………………………….….17
第四章对所编C代码进行优化处理......................................................20
4.1小循环的打开………………………………………………….......20
4.2较大循环的打开………………………………………………21
结论................................................................................................................22致谢语……………………………………………………..……………………….24参考文献………………………………………………….……………………….24
3
随着计算机技术的发展,数字图像处理技术以其广阔的应用领域,受到人们
越来越多的关注,本次实验是以DSP为平台,对数字图像处理系统进行仿真。
由于图像处理需要处理大量的数据,并且对运算速度提出了很高的要求,因此我们选用DSP平台,并根据它的结构特点,对所编的C代码进行了优化,极大地提高了运算速度
第一章数字图像处理的基本知识
第一节数字图像处理的概述
数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指利用计算机和其它高速、大规模集成数字硬件,对从图像信息转换来的数字电信号进行某些数字运算或处理,以期提高图像的质量或达到人们所预想的结果。
数字图像处理方法大致可分为两大类,即空域法和变换域法。
1、空域法这种方法是把图像看作是平面中各个像素组成的集合,然后直接对这一二维
函数进行相应的处理。
空域处理法主要有下面两大类。
(1)领域处理法包括梯度运算、拉普拉斯算子运算、平滑算子运算和卷积运
算。
(2)点处理法包括灰度处理及面积、周长、体积、重心运算等。
2、变换域法数字图像处理的变换域处理方法是首先对图像进行正交变换,得到变换域系
数阵列,然后施行各种处理,处理后再反变换到空间域,得到处理结果。
在我们的设计中采用的是空域法中的域处理法.
第二节几种图像处理算法的介绍
对于一张数字图像,我们采用RGB模式真彩色位图来表示它,一张图像由
4
像素矩阵构成,每个像素包含它对应的位置信息,以及RGB三个通道各自亮度
值的大小,R对应红色,G对应绿色,B对应蓝色,它们统称为三基色,这三中色彩的不同搭配,就可以搭配成各种现实中的色彩。
如果是单色图像,只要让三个通道的值相等就可以了。
在实现数字图象处理的过程中,主要是通过对图像中的每一个像素点运用各种图像处理算法来达到预期的效果,在本实验里主要涉及了卷积运算,相关运算,中值滤波。
1卷积运算:
使用一个m*n的掩模,依次覆盖在要处理图像的各个像素上,掩模中心与该像素重合。
掩模上的各个元素均有其自身的权值。
将掩模各元素权值与覆盖在其下的像素值分别相乘后求和,在除以掩模权值之和,所得结果称为响应,赋给当前处理的像素。
通过选取不同的矩阵,我们可以对图像得出很多不同的结果,这个结果取决于所选取的卷积矩阵不同,可以是高通滤波,低通滤波等等,通过滤波我们可以得到所需要处理图像的一些特性,比如可以采用高通滤波突出某些边缘轮廓,用低通滤波来平滑图像,去掉图像中的高频成分。
2相关运算:
图像的相关性运算与卷积运算基本上类似,不同点是卷积矩阵mask取自图像本身的某一块值,这里不对相关性的图像处理做图像处理,主要说明一下相关性的意义。
利用相关性可以检测出图像的矩阵模板,用于模板的匹配,检测等等。
3中值滤波:
同样使用一个m*n的掩模依次处理各个像素,但是掩模没有权值,而是将掩模覆盖下的像素值排序后取中间值,将这个中值赋值给当前处理的像素。
中值滤波可以将图像中的高频成分去掉,使图像变得平滑,这个特性和低通滤波有点类似。
掩模在图像边缘时,会遇到覆盖了非图像部分的情况,这里可以有多种方式处理,比较常见的有部分滤波和补零法(zero-padding)。
部分滤波为在遇到图像边界时,忽略超出图像边界的部分,采用部分掩模处理边界像素。
补零法是将图像边缘部分补上相应于掩模大小的零值(也可以为其它常值),处理完成后再将这部分切除,恢复至原图像大小,但是这样图像边缘往往会出现灰度值偏小的情况。
5
一般来说图像边缘往往是不重要的部分,所以这些处理带来的缺点是可以容忍
的。
第二章、TMS320C6000DSP芯片的硬件系统
第一节数字信号处理器的特点
1算术单元硬件乘法器
由于DSPS的功能特点,乘法操作是DSPS的一个主要任务。
在通用微处理器内是通过程序实现乘法操作的,这往往需要耗费很大的时钟周期,因此在DSPS内部设有硬件乘法器来完成乘法乘法操作,以提高乘法速度。
所以硬件乘法器是DSP区别于通用微处理器的一个重要标志。
多功能单元
为进一步提高速度,可以在CPU内设置多个并行操作的功能单元(ALU,乘法器,地址产生器等)。
如C6000的CPU内部有八个功能单元,即两个乘法器和六个ALU,八个功能单元最多可以在一个周期内同时执行八条32位指令。
由于多功能单元的并行操作,使DPS在相同时间内能够完成更多的操作,因而提高了程序的执行速度。
2总线结构通用微处理器是为计算机设计的,通常采用冯诺依曼总线结构,统一的程序
和数据空间,共享的程序和数据总线,由于总线的限制,微处理器执行指令时,取指和存取操作数必须共享总线,因而程序指令只能串行执行。
对于DSP而言,采用冯诺依曼总线结构将使系统的性能受到很大的限制,因此DSP采用了独立程序总线的哈弗总线结构,而且很多DSP甚至有两套以上内部数据总线,这种总线结构称为修正的哈佛结构,对于乘法或加法等运算,一条指令要从存储器中取两个操作数,多套数据总线就使得两个操作数可以同时取得,提高了程序效率
3专用寻址单元
6
DSP面向的是数据密集型应用,因为需要频繁地访问数据,数据地址的计
算时间也线性增长,如果不做特殊处理,计算地址的时间有时会比实际的算术操作时间还长。
因此,DSP通常都有支持地址计算的算术单元——地址产生器与ALU并行工作,因此地址的计算不再额外占用CPU时间
4流水处理
除了多功能单元外,流水技术是提高DSP程序执行效率的另一个主要手段。
流水技术使两个或更多不同的操作可以重叠执行,流水线操作是DSP实现高速度、高效率的关键技术之一。
TMS320C6000只有在流水线充分发挥作用的情况下,才能达到1600MIPS的速度。
C6000的流水线分为三个阶段:
取指、解码、执行、总共11级。
和以前的C3x、C54x相比,有非常大的优势,主要表现在:
简化了流水线的控制以消除流水线互锁;增加流水线的深度以消除传统流水线结构在取指、数据访问和乘法操作上的瓶颈。
其中取指、数据访问分为多个阶段,使得C6000可以高速地访问存储空是。
5大容量片内存储器
大容量片内存储器外部存储器一般不能适应高性能DSP核的处理速度,因此在片内设置较大容量的程序/数据存储器以减少对外部存储器的访间速度,充分发挥DSP核的高性能,数据RAM的容量高达7MB。
采用大的片内存储器可以减少外部存储器接口的引脚,甚至省略外部存储器接口,而且还可以减小芯片的封装体积。
6零消耗循环控制数字信号处理的一大特点是很多运算时间都用在执行较小循环的少量核心
代码上大部分DSP芯片具有零消耗循环控制的专门硬件,可以省去循环计数器的测试指令,提高了代码效率,减少了执行时间。
第二节TMS320C6000的硬件结构简介
TMS320C6000系列DSP(数字信号处理器)是TI公司最新推出的一种并行处理的数字信号处理器。
它是基于TI的VLIW技术的,它包含两个子系列:
用于定点计算的TMS320C62X系列和用于浮点计算的TMS320c67x系列其中,TMS320C62xx是定点处理器,TMS320C67xx是浮点处理器。
以TMS320C6201
7
为例,该处理器的工作频率最高可以采用50MHz,经内部4倍频后升至200MHz,
每个时钟周期最多可以并行执行8条指令,从而可以实现1600MIPS的定点运算能力,而且完成1024定点FFT的时间只需70μs。
TMS320C6000的CPU有两个数据通道A和B,每个通道有16个32位字长的寄存器(A0~A15,B0~B15),四个功能单元(L,S,M,D),每个功能单元负责完成一定的算术或者逻辑运行。
A、B两通道的寄存器并不是完全共享,只能通过TM320C6000提供的两个交换通道1X、2X,才能实现处理单元从不同通道的寄存器堆那里获取32位字长的操作数。
TMS320C6000的地址线为32位,存储器寻址空间是4G。
各个部分简要介绍:
C62X和C67X的数据通路包括:
2个通用寄存器组(A和B)8个功能单元(.L1,.L2,.S1,.S2,.M1,.M2,.D1,D2)
2个存储器读取通路(LD1和LD2)2个存储器存储通路(ST1和ST2)
2个寄存器组交叉通路(1X和2X)2个数据寻址通路(DA1和DA2)
1通用寄存器组
C62X/C67X数据通路中有2个通用寄存器组(A和B):
寄存器组A:
A0-A15,寄存器组B:
B0-B15。
8
条件寄存器:
A1、A2、B0、B1和B2
可用于循环寻址的寄存器:
A4-A7和B4-B7。
通用寄存器组支持32位和40位定点数据,C67X也支持32位单精度和64
位双精度浮点数据。
对于40位和64位数据,需跨放在两个寄存器内。
2功能单元
8个功能单元分成A、B两组:
A组:
L1、S1、M1、D1B组:
L2、S2、
M2、D2
每个功能单元都有:
2个32bit读口和1个32位写口
.L1、.L2、.S1和.S2另有:
8bit写口和8bit读口,支持40位操作数的读写同一周期8个功能单元可并行使用
功能单元
定点操作
浮点操作
.L单元(.L1,.L2)
32/40位算术和比较操作
32位中最左边1或0的位数计数
32位和40位计数
32位逻辑操作
算术操作
转换操作
DP→SDINT→DPINT→SP
.S单元(.S1,.S2)
32位算术操作
32/40位移位和32位位操作
32位逻辑操作转移
常数产生寄存器与控制寄存器传递(仅.S2)
比较倒数和倒数平方根操作
绝对值操作SP→DP转换
.M单元(.M1,.M2)
16×16乘法操作
32×32乘法操作
浮点乘法操作
.D单元(.D1,.D2)
32位加、减、线性循环寻址计算
5位常数偏移量取存
15位常数偏移量取存(仅.D2)
5位常数偏移量双字读取
各个功能单元的执行操作
结构示意图
3寄存器组交叉通路
9
CPU中有两个交叉通路1X和2X
1X:
允许A侧功能单元读取B组寄存器数据
2X:
允许B侧功能单元读取A组寄存器数据每侧仅有一个交叉通路,在同一周期内从另一侧寄存器组读操作数只能一
次,或者同时进行使用2个交叉通路(1X和2X)的操作。
.D不能使用交叉通路仅src2可以使用另一侧寄存器数据
第三节TMS320C6000指令系统
C62xx和C67xx共享同一个指令集。
所以C67xx可以使用所有的C62xx指令,但因为C67xx是浮点芯片,怕以C67xx的指令集中有一些指令只能用于浮点运算。
TMS320C6201CPU的设计采用了类似于RISC的结构,指令集简单、运算速度快。
8个功能单元负责不同功能的运算,指令和功能单元之间存在一个映射关系。
其中,L单元有23条指令,M单元有20条指令,S单元29有条指令,D单元有26条指令。
TMS320C6201的大部分指令都可在单周期内完成,都可以直接对
8/16/32bit数据进行操作。
同时,TMS320C6201指令集针对数字信号处理算法提供了一引起特殊指令:
为复杂计算提供的40bit的特殊操作的加法运算;有效的溢出处理和归一化处理;简洁的位操作功能等。
TMS320C6201中最多可以有
8条指令同时并行执行;所有指令均可条件执行。
以上所有特点提高了指令的执行效率、减小了代码长度、大大减少了因跳转引起的开销、提高了编码效率。
10
第三章基于TMS320C6000系列的C代码优化
在DSP软件开发中推荐的开发流程如图1所示
于是我们可以份三个阶段来优化所写的C语言代码第一个阶段:
对第一个阶段,我们根据需要实现的功能来编写C语言程序,
这时的代码和硬件平台是独立的,可以进行一些基本的C优化,然后使用C6000代码剖析工具,确定C代码中可能存在的低效率段,为进一步改进代码性能,进入第二阶段。
第二个阶段:
在这一阶段,我们根据TI,C6000平台一些基本的结构特点,
11
使用特定的优化方法,改进C代码。
这些方法包括使用编译器选项、和代码转
换字访问、软件流水和循环展开等。
如果代码仍不能达到所期望的效率,则进入第三个阶段。
第三个阶段:
从C代码中抽出对运行时间影响最大的代码段,用线性汇编改写这段代码。
用户能使用汇编优化器优化该代码。
第一节第一个阶段代码优化
第一阶段的优化是基于通用微处理器的PC机环境中的优化,主要是针对C程序的通用特性来考虑的。
这方面的优化工作主要包括数据类型选择、数值操作优化、快速算法、变量定义和使用优化、函数调用优化以及计算表格化等.这个阶段的C代码优化,可以通过选定CCS(CodeComposerStudio)提供的C编译器的选项来实现优化,所以不详细展开,但有几点与C6000的硬件结构有关,需详细说明下
1数据类型数据类型的选择在分析和编写代码时很重要,充分考虑数据类型大小才能从
C6000体系结构中取得最优的性能。
C6x编译器对每种数据类型都定义了数据大小。
char:
8bit;short:
16bit;int:
32bit;long:
40bit;float:
32bit;double:
64bit基于每一种数据类型的大小,在书写C代码时,应注意以下原则。
(1)要避免把int和long数据类型当成相同大小来处理,因为C6x编译器对long数据使用40bit操作数;
(2)定点乘法,尽量采用short型作为输入,因为C6x上是一个16ٛ16的乘法器;(3)用于循环的计数器,数据类型采用int或者unsignedint以避免汇编器产生不必要的符号扩展指令;(4)当在浮点DSP装置中使用浮点指令时,例如C67x应使用-mv6700编译器开关,使得代码产生器符合浮点的硬件装置代码。
2数值操作优化
C程序中主要有以下数值操作优化:
(1)用比特的移位操作来代替2次幂整数的乘除法运算更为有效;
(2)当使用浮点设备时,尽量使用浮点数据类型,这能够减小定点处理单元的负担;(3)尽量避免数值的上下溢出,除非是算法本身的需要。
3快速算法
12
本优化方法是用快速算法实现各种变换。
例如离散傅立叶变换(DFT)是数字
图像处理中应用十分广泛的一种变换,具有很好的实用性,其快速算法——快速傅立叶变换(FFT)对其计算速度又有非常大的改进,从而使得该算法得到了更加广泛的应用。
4变量定义和使用优化
C程序中对于需要多次重复使用的变量,如for循环中的变量值,一般可以设置成register变量,从而提高效率。
另外在C语言中指针和数组是可以相互替代的,而对于数组的寻址非常耗时,特别是多维数组,因此可以通过降低数组的维数,再指针化,从而提高效率。
5函数调用优化
函数调用会产生大量的代码,开销也很大。
当C调用一个函数时,它首先把参数传递给寄存器或者堆栈,如果函数参数很多,则调用开销将很大。
因此要尽量避免传递结构,一般用结构指针代替。
另外,限制局部变量的数目也有利于提高效率。
对于C++用户,可以用inline技术消除函数调用的开销,但这样往往以增加目标代码的大小为代价,在实际开发中要根据需要综合考虑。
6计算表格化在数值运算中,除基本的加减乘除运算外,还有其它许多非线性运算,如对
数运算、开方运算、指数运算、三角函数运算等,实现这些非线性运算一般采用查表法。
查表法是快速实现非线性运算最常用的方法。
在实时DSP应用中,一般采用这种方法必须根据自变量的范围和精度要求制作一张表格。
查表法求值所需的计算就是根据输入值确定表的地址,根据地址就可得到相应的值,因而运算量较小。
第二节第二个阶段代码优化
第二个阶段可以利用如下技术来提高性能:
1使用C6x编译器选项
C6X编译器具有很高的效率,它可将C代码转换成更高效率的汇编语言源代码,进而进行汇编和连接,产生可执行的目标代码,在编译选项中有许多与C优化器直接相关的选项,我们可以通过对她们的设置,来实现优化代码的目的。
C6000的优化器是TI公司的一个创新,它对程序循环的流水处理使得代码
13
的效
率得到很大提高。
其使用也很简单,只要在编译时加人优化选项即可。
采用优化选项进行优化后,点积函数可的执行时间有大幅减少,性能提高了很多
表1给出了与优化器有关的编译选项
选项
说明
-ox
文件级优化选项,与-pm合用,可进行程序级优化,x是数字
0,1,2,3
-pm
使语法分析器在启动优化器和代码产生器之间,把所有的C文
件合成一个文件来处理,这样做,可以对整个程序进行优化,使优化效率更高
-mt
向编译器说明在程序中没有出现aliasing。
有了这个信