DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

[待整理] FPGA与DSP协同处理系统设计之:典型实例-整数DCT变换的设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:31:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        11.6  典型实例21:整数DCT变换的设计与实现

        11.6.1  实例的内容及目标

         
        1.实例的主要内容

        本节旨在设计实现了视频压缩标准H.264算法中的整数DCT变换部分,帮助读者了解并行流水设计技巧在算法优化中的作用。
         
        2.实例目标

        通过本实例,读者应达到以下目标。
        ·  了解数字域变换的基本原理和用处。
        ·  掌握DCT和整数DCT变换的变换方法。
        ·  学习硬件结构设计方法。
        ·  学习流水线设计方法。
        ·  编程实现DCT变换。
         
        11.6.2  整数DCT变换的原理

        1.DCT简介

        H.264是一种图像压缩编码方法,它的变换编码和以前各种标准中的DCT有所不同。以前标准中直接采用DCT的定义进行变换,会带来两个问题。第一,需要进行浮点数操作,从而造成系统设计及运算上的复杂性;第二,由于变换核都是无理数,而有限精度的浮点数不可能精确地表示无理数,再加上浮点数的运算可能会引入舍入误差,这就使得在具体实现时会导致编解码的不匹配(mismatch),即反变换的输出结果和正变换的输入不一致。
         
        为了解决这些问题,H.264采用基于4×4块的整数操作而不是实数运算,使得变换操作仅用整数加减和移位操作就可以完成。这样既降低了设计复杂度,又避免了编解码误匹配,能够得到与4×4 DCT变化类似的编码效果,而由此带来的编码性能的减少微乎其微。
         
        由于变换中无乘法,采用基于提升结构的无乘法二进制DCT(Bin DCT),只包括加法和16位算术移位,这样大大减小了运算复杂度。尤其是对低端处理,减少了乘法运算且保持了整数变换的优点,精确的整数排除了编码器和解码器之间反变换的误匹配,保证了变换的效果。
         
        2.DCT设计原理

        我们可以通过各种公式推导出整数DCT正变换的公式。
        (11.1)
         
        公式(11.1)中,虽然乘以1/2的操作可以用右移来实现,但这样会产生截断误差,因此,我们将1/2提到矩阵外面,并与右边的点乘合并,得到公式(11.2)。
         
        (11.2)
         
        这就是H.264中所用到的整数变换公式,其变换核 仅用加减法(和左移)即可以实现,而后面的点乘操作可以合并到随后的量化过程中去。
         
        H.264中所用到的反DCT变换公式如下:
          (11.3)
         
        其中与Y点乘的操作与反量化合并,乘以系数1/2的操作由右移来实现,由于反量化后的结果足够地大,所以这里不会出现截断误差的问题。以上各式中,
       
         
        H.264的整数DCT变换可以分做两步完成:先对需要做变换的矩阵的每一列做一维变换,再对其结果的每一行做一维变换,这个次序也可以反过来,先行后列。这样二维变换就可以用一维变换来实现。在具体实现过程中,为了减少运算量,每一步可以采用蝶型算法,以公式(11.2)的第一步对X的第一列进行一维变换为例,其运算过程如下式所示。
                         (11.4)
        其中 第一列的元素, 为滤波结果。由公式(11.4)可见计算有很多重复,如 就同时被计算 的公式所使用,所以可以将其暂时保存起来以避免重复计算,对应的蝶型算法如图11.21所示。
         
        从图中可以看见,若按公式(11.4)计算需要进行12次加法、4次乘法。而按图11.19中的蝶型算法仅需8次加法、2次乘法,它利用了运算中的冗余,大大降低了运算量。
         
        11.6.3  实例步骤

        1.创建新工程并添加源文件

        如图11.22所示,首先创建一个新工程并为工程添加源文件。
         
        2.添加测试文件,并添加激励

        如图11.23所示,为工程添加测试文件。
              

        图11.22  创建新工程并添加设计文件     图11.23  添加测试文件

         

        在测试文件中为测试添加激励,如图11.24所示。
       

        图11.24  添加激励

         
        3.使用ModelSim进行仿真

        要使用ModelSim对工程进行仿真首先要在计算机上面安装ModelSim软件。安装好以后在ISE 7.1i的菜单里面选择Edit→Preferences,如图11.25所示。
         
        在上面的对话框里面,“Integrated Tools”复选页里面的Model Tech Simulator里面选择modelsim.exe的路径,单击“OK”按钮。
         
       

        图11.25  设置仿真工具参数

         
        然后再选择菜单里面的View→Refresh,刷新刚才更改的设置,如图11.26所示。
       

        图11.26  刷新设置

         
        刷新后就会看见Process View里面的图标变成Modelsim Simulator的一些功能,如图11.27所示。
       

        图11.27  ModelSim仿真选项

         
        此时双击“Simulate Behavioral Model”就可以对工程进行行为仿真了,如图11.28所示。
       

        图11.28  打开ModelSim进行行为仿真

         

        在ModelSim的波形窗口中观察到的行为仿真结果如图11.29所示。
       

        图11.29  行为仿真结果

         
        11.6.4  小结

        本节介绍视频压缩标准H.264算法中的整数DCT变换模块的设计与实现方法,并通过ModelSim软件仿真验证的设计结果。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-2 22:23 , 耗时 0.093889 秒, 21 个查询请求 , Gzip 开启.

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

桂公网安备 45031202000115号

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

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

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

QQ:28000622;Email:libyoufer@sina.com

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

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