• 2.75 MB
  • 2022-09-27 发布

硕士学位论文-h264运动估计算法的研究与fpga验证

  • 62页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
H.264运动估计算法的研究与FPGA验证分类号UDC密级学号硕士学位论文H.264运动估计算法的研究与FPGA验证学科名称:电路与系统学科门类:工学指导教师:申请日期:iii\n\n摘要论文题目:H.264运动估计算法的研究与FPGA验证学科专业:电路与系统研究生:摘要随着互联网的飞速发展,人们的生活中充满了各种多媒体技术。2003年3月份,ITU-T(国际电信联盟)颁布了H.264视频编码标准。H.264是一个新的数字视频编码标准,这个标准下,可获得比以往标准都高的编码效率,满足低带宽、高质量网络视频应用的需要。为了达到实时性,对视频编码技术提出了更高的挑战。作为视频压缩编码中运算量最大也最重要的一部分—运动估计,它能有效去除视频信号中存在的大量的时间冗余和空间冗余,使视频数据得到高效压缩,这是能够解决实时性的关键,也是视频压缩编码标准中的一个重要研究方向。在分析了运动估计几种典型的算法,结合前人已有的硬件结构的基础上,结合高性能VLSI设计实现的特点,提出了一种改进的脉动阵列及流水线相结合的全搜索块匹配的整像素运动估计结构,并完成了其VLSI设计。先简要描述了H.264标准及其性能,对块匹配运动估计原理和相关参数对运动估计效果的影响进行了详细的介绍。接下来对全搜索算法和几种快速搜索算法作了一一介绍。然后重点介绍了两种脉动结构:1-D和2-D,阐述了各自的优点和不足。由于搜索区域中的相邻参考块之间有一定的数据重叠,为了重用这些重叠数据,提出了本文的数据流,根据数据流的特点给出了相应的硬件结构,采用串入并出的流水线,提高了计算速度的同时也大大减小了I/O带宽。最后利用FPGA的分块设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,编写了各个子模块的Verilog代码,并分块进行了功能仿真,子模块仿真通过后,把所有模块综合起来,进行了仿真。通过分析仿真数据,证明了本文设计的全搜索运动估计模块能够正常工作,并且能够实现全搜索算法的功能,输出正确的运动矢量。关键词:H.264;视频编码;运动估计;VLSI;脉动结构iii\n摘要iii\nAbstractTitle:THERESEARCHOFH.264MOTIONESTIMATIONALGORITHMANDFPGAVERIFICATIONMajor:CircuitsandSystemsName:YangLiu(Signature:)Supervisor:AssociateProf.ShijieQiao(Signature:)AbstractWiththerapiddevelopmentoftheinternet,multimediatechnologyinpeople'sdailyliveshasbeenmorewidelyused,multimediacommunicationsisoneindispensablepartofdailylife.InMarchof2003,ITU-T(InternationalTelecommunicationUnion)issuedH.264videocodingstandard.H.264isanewdigitalvideocodingstandard,thisstandardhasahighcodingefficiency,itissuitableforhighqualitynetworkvideoandlow-bandwidthapplications.Inordertoachievereal-time,videocodingtechnologyfacedahigherchallenge.Asvideocompressioncodingincomputingthelargestandmostimportantpart-motionestimation,itcaneffectivelyremovetheuseofthevideosignalinthepresenceofalargenumberoftemporalredundancyandspatialredundancyandcompressedvideodataefficiently,real-timerequirementsisasolutionbottlenecks,whichisanimportantresearchdirectionofthevideocompression.Basedontheanalysisofintegermotionestimationalgorithmandarchitecture,combinedcharacteristicsofhigh-performanceVLSIdesignandimplementation,suggestedanimprovedpipelinedsystolicarrayandacombinationoffull-searchblock-matchingmotionestimationstructureofintegers,andcompleteditsVLSIdesign.Firstly,describedtheH.264standardanditsperformancebriefly.Detailedlyintroducedtheblock-matchingmotionestimationprincipleandsomerelevantparameters’seffectontheresultofmotionestimation.Secondly,introducedthefullsearchalgorithmandseveralfastsearchalgorithms.Thirdly,presentedtwokindsofpulsestructure:1-Dand2-Dandtheirrespectiveadvantagesandweaknesses.Inordertoreusetheoverlappingdataamongtheadjacentreferenceblockdatainsearcharea,putforwardthedatastream,gavethestructureaccordingtothecharacteristicsofthedatastream,usedthepipelineoperationtoimprovethecomputingspeedandreducetheI/Obandwidthgreatly.Finally,throughtheFPGAblockdesignthinking,devidedthefullsearchmotioniii\nAbstractestimationalgorithmintomanyfunctionalsub-modules,WritetheVerilogcodeforeachsub-module,afterfunctionsimulationofsub-modules,synthesizedallthesub-modulesandsimulated.Analysysedthesimulationdataandprovedthedesignoffullsearchmotionestimationmodulecanworkproperly,beabletorealizethefullsearchfunctionandoutputcorrectmotionvectors.Keywords:H.264;VideoCoding;MotionEstimation;VLSI;PulsatingStructureiii\n目录目录1前言11.1研究背景与意义11.2国内外研究现状21.3论文的主要研究内容和章节安排31.3.1主要研究内容31.3.2论文的章节安排32运动估计算法的介绍52.1H.264标准概述52.2运功估计技术的概述62.2.1运动估计的基本概念62.2.2运动估计的基本过程62.3块匹配技术概述62.4块匹配运动估计的参数和准则72.4.1分块大小72.4.2匹配准则82.4.3搜索策略92.4.4搜索范围的确定92.4.5算法评定指标92.4.6估计精度102.5经典块匹配运动估计算法介绍和性能分析112.5.1全搜索算法(FS)112.5.2三步搜索法(TSS)122.5.3新三步搜索法(NewThreeStepSearch)132.5.4菱形搜索法(DiamondSearch)142.5.5四步搜索法(FourStepSearch)152.5.6混合非对称十字多六边形格点搜索(UMHexagonS)162.6本章小结173运动估计的经典硬件结构193.1流水线技术概述193.2脉动阵列概述203.3全搜索运动估计算法的硬件结构203.3.1经典的1-D脉动结构213.3.2AB1类型的1-D脉动结构233.3.3AS2类型的2-D脉动结构243.3.4AB2类型的2-D脉动结构253.3.5树形结构263.4本章小结274运动估计硬件结构的设计284.1设计流程284.2设计方法294.3运动估计算法和相关参数的确定294.3.1运动估计算法的选择294.3.2相关参数的确定30i\n目录4.4数据复用304.5脉动阵列结构的设计和实现流程304.6本章小节335运动估计模块的设计和仿真355.1运动估计模块的总体结构355.2存储单元功能模块365.3数据选择功能模块375.4PE运算模块395.5比较运算模块415.6整体控制模块435.7整体结构功能测试和分析435.8FPGA验证435.9本章小结456总结和展望47致谢49参考文献51i\n前言1前言1.1研究背景与意义在当今这个信息化的社会,信息技术影响着我们日常生活的方方面面。在我们的生活中有近70%的信息,通过我们的视觉系统获得,即图像,而视频是由运动的图像构成的,这里面就包含了更为丰富的信息。从普通电话到可视电话,普通手机到智能手机,有线电视到数字电视的飞速发展。人们更希望无论何时,无论何地,都能实时、方便的通过图像和视频等方式进行通信,但受到客观条件的的限制,比如处理器的处理能力,要想达到实时性,就需要有视频压缩编码方面高性能的处理器,同时也可以提出更好的视频压缩编码方法。人们的生活因为视觉而丰富多彩。为了更好的生活和娱乐,数字视频的质量需要不断的提高,因此加大了对数字视频编码技术的研究。2003年3月,H.264标准经过多次修改后,最终确定。H.264较以往标准,同等质量下,压缩比方面有了明显的提高,明显增进了网络的可靠性和视频传输安全,大大改善了网络传输时易阻塞、易误码、QoS没有保证的情况【1】。H.264标准中,为了提高其性能和编码效率,增加了很多相当复杂的算法,提高了编码效率的同时使得编解码更难。H.264/AVC标准仍然是基于块的混合编码,但采用了大量以往标准中没有的技术,大大提高了编码性能。视频编码层VCL和网络提取层NAL构成了H.264/AVC视频编码标准。H.264/AVC标准显著提高了压缩比,同等图像质量下,H.264/AVC要比H.263和MPEG-4节省大约50%的码率【2】,因此也被广泛的应用,像可视电话、实况转播、视频会议和监控等。实时视频效果的好坏不仅与网络性能有关,而且还与所采用的视频压缩标准以及所利用的实现平台有关。H.264视频编码标准计算杂度高,运算量也庞大,要想在实时方面得到很好的应用,就必须要考虑用硬件来实现。运动估计,一种帧间编码方法。由于两帧图像间相隔的时间很短,因此存在很大的相似性,运动估计就是利用了这个相似性,减少时间的冗余度,这个时间的多少取决于运动估计算法的好坏,所以它是视频编码中的一个关键技术,视频的压缩比完全体现在这里。FPGA,一种大规模的可编程器件【8】,有着逻辑单元灵活、集成度高,开发周期短、开发工具先进、制造成本低等特点,因此被广泛的应用于各种设计之中。它对执行运算量庞大,但原理简单,运算工整的算法,有着自己独特的优势,因为它的内部有大量的触发器和I/O引脚,拥有强大的并行计算能力。H.264中的加法和位移,原理简单,运算工整,使得它能在FPGA中能够高效并行进行,大大缩短了处理时间,提高了系统的实时性。因此,深入研究H.264视频编码核心算法中的运动估计硬件实现结构是一件值得做的工作。53\n前言1.2国内外研究现状随着各种视频编码技术的快速发展,与之相对应的硬件视频编码器也陆续出现,各自有一定的优缺点。为了促进H.264/AVC在硬件方面的发展,国内外在优化H.264/AVC编码算法各个模块的同时,提出了很多像三步搜索法、钻石搜索法、混合非对称十字多六边形格点搜索等算法,这些算法降低了计算复杂度,减小了运算量,效果也不错,也提出了现在最常用的匹配准则:SAD准则,大大降低了计算复杂度。ASIC是早期视频编码方案采取的主要芯片,众所周知,ASIC是固化了特定功能的芯片,不可编程,从设计到使用需要很长时间,产品一旦做出来就不允许再更改,导致它跟不上视频编码技术的发展,因此出现了其他方案,并替代了该方案。大多数的视视频编码设计方案,伴随着DSP技术的飞速发展,都相继转向了DSP平台。新一代高性能DSP芯片的陆续推出,并成为了现今视频编码设计方案的主流。主要有EQUATOR的BSP16、SigmaDesign公司的EM86XX【9】和Davinci平台、ADIBlackfin【10】处理器和Philip公司的TriMedia系列及新品PNX1500【11】以及TI的DM642DSP等。这些产品的设计都利用了DSP高性能的数字信号处理能力,同时DSP成本低,功耗也低,因此广受欢迎。加拿大UBVideo公司制作的一套基于TMS320C64x系列DSP芯片的H.26L实时视频通信系统,可以在H.263+的1/20倍的码率情况下,获得相同的图像质量【12】。随着人们需求的提高,编码技术在飞速的发展,视频编码的算法越来越复杂,控制也越来越难,需要更高性能的硬件结构。仅仅靠DSP芯片来完成运算量庞大的H.264视频编码算法已没有一点优势可言,虽然DSP芯片拥有强大的数字信号处理能力,但无法完成复杂的控制操作。在市场的压力下,大多数视频编码公司逐步转向DSP+FPGA或者DSP+ARM【13】的设计方案。在DSP+ARM的方案中,控制部分由ARM完成,DSP处理算法,软硬协同处理。在DSP+FPGA的方案中,控制部分交给FPGA完成,也是由DSP来完成算法的处理。NiosII软核技术【14】的发展使得SOPC的应用逐渐成熟,用FPGA来实现软硬协同工作也不再是难事。上述的两种方案有一个共同点,就是算法部分都由DSP芯片来完成,不同的是一个控制部分由ARM完成,一个控制部分由FPGA来完成。随着流水线技术在DSP芯片中的应用,使得其性能有了进一步的提升,但对实时性要求很高的应用,计算速度有限的中低端DSP芯片已无用武之地。高端的DSP,虽然能够满足要求很高的实时应用的需求,但这样做又显得成本太高,使得整个设计投入过大,投入市场收益甚微。FPGA作为一种新型的逻辑器件,拥有强大的并行运行能力和很高的计算速度。H.264视频编码的算法简单,运算工整,很适合利用FPGA来完成它的设计。大规模FPGA的出现,使得在FPGA上实现H.264视频编码的全部算法和控制成为了可能。已经有很多公司和研究所在从事基于PFGA的H.264视频编码器的设计。由Altera和Xilinx53\n前言Altera公司开发的基于大规模FPGA的视频处理套件很早就已经在市场上出售。经过近3年的努力,JointWave公司在2007年3月完成了H.264MainProfileEncoder的纯verilog语言的设计,并且FPGA验证顺利通过,通过封装和处理已在全球发行。它是第一款,也是现在业内水平遥遥领先的H.264MainProfileLevel3.0级别的纯硬件编码器。H.264视频编码技术虽然在迅速发展,但是采用FPGA设计的编码器却发展缓慢,我国还处在起步阶段。为了满足人们在日常生活和工作中对实时通信和娱乐的需求,大力发展H.264基于FPGA的视频编码器的设计与实现,将会赢得很大的市场。这将极大的改善实时通信,满足人们的需求。1.3论文的主要研究内容和章节安排1.3.1主要研究内容运动估计是视频编码中运算量最大,但同时也是最关键的部分,它对视频压缩的性能起着决定性的作用。采用FPGA强大的并行能力来完成强大的运算量,改善H.264视频编码的实时性,是一个很有意义的设计。本文主要研究了运动估计算法,在已有的运动估计硬件实现的基础上,通过扬长避短,提出了本文的数据流,根据数据流的特点给出了相应的硬件结构,通过数据流的串行输入、最终结果的并行输出,大大减小了I/O带宽,PE的利用率也一直保持在100%,充分利用了硬件资源。最后利用FPGA的分块设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,使用硬件描述语言VerilogHDL完成了各个模块的代码编写并进行了功能仿真,然后把各个模块综合在一起进行了功能仿真。最后在Altera公司的FPGA开发板上进行了验证。1.3.2论文的章节安排全文共六章,各章节内容如下:第一章首先介绍了研究的目的和意义,国内外的研究和发展现状,最后介绍了本文的主要研究内容及章节安排。第二章介绍了运动估计的概念和块匹配运动估计的原理,详细介绍了块匹配运动估计中的几项重要技术指标以及它们对运动估计效果的影响,对全搜索算法(FS)和几种常用的效果不错的快速搜索算法在匹配速度、运算量、匹配效果、硬件实现起来的难易程度等方面进行了对比分析。第三章对全搜索算法已有的两种脉动处理结构:1-D和2-D,进行了详细的分析,通过比较它们各自的优点和存在的弊端,取长补短,为后面的设计奠定一定的基础。最后简要的介绍了一下树形结构,分析了它的工作原理,并指出了其存在的严重不足。第四章介绍了VLSI53\n前言的设计流程和方法,确定了本文设计中的运动估计算法和参数指标。通过对前一章两种脉动结构的扬长补短,同时充分利用参考帧中相邻当前块匹配区域数据的交叠,给出了一种本文的数据流,根据数据流的特点映射出相应的2-D脉动结构,大大减小了I/O带宽。第五章将整个运动估计模块划分为一个个功能子模块,然后使用硬件描述语言VerilogHDL完成了各个子模块的代码编写并进行了功能仿真。子模块仿真通过后,把所有模块综合起来,进行了仿真。通过分析仿真数据,证明了本文设计的全搜索运动估计模块能够正常工作,并且能够实现全搜索算法的功能,输出正确的运动矢量。第六章总结与展望,总结了本文完成的主要工作,指出了其中存在的不足之处,为以后的研究指明了方向。53\n运动估计及经典算法2运动估计算法的介绍运动估计是视频压缩编码技术中一个相当重要的组成部分。它能够降低相邻帧间存在的大量时间冗余,提高了视频压缩比。运动估计的效果好坏决定了视频编码器的性能。运动估计占用了整个编码时间的70%左右,所以运动估计算法的复杂度直接决定了视频编码器的性能和效率。H.264中运动估计算法采用块匹配算法,该算法最简单,效果也相当不错,促进了实时实现的可行性,因此它成为目前最常用的方法,国际视频编码标准也采用块匹配算法。2.1H.264标准概述H.264,一个视频压缩编解码的标准,虽然它的编码技术简单,却达到了增强压缩性能,提高了网络传输(network-friendly)的能力,以满足日益增长的“对话型”(视频电话,会议等)和“非对话型”(视频存储、广播以及流媒体等)视频应用的需求。H.264是在H.26L基础上提出来的,保留了MPEG-4等以往标准的优点,并沿用了MC-DCT,同时增加了CAVLC等新技术的应用,使得压缩效率更高,同时也提高了视频质量。其主要优点【15】有以下几点:(l)更高的编码效率。在大多数的码率下,与以前的标准相比,当获得等同的视频质量时,H.264的码率只有它们的40%左右;(2)更高的视频质量。在任何码率下,经过H.264处理的视频,通过解码后,视频的质量比其它标准偏高;(3)自适应的延时特性。可用于延时小的视频会议等,也能够用于无延时的视频监控等;(4)错误恢复功能。H.264能够很好的解决网络传输时丢包的问题,适用于高误码率下,无线网络中的数据传输;(5)良好的网络传输功能。如图2-1所示,H.264标准分为两个层次。视频编码层(VCL:VideoCodingLayer)负责对视频的压缩,网络适配层(NAL:NetworkAdaptationLayer)负责对特定网络信息包的传输,因此,H.264能够优先控制信息,更好的完成对网络数据的封装。53\n运动估计及经典算法图2-1H.264标准结构图Fig.2-1H.264standardstructure2.2运功估计技术的概述2.2.1运动估计的基本概念在帧间编码中,相邻帧间的时间间隔很小,人眼分辨不出来,其中的运动量很小,两帧的相似度很高,可以将图像帧分成互不重叠等大小的宏块,找到每个宏块在相邻帧中的最佳相似位置,计算出相对偏移量,这个偏移量就是运动矢量,这个过程就是运动估计。运动估计能够大大减小帧间存在的大量时间冗余,增大了视频压缩比,也就减少了视频需要传输的比特数,减小了传输带宽,因此它在视频压缩处理中起着很大的作用。2.2.2运动估计的基本过程运动估计分以下几步完成:第一步,把当前视频帧分为若干个等大小的互不重叠的宏块,设法找到当前块每个宏块在前一帧给定的搜索区域中最佳相似位置,计算出运动矢量;第二步,将在搜索区域中得到的最相似宏块和当前帧对应宏块的对应像素作减法,求的绝对值和,也就是残差块像素;第三步,把得到的每个当前块的运动矢量和残差块的像素传递给下一个模块,经过下一个模块的处理后进行传输。2.3块匹配技术概述实际上,两帧图像之间的物体运动一般是刚体的平移运动,位移量不大,彼此间存在着很强的相关性。块匹配法就是将图像分成若干个子块,并有以下的假设:(1)当前块中的所有像素有着相同的运动;(2)运动物体不会随着时间的变化而改变了像素值。53\n运动估计及经典算法块匹配算法就是将当前帧图像分为等大小且互不重叠的宏块,满足以上的两点假设,这时候就可以根据预定的搜索范围[16],按照匹配准则,在搜索区域中找到和当前块最相似的宏块,计算出两个块之间的相对位移量,并记录,这个便为当前块相对于前一帧的运动矢量,然后将在搜索区域中得到的最相似宏块和当前帧对应宏块的对应像素作减法,求的绝对值和,也就是残差块像素,这样每个当前块就可由一个运动矢量和残差块像素进行表示。运动估计越准确,得到的匹配块就越相似,对应的残差块像素越小,经过处理后变为很小的比特数,传输的过程中占用的带宽将大大减小。运动补偿过程:依据每个当前块的运动矢量,找到在前一帧的对应的最佳匹配块,加上残差块的像素,便可以得到一个和原当前块基本一样的宏块。运动估计越准确,得到的运动矢量也就越精确。运动补偿的效果取决于运动矢量的精确程度,运动矢量的精确程度又取决于运动估计的准确度,因此,选择一个好的运动估计算法很重要。实际上,两帧之间的物体运动一般是刚体的平移运动,位移量不大,因此往往把一帧图像分成若干M×N块,以块为单位分配运动矢量,大大降低码率。如图2-2所示。图2-2块匹配算法Fig2-2Blockmatchingalgorithm设前一帧搜索区为(M+2Wx,N+2Wy),当前帧块与前一帧块的位移为d(i,j),在搜索区中,如能找到与当前帧块匹配的前一帧块,则该块运动矢量为(i,j)。2.4块匹配运动估计的参数和准则块匹配算法中,涉及到分块大小、搜索范围、匹配准则等几个参数的选取,这些参数的选取需要综合考虑,它们的好坏严重影响着运动估计的准确度及实现难易程度。2.4.1分块大小53\n运动估计及经典算法块匹配算法的使用是有前提的,这个前提就是假设每个分块内所有点做着位移相同的运动,而且运动过程中,物体各个点的像素不会发生变化。运动的剧烈程度不同,需要采用的分块大小最好也不要相同。块太大时,块内各像素位移相同的假设,与实际情况不相符,会对运动估计的准确度造成很大的影响;分块太小时,很容易受到噪声等因素的影响,也使运动估计的准确度不高,同时还会得到大量的运动矢量,大大增加了计算量,降低了编码效率。因此有必要选择合适的块大小,满足既定的前提。H.26x和MPEG一般采用16×16宏块,这种分法已被证明很平衡,为了进一步提高预测的精度,H.263和MPEG-4增加了对8×8宏块的处理,而H.264将最小宏块分到了4×4,更进一步的提高了运动估计的结果精确度。采用4x4的分块,虽然在一定程度上能够提高运动估计的精度,但这样每一帧图像就需要更过的运动矢量和残差块来表示,编码效率降低,传输时也将占用更多的带宽。故在选择分块大小时要综合考虑上述因素,提高编码效率。2.4.2匹配准则任何事物的执行都需要一定的标准。在H.264中,衡量当前块和匹配块之间的相似程度的准则是块匹配准则,同时匹配准则直接决定了运算复杂度和匹配精度,因此匹配准则的选取很重要。常见的匹配准则有:(1)MAD是最小绝对差。公式如下:(2.1)式中(i,j)为位移矢量,和分别为当前块和参考帧中相对当前块的位移为(i,j)的亮度像素值,MxN为分块的大小,经过匹配比较,MAD的值最小的点,就是最优匹配点。(2)最小均方误差函数(MSE)。公式如下:(2.2)MSE值最小的点即为最优匹配点。(3)归一化互相关函数(NCCF)。公式如下:(2.3)结果最大时即为最优的匹配点。(4)绝对差值和(SAD)。公式如下:(2.4)53\n运动估计及经典算法SAD最小是即为最优的匹配点。由于MSE准则和NCCF准则中有乘方运算,实现时相比之下就要占用更多的资源,计算复杂度也较其它的高。而MAD准则相比之下就有一定的优势。确定了需要采用的运动估计算法和搜索范围的大小,匹配准则对运动估计精度的影响可以忽略不计,但采用SAD能够明显的降低计算复杂度,它和MAD相比只是少了一个除法因子,其它一样,虽然如此,但它却和MAD准则有着相同的匹配效果。因为分块大小一旦确定,MxN的大小也就固定,在进行除法操作显得有点多余,所以MAD准则逐渐被SAD准则取代。2.4.3搜索策略搜索策略选择恰当与否,严重影响着运动估计的准确性和速度。搜索策略体现在搜索方向和搜索路线两个方面,二者结合不同的搜索步长就能成为不同的搜索模式。但不能让搜索过程无限制的进行下去,有时候没有必要,比方对静止的图像,那么多搜索步骤都是在做无用功,因此需要一个提前终止准则,保证搜索过程能够及时终止,减少时间的浪费。搜索算法的效率取决于搜索模式,提前终止准则也可以在一定程度上提高搜索算法的效率。2.4.4搜索范围的确定搜索范围的大小严重影响着运动估计的精度,它的确定需要综合、慎重的考虑。搜索范围的确定需要注意以下两点:1要根据视频的清晰度来确定搜索范围的大小,清晰度越高,相对搜索范围就越大;清晰度较低,就可以选取较小的搜索范围;2要根据视频图像运动的剧烈程度来确定搜索范围的大小,运动相对剧烈,需要的搜索范围就相对较大;运动相对平缓,只需要一个较小的搜索范围就能达到预期目的;以上两点是确定搜索范围时需要考虑的重要因素,可见,搜索区域的大小的确定需要从实际情况出发,不能采用一个相同的标准。当搜索区域增大时,虽然能在一定程度上提高运动估计的准确度,但是增大了计算量,这就意味着将要占用更多的硬件资源。因此搜索区域的大小的选择就要视具体情况而定,具体情况具体分析。2.4.5算法评定指标53\n运动估计及经典算法运动估计就是为了在前一帧搜索区域中找到与当前块最为相似的块,运动估计越准确,得到的相似块的相似度就越高,压缩性能就越好,需要传输的残差块像素就越少。如何判断一个算法的好坏,就要通过观察匹配的效果和花费搜索时间的多少,时间多少可以用客观条件衡量,匹配效果的好差最直接的办法就是人眼观察。但人眼看到的图像是诸多因素相互作用的过程。这些因素具有不确定性,其中都加入了人的主观意识,用人眼的观察来衡量匹配效果的好差显得不科学。客观的标准不受任何因素的影响,因此采取客观的标准来衡量匹配效果的好差,其中最常用的是峰值信噪比PSNR(PeakSignaltoNoiseRatio):(2.5)PSNR值越大,图像的质量就越高,PSNR值越小,图像的质量相对较低。PSNR的计算简单,也能够很好的反映图像的质量,不受主观因素的影响,因此被广泛的使用2.4.6估计精度实际中的物体并不是都在做着整像素的位移,所以整像素运动估计的精度在这个时候就不能真实反映物体的位移。物体运动具有连续性,相邻两帧之间不可能都是是以整像素为基本单位的运动的,可能是以1/2像素或者1/4像素等亚像素作为运动单位的。图2-3给出了一个视频序列分别用1/2像素、1/4像素和1/8像素精度时编码的效率,从图中可看到采用1/4像素精度时的编码效率相对于1/2像素精度有了显著的提高,但1/8像素精度和1/4像素精度的编码效率相比并没有明显的提高,1/8像素的内插公式也更为复杂,所以1/8像素精度的运动矢量模型渐渐被1/4像素精度的运动矢量模型所取代。图2-3不同亚像素的编码效率Fig2-4Codingefficiencyofthedifferentsub-pixel53\n运动估计及经典算法为了进一步提高运动估计的准确度,后来的标准采用了亚像素的运动估计,虽然在一定程度上提升了性能,但却大大增加了运算量。亚像素并不存在于参考图像中,它的像素值需要通过邻近已编码点的像素按一定的准则内插而得到。亚像素运动估计通常在整像素搜索得到的最佳匹配点的附近插值形成一个虚拟的亚像素块,将步长变为分数进行下一步的搜索。亚像素运动估计的实现很复杂,考虑到本人的能力和时间问题,只研究了整像素运动估计。2.5经典块匹配运动估计算法介绍和性能分析运动估计的算法决定了视频压缩的性能和速度,是视频压缩编码系统中至关重要的一环。运动估计的准确度和匹配的速度反映了一个算法的优劣。准确度越高,残差值越小,编码后需要传输的比特数就越少,降低了传输带宽。匹配速度客观的表现在得到一个运动矢量所搜索的点数。下面介绍几种常用的运动估计算法。2.5.1全搜索算法(FS)全搜索算法是一种穷尽的搜索算法,将当前块和参考帧搜索区域中的每一个可能的块都进行一次匹配比较,按照匹配准则找到最佳匹配块。全搜索法有光栅式和螺旋式两种搜索方式,如图2-4所示。光栅式搜索如图(a),从左上角的开始,按行搜索,直到将整个搜索范围内的可能块匹配完毕;螺旋式搜索如图(b),从中心开始,螺旋搜索到最后一个边缘块,各个块的运动矢量规律性比较差,实现起来困难,相对于光栅式搜索略显复杂。(a)光栅式搜索53\n运动估计及经典算法(b)螺旋式搜索图2-4全搜索的两种搜索方式Fig2-4Twosearchmethodsoffullsearch全搜索法(FS)拥有最高的运动估计准确度,也不容易陷入局部最优,也是其它快速搜索算法的判断准则,将匹配结果和全搜索法进行对比,来评判该算法的好坏。全搜索法高的准确度是建立在庞大的运算量之上的。全搜索算法(FS)的规则最简单的,但运算量却占到了视频压缩编码过程的70%左右,当搜索范围为(-f,+f)时,需要进行(2f+1)2次的运算,因此加大了实时性实现的难度,要想实时实现,就需要很高的硬件水平。后来,为了减小全搜索算法庞大的运算量,出现了很多快速运动估计算法,运动估计的准确度也挺高,运算量却大大减小。全搜索法的算法简单,性能也最好,易于VLSI实现,考虑到现有的硬件条件,要实现它已成为一种可能,某些要求高的应用场合非的采用全搜索算法不可,因此对它的研究还是很有意义的。2.5.2三步搜索法(TSS)目前,在全搜索算法的基础上,已发展出了一些快速搜索算法。快速搜索法只是将当前块与对应搜索区域中的部分宏块进行匹配计算,从这几个宏块中找到最佳的匹配块,这样做就减小了全搜索算法需要的匹配次数。在减小了匹配次数的同时,另一个问题也相继而生,就是快速搜索算法所找到的最优匹配块,到底是真正的最优,还是局部的最优。为了保证速度,快速搜索算法并没有像全搜索算法那样进行穷尽的搜索,只搜索了特定的宏块,虽然保证了速度,却容易陷入局部最优,而全搜索算法能够保证找到全局最优的匹配块,保证最匹配的宏块运动矢量信息。由于快速搜索算法得到的不是最优匹配块,因此得到的残差块像素也就越大,传输的时候就要占用更多的带宽。53\n运动估计及经典算法三步搜索法(TSS),顾名思义,得到最终的运动矢量需要三个步骤。它从搜索区域的中心开始,搜索周围的8个点,该步得到的最小SAD值点,作为下一步搜索的中心,步长减半,搜索周围的8个点,第三步也是如此,最终找到的SAD值最小点就是最优点,该点相对原点的位移就是运动矢量。三步法思想简单,性能良好,被许多软件采用。如果选定搜索范围为(-7,+7),三步搜索过程如图2-5所示:第一步,从搜索区域的中心开始,步长为4,匹配运算周围8个带1的圆圈点;第二步,以第一步中SAD值最小的点为新的中心,步长为2,匹配运算周围8个带2的圆圈点;第三步,以第二步中SAD值最小的点为新的中心,步长为1,匹配运算周围8个带3的圆圈点,这时候得到的便是最佳匹配块,计算出该块相对搜索中心的位移,就是当前块的运动矢量。图2-5三步搜索法Fig2-5Three-stepsearchmethod图2-5示意了最大搜索距离为7时的搜索过程。各步操作如圆圈中的数字和对应位置所示。三步搜索法,最多需要计算25个点的SAD值,而全搜索算法采用相同的搜索范围,却需要计算225个点的SAD值,相比可见,三步法大大降低了运算量。但是,虽然三步搜索法大大降低了运算量,但第一步过于简单,在搜索范围较大时,第一步就有很大的可能偏离了最佳的搜索区域,像那种静止的运动,运动估计得到的就不是真正的最佳匹配点,只是局部最优,最终影响压缩编码的性能,导致图像失真。2.5.3新三步搜索法(NewThreeStepSearch)NTSS算法[16]弥补了TSS算法在估计运动不剧烈的的运动上的不足。新三步法在三步法第一步搜索的基础上增加了对中心点的8个邻域的测试,并采用了提前终止的策略,倘若最小的BDM(BlockDistortionMeasure)出现在8邻域的中心就停止搜索,这样对于估计静止块是非常有效的。具体步骤如下:(l)在三步法的第一步的基础上,增加对中心点的8个邻域的测试。53\n运动估计及经典算法(2)提前终止策略对估估计静止块和亚静止块(运动范围在2个像素内)的运动矢量有很大的优势。如果第一步最小的BDM在搜索窗口的中心,就停止搜索;如果出现在中心点的8邻域中,则以最小BDM为中心计算其8个邻域,重复该步骤,直至最小BDM出现在中心。如果最小的BDM出现在w/2上,接下来就按三步搜索法的第二步和第三步执行,找到最佳的运动矢量。NTSS算法执行完所有的步骤需要测试33个点,但NTSS算法有时会在第一步或第二步的时候就提前终止,对于静止的块只需测试17个点,对于亚静止的块需要测试20或者22个点,所以NTSS相对于TSS有了一定的改善,加速了约18%。图2-6新三步搜索法Fig2-6Newthreestepsearch2.5.4菱形搜索法(DiamondSearch)菱形搜索法因其搜索模板像钻石又被称为“钻石”搜索算法[17],它采用LDSP(LargeDiamondSearchPattern,大钻石搜索模板)和SDSP(SmallDiamondSearchPattern,小钻石搜索模板)两种搜索模板,如图2-7所示。“钻石”搜索算法,先采用步长大、范围广LDSP模板搜索,进行一个粗略的定位,这也符合视频图像运动的基本规律,陷于局部最优的可能性降低;当完成了粗略定位后,再采用SDSP模板搜索LDSP中得到的最小SAD值点的周围4个点,这时得到的SAD值最小点便是最优匹配点,这样做避免了陷入局部最优,提升了运动估计的准确度。53\n运动估计及经典算法(a)大菱形(b)小菱形图2-7“钻石”搜索模板Fig2-7"Diamond"searchtemplateDS算法流程如下:第一步:以搜索窗口的原点(O,0)为中心,采用LDSP模板,检测这九个点。如果MBD(MinimumBlockDistortion)点位于中心,就转至第三步;否则,转至第二步继续搜索。第二步:以第一步搜索得到的MBD点为中心,构造另一个LDSP。如果得到的新MBD点位于中心,转至第三步,否则,重复此步操作,直至匹配点到达搜索窗的边缘,停止搜索。第三步:采用SDSP模板,这一步搜索得到的MBD点便是最优匹配点,其相对位移便是运动矢量。2.5.5四步搜索法(FourStepSearch)四步搜索法也利用了运动矢量靠近中心分布的理论,将TSS的9x9搜索窗改为5x5,每一步都以上一步最小的BDM的位置为中心,继续下一步的搜索,步长取决于最小BDM的位置。四步搜索法的四步操作如下:(l)在搜索区域的中心用一个5x5的窗口,如果最小BDM出现在窗口中心,转到第四步,否则继续;(2)搜索窗口仍用5x5,但搜索模式要依赖上一步最小BDM的位置,若在窗口的四个角,就增加五个测试点,若在窗口四条边的中心,就增加三个测试点,若出现在窗口的中心,转至第四步继续,否则继续;(3)搜索模式和第二步一样,但该步下来不管怎样都转至第四步;(4)搜索窗口换为3x3,这时得到的最小BDM点便是最优匹配点,其相对位移便是运动矢量。53\n运动估计及经典算法图2-8四步搜索法Fig2-8Four-stepsearchmethodFSS又一次改进了快速搜索算法,搜索速度不一定比TSS快,但是FSS的计算复杂度相比TSS有所降低,而且整个搜索过程比较平缓,减小了出现局部最优的可能,并对静止的块缩短了搜索时间,所以获得了较好的搜索效果。2.5.6混合非对称十字多六边形格点搜索(UMHexagonS)混合非对称十字多六边形格点搜索算法【18】(UMHexagonS)是已有的快速搜索算法中估计效果最好的,已被H.264官方采用。UMHexagonS算法分四步完成搜索,搜索步骤如下:第一步:进行矢量预测,确定搜索的起始点。第二步:非对称的十字搜索,在一般的运动中,水平方向的运动幅度大于垂直方向的运动幅度,故可以通过非对称的十字形搜索先做一个初步的搜索。所谓非对称十字,如图2-9中step2的△点所示,水平方向的搜索长度为垂直方向搜索高度的2倍,搜索点间距2个步长。这一步得到最佳匹配点便是下一步搜索的中心。第三步:多层次六边形搜索,分两步完成。首先以上一步的最佳匹配点的位置作为搜索中心,做一个5×5范围的全搜索,如图2-9中step3-1的圆圈所示;第二步进行多层次六边形搜索,采用了16点的六边形,即图2-9中step3-2的小方形所示,如图2-9所示,六边形覆盖的区域比较大,而且六边形左右两侧的点数比上下两侧的搜索点数多,这也符合运动的规律。六边形由里到外层层搜索,等搜索结束后,比较每层中相对较小的SAD值,其中最小的SAD值所对应的位置便是下一步继续搜索位置的中心。第四步:扩展的六边形搜索,第三步的多层次六边形搜索可以得到不同精度的运动矢量,当最佳匹配块在外部六边形时,得到的运动矢量精度就偏低,故需要进一步细化搜索,通常用六边形继续下一步的搜索,如图2-9Step4所示。先采用半径为2的六边形反复搜索,直到最佳点出现在六边形中心,接下来用半径为153\n运动估计及经典算法的小菱形继续搜索,直至最佳匹配块位于小菱形的中心。图2-9非对称十字型多层次六边形格点运动搜索算法Fig2-9Asymmetriccross-shapedmulti-layeredhexagonalmovementgridsearchalgorithm通过对以上几种搜索算法的实现过程对比,发现全搜索算法虽然计算量最庞大,但是匹配效果却是最好的,而UMHexagonS算法虽然能达到和全搜索算法差不多的效果,但是搜索模板多样化,不利与硬件实现,通过权衡,最终选择了全搜索法进行研究。2.6本章小结本章介绍了运动估计的概念和块匹配的原理,分析了分块大小、匹配准则、搜索策略、搜索范围、估计精度对视频压缩编码性能的影响,以及它们选取和确定中需要注意的问题,介绍了几种运动估计算法的原理和具体实现步骤,经过性能对比以及硬件实现的难易程度,最终决定选择全搜索算法进行研究。53\n运动估计及经典算法53\n运动估计的经典硬件结构3运动估计的经典硬件结构既然选择了全搜索算法作为本文的研究对象,那么接下来就要着手研究用怎样的硬件结构来实现全搜索算法。良好的硬件结构加上流畅的数据流,使的整个系统能够高效的运行,加大了视频编码实时性的可能性。一个好的运动估计硬件结构意味着该结构占用了较少的硬件资源、运行速度快、使用的硬件I/O端口数目少。要想设计出一个好的结构就要从以上三方面综合考虑。算法映射了结构,视具体算法的数据流来确定要采用的硬件结构。根据上一章的介绍,主要有全搜索算法和快速搜索算法两大类算法。因为本文研究的是全搜索算法,所以就不再介绍快速搜索算法的方方面面。全搜索算法的性能最好,而且数据流工整,易于VLSI实现,很早就得到了大量的研究,至今也提出了很多经典的硬件结构。穷尽式的搜索算法带来了庞大的计算量,为了保证其在VLSI结构中的高效运行,就只有增加芯片的面积,使用多个PE并行计算。因此,就要在这几个矛盾体之间找到一个平衡点,使得硬件结构能够高效的运行,进而提高编码的性能,促进实时实现的可能。全搜索算法的主要硬件结构有1-D脉动结构、2-D脉动结构和树形结构【19】,这三种结构都是从减小I/O带宽、提高计算吞吐率的方向进行设计实现的。Yang等提出的1-D脉动结构是最早的运动估计硬件结构,没能实现相邻当前块搜索区域重叠数据的重用。THOMASKOMAREK等提出的AB2型2-D脉动结构虽然实现了数据的重用,但却大大增加了I/O带宽。在分析了这些经典硬件结构之后,通过扬长补短,提出了本文的2-D脉动结构,实现了相邻当前块搜索区域数据的重用,也减小了I/O带宽。数据流串行输入,最小SAD值和运动矢量并行输出,使得PE的利用率也一直保持在100%,促进了实时实现的可能。3.1流水线技术概述流水线(pipeline)技术【20】是指将一个重复的过程,分解为若干个子过程,各个子过程重叠进行操作的一种准并行处理实现技术。具体到本文的流水线技术指的是将当前块数据和搜索区域的数据存在不同的片外存储单元中,而且数据流在各部分之间单向传递,并在相邻部分之间增加数据缓冲层,形成一系列流水级。没有使用流水线时,要等到上一个数据处理完,才能输入下一个数据,但使用流水线之后,下一个数据的输入只需要其上一个数据将一个流水级处理完毕。与并行结构相比,流水线结构可以充分利用数据的相互依赖关系,但只允许顺着流水线的单方向依赖关系。所谓流水线处理,是指将工作量分成若干个时间上均衡的操作段,各操作段重叠进行并行操作。流水线的处理速度只与输入速度有关,因此,只要设计出好的流水线,就能使运行效率达到很高。 53\n运动估计的经典硬件结构如果一个设计的处理流程可以分为若干个步骤,并且整个数据处理是单方向流动的,这个时候可以采用流水线设计来提高系统的工作效率。为了提高大型的、对速度要求比较高的系统的工作频率,便可以采用流水线的设计方法。全搜索算法中,当前块的相邻搜索区域和相邻当前块的搜索区域中数据的有很多的重叠,具有较高的数据复用率,因此可采用流水线的技术对这些数据进行处理,完成了庞大的运算量的同时也提高了效率。3.2脉动阵列概述H.T.Kung首先提出了脉动阵列[21](systolicarray)的概念。脉动阵列中,多个执行固定操作的PE与相邻的PE按一定的规则互联,需要处理的数据在阵列中一级一级的有序传播,得到了充分利用,这样做大大减小了I/O带宽。脉动阵列特点如下:(1)每一个节点,也就是PE,也称为胞元,都是相同的;(2)每个PE只与相邻的PE进行通信,也就是说PE间的通信具有局部性,而且通信是规则的;(3)每个PE都有局部的存储器,也就是PE的某些边带有延时,这些延时在硬件上对于寄存器;由于脉动阵列的以上特点,造成PE之间的高度流水化、规则化,因此系统吞吐率非常大且易于VLSI实现。流水化意味着吞吐率大,规则化则意味着版图流片成功率大。在全搜索法(FS)中,PE结构简单,而且每个PE都完成的是一个固定的操作,适合脉动阵列处理的特点,因此可以采用脉动阵列来实现整个算法。3.3全搜索运动估计算法的硬件结构进行运动估计的时候,将当前帧分为等大小且互不交叠的宏块。然后在参考帧(-f,+f)的范围中,找到与当前帧中的当前块相似程度最大的块,即最佳匹配块。匹配过程中一般采用SAD准则。(-f≤m,n≤f-1)(3.1)c(i,j)为当前帧中坐标为(i,j)的点的亮度值,p(m+i,n+j)为参考帧中相对当前块位移为(m,n)的点的亮度值,MxN为宏块大小。在H.264标准中,最小基本宏块为4×4,本文就采用了最小的宏块进行研究。下面是一个4×4的宏块,在搜索范围为(-2,1)的搜索区域。53\n运动估计的经典硬件结构图3-1搜索区域Fig3-1Searcharea如果搜索范围为(-f,f-1),搜索区域就是一个边长为2f+N-1个像素围成的正方形。以4×4为例子,f=2的话,搜索区域是一个7x7的正方形,如上图所示。一个7x7的区域中有16个不同的4×4块,因此,当前块就要与这16个块一一进行匹配计算,找到其中SAD值最小的块,即最佳匹配块。对于一个给定的当前块和搜索范围,它的运算量是固定的。计算量确定了,这就要考虑时间和处理单元的问题了。硬件实现为了满足实时性的要求,就要采用并行和流水线技术。处理单元的数目增多,在计算量固定的前提下,处理的时间就会缩短,但这样做增大了芯片面积,占用了更多的资源,不满足一个好的结构的特点,反之亦然,因此,要想设计出一个好的硬件结构,就要先处理好二者的关系。3.3.1经典的1-D脉动结构KUN-MINYANG提出的1-D脉动结构[22]的是运动估计结构的经典代表。该结构让当前块和参考帧的数据同时串行输入,减少了I/O端口数,每个PE在多路选择器的作用下选择合适的数据进行匹配运算。这种1-D脉动结构对数据流的并行处理缩短了计算时间,提高了匹配运算效率。1-D脉动结构的硬件框图如下:53\n运动估计的经典硬件结构图3-21-D脉动结构Fig3-21-Dpulsestructure从上图可以看到,每个PE负责完成c和p或者p′的匹配运算,究竟是p或者p′,这就是多路选择器需要完成的工作了。数据串入并出,使得处理速度有了一定的提高,每个PE也一直保持着100%的利用,充分利用了资源。但没能利用相邻当前块搜索区域的数据重叠,浪费了大量的时间。下表为这种结构的数据流:表3-11-D脉动结构的数据流Table3-1Thedatastreamof1-DpulsestructuretDataPE0PE1…PE15cpP′0c(0,0)p(0,0)c(0,0)-p(0,0)1c(0,1)p(0,1)c(0,1)-p(0,1)c(0,0)-p(0,1)2c(0,2)p(0,2)c(0,2)-p(0,2)c(0,1)-p(0,2)..................14c(0,14)p(0,14)c(0,14)-p(0,14)c(0,13)-p(0,14)15c(0,15)p(0,15)c(0,15)-p(0,15)c(0,14)-p(0,15)c(0,0)-p(0,15)16+0c(1,0)p(1,0)p(0,16)c(1,0)-p(1,0)c(0,15)-p(0,16)c(0,1)-p(0,16)16+1c(1,1)p(1,1)p(0,17)c(1,1)-p(1,1)c(1,0)-p(0,17)c(0,2)-p(0,17)........................16+15c(1,15)p(1,15)p(0,31)c(1,15)-p(1,15)c(1,14)-p(1,15)c(1,0)-p(1,15)2*16+0c(2,0)p(2,0)p(1,16)c(2,0)-p(2,0)c(1,15)-p(1,16)c(1,1)-p(2,0)........................53\n运动估计的经典硬件结构从这个数据流表格可以看出,所有PE同时计算,每个PE先完成一行的匹配运算,在一个大的周期中,每个PE完成了对一个块的匹配。3.3.2AB1类型的1-D脉动结构1-D脉动结构由PE处理单元、累加器和比较器等单元组成。PE处理单元的数目和当前块的大小保持一致。AB1类型的1-D脉动结构[23]中PE个数为N,PE中包含了寄存器和比较器,每次把匹配结果寄存其中,方便下一个块使用。图3-3AB1型1-D脉动结构(N=3,f=2)Fig3-3AB1-typestructureof1-Dpulse(N=3,f=2)从图3-3可以看到,N=3,f=2时,需要3个PE。匹配计算开始后,当前块数据流从右边,参考块数据流从左边同时进入PE。在第一个时钟周期里,第一个PE完成了当前块c(0,0)和参考块p(0,0)之间的匹配运算,并将匹配结果存储。在第二个时钟周期里,第一个PE运算的是当前块c(1,0)和参考块p(1,0)之间的差值,并存储结果,同时第二个PE开始运行,运算的是当前块c(0,1)和参考块p(0,1)之间的差值,并存储结果。这个时候,第一个PE把第一个时钟周期里存储的|c(0,0)-p(0,0)|向下传递给第二个PE,并和第二个PE中的存储的|c(1,2)-53\n运动估计的经典硬件结构p(1,2)|相加生成一个新的值,存储在第二个PE中。重复上面的操作,经过层层累加,就能得到每一个匹配块的SAD值,等到所有的SAD值都计算出来后,送给比较器进行比较,找出最小的SAD值,记录下这个值对应的块相对于当前块的位移,这样就得到了当前块的最佳匹配块和运动矢量信息。完成一个当前块的匹配运算需要的时间:T=N×(2f+1)×(2f+N)(3.2)3.3.3AS2类型的2-D脉动结构2-D脉动结构和1-D脉动结构所不同的是,它有多列PE,每一列PE的数量和宏块大小保持一致,而且所有的PE同时工作。图3-4AS2型2-D脉动结构(N=3,f=2)Fig3-4AS2-based2-Dstructureofthepulse(N=3,f=2)图3-4是N=3,p=2时,AS2型[24]的2-D脉动结构。有多列的PE处理器,PE中预先不存储数据。开始工作后,当前块数据流从上面,搜索区域的数据流从左边同时进入PE。每个数据在一个PE中完成匹配运算后,当前块的数据流向下传递,搜索区域的数据流向右传递。在第一个时钟周期,第一排第一个PE完成了当前块c(0,0)和参考块p(0,0)之间的匹配运算,并将匹配结果存储,并在下一个时钟周期传递给下面的PE。第二个时钟周期,第一列第二个PE完成了当前块c(0,0)和参考块p(0,1)之间的匹配运算,并将匹配结果存储。第三个时钟周期,第二列第一个PE完成了当前块c(1,0)和参考块p(1,0)之间的匹配运算,并将匹配结果存储。如此循环,第一列PE中存储的匹配结果经过层层累加得到了一个参考块的SAD值。在该结构中,一列PE完成当前块对应的搜索区域中一个参考块的匹配运算。得到一个当前块的最小SAD值和运动矢量需要的时间:T=N×(2f+N)(3.3)53\n运动估计的经典硬件结构3.3.4AB2类型的2-D脉动结构在分块大小相同,搜索范围相同的情况下,AB2型的脉动结构得到一个当前块的运动矢量所需要的时间明显比1-D脉动结构少,也比AS2型的2-D脉动结构需要的PE处理单元少。图3-5AB2型2-D脉动结构(N=3,p=2)Fig3-5AB2-type2-Dpulsestructure(N=3,p=2)这个2-D脉动结构和前面介绍的两个不太一样,如图所示,当前块的数据预先存在PE的寄存器中,只有参考块的数据在流动。第一个时钟周期,第一个PE完成了当前块c(0,0)和参考块p(0,0)之间的匹配运算,并将匹配结果存储,并在下一个时钟周期,传递给下一个PE。第二个时钟周期,第一排第一个PE又完成了当前块c(0,0)和参考块p(1,0)之间的匹配运算,并将匹配结果存储;第二个时钟周期,第二排第一个PE也开始了工作了,完成了当前块c(0,1)和参考块p(0,1)之间的匹配运算,并将匹配结果存储;第三个时钟周期,第一排第二个PE完成了当前块c(1,0)和参考块p(1,0)之间的匹配运算,并将匹配结果存储结果。这些匹配结果逐级向下传递,经过层层累加生成搜索区域中每个参考块的SAD值,最后送入比较器,找到使得SAD值最小的参考块的坐标,即为当前块的运动矢量。得到一个当前块的最小SAD值和运动矢量需要的时间:T=(2f+1)(2f+N)(3.4)在相同的分块大小和相同大小的搜索范围中,总的计算量是固定的。在1-D的结构中,使用了较少的PE处理单元,处理需要的时间相应的较长。2-D的结构中,使用了较多的53\n运动估计的经典硬件结构PE处理单元,处理一个当前块所需要的时间就相应的缩短。除了要考虑处理时间和PE处理单元数目的影响,还要考虑I/O端口数目的影响。AS2结构,I/O端口数目最多,这样就占用了较多的硬件资源,也影响了最终设计效果。3.3.5树形结构树形结构[25],如图3-6所示,PE处理单元的数目等于分块大小之积。图3-6树形结构Fig3-6Tree architecture通过上图发现,当前块的一个参考块的数据和当前块的数据按对应位置的关系同时进入PE中进行匹配运算,匹配的结果两两相加,逐级往下传递,生成最终的SAD值。等到所有的参考块的SAD值都计算出来之后,送给比较单元,找出SAD值最小的块及其对应的坐标,即运动矢量。树形结构,I/O端口数目最多,这样就占用了较多的硬件资源,造成资源的浪费,而且搜索区域的数据需要反复读取,浪费了大量时间,因此很少被采用。3.4本章小结53\n运动估计的经典硬件结构本章重点介绍了全搜索算法的几种硬件结构。详细介绍了每种结构的实现原理,以及资源的利用情况,指出了每种结构存在的优点,也分析了它们存在的不足,为本文的研究奠定了一定的基础。最后介绍了树形结构,介绍了它的工作原理,指出了它存在的弊端。53\n运动估计硬件结构的设计4运动估计硬件结构的设计结合第二章算法的介绍及第三章中已有硬件结构的介绍,决定在研究中采用全搜索算法。全搜索法算法简单,数据流规整,适合并行处理。本章将简单介绍基于算法的VLSI结构的设计流程,确定了运动估计过程中的相关参数,并对搜索区域相邻参考帧之间的重叠做了详细描述,从而确定了硬件结构,详细的介绍了该运动估计阵列实现的各个细节。4.1设计流程图4-1描绘了运动估计的整体流程。图4-1运动估计设计流程Fig4-1DesignprocessofmotionestimationVLSI设计[26]的第一步就是需求分析。比方一个产品,我们首先就要了解它是用来做什么的,要实现怎样的功能,要用在什么样的场合,根据这些具体要求我们来选择合适的算法,估算每种算法的实现成本,通过对比分析,选择最合适的设计方案。比如是否需要可变块的运算,是否需要更高精度的搜索算法等。算法的选取需要从视频质量、实时性要求和I/O端口数目等方面综合考虑。根据不同的需求选择不同的算法,比方需要尽量高的视频质量,就选取全搜索运动估计算法。算法一旦选定,就在JM模型中完成对该算法的验证和性能分析,保证该算法的可行性。53\n运动估计硬件结构的设计算法性能评估需要一定的衡量标准。VLSI实现十分复杂,如果先用硬件描述语言实现,然后再来衡量是否满足要求,如果不满足,修改算法后再来评估将是一个很浪费时间的过程,设计周期因此大大增长。因此算法性能的评估就建立在C语言上,通过比较PSNR(峰值信噪比),来评估算法的好差。算法确定后,我们就要根据算法的特点来确定VLSI的硬件结构。针对运动估计的VLSI结构很多,我们可以通过分析它们的工作原理,从中获得一定的启示。确定结构时需要综合考虑实时性、芯片面积、功耗等诸多因素的相互影响,从而得到占用资源最小,性能也最好的的VLSI结构。结构确定之后,就要完成算法的的RTL实现,并进行相应的功能测试和性能分析。由于本人能力的限制,一个人在有限的时间内完成H.264编码器中的运动估计的FPGA设计基本是不可能的事情。考虑到个人的能力和时间问题,只选取整像素作为研究对象,而且分块大小也只有4x4。在已有的运动估计硬件实现的基础上,通过扬长避短,提出了本文的数据流,根据数据流的特点给出了相应的硬件结构,通过数据流的串行输入、最终结果的并行输出,大大减小了I/O带宽,PE的利用率也一直保持在100%,充分利用了硬件资源。最后利用FPGA的分块设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,使用硬件描述语言VerilogHDL完成了各个模块的代码编写并进行了功能仿真,然后把各个模块综合在一起进行了功能仿真。最后在Altera公司的FPGA开发板上进行了验证。4.2设计方法利用FPGA的模块化[27]的设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,使用硬件描述语言VerilogHDL完成了各个模块的代码编写并进行了功能仿真,然后把各个模块综合在一起进行了功能仿真。4.3运动估计算法和相关参数的确定4.3.1运动估计算法的选择在第二章介绍的几种经典的运动估计算法中,快速搜索算法的计算量虽然比全搜索算法的计算量小,但很容易陷入局部最优的情况,影响估计准确度。而且快速搜索算法的模板多样,数据控制复制,数据复用性也不强,无法很好的发挥硬件的实时性强的特点,很难用硬件来实现。而全搜索算法简单,性能最好,数据流规则,易于硬件实现,适合VLSI实现,故在实际中仍得到很大的应用。因此本文采用全搜索算法。53\n运动估计硬件结构的设计4.3.2相关参数的确定分块大小:4×4块。匹配准则:选择最简单的SAD准则:(4.1)搜索范围:p(-2,+1);估计精度:精度为整像素,本文只研究整像素运动估计的情况。4.4数据复用每一个相邻的当前块,在搜索范围相同的情况下,有些搜索区域的数据是重叠的。每个当前块不同参考块间也有数据的重叠。图4-2相邻块搜索区域Fig4-2Searchareaofadjacentblocks上图中,当N=4,f=2时,全搜索算法要完成当前块和7x7的搜索区域中的16个参考块的匹配运算。这个过程中,实现了两种数据复用:第一种,每个当前块不同参考块间数据的重叠;第二种,每一个相邻的当前块,在搜索范围相同的情况下,有些搜索区域的数据是重叠的。如何利用这些重叠数据,是设计出一个好的运动估计VLSI结构的关键所在。4.5脉动阵列结构的设计和实现流程首先介绍下本文用到的PE的结构,如图4-3所示,它由一个减法绝对值单元、一个SAD53\n运动估计硬件结构的设计累加器和两个锁存器组成。一个锁存器用来寄存当前块的数据,实现PE间的传递;另一个锁存器用来锁存中间匹配运算结果用于累加生成最终的SAD。图4-3PE结构图Fig4-3ThestructureofPE本文中设计的2-D脉动结构如图4-4所示。该结构采用了串入并出的工作方式,每次最多的时候只需要读取3个数据,而且不会重读读取,大大降低了I/O带宽,PE的使用率也一直保持在100%。每个PE完成一个固定参考块的匹配运算,每次匹配运算结果都会在PE中进行存储并累加,直到控制信号的到来,完成一个参考块的匹配,把最终SAD值送给比较单元,比较单元每次会保存较小的SAD值,并保存相应的坐标信息,等到当前块的所有匹配结束,输出最终的SAD值和运动矢量信息。图4-42-D脉动阵列Fig4-42-Dsystolicarray图4-4中,当前块数据c从PE0开始串行输入,并沿着图中箭头所示的方向在PE间传递,如图,搜索区域的数据分为了两个部分,奇数列的数据为p,偶数列的数据为p′53\n运动估计硬件结构的设计,两部分数据都是串行输入的,通过数据选择单元的作用,在适当的时候传递给适当的PE处理单元进行匹配运算。而且每个搜索区域的数据都只读取了一次,充分利用了数据重叠。2-D脉动结构的数据流如表4-1所示,每个PE完成一个固定参考位块的匹配运算,生成该块的SAD。在第一个时钟周期,当前块数据开始从PE0中输入,PE0在选择信号的作用下,首先选择了P进行匹配运算,这样PE0就完成了当前块第一个数据c(0,0)和它的第一个匹配块中第一个数据p(0,0)的匹配运算,并将匹配结果存储。在第二个时钟周期,c(0,0)经过PE0的锁存后传递给PE1,c(0,1)进入了PE0,这个时候参考块数据p(0,1)同时被PE0和PE1选中,两个PE都完成了对应的匹配运算,PE1将匹配结果存储,而PE0将这次的匹配结果与上一个时钟周期的匹配结果累加后在进行存储。第三个时钟周期,c(0,0)经过PE1的锁存后进入PE2,c(0,1)经过PE0的锁存后传递给PE1,c(0,2)进入了PE0,这个时候p(0,2)同时被这三个PE选中,三个PE完成了各自的匹配运算,PE2将匹配结果存储,PE0和PE1都将匹配结果与前面存储的匹配结果累加后再存储。就这样,每经过一个时钟周期,都有一个新的PE开始工作,直到第16个时钟周期,所有的PE都运行起来,此后,每个PE都不停的进行匹配运算。值得注意的是选择信号在每个PE内部和PE间作用的时间都是4个时钟周期。在第16个时钟周期,PE0完成了当前块与搜索区域中第一个参考块所有点的匹配运算,并累加出了第一个SAD值,并在下一个时钟周期送给比较单元,并存储,同时记下了该SAD值对应的坐标信息,此后每经过一个时钟周期,其它的PE都完成了当前块一个参考块的匹配运算,并送入比较器,和前面已存的SAD值进行比较,保存下较小的SAD值及其对应的坐标信息,直到第31个时钟周期,当前块的所有参考块匹配结束,也得到了最小的SAD值和对应的运动矢量,并在第32个时钟周期时输出,这样就完成了第一个当前块的匹配运算。在第16个时钟周期的时候,PE0虽然完成了当前块第一个匹配块的匹配运算,但在第17个时钟周期的时候并没有停止工作,而开始了对下一个当前块和其对应的搜索区域中第一个参考块的匹配运算,其它的PE也都是这种工作模式。因此,该结构每个PE一旦启动,就会不停的进行匹配运算,利用率保持在100%。下表为该结构的数据流:53\n运动估计硬件结构的设计表4-12-D脉动阵列的数据流Table4-1Thedatastreamof2-Dsystolicarraytcpp′PE0PE1PE2PE3PE4PE81c0,0p0,0c0,0-p0,02c0,1p0,1c0,1-p0,1c0,0-p0,13c0,2p0,2c0,2-p0,2c0,1-p0,2c0,0-p0,24c0,3p0,3c0,3-p0,3c0,2-p0,3c0,1-p0,3c0,0-p0,35c1,0p0,4p1,0c1,0-p1,0c0,3-p0,4c0,2-p0,4c0,1-p0,4c0,0-p1,06c1,1p0,5p1,1c1,1-p1,1c1,0-p1,1c0,3-p0,5c0,2-p0,5c0,1-p1,17c1,2p0,6p1,2c1,2-p1,2c1,1-p1,2c1,0-p1,2c0,3-p0,6c0,2-p1,28c1,3p1,3c1,3-p1,3c1,2-p1,3c1,1-p1,3c1,0-p1,3c0,3-p1,39c2,0p2,0p1,4c2,0-p2,0c1,3-p1,4c1,2-p1,4c1,1-p1,4c1,0-p2,0c0,0-p2,010c2,1p2,1p1,5c2,1-p2,1c2,0-p2,1c1,3-p1,5c1,2-p1,5c1,1-p2,1c0,1-p2,111c2,2p2,2p1,6c2,2-p2,2c2,1-p2,2c2,0-p2,2c1,3-p1,6c1,2-p2,2c0,2-p2,212c2,3p2,3c2,3-p2,3c2,2-p2,3c2,1-p2,3c2,0-p2,3c1,3-p2,3c0,3-p2,313c3,0p2,4p3,0c3,0-p3,0c2,3-p2,4c2,2-p2,4c2,1-p2,4c2,0-p3,0c1,0-p3,014c3,1p2,5p3,1c3,1-p3,1c3,0-p3,1c2,3-p2,3c2,2-p2,5c2,1-p3,1c1,1-p3,115c3,2p2,6p3,2c3,2-p3,2c3,1-p3,2c3,0-p3,2c2,3-p2,6c2,2-p3,2c1,2-p3,216cp3,3c3,3-p3,3c3,2-p3,3c3,1-p3,3c3,0-p3,3c2,3-p3,3c1,3-p53\n运动估计硬件结构的设计3,33,317c4,0p4,0p3,4c4,0-p4,0c3,3-p3,4c3,2-p3,4c3,1-p3,4c3,0-p4,0c2,0-p4,04.6本章小节本章先介绍了VLSI设计中的一般流程,并根据FPGA模块化的设计思想,确立了本文的设计方法。根据本人的实际出发,决定采用全搜索算法作为研究对象,并确立了相关的各项参数。又分析了运动估计过程中存在的两种数据复用,并通过前一章对已有硬件结构的分析,提出了本文的数据流,根据数据流的特点,完成了硬件结构的设计。本文设计的结构充分利用了数据的重叠,而且每一个搜索区域中的数据只需要读取一次,大大减小了I/O带宽,连续的数据流也使得PE一直保持在高效工作的状态,该结构每个PE一旦启动,就会不停的进行匹配运算,利用率保持在100%。53\n运动估计硬件结构的设计53\n运动估计模块的设计和仿真5运动估计模块的设计和仿真通过前面几章的分析和介绍,明确了运动估计的原理,也分析了各种搜索算法的实现原理,对比了它们的性能,最终选取了运算量最大,但效果最好的全搜索算法作为研究对象,并确立该过程中需要用到的各项参数。通过对已有硬件结构的分析,提出了本文的数据流,根据数据流的特点,完成了硬件结构的设计。然后利用FPGA的分块设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,编写了各个子模块的Verilog代码,并分块进行了功能仿真,子模块仿真通过后,把所有模块综合起来,进行了仿真。通过分析仿真数据,证明了本文设计的全搜索运动估计模块能够正常工作,并且能够实现全搜索算法的功能,输出正确的运动矢量。5.1运动估计模块的总体结构通过已有硬件结构的分析,提出了本文的数据流,根据数据流的特点,完成了硬件结构的设计。本文设计的结构如图5-1所示:图5-1运动估计模块总体结构Fig5-1Theoverallstructureofthemotionestimationmodule从上图中可以看到,该结构由五部分组成,各个部分分工协作,完成了全搜索运动估计算法。首先,将当前帧的数据按分块的大小,逐列写入到片外存储单元c中,搜索区域中的数据按对应块的顺序,偶数列写到片外存储单元的p中,奇数列写入到片外存储单元p′中;然后,开始匹配运算后,c中的数据串行进入到PE中,p和p′中的数据由数据选择单元的控制,在合适的时间送给合适的PE进行匹配运算。每个PE计算的同时累加匹配运算结果,生成一个参考块的SAD值,当接收到计数满16的信号时,开始计算下一个当前块的匹配运算,并将SAD53\n运动估计模块的设计和仿真值送入比较器进行比较。当PE0计算满16时,将最终累加生成的SAD值送入比较单元,当做最小的SAD,并记录下对应的坐标信息,之后的PE匹配生成的其它15个块的SAD值都和PE0的SAD值进行比较,并更新最小的SAD值和对应的坐标信息,当所有参考块的SAD值比较完成后,在控制单元的作用下,输出最小的SAD值和对应的运动矢量。由于个人能力有限,详尽的完成整个运功估计模块有点不可能,本文实现的运动估计模块比较简单,主要是为了验证本文提出的数据流和与之对应的硬件结构的可行性。5.2存储单元功能模块该模块数据的存取分当前块数据的存取和参考帧搜索区域数据的存取。复位信号到来之后,数据随着时钟不断地输出,直到存在其中的数据全部输出。这其中涉及到一些无用数据,见上一章的表格,我用0填补,这些0并没有参与计算,只是为了方便数据的控制,这样就生成了该结构需要的数据流。数据流存储在三个存储体中,将当前帧的数据按分块的大小,逐列写入到片外存储单元c中,搜索区域中的数据按对应块的顺序,偶数列写到片外存储单元的p中,奇数列写入到片外存储单元p′中。片外存储单元c的控制:图5-2c的地址控制Fig5-2caddresscontrolModelsim仿真结果:图5.3c的Modelsim仿真波形Fig5-3Modelsimsimulationwaveformsofthec从波形中可以看出,复位信号到来后,每一个时钟的上升沿输出一个数据,满足设计要求。片外存储单元的p和片外存储单元的p′53\n运动估计模块的设计和仿真的控制和片外存储单元的c基本一样,这里就不再做具体的描述。5.3数据选择功能模块从数据流中可以看到,当前块的数据流c从PE0中开始,串行输入,并在PE间按顺序传递,而数据流p和p′,需要在psel信号的作用下,按需分配给每个PE处理单元,在PE中完成匹配运算。如果当前PE中接收到的数据选择信号psel=0,则选择数据流p中的数据进入该PE,与其中的数据流c中的数据完成匹配运算;如果当前PE中接收到的数据选择信号psel=1,则选择数据流p′中的数据进入该PE,与其中的数据流c中的数据完成匹配运算。从表4-1中的数据流可以看到,数据选择信号psel的规律性很强,而且具有可传递性。需要注意的是,这个psel选择信号在PE运算模块换行的时候要进行一次跳变,比方当PE3开始选择的是p,那么下一个时钟psel选择信号传到PE4的时候要选择P′,也就是说这个psel选择信号在每个PE的内部和PE之间都是维持四个时钟周期,所以每当PE要换行的时候,将上一个PE输出的psel选择信号先进行取反,再传递给下一个PE,这样就保证了数据流的准确性。从上面的分析可以看出,运动估计一旦开始,第一个PE就接收到了psel信号,如果psel=0,就选择数据流p,持续四个时钟周期之后,选择信号psel变为1,就选择数据流p′,也持续四个时钟周期,如此反复,其它的PE也是这样工作的,而且psel信号在PE间也具有可传递性,需要注意是每次PE换行的时候,psel信号要进行一次跳变。psel信号的实现很简单,可以利用一个计数器来实现。经过分析表4-1中的数据流,采用8计数器控制便可实现。PE选通信号psel产生:图5-4psel选通信号的产生Fig5-4pselstrobegenerationModelsim仿真结果:53\n运动估计模块的设计和仿真图5-5psel选通信号的Modelsim仿真波形Fig5-5Modelsimsimulationwaveformsofpselstrobe这只完成了一个PE选通信号psel的产生,但该结构有16个这样的PE,也就是有16个这样的选通信号,通过前面的分析可以知道这些选择信号有很强的规律性,基于此进行了代码编写。部分代码如下:wirep_sel_next0,p_sel_next1,p_sel_next2,p_sel_next3,p_sel_next4,p_sel_next5,p_sel_next6,p_sel_next7,p_sel_next8,p_sel_next9,p_sel_next10,p_sel_next11,p_sel_next12,p_sel_next13,p_sel_next14;wirepsel0,psel1,psel2;assignpsel0=~p_sel_next3;assignpsel1=~p_sel_next7;assignpsel2=~p_sel_next11;always@(posedgeclk)if(rst)if(count<7)begincount<=count+1'b1;endelsebegincount<=1'b0;endalways@(*)if(count<4)psel=1;elsepsel=0;p_sel_next是每个PE的选择信号的输出,向下一个PE的传递,每一个都延迟了一个时钟周期,PE换行的时候,选择信号都进行了一次跳变,在这里对上一个PE的选择信号的输出进行了一次取反操作,就能达到预期的目的,每个PE内部和PE之间选择P或者P53\n运动估计模块的设计和仿真′都是持续四个时钟周期。Modelsim仿真结果如下:图5-6PE选通信号的Modelsim仿真波形Fig5-6Modelsimsimulationwaveformsofpselstrobe从波形中可以看出,达到了设计要求,PE4,PE8,PE12的选通信号在进入PE内部时,都做了一次翻转,满足了数据流的要求。5.4PE运算模块PE运算模块完成了所有的匹配运算和每一个SAD的累加运算,是整个结构的核心单元。图5-7PE处理模块Fig5-7PEprocessingmodule部分代码如下:reg[11:0]out;reg[7:0]sad_temp;53\n运动估计模块的设计和仿真reg[4:0]j;always@(posedgeclk)beginc_next<=c;p_sel_next<=p_sel;endwire[7:0]p_sel_temp=p_sel?p:p_next;always@(*)beginsad_temp=(c>=p_sel_temp)?(c-p_sel_temp):(p_sel_temp-c);endalways@(posedgeclk)if(!rst)j<=0;elseif(j==16)beginj<=1;endelsebeginj<=j+1;endalways@(posedgeclk)beginif(!rst)out<=8'd0;elseif(j==5'd1)out<=sad_temp;elseout<=out+sad_temp;endalways@(posedgeclk)begin53\n运动估计模块的设计和仿真if(j==1)sad<=out;end当前块的数据流c从PE0中开始,串行输入,并在PE间按顺序传递,而数据流p和p′,需要在psel信号的作用下,按需分配给每个PE处理单元,在PE中完成匹配运算。out[11:0]是匹配运算过程中每一个PE每一次匹配结果的存储,直到16点都匹配完成后,在控制信号的作用下生成该参考块的SAD值。psel_next是psel的传递值,它让下一个PE选通p或者P′,进而进行匹配运算。J代表着控制信息,J=16时表示对应的PE完成了对当前块的一个参考块的匹配运算,并输出当前块的SAD值,下一个J=1时,开始了下一个当前块的SAD值的累加计算。J=16时,同时累加得到的SAD值送入比较器进和其中存储的最小值进行比较。值得注意的是,都假设第一个匹配块的SAD值最小。图5-8PE运算单元的Modelsim仿真波形Fig5-8ModelsimsimulationwaveformofthePEcomputingunit5.5比较运算模块该模块完成对每个当前块16个SAD值大小的比较,都假设第一个参考块的SAD值最小,后面得到的15个SAD值都和第一个SAD值进行对比,保存下较下的SAD值和对应的坐标信息,完成15次比较后,输出最小的SAD值和对应的运动矢量MV。图5-9比较运算模块Fig5-9ComparisonOperatorsmodulea[11:0]是每个PE计算的每个匹配位置的SAD53\n运动估计模块的设计和仿真值。中间变量k[4:0]是一个16进制的计数器,它控制着每个小宏块sad值的开始比较,和每个宏块sad比较的结束,和最小sad值的输出。最后输出的结果是最终的SAD最小值,和运动矢量MV(x,y)。运动矢量MV的输出,是通过设置了一个状态机来实现的,见图5-10所示,每个当前块和在搜索区域中相同的位置设置为(0,0),其它位置的坐标相应的推算出。具体实现见此部分详细代码。图5-10各块的坐标Fig5-10Thecoordinatesofeachblock图5-11比较远算模块的Modelsim仿真波形Fig5-11ModelsimsimulationwaveformoftheComparisonOperatorsmodule5.6整体控制模块53\n运动估计模块的设计和仿真设计中的主要控制信息通过分块分配到了各个模块,复位信号到来后,各模块都开始工作起来,通过一个16进制的计数器控制SAD的生成和输出,由于每一个PE相对上一个PE运算都晚一个时钟周期开始运作,所以第一个PE的计数器通过移位操作,每一个PE相对前一位的计数器都往后移一位,就完成了整个模块的控制,每一次计数结束的时候就输出相应的SAD值和运动矢量值。5.7整体结构功能测试和分析前面分析了运动估计的各个功能子模块,并都通过了功能仿真,从仿真结果中可以看到,达到了预期的目的,设计成功。然后把所有模块综合起来,进行了仿真。通过分析仿真数据,证明了本文设计的全搜索运动估计模块能够正常工作,并且能够实现全搜索算法的功能,输出正确的运动矢量。从本人的实际情况出发,采用了简化的数据流,只要验证改数据流和对应的硬件结构的可行性。将各部分数据按照数据流的要求写到片外存储器中,供仿真测试。整体仿真结果如图5-12所示,通过对波形分析,达到了预期的要求,证实了该整体结构的正确性。图5-12整个模块的Modelsim仿真波形Fig5-12Modelsimsimulationwaveformofthetheentiremodule5.8FPGA验证完成了上述工作之后,最后进行了该设计的FPGA验证。普通的视频一般为25帧/s,所以FPGA验证时采用50Mhz的时钟。53\n运动估计模块的设计和仿真图5-13综合结果Figure5-13Synthesisresult由于该模块只是视频编码中的一部分,不能通过最终图像验证该结构的正确性,就通过QuartusII10.0自带的SignalTapIILogicAnalyzer,对最终的输出SAD和运动矢量进行了数据采集,通过对STP文件的配置,采集到的波形文件如下图5-14。通过和功能仿真的结果对比,证实了该结构的可行性。图5-14逻辑分析仪采集的波形Figure5-14Waveformcollectedbythelogicalanalyzer53\n运动估计模块的设计和仿真图5-15测试实物图Figure5-15testingfigureYANG提出的1-D脉动结构,没能利用搜索区域数据的重叠,造成了反复读取,浪费了大量时间;AB2的2-D脉动结构,虽然利用了搜索区域中数据的重叠,但需要将当前块数据预先存储在PE处理单元中,增加了I/O带宽。本文设计的结构不仅充分利用了搜索区域中数据的重叠,也大大减小了I/O带宽,是一种可行的结构。5.9本章小结本章通过对已有硬件结构的分析,提出了本文的数据流,根据数据流的特点,完成了硬件结构的设计。为了验证该数据流和结构可行性,本章进行了仿真验证。利用FPGA的分块设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,编写了各个子模块的Verilog代码,并分块进行了功能仿真,子模块仿真通过后,把所有模块综合起来,进行了仿真。通过分析仿真数据,证明了本文设计的全搜索运动估计模块能够正常工作,并且能够实现全搜索算法的功能,输出正确的运动矢量。53\n运动估计模块的设计和仿真53运动估计模块的设计和仿真53\n总结和展望6总结和展望在当今这个信息化的社会,信息技术影响着我们日常生活的方方面面。在我们的生活中有近70%的信息,通过我们的视觉系统获得,即图像,而视频是由运动的图像构成的,这里面就包含了更为丰富的信息。从普通电话到可视电话,普通手机到智能手机,有线电视到数字电视的飞速发展。人们更希望无论何时,无论何地,都能实时、方便的通过图像和视频等方式进行通信,但受到客观条件的的限制,比如处理器的处理能力,要想达到实时性,就需要有视频压缩编码方面高性能的处理器,同时也可以提出更好的视频压缩编码方法。人们的生活因为视觉而丰富多彩。为了更好的生活和娱乐,数字视频的质量需要不断的提高,因此加大了对数字视频编码技术的研究。本文在分析了运动估计几种典型的算法,结合前人已有的硬件结构的基础上,结合高性能VLSI设计实现的特点,提出了一种改进的脉动阵列及流水线相结合的全搜索块匹配的整像素运动估计结构,并完成了其VLSI设计。先简要描述了下H.264标准及其性能,对块匹配运动估计原理和相关参数对运动估计效果的影响进行了详细的介绍。接下来对全搜索算法和几种快速搜索算法作了一一介绍。然后重点介绍了两种脉动结构:1-D和2-D,阐述了各自的优点和不足。由于搜索区域中的相邻参考块之间有一定的数据重叠,为了重用这些重叠数据,提出了本文的数据流,根据数据流的特点给出了相应的硬件结构,采用串入并出的流水线,提高了计算速度的同时也大大减小了I/O带宽。最后利用FPGA的分块设计思想,先详细的划分了全搜索运动估计算法的各个功能子模块,编写了各个子模块的Verilog代码,并分块进行了功能仿真,子模块仿真通过后,把所有模块综合起来,进行了仿真。通过分析仿真数据,证明了本文设计的全搜索运动估计模块能够正常工作,并且能够实现全搜索算法的功能,输出正确的运动矢量。本文设计的结构虽然证明可行,也具有一定的优势,但是相对于整个运动估计过程来说,这只是很小的一部分。要想完成整个编码器的运动估计过程,需要考虑的就要更全面,需要考虑的因素也更多,比方分块的大小、是否需要可变块运动估计、是否需要更高精度的运动估计、是否需要更大的搜索范围等。本文仅完成了固定块大小的小范围的运动估计,只为证实该结构和数据流的可行性,要想实际应用,需要更深入的研究。本设计完成了一定的工作,为后续的工作奠定了良好的基础,具有一定的实际意义。53\n总结和展望53\n致谢致谢硕士研究生期间两年半的学习和生活就要结束了。有许许多多的舍不得,也有许许多多的感谢要说。首先要感谢我的导师乔世杰,在完成整个论文的过程中,乔老师严谨的治学态度和丰富的实践经验给我留下了深刻的印象。在论文完成的过程中,乔老师不仅多次帮助我完成课题中遇到的难点问题,而且在做人方面也使我受益匪浅。没有他的指导就没有这篇论文的成果,对于乔老师的感谢,言语之情是无法表达的。千言万语在此刻化为一句“谢谢您”!在这里还要感谢家人在学习和生活中给予我的大力支持,能够使我一心一意的把精力放在学业上。我真心的祝福我的家人他们永远健康快乐。同时也要感谢一起和我度过三年学习时间的各个老师、同学以及朋友,他们给了我无尽的理解和帮助,他们总是在我出现难点和问题的时候给予指导,我会永远将我的朋友和老师铭记于心。感谢我的朋友,感谢你们给我的鼓励和支持,感谢你们的一路相伴,让我在研究生期间的生活倍感温暖!最后,再次感谢所有帮助、关心和支持过我的人,并深深的祝福你们,幸福快乐!53\n致谢致谢硕士研究生期间两年半的学习和生活就要结束了。有许许多多的舍不得,也有许许多多的感谢要说。首先要感谢我的导师乔世杰,在完成整个论文的过程中,乔老师严谨的治学态度和丰富的实践经验给我留下了深刻的印象。在论文完成的过程中,乔老师不仅多次帮助我完成课题中遇到的难点问题,而且在做人方面也使我受益匪浅。没有他的指导就没有这篇论文的成果,对于乔老师的感谢,言语之情是无法表达的。千言万语在此刻化为一句“谢谢您”!在这里还要感谢家人在学习和生活中给予我的大力支持,能够使我一心一意的把精力放在学业上。我真心的祝福我的家人他们永远健康快乐。同时也要感谢一起和我度过三年学习时间的各个老师、同学以及朋友,他们给了我无尽的理解和帮助,他们总是在我出现难点和问题的时候给予指导,我会永远将我的朋友和老师铭记于心。感谢我的朋友,感谢你们给我的鼓励和支持,感谢你们的一路相伴,让我在研究生期间的生活倍感温暖!最后,再次感谢所有帮助、关心和支持过我的人,并深深的祝福你们,幸福快乐!53\n参考文献参考文献【1】沈兰荪,卓力.小波编码与网络视频传输[M].北京:北京科学出版社,2005年:221-227.【2】毕厚杰,王健.新一代视频压缩编码标准—H.264/AVC(第二版)[M].北京:人民邮电出版社,2009年:24-32.【3】YaoWang,JornOstermann,Ya-QinZhang,视频处理与通信[M].北京:电子工业出版社,2003年6月:111-139.【4】黎洪松.数字视频技术及其应用[M].北京:清华大学出版社,1997年5月:68-93.【5】沈兰荪.图像编码与异步传输[M].北京:人民邮电出版社,1998年:13-30.【6】沈兰荪,卓力,田栋,汪.孔桥视频编码与低速传输[M].北京:电子工业出版社,2001年12月:55-67.【7】钟玉琢,王琪,贺玉文.基于对象的多媒体数据压缩编码国际标准—MPEG-4及其校验模型[M].北京:科学出版社,2000年:8-12.【8】杨恒,李爱国,王辉.FPGA/CPLD最新实用技术指南[M].北京:清华大学出版社,2005年4月:1-4.【9】王磊,廖怡,朱忠博.编码设计与运动估计算法优化[J].微计算机信息,2007年第23卷3-2期,155-157.【10】冯波涛.H.264视频编码算法研究及其DSP实现[D].上海:东华大学,2008年3月【11】高玉娥,石迎波.H.264的解码器设计及CAVLC的硬件实现[J].电视技术,2006年第12期,23-25.【12】尹熙鹏.基于FPGA的视频处理IP核设计田[D].西安:西北工业大学,2006年3月.【13】Li-HsunChen,O.T.-C,Teng-XiWang,AnadaptiveDSPprocessorforhigh-efficeiencycomputingMPEG-4videoencoder[S],CircuitsandSystems,2004,proceedingsofthe2004internationalsymposium,Volume2,23-26May,Pages:II-157-60Vol.2.【14】KalomirosJ.A,LygourasJ.,Ahostco-processorFPGA-basedArchitcetureforFastImageProcessing[S],intelligentdataacquisitionandadvancedcomputingsystem:TechcologyandApplications,2007,4thIEEE,pages:373-378.【15】计文平.视频压缩编码算法的研究[D].西安:西安电子科技大学,2003年.【16】LiR,ZengB,Liou,“ANewThree-stepSearchAlgorithmforBlockMotionEstimation”,TEEETransonCircuitsandSystemsforVideoTechnology,1994,4(4):438-442.【17】Chun-HoCheung,Lai-ManPo.“Novelcross-diamond-hexagonalsearchalgorithmsforfastblockmotionestimation”.Feb.2005,7(1):16-22.【18】张京.H.264中块匹配运动估计算法的研究[D].西安:西安电子科技大学,2007年.【19】付宇卓.MPEG-2视频编码器模块的结构设计[D].哈尔滨:哈尔滨工业大学,2001:19-37.53\n参考文献【1】LiR,ZengB,Liou,“ANewThree-stepSearchAlgorithmforBlockMotionEstimation”,TEEETransonCircuitsandSystemsforVideoTechnology,1994,4(4):438-442.【2】郑兆青,桑红石,付生猛,沈绪榜.一种全搜索块匹配运动估计VLSI结构[J].固体电子学研究与进展,2007年,27(3).【3】焦荣惠,郭立,郭利生等.基于流水线的运动估计算法FPGA设计[J].计算机仿真,2007年,24(2):76-78.【4】H.T.Kung,etal,“SystolicArrays”.InSparseMatrixSymposium,Knoxville.Tennessee,1978:256-257.【5】YangK-M,Sun,M-TandWuL,AfamilyofVLSIdesignsforthemotioncompensationblock-matchingalgorithm[J].IEEETans.CircuitsSyst,1989,36(10):1317-1325.【6】Komarek,T.andPirsch,P,Arrayarchitecturesforblockmatchingalgorithms[J].IEEETans.CircuitsSyst,1989,36(10):1301-1308.【7】ThomasKomarek,PeterPirsch.块匹配算法的阵列结构[J],IEEE电路与系统会刊,1989,1301-1308.【8】夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.内部资料仅供参考9JWKffwvG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^G89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%MadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%MzadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvUE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvtnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqvz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7Jv#nD6YWRrWwc^vR9CpbK!zn%MzFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7Jv#nD6YWRrWwc^vR9CpbK!zn%MzXNQExJB8VK#%W7m$ZA5JdkVWce9APz^FvJzwYWCcyAh*bnxBvaFQH8YHV$#&3Q3vdWe3YXvbJr内部资料仅供参考图2-3:地块位置图53\n参考文献53

相关文档