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软件仿真验证的设计结果。