摘 要: 設(shè)計(jì)了采用FPGA來(lái)實(shí)現(xiàn)2D-DCT的方案,,對(duì)于其中的關(guān)鍵部分——乘加運(yùn)算,,給出了基于查找表的分布式算法。整個(gè)設(shè)計(jì)節(jié)省了資源,,提高了運(yùn)算速度,。仿真結(jié)果表明,經(jīng)過(guò)2D-DCT變換后的數(shù)據(jù)與期望值總體上是一致的,,這對(duì)于數(shù)字圖像和視頻壓縮的研究有一定的意義,。
關(guān)鍵詞: 2D-DCT,;FPGA;圖像視頻壓縮
在信息社會(huì)迅猛發(fā)展的21世紀(jì),,多媒體信息日益增多,,其中人類主要依靠圖像來(lái)接收各種各樣的信息。圖像中包含如此巨大的數(shù)據(jù)量,,如果不經(jīng)過(guò)壓縮,,不僅超出了計(jì)算機(jī)的存儲(chǔ)和計(jì)算能力,而且無(wú)法完成信息的實(shí)時(shí)傳輸,。圖像的高速傳輸和所需巨大的存儲(chǔ)容量已成為數(shù)字圖像通信的最大障礙,。離散余弦變換(DCT)由于其變換特點(diǎn)被認(rèn)為是性能最接近K—L變換的準(zhǔn)最佳變換,現(xiàn)在已經(jīng)是最流行的圖像壓縮變換技術(shù),,并已經(jīng)在JPEG,、MPEG-1/2/4、H.26x等國(guó)際編碼標(biāo)準(zhǔn)中獲得了廣泛的應(yīng)用[1],。
由于集成電子技術(shù)的高速發(fā)展和廣泛運(yùn)用,,數(shù)字圖像處理也由軟件向硬件過(guò)渡并得到了非常迅速的發(fā)展。FPGA作為當(dāng)今運(yùn)用極為廣泛的可編程邏輯器件,,也是數(shù)字圖像處理的理想器件,。目前,利用FPGA進(jìn)行圖像處理主要是直接在FPGA上利用硬件描述語(yǔ)言或EDA軟件進(jìn)行設(shè)計(jì),,這種設(shè)計(jì)方法的最大優(yōu)點(diǎn)就是速度快,,可以利用流水線實(shí)現(xiàn),具有一定的靈活性,。
基于行列分解的2D-DCT由于算法規(guī)律性強(qiáng),、實(shí)現(xiàn)結(jié)構(gòu)直觀、時(shí)序控制簡(jiǎn)單而被廣泛應(yīng)用,。本文提出使用行列分解法和分布式算法來(lái)實(shí)現(xiàn)2D-DCT,,可以減少硬件資源,提高運(yùn)算速度,,具有一定的現(xiàn)實(shí)意義。
1 2D-DCT系統(tǒng)模塊設(shè)計(jì)
離散余弦變換經(jīng)常使用在信號(hào)處理和圖像處理中,,用于對(duì)信號(hào)和圖像進(jìn)行有損數(shù)據(jù)壓縮,。這是由于離散余弦變換具有很強(qiáng)的“能量集中”特性,使圖像的主要信息集中在變換后的低頻上,,并且能夠去掉像素間較強(qiáng)的相關(guān)性,,讓圖像的信息集中在少數(shù)幾個(gè)系數(shù)上,以減少冗余達(dá)到對(duì)圖像進(jìn)行壓縮的目的,。
2 模塊功能介紹
2.1 控制模塊
控制模塊用于保持整個(gè)模塊設(shè)計(jì)的時(shí)鐘同步,,并且使用控制信號(hào)來(lái)控制1D-DCT模塊狀態(tài)之間的轉(zhuǎn)換,。1D-DCT模塊有空閑狀態(tài)和1D-DCT變換狀態(tài)2個(gè)狀態(tài)。當(dāng)控制信號(hào)控制整個(gè)系統(tǒng)復(fù)位時(shí),,控制模塊通知1D-DCT模塊進(jìn)入空閑狀態(tài),;當(dāng)需要計(jì)算的數(shù)據(jù)輸入完成時(shí),控制模塊通知1D-DCT模塊進(jìn)入1D-DCT變換狀態(tài),。1D-DCT模塊的狀態(tài)轉(zhuǎn)移圖如圖3所示,。
由于FPGA中硬件乘法器資源有限,直接應(yīng)用乘法會(huì)消耗大量的資源,。本方案中使用分布式算法[4]來(lái)實(shí)現(xiàn)乘法,,它是一種適合FPGA的乘加運(yùn)算,與傳統(tǒng)算法實(shí)現(xiàn)乘加運(yùn)算的區(qū)別在于,,執(zhí)行部分積運(yùn)算的先后順序不一樣,。分布式算法在實(shí)現(xiàn)乘加功能時(shí),首先將各輸入數(shù)據(jù)的每一對(duì)應(yīng)位產(chǎn)生的部分積預(yù)先進(jìn)行相加,,形成相應(yīng)的部分積,,然后再對(duì)各個(gè)部分積累加形成最終結(jié)果;而傳統(tǒng)算法是所有乘積已經(jīng)產(chǎn)生之后再相加完成乘加運(yùn)算的,。與傳統(tǒng)算法相比,,分布式算法可極大地減少硬件電路的規(guī)模,提高電路的執(zhí)行速度,。分布式乘法器結(jié)構(gòu)如圖5所示,。
其中Cn為常系數(shù)。這種乘法器不僅能夠有效地減少硬件資源,,而且在增加輸出端口時(shí)能夠減小數(shù)據(jù)傳輸所帶來(lái)的延遲和布局布線面積[5],。
2.3 行列轉(zhuǎn)換模塊
本文使用同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM)來(lái)存儲(chǔ)第一次1D-DCT的中間結(jié)果及數(shù)據(jù)的行列轉(zhuǎn)換。由于SDRAM與系統(tǒng)時(shí)鐘同步,,因此避免了不必要的等待周期,,減少了數(shù)據(jù)存儲(chǔ)時(shí)間。SDRAM的核心結(jié)構(gòu)由多個(gè)內(nèi)存單元組成,,這些內(nèi)存單元又分成由行和列組成的二維陣列,。2D-DCT變換首先是對(duì)8×8數(shù)據(jù)塊的每一行數(shù)據(jù)進(jìn)行1D-DCT變換,然后將結(jié)果放入SDRAM中,,每一行的結(jié)果就占SDRAM中的一行內(nèi)存,。SDRAM通過(guò)采用地址線行列復(fù)用技術(shù)讀取其儲(chǔ)存的內(nèi)容,訪問(wèn)這些內(nèi)存時(shí),,在地址線上依次給出行地址和列地址[6],,讀出SDRAM中的每一列數(shù)據(jù),再重新送入1D-DCT模塊中進(jìn)行1D-DCT變換,,這樣就完成了整個(gè)2D-DCT的變換,。
3 仿真結(jié)果
整個(gè)設(shè)計(jì)采用Verilog HDL語(yǔ)言進(jìn)行編程,,使用Xilinx公司的Spartan3E系列FPGA(XC3S500E)實(shí)現(xiàn),時(shí)鐘晶振為50 MHz,,SDRAM容量為512 MB,,位寬為16 bit,同步時(shí)鐘能達(dá)到100 MHz,。使用的編程軟件是ISE,,仿真軟件是ModelSim。
圖6是用ModelSim仿真軟件仿真出來(lái)的2D-DCT的仿真結(jié)果及執(zhí)行結(jié)果,。其中,,din是8 bit數(shù)據(jù)輸入端口,dout是經(jīng)變換后12 bit數(shù)據(jù)輸出端口,。由執(zhí)行結(jié)果可以看出,,從輸入端口輸入的64個(gè)數(shù)據(jù)在經(jīng)過(guò)2D-DCT變換后,所得到的結(jié)果與期望值一致,。
本文提出了分布式算法和行列分解法相結(jié)合的方案來(lái)實(shí)現(xiàn)2D-DCT,,該方案不僅能夠減少硬件資源的使用,提高資源的利用率,,并能提高運(yùn)算速度,,能夠滿足數(shù)字圖像和視頻壓縮的實(shí)時(shí)性要求。在查找表中所使用的值取的精度不夠高,,所以存在一定的誤差,,但這種誤差不會(huì)引起人眼視覺(jué)上的差別,是允許存在的,。因此,,該方案可作為用FPGA來(lái)進(jìn)行數(shù)字圖像和視頻壓縮中的一部分。
參考文獻(xiàn)
[1] 王相海,,宋傳鳴.圖像及視頻可分級(jí)編碼[M].北京:科學(xué)出版社,,2009.
[2] 王新年,張濤.數(shù)字圖像壓縮技術(shù)實(shí)用教程[M].北京:機(jī)械工業(yè)出版社,,2009.
[3] KASSEM A,, HAMAD M, HAIDAMOUS E. Image compression on FPGA using DCT[C]. IEEE International Conference on the Engineering Applications,, 2009(7):320-323.
[4] FAKHR W,, EL-BANNA H. An efficient implementation of the 1D DCT using FPGA technology[C]. 11th IEEE International Conference and Workshop on the Engineering of Computer-Based Systems, 2004(7): 356-360.
[5] PRASOON A K,, RAJAN K. 4×4 2-D DCT for H.264/AVC[C]. International Conference on Advances in Computing,Communication and Control,, 2009(5):573-576.
[6] NAVINER L,, DANGER J L. Efficient implementation for high accuracy DCT processor based on FPGA[C]. 42nd Midwest Symposium on Circuits and System,, 1999,8(1): 508-511.