首页> 中国专利> 用FPGA实现KLT变换的方法

用FPGA实现KLT变换的方法

摘要

本发明公开一种用FPGA实现KLT变换的方法。包括一维KLT变换和二维KLT变换,一维KLT变换的步骤是:将变换矩阵存储在双端口RAM组中;利用“DSP48E单元”完成KLT变换矩阵的系数与残差矩阵的系数的乘加运算并输出结果。二维KLT变换的步骤是:(1)将行变换矩阵R与列变换矩阵C存储在双端口RAM中;(2)利用“DSP48E单元”完成残差矩阵X的系数与行变换矩阵R的系数的乘加运算,得到中间矩阵M;(3)利用“DSP48E单元”完成中间矩阵M的系数与列变换矩阵C的系数的乘累加运算并输出结果。本发明减少了其它资源的使用,提升了系统的速度和数据吞吐率,可应用于图像压缩编码技术中。

著录项

  • 公开/公告号CN102447898A

    专利类型发明专利

  • 公开/公告日2012-05-09

    原文格式PDF

  • 申请/专利权人 西安电子科技大学;

    申请/专利号CN201110249279.3

  • 申请日2011-08-26

  • 分类号H04N7/26;H04N7/30;

  • 代理机构陕西电子工业专利中心;

  • 代理人王品华

  • 地址 710071 陕西省西安市太白南路2号

  • 入库时间 2023-12-18 05:08:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-11

    未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20130925 终止日期:20190826 申请日:20110826

    专利权的终止

  • 2013-09-25

    授权

    授权

  • 2012-06-27

    实质审查的生效 IPC(主分类):H04N7/26 申请日:20110826

    实质审查的生效

  • 2012-05-09

    公开

    公开

说明书

技术领域

本发明属于数字信号处理技术领域,涉及图像压缩编码的实现方法,可应用于通过硬件实现图像压缩编码的变换部分。

背景技术

图像压缩编码的主要步骤是:首先将图像划分成多个宏块,然后以宏块为单位进行模式预测、变换、量化以及熵编码。模式预测是根据当前宏块上方和左方的宏块的重构像素值来计算预测像素值的。实际像素值与预测值的差称作残差,残差数据仍然存在着可以开发的相关性。

KLT作为一种依赖于数据特性的最优变换,与其它变换方法相比,它根据图像残差特性离线训练出的变换矩阵,能够更充分发掘残差数据中存在的规律性和相关性,从而提高压缩性能,所以目前在数字信号处理及通信中得到了越来越广泛的应用。但是KLT变换要进行复杂的矩阵乘法运算且变换系数大,在要求实时处理及延时较小的高性能图像压缩变换硬件系统中,KLT变换成为瓶颈。

采用传统的执行方法在FPGA上进行KLT变换,会导致运算效率低,占用资源大以及数据吞吐率小,因此有必要从FPGA硬件实现的角度出发,发明一种快速高效的实现KLT变换的方法。

发明内容

本发明的目的在于克服上述已有技术的不足,提出一种用FPGA实现KLT变换的方法,从而满足图像压缩编码实时性和高性能的要求。

为实现上述目的,本发明提出如下两种技术方案:

技术方案1.用FPGA实现一维KLT变换的方法,包括如下步骤:

(1.1)将大小为4×4的图像残差矩阵按行展成一维列向量,离线训练后得到大小为16×16的KLT矩阵,将它们存储在FPGA中的8个双端口RAM中;

(1.2)控制8个双端口RAM的端口,在每个时钟周期内将每个RAM的地址同时加1,并令两个输出端同时输出,使每个时钟周期内读出变换矩阵的一个行向量;

(1.3)将残差列向量的系数和读出的变换矩阵行向量的系数同时送入FPGA中的“DSP48E单元”进行乘加运算,即可得到变换结果向量中的一个系数;

(1.4)重复步骤(1.2)和(1.3),即从RAM中读出变换矩阵下一行的系数与残差列向量的系数进行乘加运算,直到变换结果向量的16个数据计算完毕。

技术方案2.用FPGA实现二维KLT变换的方法,包括如下步骤:

(2.1)对大小为16×16的图像残差矩阵X进行离线训练,得到大小为16×16的KLT行变换矩阵R和大小为16×16的KLT列变换矩阵C,将行变换矩阵R存储在第一组的8个双端口RAM中,记为RAM1,将列变换矩阵C存储在第二组的8个双端口RAM中,记为RAM2

(2.2)控制存储行变换矩阵R的RAM1的地址端,并令RAM1的输出端同时输出数据,使每个时钟周期内读出行变换矩阵R的一个列向量;

(2.3)将残差矩阵X行向量的系数与读出的行变换矩阵R列向量的系数同时送入FPGA中的“DSP48E单元”进行乘加运算,得到的结果为中间矩阵M的系数,该中间矩阵M的系数以行的顺序串行输出;

(2.4)开辟一个新的双端口RAM,记为RAMM,将输出的中间矩阵M的系数从RAMM的A端口写入,当256个系数全部写入完毕,产生一个脉冲指示信号;

(2.5)在步骤(2.4)产生的脉冲信号指示下,控制存储中间矩阵M的RAMM的B端口地址端,使该中间矩阵M的系数按列的顺序串行读出;

(2.6)在步骤(2.4)产生的脉冲信号指示下,控制存储列变换矩阵C的RAM2的地址端,并令RAM2的输出端同时输出数据,使每个时钟周期内读出列变换矩阵C的一个列向量;

(2.7)将由步骤(2.5)产生的中间矩阵M的系数和由步骤(2.6)产生的列变换矩阵C列向量的系数同时送入FPGA中的“DSP48E单元”进行乘累加运算,得到最终的变换结果矩阵,该矩阵在每17个时钟周期内输出一个列向量。

本发明与现有技术相比具有以下优点:

第一,本发明将数据量庞大的KLT变换矩阵通过初始化存储在双端口RAM组中,有效减少了查找表的使用,提高了读取变换矩阵系数的速度。

第二,本发明对一维KLT变换采用直接乘加的方式,对二维KLT变换采用先乘加、再乘累加的方式,将运算部分用FPGA中的“DSP48E单元”处理,提高了运算速率,且在“DSP48E”单元内对电路进行流水化处理,减少了FPGA中其它资源使用,提升了系统的工作频率。

附图说明

图1为本发明实现一维KLT变换的步骤示意图;

图2为本发明实现二维KLT变换的步骤示意图;

图3为本发明的一维KLT变换与二维KLT变换的乘加运算原理示意图;

图4为本发明的二维KLT变换的乘累加运算原理示意图。

具体实施方式

以下参照附图对本发明做进一步详细描述:

实施例1:

参照图1,本发明对大小为4×4的图像残差块采用一维KLT变换,包括如下步骤:

步骤A,将大小为4×4的图像残差矩阵按行展成一维列向量,离线训练后得到大小为16×16的KLT矩阵,将它们存储在FPGA中的8个双端口RAM中。

步骤B,控制8个双端口RAM的端口,在每个时钟周期内将每个RAM的地址同时加1,并令两个输出端同时输出,使每个时钟周期内读出变换矩阵的一个行向量。

步骤C,将残差列向量的系数和读出的变换矩阵行向量的系数同时送入FPGA中的“DSP48E单元”进行乘加运算。

参照图3,本步骤的具体实现如下:

(Ca)将变换矩阵行向量的系数a0~a15与残差列向量的系数b0~b15同时送入“DSP48E单元”内部的输入寄存器组REGin中保存;

(Cb)从输入寄存器组REGin中取出a0~a15与b0~b15,并将它们对应相乘,得到16个乘积p0~p15保存至寄存器组REGmul中;

(Cc)从寄存器组REGmul中取出p0~p15分成4组,对每组的4个数求和,得到4个和值s0~s4,保存至寄存器组REGadd中;

(Cd)从寄存器组REGadd中取出s0~s4,将它们再次相加,得到和值sum,将sum经过一级输出寄存器REGout后输出,sum即为最终变换结果向量的一个系数。

步骤D,重复步骤B和步骤C,即从RAM中读出变换矩阵下一行的系数与残差列向量的系数进行乘加运算,直到变换结果向量的16个数据计算完毕。

实施例2:

参照图2,本发明对大小为16×16的图像残差块采用二维KLT变换,包括如下步骤:

步骤1,对大小为16×16的图像残差矩阵X进行离线训练,得到大小为16×16的KLT行变换矩阵R和大小为16×16的KLT列变换矩阵C,将行变换矩阵R存储在第一组的8个双端口RAM中,记为RAM1,将列变换矩阵C存储在第二组的8个双端口RAM中,记为RAM2

步骤2,控制存储行变换矩阵R的RAM1的地址端,并令RAM1的输出端同时输出数据,使每个时钟周期内读出行变换矩阵R的一个列向量,其中控制RAM1地址端的步骤是:在每个时钟周期内对RAM1的地址加1,重复进行16个时钟周期;在下一个时钟周期内保持RAM1的地址不变;依此重复进行16次。

步骤3,将残差矩阵X行向量的系数与读出的行变换矩阵R列向量的系数同时送入FPGA中的“DSP48E单元”进行乘加运算,得到的结果为中间矩阵M的系数,该中间矩阵M的系数以行的顺序串行输出。

参照图3,本步骤的具体实现如下:

(3a)将残差块X第1行的系数与行变换矩阵R第1列的系数同时送入“DSP48E单元”内部的输入寄存器组REGin中保存;

(3b)从输入寄存器组REGin中取出残差矩阵X行向量的系数与行变换矩阵R列向量的系数,并将它们对应相乘,得到16个乘积p0~p15,保存至寄存器组REGmul中;

(3c)从寄存器组REGmul中取出p0~p15,分成4组,对每组4个数求和,得到4个和值s0~s4,保存至寄存器组REGadd中;

(3d)从寄存器组REGadd中取出s0~s4并将它们再次相加,得到和值sum,将该sum经过一级输出寄存器REGout后输出,sum即为中间矩阵M的一个系数;

(3e)保持残差矩阵X第1行的系数在输入寄存器组REGin中不变,并将行变换矩阵R第2列的系数送入输入寄存器组REGin中保存,重复步骤(3b)~步骤(3d)直至行变换矩阵R第16列的系数被送入至输入寄存器组REGin中;

(3f)将残差矩阵X第2行的系数与行变换矩阵R第1列的系数同时送入输入寄存器组REGin中保存,重复步骤(3b)~步骤(3e)直至残差块X第16行的系数与行变换矩阵R第16列的系数被同时送入输入寄存器组REGin中。

步骤4,开辟一个新的双端口RAM,记为RAMM,将输出的中间矩阵M的系数从RAMM的A端口写入,当256个系数全部写入完毕,产生一个脉冲指示信号。

步骤5,在步骤4产生的脉冲信号指示下,控制存储中间矩阵M的RAMM的B端口地址端,使该中间矩阵M的系数按列的顺序串行读出:

本步骤中控制RAMM的B端口地址端的方法是:

(5a)设定RAMM的B端口的地址初始值为0;

(5b)在每个时钟周期内对地址加17,重复进行16个时钟周期;

(5c)在下一个时钟周期内保持地址不变;

(5d)在下一个时钟周期内将地址减254,即跳转到保存下一列第一个数据的地址;

(5e)将步骤(5b)~步骤(5d)重复16次。

步骤6,在步骤4产生的脉冲信号指示下,控制存储列变换矩阵C的RAM2的地址端,并令RAM2的输出端同时输出数据,使每个时钟周期内读出列变换矩阵C的一个列向量,其中控制RAM2地址端的步骤是:在每个时钟周期内对RAM2的地址加1,重复进行16个时钟周期;在下一个时钟周期内保持RAM2的地址不变;依此重复进行16次。

步骤7,将由步骤5产生的中间矩阵M的系数和由步骤6产生的列变换矩阵C的系数同时送入FPGA中的“DSP48E单元”进行乘累加运算,得到最终的变换结果矩阵,该矩阵在每17个时钟周期内输出一个列向量。

参照图4,本步骤的具体实现如下:

(7a)将按列串行输出的中间矩阵M的系数mk,k=0,1,...255且k%16=0,分别与列变换矩阵C第1列的系数c0,0~c15,0相乘,结果记为CM0,0~CM15,0

(7b)在下一个时钟周期内将中间矩阵M的系数mk+1分别与列变换矩阵C第2列的系数c0,1~c15,1相乘,并将该16个乘积与CM0,1~CM15,1对应相加,所得结果记为CM0,1~CM15,1

(7c)重复步骤(7b)直到中间矩阵M的系数mk+15分别与列变换矩阵C第16列的系数c0,15~c15,5相乘,所得的16个乘积与CM0,14~CM15,14对应相加完毕为止,得到的CM0,15~CM15,15即为最终变换结果矩阵的一个列向量。

以上仅为本发明的一个具体实例,不构成对本发明的任何限制,显然在本发明的思想下,可做出不同修改与变更,但这些均在本发明的保护之列。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号