一种DCT实现方法及DCT实现电路
技术领域
本发明属于图像信号处理技术领域,具体地说,是涉及一种DCT(离散余弦变换)实现电路。
背景技术
随着多媒体技术的快速发展,信号的分辨率和采样率都在提高,由此带来的数据量的急剧增多加大了数据传输和存储的压力,因此对于高速实时的数据压缩具有重要的意义。
二维DCT是被广泛使用的图像变换域编码方法,该方法使用了非均匀量量化的方法来降低被处理图像中的高频分量,优化掉人眼不易察觉的冗余图像信息,并在优化后将图像数据转换为可归一、量化和可变长度编码的数据。图像信息经过二维DCT变换后绝大部分的能量集中在直流分量和少数低频分量上,减少了空间冗余。JPEG(Joint Photographic Experts Group,联合图像专家组)、MPEG(MovingPicture Expert Group,运动图像专家组),H.263以及我国自主研发的AVS等标准都采用了DCT技术作为压缩编码的主要方案。
二维DCT的定义如下:
其中,K=0,1,...,N-1;J=0,1,...,M-1;
二维DCT最简单明了实现方法是采用行列分离法,即首先对矩阵的每一行进行DCT,
然后再对每一列进行DCT,其原理简述如下:
即对矩阵运算进行变换后可转换为Y=CXCt=C(CXt)t,对二维DCT进行的两次运算使用的是同一个系数表。
行列分离法减少了运算量,但是运算速度有待提高,而且需要使用较多加法器,浪费电路资源。
为了解决上述问题,有人提出了一种DCT快速变换结构,利用奇偶对称性来减少运算量,但是在该方案中寄存器组的设计需要等一组数据凑齐后进行串并转换;此外该方案没有数据中断和恢复功能,数据中断后便停止运算。
采用上述方法设计的DCT快速变换电路,进行串并转换需要较多的加法器,浪费电路开支。
基于以上原因,如何发明一种DCT的快速实现方法,节约电路资源,无需进行串并转换,而且可处理不连续的块数据。
发明内容
本发明为了解决现有DCT实现方法的运算速度慢,而且需将输入数据进行串并转换,提供了一种DCT实现方法,运算速度快,无需将数据串并转换。
为了解决上述技术问题,本发明采用以下技术方案予以实现:
一种DCT实现方法,包括以下步骤:
(1)、将接收到的图像数据划分成若干个M×M的图像数据块,将每一个图像数据块中的数据逐行或者逐列串行输入到M个寄存器中;
(2)、在所述的M个寄存器中,第i个寄存器将当前输入的数据在下一个时钟周期到来时,输出至乘法模块与M×M的常系数矩阵中的第i行的常系数相乘,其中,所述乘法模块在接收到第i个寄存器输出的第d个数据时,将该数据与常系数矩阵中的第i行第j列的常系数相乘,所述j为d/M的余数,并将乘法运算后的结果按行输送至加法模块;
(3)、所述加法模块接收乘法模块输出的M行数据,并以M为单位对各行的连续M个数据进行求和运算后输出;已参与求和运算的M个数据从加法模块中删除;
(4)、将所述加法模块输出的数据存入存储模块,并在存储模块中以M ×M矩阵的形式逐行依次存储,形成一个M×M的数据块,得到图像数据块的一维DCT运算结果;
(5)、所述存储模块对于按照逐行存储的M×M数据块以逐列的方式输出,并对后续读入的数据逐列依次存储,对于按照逐列存储的M×M数据块以逐行的方式输出,并对后续读入的数据逐行依次存储;通过存储模块输出的逐列或者逐行数据串行输入到另外M个寄存器中,重复执行步骤(2)、(3)的过程,得到图像数据块的二维DCT运算结果;
其中,M=2n,n为正整数;i为不大于M的正整数。
进一步的,当M×M的图像数据块以逐行的方式依次串行输入到所述的M个寄存器中时,在所述乘法模块中保存的常系数矩阵为DCT变换的常规系数矩阵;当M×M的图像数据块以逐列的方式依次串行输入到所述的M个寄存器中时,在所述乘法模块中保存的常系数矩阵为DCT变换的常规系数矩阵的转置。
又进一步的,通过控制寄存器对所述的每一个寄存器中输入的数据个数分别进行计数,且由1累计满M后,重新开始计数;所述乘法模块根据控制寄存器的计数值,确定将当前接收到的寄存器输出的数据与M×M的常系数矩阵中的哪一列上的常系数相乘。
再进一步的,在所述加法模块中包括加法器和存储器,所述存储器临时存储加法器输出的结果,若连续M个数据未全部完成求和运算,则将结果返回至加法器继续累加,直至连续M个数据全部完成求和运算后,将结果输出,并清空存储器中的数据。
优选的,所述的M=8;所述存储模块是容量至少为64×8bit的RAM。
基于上述DCT实现方法,本发明又提供了一种DCT实现电路,包括一维运算电路和二维运算电路,所述一维运算电路包括M个串联的第一寄存器、M个存储有常系数向量的乘法器、M个加法器以及一个存储模块;将接收到的图像数据划分成若干个M×M的图像数据块后,将每一个图像数据块中的数据逐行或者逐列串行输入到M个第一寄存器中;其中,
所述的M个第一寄存器将当前输入的数据在下一个时钟周期到来时,输出至与其一一对应连接的乘法器中;
所述的M个乘法器将接收到的数据与其内部存储的常系数向量中与该数据同列的常系数相乘后,输出结果至加法器中;
所述M个加法器与M个乘法器一一对应连接,对连续输入的M个数据进行求和运算后,输出至存储模块进行保存,并丢弃上述求和运算后的M个数据;
所述存储模块对接收到的数据以M×M矩阵的形式逐行依次存储,形成一个M×M的数据块,得到图像数据块的一维DCT运算结果;所述存储模块对于按照逐行存储的M×M数据块以逐列的方式输出,并对后续读入的数据逐列依次存储,对于按照逐列存储的M×M数据块以逐行的方式输出,并对后续读入的数据逐行依次存储;
在所述二维运算电路中也包括M个串联的第一寄存器、M个存储有常系数向量的乘法器以及M个加法器,且连接关系与所述的一维运算电路相同;在二维运算电路中,所述的M个第一寄存器串行读取所述存储模块输出的数据,通过乘法器和加法器执行同一维运算电路中相同器件执行的运算过程后,输出图像数据块的二维DCT运算结果;
其中,M=2n,n为正整数。
进一步的,当M×M的图像数据块以逐行的方式依次串行输入到所述一维运算电路中的M个寄存器中时,在所述一维运算电路和二维运算电路中,第i个乘法器中保存的常系数向量是DCT变换的常规系数矩阵的第i行;当M×M的图像数据块以逐列的方式依次串行输入到所述一维运算电路中的M个寄存器中时,在所述一维运算电路和二维运算电路中,第i个乘法器中保存的常系数向量是DCT变换的常规系数矩阵的第i列;其中,i为不大于M的正整数。
又进一步的,在所述的一维运算电路和二维运算电路中均包含有一个控制寄存器,对M个第一寄存器中输入的数据个数分别进行计数,且由1累计满M后,重新开始计数;并在每一个时钟周期输出与所述M个第一寄存器一一对应的计数值,一一对应地传输至M个乘法器中;所述乘法器根据接收到的计数值确定将计数值所指列的常系数与当前接收到的第一寄存器输出的数据相乘。
再进一步的,在所述的一维运算电路和二维运算电路中还均包含有M个第二寄存器、与所述的M个第二寄存器一一对应连接的选择器、以及与M个第二寄存器的输出端连接的多路选择器;所述的M个第二寄存器与所述的M个加法器一一对应连接,所述第二寄存器临时存储加法器输出的结果,所述选择器连接控制寄存器,接收控制寄存器输出的计数值,若计数值小于M,则控制加法器将当前接收到的数据与第二寄存器中保存的数据进行累加,否则,输出累加结果至多路选择器,并清空第二寄存器中的数据;所述多路选择器在所述控制寄存器的控制下,将运算后的结果存入存储模块。
更进一步的,在所述存储模块中包括RAM和状态机,通过状态机控制RAM将接收到的数据逐行存储或逐列存储;优选的,所述RAM的容量至少为64×8bit,所述M=8。
与现有技术相比,本发明的优点和积极效果是:本发明的DCT实现方法采用若干个寄存器组,将常系数矩阵中的常系数按行或者按列存放在乘法器中,由控制寄存器控制乘法器,控制选择串行输入的数据相乘的系数,避免了将串行数据转换为并行数据再进行DCT运算的过程,提高了DCT运算速度,而且具有数据中断和恢复功能,使用本方法设计的电路,减少了加法器的使用,节约了电路资源。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
附图说明
图1是本发明所提出的DCT实现电路的一种实施例的二维DCT运算电路原理图;
图2是本发明所提出的DCT实现方法的二维DCT运算流程图;
图3是图1中一维DCT运算电路的运算原理图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步详细地说明。
本发明为了提高DCT运算速度,在数据输入端口不需要对输入数据进行串并转换,同时提高抗干扰能力,前端数据输入停止对后端电路不造成影响,提供了一种DCT实现方法及其DCT实现电路,将二维DCT运算采用行列分离运算的方式,运算速度快,而且直接将串行的输入数据进行DCT运算,不用串并转换,此外具有较强的抗干扰能力,具有中断恢复功能。
实施例一,参见图2所示,本实施例提出了一种DCT实现方法,以将图像数据划分为8×8的图像数据块为例,说明本实施例的实现方法,包括以下步骤:
(1)、将接收到的图像数据划分成若干个8×8的图像数据块,将每一个图像数据块中的数据逐行的方式串行输入到8个寄存器中,因此,第一个输入数据data1通过数据端口推送至寄存器reg0中;
(2)、还包括乘法模块,为了方便各行矩阵的乘法运算,所述的乘法模块包含有若干个与所述8个寄存器一一对应的乘法子模块:乘法运算0至乘法运算7,reg0将当前输入的数据在下一个时钟周期到来时,输出至乘法运算0中,所述的乘法运算0中存储有8×8的常系数矩阵中的第1行的常系数,以此类推,乘法运算8中存储有8×8的常系数矩阵中的第8行的常系数。data1被推入至乘法运算0中与系数行的第一个常系数相乘,当输入的第二个数据data2被输入至乘法运算0时,与系数行的第二个常系数相乘,以此类推,并将乘法运算后的结果按行输送至加法模块;当data1被送至reg1,并由reg1送至乘法运算1中,则data1与乘法运算1中与系数行的第一个常系数相乘,以此类推,依次完成各寄存器所对应乘法器的乘法计算,当8×8的图像数据块以逐列的方式依次串行输入到所述的8个寄存器中时,在所述乘法模块中保存的常系数矩阵为DCT变换的常规系数矩阵的转置,即所述的乘法运算0中存储有8×8的常系数矩阵中的第1列的常系数,以此类推,乘法运算8中存储有8×8的常系数矩阵中的第8列的常系数,所述的输入数据与常系数的计算由控制寄存器控制,控制寄存器对所述的每一个寄存器中输入的数据个数分别进行计数,且由1累计满8后,重新开始计数,所述乘法模块根据控制寄存器的计数值,确定将当前接收到的寄存器输出的数据与8×8的常系数矩阵中的哪一列上的常系数相乘,才能使输入数据准确的与其相对应的系数相乘。
(3)、为了方便各行矩阵的加法运算,加法模块中设有与所述乘法子模块一一对应的加法子模块,接收乘法模块输出的数据,在各加法子模块中,以8为单位对各行的连续8个数据进行求和运算输出;8个求和计算全部完成后,已参与求和运算的8个数据从加法模块中删除;
为了方便加法结果的计算和保存,还包括存储器,存储器用于临时存储加法器输出的结果,若连续8个数据未全部完成求和运算,则将结果返回至加法器继续累加,直至连续8个数据全部完成求和运算后,将结果输出,并清空存储器中的数据。
(4)、将所述加法模块输出的数据存入至少为64×8bit的存储模块,本实施例中采用容量为64×8bit的RAM进行存储,并在RAM中以8×8矩阵的形式逐行依次存储,形成一个8×8的数据块,得到图像数据块的一维DCT运算结果,其中RAM可以为静态随机存储器SRAM或者是动态随机存储器DRAM;
(5)、所述RAM对于完成一维DCT运算后将运算结果按照8×8数据块逐行存储的话,则二维DCT运算读取时以逐列的方式读出,当RAM中再次写入一维DCT运算结果时,按照逐列的方式依次存储,对于按照逐列存储的8×8数据块,读出的时候以逐行的方式输出,并对后续读入的数据逐行依次存储;这种读写方式避免了乒乓RAM,通过RAM输出的逐列或逐行数据串行输入到另外8个寄存器中,重复执行步骤(2)、(3)的过程,在此不做赘述,得到图像数据块的二维DCT运算结果。
当然,可以根据实际需求将图像数据划分为M×M的图像数据块,M=2n,n为正整数,数据块的大小不为限制本实施例的条件。
实施例二,本实施例以一种DCT实现电路为例对本实施例所提出的DCT实现方法进行详细描述。
参见图1所示,本实施例的DCT实现电路包括一维运算电路和二维运算电路两部分,所述的一维运算电路包括M个第一寄存器,M个乘法器,以及M个加法器,所述的M个第一寄存器采用串联的方式连接,所述的M个第一寄存器的输出端与M个乘法运器的输入端一一对应连接,所述的M个加法器的输入端与M个乘法器的输出端一一对应连接,数据串行输入至所述的第一寄存器,在时钟周期信号下,第一寄存器向下一个第一寄存器传输数据,而且在第一寄存器组输出数据的同时将数据传送给乘法器进行乘法运算,由于M个乘法器是与M个第一寄存器一一对应连接的,因此每个第一寄存器是将数据传送给与其相对应的乘法器,所述的乘法器存储有常系数向量,所述的DCT实现电路还包括与M个加法器的输出端一一对应连接的M个第二寄存器,乘法器将乘法运算结果输送至与其对应的加法器,并将加法结果保存至与所述加法器相对应的第二寄存器中,所述的M个第二寄存器的输出端一一对应连接有选择器,因此共有M个选择器,本实施例的一维运算电路还包括控制寄存器,所述的控制寄存器同时M个选择器以及M个乘法器的输入端连接。所述的二维运算电路与所述一维运算电路结构一致,一维运算电路和二维运算电路通过存储模块连接,所述的一维运算电路中的选择器输出端与存储模块的输入端连接,所述存储模块的输出端与二维运算电路的第一个第一寄存器连接。
为了使电路结构稳定,所述选择器的输出端连接有一个多路选择器,所述的多路选择器由控制寄存器控制,选通所述M个选择器的通道,选择器通过多路选择器与所述的存储模块连接。
由于目前的图像处理中一般将图像分成8×8的块,因此,本实施例以M=8为例进行说明。
8×8的数据块逐行串行的方式输入一维运算电路中,首先将数据送至第一寄存器组中的寄存器0中,在时钟周期信号的作用下,寄存器0将数据推送至寄存器1,同时将数据推送至乘法器0,控制寄存器中标示了该数据在行矩阵中的位置,由于所述的每个乘法器中存储了一行常系数矩阵中的一行系数,控制寄存器对所述的每一个寄存器中输入的数据个数分别进行计数,且由1累计满8后,重新开始计数,控制寄存器将该数据在行矩阵中的位置输入乘法器中,在常系数矩阵中选择相乘的系数,并将乘法结果推送至加法器,加法器的初始为0,加法运算后将结果保存至第二寄存器组中的寄存器0中,控制寄存器标示该行的数据是否全部完成计算,未完成则将前一步的求和结果送至加法器,与加法器中新输入的乘法结果相加,完成加法运算后结果仍保持在第二寄存器中,直至该行的数据全部完成计算,控制器通过控制选择器,将加法运算结果输入多路选择器,并通过控制多路选择器将数据存储至RAM中,并清空第二寄存器的数据,二维运算电路的结构与一维矩阵结构一致,二维矩阵通过读取RAM中的数据,进行列矩阵DCT运算,最终由二维运算电路中的控制器控制输出二维DCT运算的结果,其他的存储器工作方式依次类推,不再做赘述,在该行的最后一个时钟周期完成所有运算后被丢弃,
当然可以根据实际需要设置M=2n(n为正整数),图像数据块的大小不为限制本实施例的条件。
本实施例寄存器组不需要等待一组数据凑齐进行串并转换,直接将串行输入的数据进行DCT运算,运算方式较为简单,加法器数量较少,节约了电路资源。
为了节省存储器空间,根据图像灰度值的范围,即可以完成存储图像值又不浪费寄存器资源,所述的第一寄存器和第三寄存器为优选采用8位寄存器。
同样的,为了节省存储器空间,所述的第二寄存器优选采用11位寄存器。
为了简化电路结构,降低制作成本,所述的一维运算电路和二维运算电路中的控制寄存器包括8个3位寄存器,如图3所示,8个3位控制寄存器通过与8个第一寄存器一一对应连接,可以用来标示当前数据是矩阵运算中行向量或列向量上的第几个元素,以及向与其所连接的器件中发出控制脉冲信号,达到控制的目的。
为了避免电路资源浪费,所述的乘法器和加法器的个数均为8,所述的选择器的个数为8,这样既可以完成发明目的,又节约了电路资源。
所述存储模块容量至少为64×8bit,为了方便存储,本实施例中采用容量为64×8bit的RAM进行存储,并在RAM中以8×8矩阵的形式逐行依次存储,形成一个8×8的数据块,得到图像数据块的一维DCT运算结果,其中RAM可以为静态随机存储器SRAM或者是动态随机存储器DRAM;
在RAM中设置有控制读写方式的状态机,在列矩阵DCT运算过程中需要使用行矩阵DCT运算的第1,8,16,24,32,40,48,56个结果,如果将深度为64的RAM看作是8×8的阵列的话,如果行矩阵DCT运算完成后按逐行的顺序存储至RAM,则列矩阵DCT运算需按列的顺序进行读取,由于行矩阵DCT运算连续进行,会有数据连续写入RAM,在下一次写入时改成按列写入,从而避免了乒乓RAM,节省了硬件资源,若改变行矩阵DCT的存储顺序,反之亦然,不再做赘述。
此外,在行矩阵DCT电路的乘法运算中,由于一维DCT输入为YUV信号数据,是无符号数,所以在加法移位处理中采用了高位补0的操作,而在列矩阵DCT电路中,输入的是一维矩阵结果,是有符号数据,因此高数据位填补使用的是输入数据的最高bit位数据。
在行矩阵DCT运算中,每个周期中只有一路乘法运算会完全完成,因此在有效数据输入8个周期后开始,以每周期一个数据的速度存入RAM中,避免了数据的堆积。
本实施例的行矩阵DCT运算当数据停止输入后,一维矩阵的第一寄存器停止自加,整个运算部分均停止工作,但不影响列矩阵的DCT处理,列矩阵DCT运算依然会将已有的处理结果完全处理完毕后输出,并且可以当行矩阵DCT再次输入数据时继续进行处理,实现了数据中断和恢复功能。
本实施例的DCT实现电路,减少了加法器的使用,节约了电路资源。
当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。