DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 115|回复: 0
打印 上一主题 下一主题

基于DM642的运动估计算法的研究与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 17:17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      多媒体业务的飞速发展对视频编码技术提出了更高的要求。如何在尽可能低的码率下获得尽可能好的图像质量是一系列视频编码标准的共同目标。H.264是新一代的面向低码率视频通信应用的视频图像压缩标准。与此前的视频编码标准相比较,H.264拥有极高的压缩效率和极强的容错性能,这使视频编码效率获得大幅提高,但同时这也使运算复杂度猛增。运动估计和运动补偿作为视频压缩编码系统的核心算法,占整个系统运算量的60%-80%。研究运动估计算法的DSP实现对整个H.264系统的嵌入式应用具有重要的指导意义。
  TMS320DM642是TI公司推出的一款面向数字多媒体应用的专业芯片,它基于C64X内核,拥有强大的处理性能和丰富的外围接口。本文完成了基于H.264的运动估计算法的DSP实现,通过使用一系列优化方案,很好地实现了对算法的实时处理。
  2 运动估计算法
  运动估计算法是视频压缩编码的核心算法之一。高质量的运动估计算法是高效视频编码的前提和基础。其中块匹配法(BMA, Block Match Algorithm)由于算法简单和易于硬件实现,被广泛应用于各视频编码标准中。块匹配法的基本思想是先将图像划分为许多子块,然后对当前帧中的每一块根据一定的匹配准则在相邻帧中找出当前块的匹配块,由此得到两者的相对位移,即当前块的运动矢量。在H.264标准的搜索算法中,图像序列的当前帧被划分成互不重叠16×16大小的子块,而每个子块又可划分成更小的子块,当前子块按一定的块匹配准则在参考帧中对应位置的一定搜索范围内寻找最佳匹配块,由此得到运动矢量和匹配误差。运动估计的估计精度和运算复杂度取决于搜索策略和块匹配准则。这里使用H.264推荐算法UMHexagONS(Unsymmetrical-cross Multi-Hexagon-grid Search)作为DSP实现的算法参考,与FS算法比较,它在保证可靠搜索精度的前提下大幅降低搜索复杂度。同时使用绝对差和(SAD, the Sum of Absolute Difference)标准作为匹配准则,它具有便于硬件实现的优点。




  图3.1 DM642结构示意图
  4 运动估计算法的DSP DM642实现与优化
  4.1 算法实现流程
  与基于PC的算法实现相比,基于DM642的算法实现对实时性提出了更高的要求。这就要求由视频采集、处理和显示组成的系统能够高效工作。基于DM642的视频处理系统流程如图4.1所示。





  图4.1 DM642视频处理流程
  运动估计算法实现流程如图4.2所示:





  图4.2 基于DM642运动估计算法实现流程
  4.2 存储器系统优化
  4.2.1 Cache优化策略[2]
  Cache优化主要是要合理配置L2缓存中Cache和SRAM的大小。Cache和SRAM的大小应根据具体应用要求作相应的配置。通常,Cache容量越大越好,但是由于它是由CPU管理,而不能由程序员手动控制,这就降低了应用的灵活性。对于视频处理算法,把一些频繁访问的数据放入SRAM是很有必要的,这有利于系统性能的提升。实验表明,在本系统中将Cache和SRAM各配置成128Kbytes,能够获得最佳效果。
  4.2.2 存储器空间分配
  对于嵌入式系统来说,存储器大小有限,是系统宝贵的资源,对其应用需要作细致额考虑和周密的管理。由于DSP内核对不同存储空间的数据访问速度差异很大,运动估计算法涉及大量的数据存储和读取,所以存储器的使用是否恰当,对算法的实时性能有很大的影响。表4.1给出了系统中主要的存储器分配方案。www.51kaifa.com
  表4.1 运动估计算法实现所需的主要存储器空间的分配
  数据块
  用途
  大小(bytes)
  存放位置
  curframe
  当前帧
  607.5K
  片外SDRAM
  orgframe
  参考帧
  607.5K
  片外SDRAM
  reconframe
  重建当前帧
  607.5K
  片外SDRAM
  act_block
  当前子块
  375
  片内L2 SRAM
  search_area
  搜索区域
  586
  片内L2 SRAM
  pred
  预测当前子块
  375
  片内L2 SRAM
  通过对重要数据段和代码段的存储器配置,巧妙地克服了片上存储器空间太小带来的限制,同时又充分利用了DM642的分层存储特性,使缓存命中率有效提高,避免了不必要的CPU等待时间,使DM642性能充分发挥。
  4.2.3 使用EDMA
  EDMA是DM642中用于快速数据交换的重要技术,具有独立于CPU的后台批量数据传输能力,能够满足实时图像处理中高速图像数据传输的要求,同时使DSP性能充分发挥。
  在实时系统中,我们使用DAT_copy2d()函数完成视频采集和显示缓存与帧存储器SDRAM之间的数据传输。DAT_copy2d()完成2D数据直接的高速传输,非常适用于图像数据传输。通过充分利用EDMA的功能特性,为系统处理性能的提高提供了保障。www.51kaifa.com
  4.3 程序代码级优化
  4.3.1 使用软件流水处理提高并行性[4]
  在算法实现过程中,循环代码往往要占用大量的时间。在运动估计算法中,有许多对图像宏块和像素的操作,这就涉及到大量的循环运算,为了使代码有理想的并行性,对多数代码的优化,特别是循环代码的优化,多采用软件流水技术。软件流水是一种用于安排循环内的指令运行方式的技术,编排循环指令,使得循环的多次迭代能够并行的执行。在C/C++编译器里,采用软件流水使编译出来的程序代码优化是一项核心技术。
  4.3.2 运用TI图像库
  TI提供了专用于C64x系列DSP的图像视频函数库IMGLIB。该库中包含大量的C代码可直接调用的、汇编优化的、通用的图像视频处理函数。通过使用库函数,可以得到比常规C代码函数优秀得多的性能。在程序优化过程中,我们使用IMG_sad_16×16函数计算当前宏块与参考宏块的SAD值,使运算复杂度有效降低。
  4.3.3 使用线性汇编[4]
  线性汇编语言是C6000系列DSP独有的一种编程语言,介于高级语言和低级语言之间。编写线性汇编程序时可完全按照高级语言的方式编写,而不必考虑指令的延时、指令的并行与否、寄存器的使用和功能单元的分配,汇编优化器将根据代码情况自动确定这些信息。可通过性能分析工具Profiler找到调用频率高的C代码段,然后用线性汇编语言改写,采用汇编优化器进行优化,使代码效率获得最大限度的提升。表4.2列出了使用C代码与使用线性汇编优化的代码所耗费的时钟周期数。www.51kaifa.com
  表4.2 代码优化的结果比较
  优化前(周期数)
  优化后(周期数)
  速度提高(%)
  获取预测宏块值FindPred()
  975283
  331506
  66
  导入当前宏块LoadArea()
  572793
  208762
  63
  5 结论
  本文采用TI公司生产的TMS320DM642芯片完成了基于H.264运动估计算法的实现与优化。在未对算法实现做优化时图像显示帧率为19帧/秒,经过一系列的优化措施之后,显示帧率达到32帧/秒,且图像清晰,无明显块效应。运动估计算法实现的难点主要在于软件程序的优化,通过软件流水和线性汇编等优化手段,可以达到较好的实时效果。
  本文作者创新点:使DM642处理芯片和算法特性充分结合,主要从算法改进、存储器优化和程序代码级优化三个方面,采取一系列措施,完成了对基于H.264的运动估计算法的实时实现,为整个编解码系统的有效实现提供了借鉴和参考,具有很强的实用价值。

  
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-12-30 17:11 , 耗时 0.083559 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表