專利名稱:一種dct快速變換結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在圖像信號(hào)處理等的信息壓縮技術(shù)中使用的離散余弦變換(以下簡(jiǎn)稱“DCT”)和離散余弦反變換(以下簡(jiǎn)稱“IDCT”)的基于FPGA的DCT/IDCT變換結(jié)構(gòu),尤其涉及對(duì)由多個(gè)8×8子塊組成的圖像數(shù)據(jù)進(jìn)行二維DCT運(yùn)算或者是二維IDCT變換的結(jié)構(gòu)。
背景技術(shù):
隨著微電子技術(shù)的發(fā)展,電子信息類產(chǎn)品的開發(fā)出現(xiàn)了兩個(gè)明顯的特點(diǎn)一是產(chǎn)品的復(fù)雜程度加深,二是產(chǎn)品的上市時(shí)限緊迫。針對(duì)這種情況,出現(xiàn)了現(xiàn)場(chǎng)可編程邏輯器件(FPLD),其中應(yīng)用最廣泛的當(dāng)屬現(xiàn)場(chǎng)可編程門陣列(FPGA)和復(fù)雜可編程邏輯器件(CPLD)。
同樣的,用于圖像信號(hào)處理的各類大規(guī)模電路的設(shè)計(jì)也不再時(shí)興采用全定制電路設(shè)計(jì)方法或者是半定制電路設(shè)計(jì)方法,而采用現(xiàn)場(chǎng)可編程邏輯器件的系統(tǒng)級(jí)設(shè)計(jì)方法已成為視頻技術(shù)發(fā)展的一種新趨勢(shì)。DCT/IDCT,尤其是二維的DCT/IDCT是信息壓縮中的核心技術(shù),因此尋找一種適合于用FPGA來(lái)實(shí)現(xiàn)的快速DCT/IDCT變換是非常有必要的。
DCT是常用的圖像變換域編碼方法,它采用非均量量化的方法來(lái)降低圖像中的高頻分量,除去觀察者察覺不到的冗余信息,同時(shí)把圖像數(shù)據(jù)轉(zhuǎn)換成可歸一、量化和可變長(zhǎng)度編碼的頻域系數(shù)。圖像信息經(jīng)過DCT變換后絕大部分的能量集中在直流分量和少數(shù)低頻分量上,減少了空間冗余,因此被廣泛地用于JPEG編碼方案、MPEG-1編碼方案和MPEG-2編碼方案中。另外,為了解壓縮數(shù)據(jù),還需要反離散余弦(IDCT)運(yùn)算。許多專用MPEG解碼器在這些部分(如運(yùn)動(dòng)估計(jì)模塊)使用了FPGA。因?yàn)镕PGA可重新配置,因此器件能方便地進(jìn)行刷新,并在整個(gè)開發(fā)階段(包括配置之后)集成新算法。至今為止,很多快速的DCT-IDCT運(yùn)算方法已經(jīng)發(fā)表比方說Chen,F(xiàn)eigh,Lee,Arai,Ligtenberg以及其它很多。某些在專門訂做的ASIC上執(zhí)行得比較好,有些則適用于處理器,但是適合于用FPGA實(shí)現(xiàn)的快速DCT/IDCT變換還很少。
二維DCT的定義如下X(k,j)=2MNC(k)C(j)x(n,m)cos(2n+1)kπ2Ncos(2m+1)jπ2M-----(1)]]>其中,K=0,1,…,N-1;J=0,1,…,M-1;
式中x(n,m)代表待變換矩陣中第n行、第m列的元素,X(K,J)代表變換后的矩陣中第K行、第J列的元素。
二維IDCT的定義如下x(n,m)=2MN[Σn=0N-1Σm=0M-1C(k)C(j)X(k,j)cos(2n+1)kπ2Ncos(2m+1)jπ2M]----(2)]]>其中,K=0,1,…,N-1;J=0,1,…,M-1; 二維DCT最簡(jiǎn)單明了的實(shí)現(xiàn)方法是采用行列分離法,即首先對(duì)矩陣的每一行進(jìn)行DCT,然后再對(duì)每一列進(jìn)行DCT,其原理簡(jiǎn)述如下,將式(1)改寫為X(k,j)=2NΣn=0N-1[2MΣm=0M-1x(n,m)cos(2m+1)jπ2M]cos(2n+1)kπ2N------(3)]]>式中間方括號(hào)中的部分即是一維DCT的公式,其運(yùn)算的結(jié)果再進(jìn)行一遍DCT即可得到二維DCT的結(jié)果。
一維DCT快速變換的研究已經(jīng)取得了很大的進(jìn)展,二維DCT快速變換的研究成果并不顯著,雖然有人研究出比行列分離法所需乘法器更少的方法,但多數(shù)此類方法均需要進(jìn)行復(fù)雜的前期或后期的轉(zhuǎn)換,而且乘法器的減少也并不顯著,由此帶來(lái)的資源上的節(jié)省并不顯著,并且它的實(shí)現(xiàn)結(jié)構(gòu)比較復(fù)雜,并不適合在FPGA中實(shí)現(xiàn)。同時(shí)利用兩個(gè)一維變換來(lái)實(shí)現(xiàn)的結(jié)構(gòu)規(guī)整,比較適合用FPGA實(shí)現(xiàn)。
實(shí)現(xiàn)一維DCT的快速變換方法有很多種,例如直接按照定義式來(lái)實(shí)現(xiàn)的基于快速傅里葉變換的方法,基于PT(Polynomial Transform)的方法,還有采用systolic算法和FG(flow-graphic)算法實(shí)現(xiàn)的變換。這些方法能夠有效的減少二維DCT所需的乘法器,比如基于PT的方法只需8個(gè)一維DCT所需的乘法器,但是法存在一個(gè)很大的缺點(diǎn),那就是結(jié)構(gòu)很不規(guī)則,不適合于在布線資源緊缺的FPGA中實(shí)現(xiàn)。采用Systolic算法實(shí)現(xiàn)的DCT變換的主要特點(diǎn)是利用每個(gè)乘法中的共同項(xiàng)來(lái)減少乘法所需的開銷,但是這種設(shè)計(jì)方法的設(shè)計(jì)復(fù)雜度較高。而采用FG算法的DCT變換利用了一維DCT中的對(duì)稱性,采用了類似于FFT的蝶形結(jié)構(gòu)。這種方法的一個(gè)缺點(diǎn)是蝶形運(yùn)算是一個(gè)很耗費(fèi)布線資源的結(jié)構(gòu),而且存在多級(jí)加法,需要的加法器也會(huì)很多,如果在每級(jí)加法都存在舍入誤差,那么在輸出端的誤差將累積到無(wú)法容忍的程度,因此不適合于用FPGA來(lái)實(shí)現(xiàn)。
圖6是用于說明利用奇偶對(duì)稱性來(lái)減少運(yùn)算量實(shí)現(xiàn)DCT變換的數(shù)據(jù)流程圖,它的一維DCT運(yùn)算的設(shè)計(jì)原理如下設(shè)x(n)為待變換序列,C(K)為目標(biāo)序列,則有C(k)=2NX(k)(k=0,1,Λ,N-1)]]>X(k)=Σn=0N-1x(n)cosk(2n+1)π2N-----(4)]]>其中先考慮X(K)的偶數(shù)項(xiàng)X(2k)=Σn=0N-1x(n)cosk(2n+1)πN]]>=Σn=0N/2-1x(n)cosk(2n+1)πN+Σn-N/2N-1cosk(2n+1)πN----(5)]]>=Σn=0N/2-1[x(n)+x(N-n-1)]cosk(2n+1)πN(k=0,1,ΛN2-1)]]>再考慮X(K)的奇數(shù)項(xiàng)X(2k+1)=Σn=0N-1x(n)cos(2k+1)(2n+1)π2N(k=0,1,Λ,N2-1)----(6)]]>考察相鄰的兩個(gè)奇數(shù)項(xiàng),得到X(2k+1)+X(2k-1)=Σn=0N-1x(n)[cos(2k+1)(2n+1)π2N+cos(2k-1)(2n+1)π2N]]]>=Σn=0N-12x(n)cosk(2n+1)Ncos(2n+1)π2N]]>=Σn=0N/2-12[x(n)-x(N-n-1)]cos(2n+1)π2Ncosk(2n+1)πN----(7)]]>(k=0,1,Λ,N2-1)]]>其中X(1)可由下式計(jì)算X(1)=Σn=0N-1x(n)cos(2n+1)π2N=Σn=0N/2-1[x(n)-x(N-n-1)]×cos(2n+1)π2N]]>由式(4)、(6)得到如下的遞推公式步驟1 計(jì)算序列g(shù)(n)和h(n)。
g(n)=x(n)+x(N-n-1)h(n)=2cos(2n+1)π2N×[x(n)-x(N-n-1)](n=0,1,Λ,N/2-1)----(8)]]>步驟2 計(jì)算g(n)和h(n)的N/2點(diǎn)的DCTg(k)=Σn=0N/2-1g(n)cosk(2n+1)πN]]>h(k)=Σn=0N/2-1h(n)cosk(2n+1)πN(n=0,1,Λ,N/2-1)------(8)]]>步驟3 用g(k)和h(k)來(lái)計(jì)算X(k)X(2k)=g(k)(K=0,1,…,N/2-1)X(2k+1)=h(k)-X(2k-1)(k=0,1,…,N/2-1)X(1)=12h(0)-----(9)]]>這樣就把一個(gè)N點(diǎn)的DCT分解為兩個(gè)N/2的DCT以及N/2個(gè)實(shí)乘和3N/2-1個(gè)實(shí)加來(lái)計(jì)算,于是乘法運(yùn)算的次數(shù)和加法運(yùn)算的次數(shù)的計(jì)算公式如下m(n)=2m(N2)+N2;]]>a(n)=2a(N2)+32N-1]]>反復(fù)利用這個(gè)過程直到兩點(diǎn)變換為止,m(2)=1,a(2)=2,就得到m(n)=12Nlog2N;]]>a(n)=32Nlog2N-N+1]]>從上述的整個(gè)運(yùn)算流程,我們可以發(fā)現(xiàn)雖然利用奇偶對(duì)稱性減少了運(yùn)算量,但因?yàn)橛昧硕鄠€(gè)布線不規(guī)則的蝶形運(yùn)算結(jié)構(gòu),不但整個(gè)電路的面積很大,非常耗費(fèi)布線資源,而且因?yàn)楹卸啻蔚某朔ê图訙p法運(yùn)算,所以運(yùn)算量還是偏大。以N=8為例,m(8)=12,a(8)=29,以行列分離法來(lái)計(jì)算二維DCT的話,還需要加倍,m(8)=24,a(8)=56。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明的目的是提供一種電路面積小的、快速的二維DCT或二維IDCT變換結(jié)構(gòu),它可以對(duì)由多個(gè)8×8子塊組成的圖像數(shù)據(jù)進(jìn)行DCT或者是IDCT運(yùn)算。以完成8×8子塊的一次DCT運(yùn)算為例,它的運(yùn)算結(jié)構(gòu)包括控制單元,它輸出控制各個(gè)運(yùn)算單元的控制信號(hào);輸入寄存單元,它一個(gè)時(shí)鐘接收一個(gè)圖像數(shù)據(jù),8個(gè)時(shí)鐘后把串行輸入的一行或者是一列圖像數(shù)據(jù)并行輸出;一次蝶形運(yùn)算單元,它把寄存器的并行輸出數(shù)據(jù)做一次蝶形運(yùn)算,輸出其運(yùn)算結(jié)果;并串轉(zhuǎn)換單元,它以蝶形運(yùn)算的結(jié)果為并行輸入,以每個(gè)時(shí)鐘限制n位輸出的方式生成表的尋址地址;查表運(yùn)算單元,它以并串轉(zhuǎn)換單元的輸出結(jié)果為地址進(jìn)行查表,同時(shí)對(duì)查表的內(nèi)容進(jìn)行累加運(yùn)算,累加的結(jié)果就是和輸入的圖像數(shù)據(jù)對(duì)應(yīng)的一維DCT變換結(jié)果;輸出寄存單元,它把并行輸入的查表運(yùn)算單元的運(yùn)算結(jié)果轉(zhuǎn)化成串行輸出,經(jīng)過轉(zhuǎn)置后作為后續(xù)的第二維DCT運(yùn)算的輸入數(shù)據(jù)。
本發(fā)明的DCT快速運(yùn)算方法及其結(jié)構(gòu)采用查找表替代乘法運(yùn)算的設(shè)計(jì)思想,完成一次DCT只需要一次蝶形運(yùn)算,24個(gè)加法器,0個(gè)乘法器,大大提高運(yùn)算速度的同時(shí),也節(jié)約了布線資源,縮小整個(gè)電路的面積,非常適合用FPGA來(lái)實(shí)現(xiàn)。
圖1是本發(fā)明的實(shí)施例的二維DCT的第一次一維DCT運(yùn)算結(jié)構(gòu)的系統(tǒng)電路圖。
圖2是本發(fā)明的實(shí)施例的二維DCT的第一次一維DCT的蝶形運(yùn)算電路和并串轉(zhuǎn)換電路的結(jié)構(gòu)圖。
圖3是本發(fā)明的實(shí)施例的二維DCT的第一次一維DCT的查表運(yùn)算電路的MAC1電路結(jié)構(gòu)圖。
圖4是本發(fā)明的實(shí)施例的二維DCT的第二次一維DCT的查表運(yùn)算電路的MAC1電路結(jié)構(gòu)圖。
圖5是本發(fā)明的實(shí)施例的二維DCT的實(shí)現(xiàn)框圖。
圖6是現(xiàn)有的利用奇偶對(duì)稱性實(shí)現(xiàn)DCT變換的系統(tǒng)電路圖。
圖7是本發(fā)明的實(shí)施例的二維IDCT的第一次一維IDCT運(yùn)算結(jié)構(gòu)的系統(tǒng)電路圖。
具體實(shí)施例方式
本實(shí)施例的DCT裝置,以8×8為單位像塊,每次輸入一行或者是一列的圖像數(shù)據(jù),利用查表運(yùn)算替代乘法運(yùn)算,完成快速DCT變換。
假設(shè)我們要實(shí)現(xiàn)以下的式子y(n)=Σk=1KAkxk(n)-------(10)]]>其中Ak是常量,而xk是用補(bǔ)碼表示的變量。為了推導(dǎo)方便,將xk限制在±1的范圍內(nèi)(實(shí)際情況并不一定滿足這個(gè)條件,但是通過乘上一個(gè)固定的常數(shù)就可將系數(shù)變換到這個(gè)限制范圍內(nèi))。由此xk可以表示為
(11)---xk=-xk,0+Σb=1B-1xkb2-b]]>其中xkb是xk的第b比特,而xk0表示數(shù)的正負(fù),如果它為1表明這個(gè)數(shù)是負(fù)數(shù)。將(11)代入(10)可得y=Σk=1KAK[-xK0+Σb=1B-1xxb2-b]=Σk=1KxK0·Ak+Σk=1KΣb=1B-1xkb·Ak2-b-----(12)]]>進(jìn)一步將所有的乘積項(xiàng)表示出來(lái)可以得到y(tǒng)=-[x10·A1+x20·A2+x30·A3+ΛΛ+xk0·Ak]+[x11·A1+x21·A2+x31·A3+ΛΛ+xk1·Ak]2-1+[x12·A1+x22·A2+x32·A3+ΛΛ+xk2·Ak]2-2M (13)M+[x1(B-2)·A1+x2(B-2)·A2+x3(B-2)·A3+ΛΛ+xk(B-2)·Ak]2-(B-2)+[x1(B-1)·A1+x2(B-1)·A2+x3(B-1)·A3+ΛΛ+xk(B-1)·Ak]2-(B-1)這個(gè)式子關(guān)鍵是兩部分,第一部分是方括號(hào)里面的乘積和,另外一部分就是權(quán)重因子。由于xkb不是0就是1,并且Ak是常數(shù),因此我們可以用查找表來(lái)實(shí)現(xiàn)。查找表由K個(gè)輸入數(shù)據(jù)xk的第b位xkb組成的向量[x1b,x2b,x3b......,xKb]作為地址,查找表的內(nèi)容就是相應(yīng)的乘積和。這個(gè)表稱為DALUT(Distribute Arithmetic Look Up Table),這種算法稱為DA算法。
從(13)式可以看出權(quán)重因子是2的冪,因此用移位寄存器實(shí)現(xiàn)起來(lái)很方便,只需將計(jì)算結(jié)果向最低位做相應(yīng)的移位即可,同時(shí)在高位補(bǔ)上符號(hào)位(這是不考慮精度的做法,如果要用到四舍五入,則要將最低位的值加到前面去)。
一維DCT存在某些對(duì)稱性,可以利用這些對(duì)稱性來(lái)減少DCT的計(jì)算量。經(jīng)過一次化簡(jiǎn)的一維DCT運(yùn)算用矩陣形式表示如下
x(0)x(2)x(4)x(6)=12AAAABC-C-BA-A-AAC-BB-Cx(0)+x(7)x(1)+x(6)x(2)+x(5)x(3)+x(4)]]>x(1)x(3)x(5)x(7)=12DEFGE-G-D-FF-DGEG-EE-Dx(0)-x(7)x(1)-x(6)x(2)-x(5)x(3)-x(4)----(14)]]>一維IDCT運(yùn)算矩陣形式表示如下x(0)x(1)x(2)x(3)=12ABACAC-A-BA-C-ABA-BA-Cx(0)x(2)x(4)x(6)+12DEFGE-G-D-FF-DGEG-FE-Dx(1)x(3)x(5)x(7)]]>x(7)x(6)x(5)x(4)=12ABACAC-A-BA-C-ABA-BA-Cx(0)x(2)x(4)x(6)-12DEFGE-G-D-FF-DGEG-FE-Dx(1)x(3)x(5)x(7)-----(15)]]>其中A=cosπ4,B=cosπ8,C=sinπ8,D=cosπ16,E=cos3π16,F=sin3π16,G=sinπ16]]>可以看到每個(gè)DCT變換的結(jié)果都是一個(gè)常數(shù)向量和一個(gè)變向量的點(diǎn)乘的結(jié)果。并且經(jīng)過對(duì)輸入數(shù)據(jù)的蝶形運(yùn)算,將變向量中的變量的個(gè)數(shù)K從8變到4。根據(jù)上面的計(jì)算可知如果K=8,如果用DA算法來(lái)實(shí)現(xiàn)的話,DALUT中表項(xiàng)會(huì)達(dá)到28=256項(xiàng),而如果K=4,則DALUT中的表項(xiàng)為24=16項(xiàng),大大的減少了查找表中的表項(xiàng)的數(shù)目。雖然前面的蝶形運(yùn)算是不規(guī)則運(yùn)算,會(huì)浪費(fèi)整個(gè)系統(tǒng)的布線資源,但是從查找表中節(jié)省下來(lái)的資源大大超過了這邊所需的資源。實(shí)際上(14)式中還存在對(duì)稱性,還可以進(jìn)一步簡(jiǎn)化。假如我們將K從4變到2,得到的好處是表項(xiàng)從16項(xiàng)減少到4項(xiàng)。但是由此帶來(lái)的代價(jià)是一次蝶形運(yùn)算,已經(jīng)得不償失了。還有一點(diǎn)很重要的是Virtex系列的FPGA中邏輯的實(shí)現(xiàn)的基礎(chǔ)就是4輸入的LUT,剛好可以將放入一個(gè)查找表。由此分析可知,用DA算法加上化簡(jiǎn)式(14)來(lái)用Virtex系列的FPGA實(shí)現(xiàn)一維DCT是最合適的。
下面說明本發(fā)明的運(yùn)算結(jié)構(gòu)的構(gòu)成。
圖1是用來(lái)說明本實(shí)施例的一維DCT運(yùn)算的系統(tǒng)框圖。在圖中,整個(gè)系統(tǒng)框圖由以下幾部分構(gòu)成控制電路1,它輸出單元控制信號(hào);輸人寄存電路2,它1個(gè)時(shí)鐘接收一個(gè)9位的圖像數(shù)據(jù)x(n),8個(gè)時(shí)鐘后把接收到的一行或者是一列圖像數(shù)據(jù)并行輸出;蝶形運(yùn)算電路3,它對(duì)輸入寄存電路2輸出的8個(gè)數(shù)據(jù)x(n)做一次蝶形運(yùn)算,同時(shí)數(shù)據(jù)位數(shù)擴(kuò)展為10位,將結(jié)果輸出給并串轉(zhuǎn)換電路;并串變換電路4,它對(duì)并行輸入的8個(gè)10位的蝶形運(yùn)算電路的輸出結(jié)果遵循8個(gè)時(shí)鐘處理完所有數(shù)據(jù)的原則限制每個(gè)時(shí)鐘串行輸出2位;查表運(yùn)算電路5,它根據(jù)并串變換電路4的輸出組合成尋址地址進(jìn)行查表,并對(duì)查表的內(nèi)容進(jìn)行累加,獲得的結(jié)果就是原始輸入的圖像數(shù)據(jù)x(n)對(duì)應(yīng)的DCT變換結(jié)果;輸出寄存電路6,它把查表運(yùn)算電路5中并行輸出的變換結(jié)果轉(zhuǎn)化為串行輸出,最終得到的X(n)就是與輸入的x(n)一一對(duì)應(yīng)的DCT結(jié)果。
另外,上述并串變換電路4由8個(gè)P2S電路組成,它將蝶形運(yùn)算電路并行輸出的8個(gè)數(shù)據(jù)轉(zhuǎn)化為串行輸出,同時(shí)每個(gè)時(shí)鐘輸出的位數(shù)由數(shù)據(jù)的位數(shù)來(lái)決定。第一次一維DCT變換每個(gè)時(shí)鐘輸出2位,用xnL,xnM來(lái)表示P2S中輸出的低位數(shù)據(jù)和高位數(shù)據(jù),第二次一維DCT變換每個(gè)時(shí)鐘輸出3位,用xnL,xnMd,xnM來(lái)表示。
另外,上述查表運(yùn)算電路5由8個(gè)MAC0、MAC1、MAC2、MAC3、MAC4、MAC5、MAC6、MAC7組成,其中每個(gè)MACn由一個(gè)DA和一個(gè)累加電路構(gòu)成。DA是FPGA器件內(nèi)部對(duì)應(yīng)的表,用于DCT/IDCT運(yùn)算;8個(gè)累加電路,用來(lái)累加查找表的內(nèi)容。
圖2是上述蝶形運(yùn)算電路和并串轉(zhuǎn)換電路的內(nèi)部構(gòu)成圖。原始圖像數(shù)據(jù)x(n)輸入到蝶形運(yùn)算電路后,經(jīng)過蝶形運(yùn)算,送入并串轉(zhuǎn)換電路。并串轉(zhuǎn)換電路根據(jù)每個(gè)時(shí)鐘需要操作的數(shù)來(lái)決定每個(gè)時(shí)鐘需要輸出2位數(shù),依次輸出每個(gè)數(shù)的第0位和第5位,第1位和第6位,第2位和第7位,第3位和第8位,第4位和第9位。再將8個(gè)數(shù)的高位和低位分別組合成x0M,x2M,x4M,x6M,x0L,x2L,x4L,x6L,x1M,x3M,x5M,x7M,x1L,x3L,x5L,x7L四種組合送給上述的查表運(yùn)算電路,其中0、2、4、6的組合地址同時(shí)送入DA0、DA2、DA4、DA6,1、3、5、7的組合地址同時(shí)送入DA1、DA3、DA5、DA7中。
圖3是MAC1的電路結(jié)構(gòu)。實(shí)際上所有的MACn結(jié)構(gòu)都相同,只不過不同的MACn中的查找表的內(nèi)容不同。以MAC1為例來(lái)說明MACn的電路結(jié)構(gòu)組成。圖3(a)表示DA1的尋址,并串變換電路的每一位輸出都對(duì)應(yīng)表中的一個(gè)數(shù)值,輸出的就是相應(yīng)的乘積和,圖3(b)表示DA1表里的內(nèi)容,就是相應(yīng)的乘積和,需要注意的是圖3(b)中DA1里的內(nèi)容,是在xk限制在±1的范圍內(nèi)的假設(shè)情況下的示意圖,在實(shí)際情況下,要把表中的值都乘上xk的最高比特所代表的值。
圖3(c)表示MAC1的電路結(jié)構(gòu)。每個(gè)時(shí)鐘從并串變換電路中接收到的由低位和高位數(shù)據(jù)組成的地址分別送入DALUT,兩個(gè)DALUT是相同的。將低位的查找結(jié)果除以32后,和高位的查找結(jié)果相加。如果高位剛好是符號(hào)位,那么就用低位的結(jié)果減去高位的結(jié)果,加減控制由load信號(hào)經(jīng)過計(jì)數(shù)以后來(lái)控制。查找表的計(jì)算結(jié)果與寄存器除2的結(jié)果相加再送回寄存器中。Load信號(hào)表明新的計(jì)算開始,將寄存器清零。同時(shí)load信號(hào)來(lái)5個(gè)周期后,寄存器中就是最終的計(jì)算結(jié)果。運(yùn)算中涉及到除以32和除以2,這在硬件電路中就采用移位寄存器來(lái)實(shí)現(xiàn),只需去掉低5位。8個(gè)MACn的計(jì)算結(jié)果在load信號(hào)的控制下送到輸出寄存器中,然后串行的一個(gè)個(gè)輸出。這樣把兩次一維DCT聯(lián)合起來(lái),就完成了二維DCT。
圖4是第二次DCT時(shí)MAC1的電路結(jié)構(gòu)圖,這里P2S每次輸出3位。
圖5是二維DCT的實(shí)現(xiàn)框圖。先進(jìn)行一次一維DCT,然后對(duì)變換的結(jié)果進(jìn)行轉(zhuǎn)置,再進(jìn)行下一次一維的DCT。
圖6是利用奇偶對(duì)稱性減少運(yùn)算量來(lái)實(shí)現(xiàn)DCT變換的數(shù)據(jù)流程圖。如圖所示,利用該DCT運(yùn)算結(jié)構(gòu)完成一次DCT變換需要7次蝶形運(yùn)算,12個(gè)乘法器,29個(gè)加法器,可見不但布線很不規(guī)則,占用大面積的電路,而且運(yùn)算量也大,影響運(yùn)算速度。
圖7是二維IDCT的一次IDCT變換結(jié)構(gòu)的系統(tǒng)電路圖。與二維DCT變換結(jié)構(gòu)的系統(tǒng)電路圖相比,二者電路圖的框架設(shè)計(jì)是完全相同的,不同的是IDCT中,蝶形運(yùn)算電路在查表運(yùn)算電路之后,而且二者查表運(yùn)算電路里的表的內(nèi)容因?yàn)橄禂?shù)不一樣,所以也是不一樣的,需要重新設(shè)計(jì);另外,并串轉(zhuǎn)換電路每個(gè)時(shí)鐘輸出的位數(shù)也要根據(jù)原始數(shù)據(jù)的位數(shù)重新考慮,保證在8個(gè)時(shí)鐘內(nèi)處理完所有數(shù)據(jù),實(shí)現(xiàn)流水線操作。
綜上所述,本發(fā)明的DCT快速運(yùn)算方法及其結(jié)構(gòu)采用查找表替代乘法運(yùn)算的設(shè)計(jì)思想,完成一次DCT只需要一次蝶形運(yùn)算,24個(gè)加法器,0個(gè)乘法器,同時(shí)利用流水線設(shè)計(jì)思想大大提高了運(yùn)算速度,數(shù)據(jù)可以連續(xù)輸入,同時(shí)在每個(gè)時(shí)鐘周期都能得到一個(gè)運(yùn)算結(jié)果。本發(fā)明結(jié)構(gòu)規(guī)整,非常適合用FPGA來(lái)實(shí)現(xiàn),所需資源比現(xiàn)有的實(shí)現(xiàn)結(jié)構(gòu)節(jié)省30%以上。本發(fā)明可以應(yīng)用于各種圖像數(shù)據(jù)壓縮技術(shù)中,尤其是在對(duì)壓縮的速度和質(zhì)量要求較高的MPEG、H.26X中能發(fā)揮重要的作用。
權(quán)利要求
1.一種快速DCT變換結(jié)構(gòu),其特征在于包括控制單元(1),它輸出控制各個(gè)運(yùn)算單元的控制信號(hào);----輸入寄存單元(2),它一個(gè)時(shí)鐘接收一個(gè)圖像數(shù)據(jù),8個(gè)時(shí)鐘后把串行輸入的一行或者是一列圖像數(shù)據(jù)并行輸出;----一次蝶形運(yùn)算單元(3),它把寄存器的并行輸出數(shù)據(jù)做一次蝶形運(yùn)算,輸出其運(yùn)算結(jié)果;----并串轉(zhuǎn)換單元(4),它以蝶形運(yùn)算的結(jié)果為并行輸入,以每個(gè)時(shí)鐘限制n位輸出的方式生成表的尋址地址;----查表運(yùn)算單元(5),它以并串轉(zhuǎn)換單元的輸出結(jié)果為地址進(jìn)行查表,同時(shí)對(duì)查表的內(nèi)容進(jìn)行累加運(yùn)算,累加的結(jié)果就是和輸入的圖像數(shù)據(jù)對(duì)應(yīng)的一維DCT變換結(jié)果;----輸出寄存單元(6),它把并行輸入的查表運(yùn)算單元的運(yùn)算結(jié)果轉(zhuǎn)化成串行輸出,經(jīng)過轉(zhuǎn)置后作為后續(xù)的第二維DCT運(yùn)算的輸入數(shù)據(jù)。
2.如權(quán)利要求1所述的快速DCT變換結(jié)構(gòu),其特征在于要實(shí)現(xiàn)y(n)=Σk=1KAkxk(n),]]>在公代入xk=-xk,0+Σb=1B-1xkb2-b]]>后,得到y(tǒng)=-[x10·A1+x20·A2+x30·A3+ΛΛ+xk0·Ak]+[x11·A1+x21·A2+x31·A3+ΛΛ+xk1·Ak]2-1+[x12·A1+x22·A2+x32·A3+ΛΛ+xk2·Ak]2-2MM+[x1(B-2)·A1+x2(B-2)·A2+x3(B-2)·A3+ΛΛ+xk(B-2)·Ak]2-(B-2)+[x1(B-1)·A1+x2(B-1)·A2+x3(B-1)·A3+ΛΛ+xk(B-1)·Ak]2-(B-1)查找表由K個(gè)輸入數(shù)據(jù)xk的第b位xkb組成的向量[x1b,x2b,x3b......,xkb]作為地址,查找表的內(nèi)容就是相應(yīng)的乘積和。
3.如權(quán)利要求1所述的快速DCT變換結(jié)構(gòu),其特征在于所述的并串變換電路(4)由8個(gè)P2S電路組成,它將蝶形運(yùn)算電路并行輸出的8個(gè)數(shù)據(jù)轉(zhuǎn)化為串行輸出。
4.如權(quán)利要求3所述的快速DCT變換結(jié)構(gòu),其特征在于所述的并串轉(zhuǎn)換電路(4)每個(gè)時(shí)鐘輸出的位數(shù)應(yīng)保證在8個(gè)時(shí)鐘內(nèi)處理完所有數(shù)據(jù)。
5.如權(quán)利要求1所述的快速DCT變換結(jié)構(gòu),其特征在于所述的查表運(yùn)算電路(5)由8個(gè)MAC電路(MAC0、MAC1、MAC2、MAC3、MAC4、MAC5、MAC6、MAC7)組成,其中每個(gè)MAC電路(MACn)由一個(gè)DA和一個(gè)累加電路構(gòu)成。
全文摘要
本發(fā)明是對(duì)由8×8子塊組成的圖像數(shù)據(jù)進(jìn)行二維DCT或是二維IDCT的一種快速變換裝置。以8×8子塊的一維DCT為例,變換裝置包括控制電路1、輸人寄存電路2、蝶形運(yùn)算電路3、并串變換電路4、查表運(yùn)算電路5和輸出寄存電路6。本發(fā)明采用查找表替代乘法運(yùn)算的設(shè)計(jì)思想,完成一次DCT只需要一次蝶形運(yùn)算,24個(gè)加法器,0個(gè)乘法器,同時(shí)利用流水線設(shè)計(jì)思想大大提高了運(yùn)算速度,數(shù)據(jù)可以連續(xù)輸入,同時(shí)在每個(gè)時(shí)鐘周期都能得到一個(gè)運(yùn)算結(jié)果。本發(fā)明結(jié)構(gòu)規(guī)整,非常適合用FPGA來(lái)實(shí)現(xiàn),所需資源比現(xiàn)有的實(shí)現(xiàn)結(jié)構(gòu)節(jié)省30%以上。本發(fā)明可以應(yīng)用于各種圖像數(shù)據(jù)壓縮技術(shù)中,尤其是在對(duì)壓縮的速度和質(zhì)量要求較高的MPEG、H.26X中能發(fā)揮重要的作用。
文檔編號(hào)H04N5/917GK1553707SQ0313724
公開日2004年12月8日 申請(qǐng)日期2003年6月2日 優(yōu)先權(quán)日2003年6月2日
發(fā)明者陳劍軍 申請(qǐng)人:杭州高特信息技術(shù)有限公司