摘要:5/3小波變換硬件實(shí)現(xiàn)常用結(jié)構(gòu)是先完成分裂,再依照分裂后的數(shù)據(jù)完成預(yù)測(cè)部分和更新部分的變換,這需要復(fù)雜的控制結(jié)構(gòu)。在此采用JPEG2000推薦的5/3小波變換公式,在基于行的列變換基礎(chǔ)上提出了一種全新的無(wú)數(shù)據(jù)分裂的結(jié)構(gòu)。該結(jié)構(gòu)放棄地址尋址的數(shù)據(jù)讀取模式,采用讀取一維數(shù)據(jù)流節(jié)點(diǎn)的輸入方式,從對(duì)應(yīng)的寄存器中讀取在多個(gè)寄存器中依次流動(dòng)的數(shù)據(jù),省略了數(shù)據(jù)輸入的地址控制模塊。由于減少了數(shù)據(jù)分裂步驟,并且無(wú)需控制預(yù)測(cè)及更新步驟的交替進(jìn)行,因此簡(jiǎn)化了小波變換控制系統(tǒng)的結(jié)構(gòu)。在此運(yùn)用軟硬件協(xié)同的驗(yàn)證方法,利用計(jì)算機(jī)軟件和FPGA結(jié)合,完成圖片從計(jì)算機(jī)端輸入,在FPGA中完成小波變換,并輸出到計(jì)算機(jī)顯示器上顯示的步驟。
關(guān)鍵詞:小波變換; 軟硬件協(xié)同驗(yàn)證; FPGA; JPEG 2000
中圖分類(lèi)號(hào):TN91934; TP274文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1004373X(2012)04016904
Design and verification of 2D wavelet transform image processing chip without splitting structure
CHEN Lizi, FENG Jingping, PANG Zhiyong, CHEN Dihu
(ASIC Design Center, School of Physics and Engineering, Sun Yatsen University 510275, China)
Abstract: The common structure of hardware implementation of 5/3 wavelet transform is to split first and then complete the transform of the prediction part and updated part according to the data collected after split, which needs a complicated control structure. The 5/3 wavelet transform formula recommended by JPEG2000 is adopted and a new structure without data split is proposed based on the row transform of lines. Such a structure abandons the data reading mode depending on addressing but adopts the input mode of reading the onedimensional data flow nodes. It reads the data which flows in proper order in several registers from its corresponding registers and omits the address control module for data input. The structure of wavelet transform control system is simplified due to the reduction the data split step, and the alternation of prediction and update steps. By employing the verification method of hardware/software cooperation, the picture input from a computer port was achieved, the wavelet transform in FPGA was implemented and the pictures was displayed on the computer monitor in combination with computer software and FPGA.
Keywords: wavelet transform; cooperation verification with software and hardware; FPGA; JPEG 2000
收稿日期:201109290引言
小波分析是當(dāng)前應(yīng)用數(shù)學(xué)和工程學(xué)科中一個(gè)迅速發(fā)展的新領(lǐng)域,而近年來(lái)基于小波變換的圖像壓縮技術(shù)以硬件方式推向市場(chǎng),圖片壓縮已成為小波變換極其重要的應(yīng)用領(lǐng)域[12]。而在原有的小波變換的理論基礎(chǔ)上發(fā)展的基于小波變換的更新算法,不采用Fourier變換作為主要的分析工具,這與經(jīng)典小波變換相比具有小波構(gòu)造簡(jiǎn)單、反變換容易實(shí)現(xiàn)、運(yùn)算速度快和節(jié)省存儲(chǔ)空間等優(yōu)點(diǎn)。但其在硬件應(yīng)用開(kāi)發(fā)上,對(duì)中間數(shù)據(jù)量要求較大,占用較多寄存器,因而通過(guò)硬件結(jié)構(gòu)的探索來(lái)減小寄存器的開(kāi)銷(xiāo),成為小波變換圖片處理的一個(gè)重要分支。
本文提出了無(wú)分裂步驟的5/3小波變換結(jié)構(gòu),完成了該結(jié)構(gòu)的FPGA硬件實(shí)現(xiàn),并結(jié)合計(jì)算機(jī)端Matlab軟件,正確完成圖片變換驗(yàn)證。
1硬件結(jié)構(gòu)
1.1算法實(shí)現(xiàn)結(jié)構(gòu)
本文采用JPEG2000推薦的5/3小波變換算法,算法公式如下:
y(2n+1)=x(2n+1)-x(2n)+x(2n+2)2
y(2n)=x(2n)+y(2n-1)+y(2n+1)+24常見(jiàn)的小波變化實(shí)現(xiàn)結(jié)構(gòu)如圖1所示,先完成分裂,再進(jìn)行預(yù)測(cè),最后完成更新步驟。分裂步驟是指通過(guò)對(duì)數(shù)據(jù)地址n的奇偶進(jìn)行判斷,將數(shù)據(jù)分裂為奇地址部分和偶地址部分。輸入奇地址部分?jǐn)?shù)據(jù),進(jìn)行預(yù)測(cè)部分運(yùn)算,并輸出細(xì)節(jié)數(shù)據(jù);輸入偶地址部分?jǐn)?shù)據(jù),完成更新部分運(yùn)算,輸出平滑數(shù)據(jù)。因此需要根據(jù)輸入數(shù)據(jù)的地址,對(duì)數(shù)據(jù)進(jìn)行分裂,或控制預(yù)測(cè)部分和更新部分交替工作[34]。
本文提出一種全新的運(yùn)算結(jié)構(gòu),以一維數(shù)據(jù)流輸入數(shù)據(jù),無(wú)需數(shù)據(jù)分裂步驟,并且不需要控制預(yù)測(cè)部分和更新部分的運(yùn)行和停止,通過(guò)對(duì)數(shù)據(jù)流固定節(jié)點(diǎn)取值,分別完成預(yù)測(cè)和更新步驟,并根據(jù)數(shù)據(jù)地址的變換,利用數(shù)據(jù)選擇器從2個(gè)端口交替讀取數(shù)據(jù)即能控制預(yù)測(cè)和更新步驟的運(yùn)行。
1.2數(shù)據(jù)存取結(jié)構(gòu)
本文采用基于行的列變化和流水線結(jié)構(gòu),完成二維小波變化數(shù)據(jù)處理。輸入數(shù)據(jù)以一維數(shù)據(jù)流形式逐一輸入,變化模塊讀取數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行數(shù)據(jù)計(jì)算,產(chǎn)生變化結(jié)果。
圖1常見(jiàn)小波變換結(jié)構(gòu)圖1.2.1行變換數(shù)據(jù)存取結(jié)構(gòu)
行變換模塊輸入數(shù)據(jù)讀取方式,是用讀取寄存器中數(shù)據(jù)流的方式代替地址尋址的數(shù)據(jù)讀取模式。
數(shù)據(jù)依照輸入順序,在寄存器A,B,C,D中依次流動(dòng)。變換模塊在不同的時(shí)間分別從A,C和D中讀取數(shù)據(jù),進(jìn)行預(yù)測(cè)和更新的變化步驟。變換后輸出的數(shù)據(jù)存放在列變換模塊的寄存器D1和FIFOA中。行變換模塊結(jié)構(gòu)圖如圖2所示。
圖2行變換模塊結(jié)構(gòu)圖1.2.2列變化數(shù)據(jù)存取結(jié)構(gòu)
在進(jìn)行列變換時(shí),需要讀取變換數(shù)據(jù)點(diǎn)臨近行的同列數(shù)據(jù)。而完成該數(shù)據(jù)點(diǎn)變換后,進(jìn)行的是同一行下一列的數(shù)據(jù)點(diǎn)的列變換。因此需要依次讀出相鄰4行的同列數(shù)據(jù),行數(shù)不變,列數(shù)依次遞增[56]。
為了簡(jiǎn)單的實(shí)現(xiàn)該數(shù)據(jù)讀取的順序,本文使用3個(gè)FIFO來(lái)保存連續(xù)3行的數(shù)據(jù):當(dāng)輸入新一行的第1個(gè)數(shù)據(jù)時(shí),3個(gè)FIFO釋放出第1個(gè)數(shù)據(jù)(即之前3行每1行的第1個(gè)數(shù)據(jù)),剛好組成完成列變換的相鄰4行的同列數(shù)據(jù)。同時(shí),數(shù)據(jù)的新1行的數(shù)據(jù)進(jìn)入FIFOA,F(xiàn)IFOA釋放出的數(shù)據(jù)進(jìn)入FIFOB,F(xiàn)IFOB釋放出的數(shù)據(jù)進(jìn)入FIFOC。之后,釋放出第2列的數(shù)據(jù),并重復(fù)上述步驟。
因此在完成數(shù)據(jù)變換的同時(shí),數(shù)據(jù)在FIFOA,F(xiàn)IFOB,F(xiàn)IFOC中依次流動(dòng)。完成該行的所有列數(shù)據(jù)的變換后,F(xiàn)IFOA中的數(shù)據(jù)依次寄存在FIFOB中,F(xiàn)IFOB的數(shù)據(jù)寄存在FIFOC中,而FIFOA則寄存了新1行的數(shù)據(jù)。當(dāng)下1行的數(shù)據(jù)輸入時(shí),又依照上述順序,開(kāi)始下1行的列變換。
1.3變換模塊結(jié)構(gòu)
常見(jiàn)的小波變換結(jié)構(gòu)是當(dāng)輸入奇數(shù)地址數(shù)據(jù)時(shí)完成預(yù)測(cè)步驟,當(dāng)輸入偶數(shù)地址數(shù)據(jù)時(shí)完成更新步驟。而本文提出的結(jié)構(gòu)不進(jìn)行數(shù)據(jù)分裂,直接對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)和更新,并同時(shí)輸出到數(shù)據(jù)選擇器。數(shù)據(jù)選擇器對(duì)地址奇偶進(jìn)行判斷,選擇輸出數(shù)據(jù),可以得到和常用結(jié)構(gòu)相同的結(jié)果。列變換模塊結(jié)構(gòu)圖如圖3所示。
圖3列變換模塊結(jié)構(gòu)圖1.3.1行變換結(jié)構(gòu)
本文提出了無(wú)分裂步驟的結(jié)構(gòu)中,行變換時(shí)數(shù)據(jù)流輸入后依次寄存在寄存器D1,D2,D3,D4中。如圖4(a),寄存器D1,D2,D3,D4中已分別寄存了輸入數(shù)據(jù)X4,X3,X2,X1,而寄存器D5,D6,D7則分別寄存了數(shù)據(jù)Y2,Y1,Y0。此時(shí)利用寄存器D1,D2,D3中的數(shù)據(jù)X4,X3,X2經(jīng)過(guò)預(yù)測(cè)步驟,得到預(yù)測(cè)結(jié)果y3=x3-(x2+x4)/2;此前已在寄存器D5,D6,D7中分別寄存了前3個(gè)時(shí)鐘分別完成計(jì)算的結(jié)果Y2,Y1,Y0,則經(jīng)過(guò)更新步驟可得y1=x1+(y0+y2+2)/4。此時(shí)通過(guò)數(shù)據(jù)選擇器輸出的值Y1是奇數(shù)地址,因此僅需要完成預(yù)測(cè)步驟運(yùn)算的結(jié)果(即寄存器D6中的數(shù)據(jù)),也就是說(shuō)輸出寄存器D6中的Y1值,放棄更新步驟產(chǎn)生的Y1值。
在下一個(gè)時(shí)鐘沿來(lái)臨時(shí),X4,X3,X2依次取代X3,X2,X1的位置,輸入的X5則寄存在X4的位置,同理Y2,Y1依次取代Y1,Y0的位置,預(yù)測(cè)產(chǎn)生的Y3值則寄存在Y2,則下一次計(jì)算時(shí),寄存器中的值如圖4b,預(yù)測(cè)步驟產(chǎn)生Y4,更新步驟產(chǎn)生Y2,由于是偶數(shù)地址,所以通過(guò)數(shù)據(jù)選擇器輸出經(jīng)過(guò)更新步驟的Y2值。
1.3.2列變換結(jié)構(gòu)
列變換時(shí),假設(shè)第m行的第n列完成行變換后的數(shù)據(jù)為X(m,n),將該數(shù)據(jù)寄存在寄存器D1中,下個(gè)時(shí)鐘沿來(lái)臨時(shí),F(xiàn)IFOA和FIFOB中分別釋放出第m-1和m-2行的第n列的數(shù)據(jù)X(m-1,n)和X(m-2,n),同D1中X(m,n)數(shù)據(jù)共同完成預(yù)測(cè)步驟生成Y(m,n)并寄存在D2中,同時(shí)從D1和FIFOA,F(xiàn)IFOB中釋放出的數(shù)據(jù)X(m,n),X(m-1,n)和X(m-2,n)分別寄存進(jìn)FIFOA,F(xiàn)IFOB,F(xiàn)IFOC。再下一個(gè)時(shí)鐘沿來(lái)臨時(shí),完成第m行第n+1列的行變換,并寄存在D1中,之后即可按照上述步驟完成第m行第n+1列數(shù)據(jù)的預(yù)測(cè)和更新,得出結(jié)果Y(m,n+1)。當(dāng)FIFO把第m行數(shù)據(jù)完全釋放出時(shí),已在該FIFO寄存了第m+1行的完整數(shù)據(jù),可以開(kāi)始下一行的列變換。同理,完成預(yù)測(cè)步驟的數(shù)據(jù)寄存在D2,F(xiàn)IFOD,F(xiàn)IFOE中,依據(jù)預(yù)測(cè)步驟相似的原理完成更新步驟。之后依據(jù)數(shù)據(jù)的列地址的奇偶,選擇不同的Y值輸出。
圖4行變換數(shù)據(jù)變換圖1.4控制結(jié)構(gòu)
一般的變化模塊,均采用狀態(tài)機(jī)的控制方法,利用狀態(tài)的跳轉(zhuǎn),來(lái)控制行變化和列變化之間的關(guān)系,完成預(yù)測(cè)和更新步驟。
而本文提出了全新的、更為靈活的直角坐標(biāo)系控制法,即利用行坐標(biāo)(rowc)和列坐標(biāo)(colc)形成一個(gè)二維直角坐標(biāo)系,并將圖片映射到直角坐標(biāo)系上,每一對(duì)坐標(biāo)(rowc,colc)對(duì)應(yīng)直角坐標(biāo)系上圖片的一個(gè)點(diǎn),也對(duì)應(yīng)該點(diǎn)的變換時(shí)刻。通過(guò)rowc,colc的值來(lái)判斷正在進(jìn)行變換的行列值,來(lái)決定FIFO和變化模塊的動(dòng)作。利用rowc,colc的末位來(lái)判斷進(jìn)行變換的行和列地址分別是奇數(shù)地址還是偶數(shù)地址,決定是進(jìn)行預(yù)測(cè)步驟還是更新步驟。結(jié)合計(jì)數(shù)器,通過(guò)輸入的圖片的行像素值M和列像素值N,分別控制rowc和colc的跳變。因而可以簡(jiǎn)單的通過(guò)改變M,N值的大小來(lái)改變進(jìn)行變換的圖片的大小。
2結(jié)果驗(yàn)證
2.1采用軟硬件協(xié)同驗(yàn)證的結(jié)構(gòu)
本文采用軟硬件協(xié)同工作的結(jié)構(gòu),如圖5所示。利用計(jì)算機(jī)端的Matlab軟件從FPGA芯片中讀取變換后的RGB數(shù)據(jù),并顯示在計(jì)算機(jī)顯示器上。
具體結(jié)構(gòu)是將圖片數(shù)據(jù)通過(guò)北翰科技公司的Verilink插件,從Matlab軟件中送入FPGA芯片中的FIFO,小波變換模塊從FIFO中依次讀取數(shù)據(jù),并進(jìn)行變換,完成變換的數(shù)據(jù)通過(guò)FIFO送回Matlab軟件,并顯示在計(jì)算機(jī)的顯示器上。
圖5軟硬件協(xié)同結(jié)構(gòu)圖2.2驗(yàn)證結(jié)果
本文采用128×128像素RGB圖片作為變換圖像源,在計(jì)算機(jī)的Matlab軟件中,將圖片轉(zhuǎn)換成一維數(shù)據(jù)流,并依次通過(guò)Verilink插件送入FPGA芯片的FIFO中,在送入數(shù)據(jù)的同時(shí),F(xiàn)PGA中的變換模塊從FIFO中讀出數(shù)據(jù)進(jìn)行變換,并將變換結(jié)果通過(guò)輸出的FIFO送至計(jì)算機(jī)端的Matlab軟件。在完成全部數(shù)據(jù)變換后,在計(jì)算機(jī)端將獲得的數(shù)據(jù)重新排列,并轉(zhuǎn)換成128×128×3的RGB圖片格式,并對(duì)比顯示變換前和變換后的圖片效果。變換前圖片如圖6(a),變換并重排后圖片如圖6(b),圖片數(shù)據(jù)高頻分量和低頻分量分離正確無(wú)誤。
3結(jié)語(yǔ)
本文提出了無(wú)分裂步驟的小波變換結(jié)構(gòu),簡(jiǎn)化了變換模塊的控制系統(tǒng),采用數(shù)據(jù)流模式輸入數(shù)據(jù),并且和軟硬件協(xié)同的工作方式良好配對(duì),利用FPGA和計(jì)算機(jī)完成了二維小波變換的板級(jí)驗(yàn)證。本文提出的結(jié)構(gòu)在5/3小波變換中有效運(yùn)行,并起到簡(jiǎn)化結(jié)構(gòu)的關(guān)鍵作用,下一步將嘗試把該結(jié)構(gòu)運(yùn)用于9/7小波變換的硬件結(jié)構(gòu)實(shí)現(xiàn)中,并提出適合9/7小波變換硬件實(shí)現(xiàn)的結(jié)構(gòu)。
圖6驗(yàn)證結(jié)果圖片對(duì)比參考文獻(xiàn)
[1]CHRISTOPOULOS C, SKODRAS A, EBRAHINMI T. The JPEG2000 still image coding system: an overview \\[J\\]. IEEE Transactions on Consumer Electronics, 2000, 46 (4): 11031127.
[2]SCHWARZ H, MARPE D, WIEGAND T. Overview of the scalable video coding extension of the H.264/AVC standard \\[J\\]. IEEE Transactions on Circuits and Systems for Video Technology, 2007, 17 (9): 11031120.
[3]JOSE C, THOMAS L. Hardware implementation of 1D wavelet transform on an FPGA for infrasound signal classification \\[J\\]. IEEE Transactions on Nuclear Science, 2008, 55 (1): 913.
[4]WU B F, LIN C F. A highperformance andmemoryefficient pipeline architecture for the 5/3 and9/7 discrete wavelet transform of JPEG 2000 codec \\[J\\]. IEEE Trans. on Circuits and Systems, 2005, 15 (12): 16281651.
[5]ACHARYA T, CHAKRABARTI C. A survey onliftingbased discrete wavelet transform architectures \\[J\\]. VLSI Signal Processing Systems, 2006, 42 (3): 321339.
[6]ANDRA K, CHAKRABARTI C, ACHARYA T. A VLSI architecture for liftingbased forward and inverse wavelet transform \\[J\\]. IEEE Transactions on Signal Processing, 2002, 50 (4): 966977.
[7]陳維波,鄧家先,王海榮.基于FPGA的快速9/7整形離散小波變換系統(tǒng)設(shè)計(jì)\\[J\\].電子科技,2010(5):46.
[8]周新文,鐘明光.雙運(yùn)算核提升小波變換的FPGA硬件實(shí)現(xiàn)\\[J\\].電子科技,2010(6):1518.
[9]鐘云德,史承興,閔彪.基于FPGA的多級(jí)小波逆變換實(shí)時(shí)系統(tǒng)設(shè)計(jì)\\[J\\].電子科技,2010(9):3033.