基于DSP的检测算法实现及优化
- 格式:doc
- 大小:33.00 KB
- 文档页数:12
基于DSP的视频算法系统的优化策略近年来,对数字视频产品的需求增长迅速。
数字视频产品的主流应用包括视频通信、视频监控与工业自动化,最热门的则为娱乐应用,如 DVD、HDTV、卫星电视、标清(SD)或高清(HD)机顶盒、数码相机与HD摄像机、高端显示器(LCD、等离子显示器、DLP)以及个人摄像机等。
这些应用对高质量的视频编解码算法及其标准提出更高要求。
目前的主流压缩标准主要有MPEG2、MPEG4和H.264/AVC,而针对这些编解码标准有各种各样的实现方案。
本文主要讨论基于TI公司C64系列DSP的视频解码算法在系统优化过程中需要考虑的若干因素。
TI的C64系列DSP以其强大的处理能力被广泛用于视频处理领域,但由于使用者对C64系列DSP的结构、指令的理解程度不一样,造成算法的实现效果有许多差异。
具体体现在实现算法时所占用的CPU资源上,例如实现H.264 MP@D1解码时所占用CPU的资源将有所差异;或者体现在所包含的算法工具子集上,例如实现H.264 MP@D1解码时使用CAVLC而不是CABAC。
造成这些差异的主要原因有:算法关键模块的优化;算法系统集成时内存的管理;算法系统集成时EDMA的资源分配管理。
本文将从这三方面探讨算法优化集成过程中需要考虑的因素。
算法关键模块的优化一般而言,针对目前主流视频解压缩标准都有非常消耗DSP CPU资源的模块,如H.264/AVC、MPEG4、AVS等编码中的运动矢量搜索就非常占用资源,而且这些模块在整个系统实现过程中还被频繁调用,因此我们应首先找出这些模块。
TI的CCS提供了工程剖析工具(Profile),可以很快找到整个工程中占用DSP CPU资源最多的模块,然后对这些模块进行优化。
对这些关键算法模块的优化可以分三步进行。
如图1所示,先认真分析这部分代码,并进行相应的调整,例如尽量减少有判断跳转的代码,特别是在for循环中,因为判断跳转会打断软件流水。
高速DSP算法的设计与优化随着数字信号处理(DSP)技术的迅速发展,高速DSP算法的设计和优化成为数字信号处理领域的热门研究课题。
高速DSP算法的设计和优化可以提高算法的执行效率和系统的性能,对于实时信号处理和通信系统等应用具有重要意义。
本文将从高速DSP算法设计和优化的概念、方法和具体应用方面进行阐述。
首先,高速DSP算法的设计和优化是指在给定算法框架下,通过合理的算法设计和优化技术,使得算法能够运行在高效的硬件平台上,以实现更快的信号处理速度和更低的资源占用。
在高速DSP算法的设计过程中,首先需要对算法进行分析,并确定算法的计算复杂度。
然后,可以根据具体的应用需求和硬件平台的特点,选择合适的算法结构和算法优化技术。
最后,通过优化算法的数据流程和计算结构,以及利用硬件加速器和并行处理技术等手段,提高算法的执行效率和系统的性能。
在高速DSP算法的设计和优化中,有几个常用的技术和方法。
首先是算法结构优化,通过重新设计算法的结构或使用已有算法的变种,以提高算法的执行效率和资源利用率。
例如,针对常用的信号处理任务,如滤波、快速傅里叶变换(FFT)等,可以采用一些已有的优化算法结构,如多级流水线结构、并行处理结构等。
其次是算法优化技术,包括数据流重排、指令重排、向量化和并行处理等。
这些技术可以通过优化算法的计算流程,减少计算复杂度和冗余计算,从而提高算法的执行效率。
另外,硬件加速器和GPU等也可以用于高速DSP算法的优化,通过利用硬件的并行处理能力,加速算法的执行过程。
此外,高速DSP算法的设计还可考虑分布式计算和云计算等技术,以进一步提高算法的执行效率和可扩展性。
高速DSP算法的设计和优化在各个领域中都有广泛的应用。
在图像处理中,高速DSP算法可以应用于图像增强、图像压缩和目标检测等任务,以提高图像处理的速度和效果。
在音频处理和语音识别中,高速DSP算法可以用于噪声消除、声音识别和语音合成等,以实现更快的实时处理和更高质量的音频效果。
基于DSP的实时圆检测算法的设计实现与优化
陈仁爱;凌强;徐骏;李峰
【期刊名称】《微型机与应用》
【年(卷),期】2016(035)011
【摘要】霍夫圆变换是图像处理中人眼检测的一种常见方法,但是其处理的数据量多,处理速度慢,在移植到DSP上后难以满足实时性要求.对此,提出了一种将两阶段霍夫圆变换算法应用到TMS320C6000系列DSP上的实现与优化方法.首先,在算法上对霍夫圆变换使用Marr-Hildreth算子增强等方法进行改进以保证检测的准确率;之后根据DSP的特点,利用C代码优化、浮点定点转换和软件流水等技术对算法进行深度优化.实验结果表明,程序的运行时间明显缩短,为视线检测的实时性实现创造了良好的条件.
【总页数】5页(P93-96,100)
【作者】陈仁爱;凌强;徐骏;李峰
【作者单位】中国科学技术大学信息科学技术学院,安徽合肥230026;中国科学技术大学信息科学技术学院,安徽合肥230026;中国科学技术大学信息科学技术学院,安徽合肥230026;中国科学技术大学信息科学技术学院,安徽合肥230026【正文语种】中文
【中图分类】TP368
【相关文献】
1.DSPs实时视频处理中的Cache优化算法研究 [J], 唐文佳;朱光喜;王曜;刘瑜
2.基于共轭结构ACELP语音编码算法的优化及DSP实时实现 [J], 胡仕兵;汪学刚;杨绍国
3.基于共享内存优化算法的用采终端实时库设计实现 [J], 曹子涛;许金宇;熊剑
4.基于深度学习与圆检测的实时双目测距算法研究 [J], 范林坤;陈涛;李旭川;郭丛帅
5.基于AES算法的DSP安全防护设计实现 [J], 张猛华;陈振娇;徐新宇
因版权原因,仅展示原文概要,查看原文内容请购买。
基于DSP的无人船水质检测系统设计随着人们对环境保护意识的提高,水质检测变得越来越重要。
为了实现高效准确的水质检测,无人船水质检测系统应用了数字信号处理(DSP)技术。
本文将详细介绍基于DSP的无人船水质检测系统的设计。
一、系统概述基于DSP的无人船水质检测系统主要由以下几个部分组成:水质传感器、DSP开发板、无人船控制系统和数据处理模块。
水质传感器用于实时检测水中的各项指标,将检测数据传输到DSP开发板上进行处理。
无人船控制系统根据DSP处理的数据实时调整船只航向和速度,以实现水质检测航行路径的规划和控制。
数据处理模块用于接收和存储DSP处理的数据,并通过可视化界面展示和分析检测结果。
二、系统设计1.水质传感器:水质传感器是实现水质检测的关键设备,可以检测水中的各项指标,如PH值、溶解氧、浊度等。
常用的水质传感器有PH传感器、溶解氧传感器和浊度传感器等。
传感器将检测到的数据以模拟信号的形式传输给DSP开发板。
2.DSP开发板:DSP开发板是系统的核心部分,负责接收和处理水质传感器传输过来的数据。
DSP开发板具备高性能的数字信号处理能力,可以对传感器数据进行滤波、放大、AD转换等处理操作。
通过已经预先编程的算法,DSP可以对水中的各项指标进行计算和分析,并判断水质是否合格。
3.无人船控制系统:无人船控制系统根据DSP处理的数据实时调整船只的航向和速度。
根据水质检测要求将目标检测区域划分为一系列航行路径,并通过无人船控制系统控制船只按照预定的路径进行航行。
当无人船控制系统接收到DSP处理的数据后,会根据水质检测结果调整船只的航向和速度,以达到最佳检测效果。
4.数据处理模块:数据处理模块用于接收和存储DSP处理的数据,并通过可视化界面展示和分析检测结果。
该模块可以将检测结果以图表、曲线等形式展示给用户,让用户直观地了解水质情况。
用户可以通过该模块对检测数据进行进一步分析和处理。
三、系统优势1.高效准确:DSP具备高性能的数字信号处理能力,可以对海量数据进行实时处理和分析,提高水质检测的效率和准确性。
基于DSP的检测算法实现及优化摘要:运动目标检测可以从连续变化的多幅图像中把运动目标提取出来。
运动目标的捕捉对于目标分化、采集和动作归类等后续处理相当重要,因为后期过程只处理图像中运动目标周围一定范围内的像素。
但由于运动目标所处背景的随机性,比如气候、光线及噪声干扰的影响,检测运动目标实际上是一项比较困难的任务。
目前对于运动目标的检测的算法可以划分为两类:基于象素强度的算法及基于运动的算法。
细分又包括四种:基于特征的方法、基于帧间差分的方法、基于背景建模的方法和基于光流场的方法。
其中前三种属于基于象素强度变化检测的算法,第四种可以看作是基于运动的检测方法。
基于强度算法容易实现、效率高,可处理目标跟踪问题比较难。
基于运动的算法稳定性强,处理跟踪问题相对简单。
该文重点研究目标检测的DSP算法实现,所以在参考大量文献后,选用了传统检测算法中速度较快而且相对便于硬件实现的帧间差分算法,为了取得良好快速的目标检测结果,该文采用Sobel算子与帧间差分结合的方法。
关键词:DSP的检测算法;实现及优化中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)13-3070-051 基于Sobel算子的帧间差分检测算法1.1 帧间差分法由于红外图像的目标特性,用灰度变化表述物体的运动轨迹可以获得较高的检测效率,从而满足检测过程的实时性要求。
假设输入图像为:[F={fj(a,b),a∈X,b∈Y,j=0,1,2,....}]其中,(a ,b)为实际场景中(X ,Y)上一点,[fj (a,b)]为第j帧上(a ,b)点的灰度值,j为图像的编号,以下为图像差分的结果:[D={dj(a,b),a∈X,b∈Y,j=0,1,2,....}][其中:dj(a,b)={|fj(a,b)-fj-i(a,b)|,j=0,1,2,...;i=0,1,2,3,...}][dj(a,b)]基本上体现出运动目标的边界和高差异区域。
一般选择i=1也就是相邻两幅图像进行差分,如果运动目标的速度小于相邻两幅图像的时间差时,可以增大i值避免检测目标遗失。
如i=5时仍然没有目标,则可以认为无检测目标,就换为下一幅图像(j+1)图像进行检测。
选择一个恰当的阈值[Tj],将差分结果[dj(a,b)] 转变为二值图像:[wj(a,b)=0,dj(a,b)≥Tj1,dj(a,b)<Tj]其中阈值[Tj]定义为:[Tj=0.5×Max(dj(a,b))]1.2 图像去噪、增强一般采集到的图像均含有噪声,导致二值图像上有一些孤立点,这些点并不是目标但会对图像的分割产生影响,因此对二值图像进行广义滤波,可以去除这些并非目标的孤立点,广义滤波会对图像造成一定程度的削弱所以滤波后需对图像进行增强。
为使算法获得比较高的执行效率,滤波采用下式:[E(A)=I(a,b)I(a-1,b)I(a+1,b)I(a,b-1)I(a,b+1)I(a-1,b-1)I(a+1,b+1)(a-1,b+1)I(a+1,b-1)]增强采用下式:[E(A)=I(a,b)| I(a-1,b)| I(a+1,b)| I(a,b-1)| I(a,b+1)| I(a-1,b-1)| I(a+1,b+1)| I(a-1,b+1)|I(a+1,b-1)]1.3 图像分割对于图像上一点[fj(a,b)∈[Ni,Nj]],其中[Ni和Nj]是两个灰度值。
若设定灰度集n?[[Ni,Nj]]作为判定依据,灰度值属于n的则将像素转变为某一灰度值,其余像素转变为另一灰度值,处理后图像就被划分为两个区域。
这一过程可表示如下:[fj(a,b)=n1,fj(a,b)∈nn2,其他]上式中n1和n2是设定的目标灰度和背景灰度。
如果[n1=1,n2=0],则分割结果就为二值图像。
通过差分可以找到两幅图像的差异,差值较大的区域就有可能是目标所处的位置。
用降噪后的二值图像查找目标可能存在的位置,并把该位置从整幅图中分割出来。
方法为:找到[wj(a,b)=0] 的点,划定它周围区域作为目标范围,区域划定以(a-5,b-5)作为左上角,以(a+10,b+10)作为右下角。
把划定区域的二值图像[wj(a,b)=0]的点设置为1,即找到了目标可能存在的范围。
1.4 边缘检测用sobel算子对整幅图像进行差分和滤波,可减少干扰,边缘定位准确和相对完整,适用于灰度渐变和有一定噪声干扰的图像处理。
Sobel 算子用于检测边沿的算子有2个,一个水平模板、一个垂直模板。
如图1:[-1-2-1000121] [-101-202-101]水平边沿模板垂直边沿模板图1 sobel算子边缘检测完以后将结果与图像分割的结果相结合即能获得目标的位置。
2 检测算法的程序开发2.1 图像分帧的实现2.1.1 子图提取系统硬件包含的L2总共有64k,均分为四段,通常缓存直接影响运行速度,但如果将L2都用来做缓存,程序涉及的指令和数据将被放在外部存储器中,这将使缓存操作复杂化,速度反而降低。
要使L2与外存保持一致要通过编程来达到,L2和外部存储间的数据线宽为32b,数据的交换速率比较低。
通常采取的的做法是把变量和数组存放在L2 中,而把程序存放在外部存储器中。
该文的做法是用32k存储器加32k缓存,如果截取的子图过大内存会不够,过小又会额外增加EDMA传递数据的次数,比较后取1k,将程序编译以后内存的使用量大约为26k,可见这样设置是比较合理的。
子图提取是为了在不消耗CPU的情况下,把数据读入内部存储L2 方便CPU使用,节约CPU读写存储器的时间。
为了稳定控制数据流动,该文采用QDMA方式。
具体设置如表1,图2:a)QDMA寄存器设置表1 寄存器内容[可选参数\&4520 0001h\&源地址\&Image_address+offset\&单元设置\&000Fh\&0010h\&目标地址\&Ping_addr\&单元索引\&013ch\&Don’t care\&]b)QDMA可选参数寄存器内容图2 提取子图的参数寄存器设置2.1.2 子图回写提取出的子图经多步处理后仍存于内存中,需回写到外存中方便显示时读取,可利用EDMA实现该动作。
把子图数据从L2 回写到外存时有些调整:数据从一维变回二维,宽度为8b、每幅子图的数据量也有差异。
该差异是由于边界检测运算导致的。
对于64x16大小的一幅子图,经检测运算处理后周边各有一行、一列无用数据,假如用读出时的方式直接回写有效的数据会被无用数据改写,所以,只需回写有效的、62x14大小的数据即可。
2.2 内存的使用为了确保CPU可以不间断运算,分别定义4个缓存区域in1、in2及out1、out2。
在初始化程序时把相邻两幅子图(各1k)数据导入in1和in2,先对in1内的子图像进行运算,运算结果保存到out1,完成后,启用QDMA-out1将数据从内存传送到外存进行存储;在对in2内子图运算前提交一个新的QDMA-in1申请,把紧邻的新子图从外存读入到in1中,在对in2中的子图运算结束后,将结果存到out2,启用QDMA-out2。
在重新开始in1内的子图运算前又启用QDMA-in2,如此循环,每完成一幅子图运算,就提交一个新的QDMA申请,在对应的子图缓冲存放一幅新的子图,DSP可以直接处理图像数据,而不必消耗时间从外设读取,如示意图3。
图3 内存使用示意图检测程序的主流程为:1、对相邻两幅原图差分2、广义滤波、增强3、图像分割然后与sobel检测结果相“与”。
3 检测算法的优化程序代码编写结束后需要检查程序与DSP硬件特性相符程度,依据硬件的缓存结构做相应调整应作为重点。
3.1 依据DSP结构特性进行优化原始图像大小为380×240,在输入系统时提取374×240,也就是舍弃边缘,这是DSP的结构特性决定的,而且提取子图时不会有数据量较少的边界图片需要单独处理,减去少量的边界像素不会影响整幅图像的处理结果。
1)设备C6711 DSP的一级缓存包括用于存储程序的和存储数据的两个部分各4k。
数据缓存控制器的特性是:无论CPU用到的多少数据,数据缓存控制器总是一次读入一集也就是32B,所以应把需要参与运算的数据对齐并排列成集,且数据读入内存后应等全部运算完毕后再清除,以减少反复读入数据而消耗的时间。
随意排放数据与成集排放数据相比处理速度的不同:表2 随意排放数据与成集排放数据相比处理速度差异2)当需要对一组数据进行多个运算时,应考虑把中间运算结果保存在一级数据缓存中,以避免相同数据写出后又读入从而提高运算效率。
对目标的检测需要运行多个处理函数,中间数据的读入写出会消耗费大量时间。
若使用数据链方式,把中间运算结果保存在一级数据缓存而不是内存,可以节约读写数据的时间。
但在分段问题上需要折中处理,因为过多分段会会增加代码复杂度、降低代码易懂性。
折中后将一幅图化分为四段。
下表为利用数据处理链后程序速度的提升:表3 利用数据处理链后程序速度的提升3)一级程序缓存与CPU及二级缓存间的线宽是256b,可以同时传送32×8条指令。
一级程序缓存与CPU及二级缓存间的线宽是128b,缓存内数据是按“line”形式存放的,并且二级缓存中“line”的宽度为128B,因此,程序应用128B 的整数倍来定义数组的长度,以此提高缓存在运行过程中的命中率。
下表为子图大小不同时速度的差异:表4 子图大小不同时速度的差异提取子图为512B时运算一幅图像消耗的时间略少于子图为1kB时,但是子图的数量相比子图大小取1kB时增加一倍,为此需要增加一倍的子图数据传输次数,不可取。
4)二级缓存的大小为64k均分为四块,可以配置成内部存储或缓存,一般情况下缓存空间越大程序执行速度越快,但也并非绝对。
表5为缓存取不同值时的执行速度差异:表5 缓存取不同值时的执行速度差异3.2 用软件流水对程序进行优化软件流水是指的指令循环执行、多次迭代且并行执行的一种技术。
通过在编译器中进行相应的设置,可实现循环代码的软件流水化。
具体的方法是提取循环并把它保存为单独文件,按照4.1的调整以后,再进行编译并运行。
下表为采用软件流水与不采用流水的执行速度差异:表6 采用软件流水与不采用流水的执行速度差异3.3 汇编代码优化C程序代码在上一步优化后,汇编代码中的冗余码已经非常少了,但仍然可对消耗时间较多时滤波、增强程序代码做汇编优化,下表为汇编优化的效果:表7 为汇编优化的效果经过以上优化过程,程序执行速度有了大幅提升,下表为具体提升效果:表8 优化的具体提升效果3.4 程序的执行结果目标检测算法经过多步优化以后,图象数据读入内存便连续执行,仅在完成检测的所有步骤以后才回写到外存当中。