【基于FPGA的H.264,DCT算法的硬件实现】D-H算法
摘 要:二维离散余弦(DCT)在H.264视频编码中承担者信号从时域到频域变换的作用。在现场可编程逻辑门阵列(FPGA)上设计了高效的采用流水线结构的H.264 DCT硬件电路。首先,把二维4×4 DCT变换转换成二次一维DCT变换;其次,DCT变换之间加一个两端口的RAM,以实现数列的转置;最后,在顶层设计一个有限状态机控制整个流程。该设计采用较少的资源实现了较好的功能,获得了可靠的实验结果。 关键词:二维离散余弦变换; FPGA; H.264; DCT 中图分类号:TN91134 文献标识码:A 文章编号:1004373X(2012)10009003 目前,基于分块DCT的编码技术已成为图像/视频编码国际标准的核心技术,一方面是因为DCT具有良好的去相关性和能量压缩性,另一方面是因为DCT具有快速实现算法[1]。随着数字多媒体技术的快速发展,H.264视频压缩标准在多个领域得到了广泛的应用。然而,在当前有限的网络带宽、FPGA有限的资源以及要求更高压缩速率情况下,对二维离散余弦变换(DCT)提出了更高的要求。H.264对图像或预测残差采用了4×4整数离散余弦变换技术,避免了以往标准中使用的通用8×8离散余弦变换、逆变换经常出现的失配问题[2]。 1 H.264的整数DCT变换 一维N点离散余弦变换(DCT)可以表示为:yK=CK∑N-1n=0xncos(2n+1)Kπ2N (1)式中:xn是输入时域序列中第n项;yK是输出频域序列中的第K项;系数CK定义如下:CK=1N,K=0;CK=2N,K=1,2,…,N-1 二维N×N图像块的DCT可以理解为先对图像块的每行进行一维DCT,然后对经行变换的块的每列再应用一维DCT。可以表示为:Ymn=CmCn∑N-1i=0∑N-1j=0Xijcos(2j+1)nπ2Ncos(2i+1)mπ2N Xij=∑N-1i=0∑N-1j=0CmCnYmncos(2j+1)nπ2Ncos(2i+1)mπ2N (2)式中:Xij是图像块X中第i行第j列图像或残差值;Ymn是变换结果矩阵Y相应频率点上的DCT系数。可以用矩阵表示为:Y=AXAT (3) X=ATYA (4)式中:N×N变换矩阵A中的系数为Aij=Cicos(2j+1)iπ2N。 H.264对4×4图像块进行操作,则相应的4×4DCT变换矩阵A为:A=12cos(0)12cos(0)12cos(0)12cos(0) 12cos(π8)12cos(3π8)12cos(5π8)12cos(7π8) 12cos(2π8)12cos(6π8)12cos(10π8)12cos(14π8) 12cos(3π8)12cos(9π8)12cos(15π8)12cos(21π8) =12121212 12cos(π8)12cos(3π8)-12cos(3π8)-12cos(π8) 12-12-1212 12cos(3π8)-12cos(π8)12cos(π8)-12cos(3π8) (5) 设a=12,b=12cos(π8),c=12cos(3π8),则:A=aaaa bc-cb a-a-aa c-bb-c (6) A中的a,b和c是实数,而图像块X中的元素是整数。对实数的DCT,由于在解码端的浮点运算精度问题,会造成解码后的数据的失配,进而引起漂移。H.264比其他图像编码使用了更多的预测过程,甚至内部编码模式也依赖于空间预测。因此,H.264对预测漂移是十分敏感的。为此,H.264对4×4 DCT中的A进行了改造,采用了整数DCT技术,有效地减少计算量,同时不损失图像准确度。式(1)可以等效为: Y=(CXCT)E =1111 1d-d-1 1-1-11 d-11-dX111d 1d-1-1 1-d-11 1-11-d a2aba2ab abb2abb2 a2aba2ab abb2abb2 (7) 式中:d=c/b≈0.414;符号表示结果中的每个元素乘以矩阵E中对应位置上系数值的运算。为了简化计算,去d为0.5,同时又要保持变换的正交性,对b进行修正,取b=2/5。对矩阵C中的第2行和第4行,以及矩阵CT中的第2列和第4列元素乘以2,相应地改造矩阵E为Ef,以保持式(7)成立,得到: Y=(CfXCTf)Ef =1111 21-1-2 1-1-11 1-22-1X1211 11-1-2 1-1-12 1-21-1 a2ab/2a2ab/2 ab/2b2/4ab/2b2/4 a2ab/2a2ab/2 ab/2b2/4ab/2b2/4 (8) 式中运算对每个矩阵元素只进行一次乘法,同时它将被归纳到量化运算中。这样,(CfXCTf)中只剩下整数的加法、减法和移位运算。式(8)的矩阵乘法运算可以改造成两次一维整数DCT变换,例如先对图像或其残差块的每行进行一维整数DCT,然后对经行变换块的每列再应用一维整数DCT变换。每次一维整数DCT可以采用蝶形快速算法,以节省时间,如图1所示[34]。 图1 一维快速变换算法整数DCT变换是基于DCT的,但是又有一些不同[5]: (1) 它是一个整数变换(所有的操作都可以使用整数算法,而不丢失解码精度); (2) 它可以实现编码端正变换与解码端反变换之间的零误差匹配; (3) 变换的核心部分可以仅仅使用加法和移位操作实现;
相关热词搜索:算法 硬件 FPGA DCT
|
【基于FPGA的H.264,DCT算法的硬件实现】D-H算法相关文章