<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 利用TMS320C6201芯片進(jìn)行圖像壓縮

利用TMS320C6201芯片進(jìn)行圖像壓縮

作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:介紹了利用TMS320C6201 芯片進(jìn)行實(shí)時(shí)圖像壓縮的軟件設計。結合該芯片的編程特點(diǎn)介紹了壓縮算法,并給出了部分關(guān)鍵程序,具有一定的參考價(jià)值。關(guān)鍵詞:圖像壓縮 C6201 FDCT變換 霍夫曼編碼 圖像中含有豐富的信息,在現代科技中將圖像作為一種探測手段,正受到越來(lái)越廣泛的青睞。有很多探測設備,采用掃描成像儀器作為前端探測器。作為一種很常見(jiàn)的情況,成像儀器采集到的圖像要通過(guò)無(wú)線(xiàn)信道進(jìn)行發(fā)送。但是,圖像數據通常都是海量數據,無(wú)線(xiàn)信道的傳輸帶寬無(wú)法滿(mǎn)足要求,必須對圖像進(jìn)行壓縮處理,才能通過(guò)無(wú)線(xiàn)信道進(jìn)行傳輸。實(shí)現圖像實(shí)時(shí)無(wú)線(xiàn)傳輸必須研制專(zhuān)門(mén)的圖像壓縮,該壓縮器須滿(mǎn)足如下要求:(1)圖像實(shí)時(shí)壓縮?鴉(2)能夠較好地保存圖像質(zhì)量。筆者以TI公司的高速DSP芯片TMS320C6201為核心的板作為圖像壓縮器的硬件平臺,通過(guò)自行開(kāi)發(fā)的壓縮程序,實(shí)現了圖像的實(shí)時(shí)壓縮。板的硬件功能框圖 板的硬件功能框圖如圖1所示。TMS320C6201是一種高性能的定點(diǎn)數字信號處理器。工作頻率為200MHz時(shí),每個(gè)指令周期為5ns,運算速度可達1600MIPS;具有VLIW(甚長(cháng)指令集)體系結構,每周期8個(gè)32bit的指令并行執行;8個(gè)獨立的功能單元,有兩個(gè)16bit乘法器和6個(gè)算術(shù)邏輯單元;采用加載存儲體系結構,數據在多處理單元之間的傳輸依靠32個(gè)32bit的通用寄存器。C6000的存儲器尋址空間為32bit,片內有1Mbit的SRAM。片內RAM被分為兩塊:一是內部程序/cache存儲器,二是內部數據存儲器。32bit外部存儲器接口(EMIF)可與不同存儲器接口,可方便地配置不同速度、不同容量、不同復雜程度的存儲器。此外,C6000還有兩通道Boot-loading DMA處理器、16bit的主機接口HPI、兩個(gè)多通道緩沖串口(McBSP),并且其片內鎖相環(huán)(PLL)時(shí)鐘發(fā)生器,可以對輸入時(shí)鐘進(jìn)行不同的倍頻處理。這種芯片用來(lái)處理圖像壓縮這種運算密集型的工作是非常合適的。功能框圖的其它部分不再做介紹。圖3 圖像壓縮器的工作過(guò)程方框圖2 圖像壓縮算法 圖像壓縮中的圖像有彩色和灰度之分??紤]到彩色圖像和灰度圖像的壓縮類(lèi)似,且大多數的掃描成象設備掃的是灰度圖像,所以?xún)H以灰度圖像的壓縮為例介紹DSP上的圖像壓縮。圖像壓縮算法原理圖如圖2所示。 圖中,首先將原始灰度圖像分為8%26;#215;8的圖塊,然后對每一圖像塊進(jìn)行FDCT變換,再將變換得到的DCT系數使用量化表進(jìn)行量化。量化后可得到如下形式的數據: (x)是不為零的數據) x x x x 0 0 0 0 x x x 0 0 0 0 0 x x 0 0 0 0 0 0 x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 該數據在存儲器中存放的順序如下: z[0] z[1] z[2] z[3] z[4] x[5] z[6] z[7] z[8] z[9] z[10] z[11] z[12] z[13] z[14] z[15] z[16] z[17] z[18] z[19] z[10] z[21] z[22] z[23] z[24] z[25] z[26] z[27] z[28] z[29] z[30] z[31] z[32] z[33] z[34] z[35] z[36] z[37] z[38] z[39] z[40] z[41] z[42] z[43] z[44] z[45] z[46] z[47] z[48] z[49] z[50] z[51] z[52] z[53] z[54] z[55] z[56] z[57] z[58] z[59] z[60] z[61] z[62] z[63] 在存儲器中,非零數據和零數據交替存放,不便于壓縮,所以要對數據進(jìn)行重排列,數據的重排列形式如下: z[0] z[1] z[5] z[6] z[14] z[15] z[27] z[28] z[2] z[4] z[7] z[13] z[16] z[26] z[29] z[42] z[3] z[8] z[12] z[17] z[25] z[30] z[41] z[43] z[9] z[11] z[18] z[24] z[31] z[40] z[44] z[53] z[10] z[19] z[23] z[32] x[39] z[45] z[52] z[54] z[20] z[22] z[33] z[38] z[46] z[51] z[55] z[60] z[21] z[34] z[37] z[47] z[50] z[56] z[59] z[61] z[35] z[36] z[48] z[49] z[57] z[58] z[62] z[63] 變換完成后再根據編碼表對DC系數和AC系數分別進(jìn)行編碼,就完成了圖像的壓縮。圖4 量化表3 利用DSP芯片進(jìn)行圖像壓縮 3.1 圖像壓縮器的工作過(guò)程 圖像壓縮器工作過(guò)程方框圖如圖3所示。 圖像數據通過(guò)I/O接口送入數字信號處理板,由DSP芯片中的DMA控制器負責將數據放入輸入緩沖區中,DSP對緩沖的圖像數據進(jìn)行壓縮后,通過(guò)HPI接口將壓縮數據送出。 3.2 編程介紹 這里主要介紹壓縮參數初始化和壓縮程序。 3.2.1 壓縮參數初始化 由圖2所示的圖像壓縮算法可知,圖像壓縮過(guò)程中需要量化表和編碼表,量化表如圖4(a)所示。量化操作就是把8%26;#215;8圖塊進(jìn)行FDCT變換,將變換后的的DCT系數用量化表元素來(lái)除。由于DSP中有硬件乘法器和移位指令,為了充分提高程序的執行速度,應該將除法運算轉化為乘法運算和移位運算,對上面的量化表元素逐個(gè)求倒數并用16進(jìn)制表示,如圖4(b)所示。 編碼表有兩個(gè),一個(gè)是直流差值編碼表,另一個(gè)是交流系數編碼表,如圖5所示。 編碼表中的最左端的一列代表中間碼字,具體編碼時(shí)要根據8x8圖塊的DCT系數產(chǎn)生中間碼字,再由中間碼字查編碼表,將中間碼字轉換為霍夫曼碼,完成編碼。在DSP程序初始化階段要生成量化表和編碼表,量化表可直接將圖4(b)所示的量化表元素代入來(lái)得到,編碼表就要按照霍夫曼碼的編碼方法生成霍夫曼碼來(lái)得到。由于在壓縮過(guò)程中要頻繁地查找編碼表,因此,編碼表的組織形式對程序的執行效率影響很大。 3.2.2 壓縮程序 圖像壓縮包括FDCT變換、標量量化、Zigzag掃描和編碼等幾個(gè)步驟,下面分別介紹。 3.2.2.1FDCT變換 DCT變換公式如下: 式中,Cu,Cv= 具體壓縮的時(shí)候要采用DCT變換的快速算法來(lái)加快程序的運行速度,將二維的DCT變換分解為兩個(gè)一維的DCT變換,可以有效地降低計算量。CCS2.0(Code Composer Studio)中提供了一個(gè)成熟的C語(yǔ)言函數庫,里面包含了進(jìn)行FDCT變換的函數。函數原型如下: void fdct_8%26;#215;8(short *dct_data, unsigned num_fdcts); 函數中dct_data指針指向待變換的圖像數據,num_fdcts是進(jìn)行DCT變換的圖像塊的數目。該函數可以對一大塊連續存放的圖像塊進(jìn)行DCT變換,特別針對TMS320C6201 DSP芯片的特點(diǎn)進(jìn)行了優(yōu)化??紤]到存儲器的等待時(shí)間和指令的并行等問(wèn)題,執行效率非常高,具體的程序開(kāi)銷(xiāo)可以通過(guò)如下公式計算: 時(shí)鐘周期數=48+160*num_fdcts; 要在自己的工程中使用這個(gè)函數,必須把img62x.lib函數庫添加到工程中,并且在主程序文件中包含fdct_8%26;#215;8.h頭文件。 3.2.2.2 標量量化 所謂標量量化就是對8%26;#215;8圖像塊的DCT變換系數使用量化表逐個(gè)相除并四舍五入。CCS2.0提供了一個(gè)量化函數,其原型如下: void quantize ( short *data, /* Data to be quantized. */ int num_blks, /*Number of 64-element blocks.?*/ int blk_size, /*Block size (multiple of 8). */ const short *recip_tbl, /*Quant. values (reciprocals). */ int q_pt /*Q-point of Quant values.*/ ); 將圖4(b)所示的量化表元素代入程序,blk_size為64,q_pt為16,data指向量化數據,即可進(jìn)行快速的量化。該程序同樣經(jīng)過(guò)了優(yōu)化,具體的程序開(kāi)銷(xiāo)可按如下公式計算: 時(shí)鐘周期數= 25+(blk_size/16)*4+num_blks*12) 該函數同樣包含在img62x.lib庫中,程序中應包含quantize.h頭文件。 3.2.2.3 ZigZag掃描 ZigZag掃描就是對數據進(jìn)行重排列。該部分功能簡(jiǎn)單、運算量也不大,但是對存儲器的訪(fǎng)問(wèn)非常頻繁,而且影響處理器執行速度的主要是對存儲器的訪(fǎng)問(wèn)速度。一般情況下,CPU訪(fǎng)問(wèn)內部存儲器需要4個(gè)時(shí)鐘周期,訪(fǎng)問(wèn)外部存儲器的速度要比內部存儲器的速度慢得多,具體情況應根據實(shí)際使用的外部存儲器的類(lèi)型而定。由于TMS3206201 DSP芯片每秒鐘最多可以執行8條指令,如果讓?zhuān)模樱行酒?jīng)常處于等待狀態(tài)是非常大的浪費。解決該問(wèn)題的最有效的辦法是充分利用數據總線(xiàn)的寬度并讓軟件進(jìn)行流水線(xiàn)執行。TMS320C6201的數據總線(xiàn)寬度是32位,一般情況下DCT系數使用一個(gè)短整型數,只有16位寬度,如果每次同時(shí)從存儲器中讀寫(xiě)兩個(gè)數,則可以減少一半訪(fǎng)問(wèn)存儲器的次數。由于TMS320C6201有8個(gè)功能單元,CPU可以在處理當前數據的同時(shí)去存儲器取下一個(gè)數據。通過(guò)流水線(xiàn),CPU可以做到每周期訪(fǎng)問(wèn)一次存儲器,這樣可以使程序的執行效率大大提高。一般情況下軟件的流水線(xiàn)安排是由編譯優(yōu)化系統完成的,程序員所要做的是讓自己的程序符合流水線(xiàn)執行的要求,并且讓優(yōu)化后的流水線(xiàn)周期盡量短。流水線(xiàn)的要求主要有以下幾點(diǎn): (1)程序所使用的寄存器數目不能超過(guò)32個(gè); (2)程序所使用的條件寄存器數目不能超過(guò)5個(gè); (3)程序中不能含有分支語(yǔ)句,可能的話(huà)盡量使用條件指令; (4)一個(gè)寄存器中的變量值不能存放太長(cháng)時(shí)間,實(shí)在不行就換個(gè)寄存器存放; (5)程序所使用的CPU左右兩邊的資源盡量平衡,一般情況下,平衡的資源使用換來(lái)的是比較短的流水線(xiàn)周期; (6)程序中包含的指令不能太多。 對于用線(xiàn)性匯編語(yǔ)言編寫(xiě)的程序,應該在程序編寫(xiě)時(shí)注意這些問(wèn)題。對一個(gè)用C語(yǔ)言編寫(xiě)的程序,可以通過(guò)觀(guān)察編譯系統產(chǎn)生的優(yōu)化后的匯編語(yǔ)言文件來(lái)獲得相關(guān)的信息。具體程序略。 3.2.2.4 編碼 編碼部分主要是對量化后的DCT系數進(jìn)行處理,主要利用了相鄰圖像塊之間的相關(guān)性、量化后的DCT系數矩陣的連零特性和霍夫曼編碼應進(jìn)行壓縮編碼。該部分主要涉及了查表、移位運算和存儲器讀寫(xiě)。DC差值/AC系數等級表如圖6所示。DC系數的編碼流程圖如圖7所示。 AC系數的編碼流程圖如圖8所示。 其中,ZZ(K)編碼是對不為零的AC DCT系數進(jìn)行編碼,編碼方法可參考DC差值編碼。 由于在AC編碼過(guò)程當中分支語(yǔ)句比較多,為了程序的流水線(xiàn)執行,同時(shí)為了指令的并行性,大量地使用了條件指令。但是應該注意,在TMS320C6201中只有A1、A2、B0、B1、B2五個(gè)條件寄存器,不可能滿(mǎn)足所有的需要,因此一定要盡量簡(jiǎn)化程序。在實(shí)際使用中,使用該壓縮器壓縮一幅512%26;#215;512的灰度圖像需要的時(shí)間不到55ms,配合適當的數據接口可滿(mǎn)足對數據率為32Mbit/s的掃描圖像進(jìn)行實(shí)時(shí)壓縮。

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>