新聞中心

EEPW首頁(yè) > 光電顯示 > 設(shè)計(jì)應(yīng)用 > 基于ATmegal28的LED屏圖像數(shù)據(jù)解碼設(shè)計(jì)

基于ATmegal28的LED屏圖像數(shù)據(jù)解碼設(shè)計(jì)

作者: 時(shí)間:2009-04-29 來(lái)源:網(wǎng)絡(luò) 收藏

2.1 Huffman的實(shí)現(xiàn)
Huffman過(guò)程中重要的一環(huán)。傳統(tǒng)的哈夫曼解碼需要逐位查找哈夫曼表,進(jìn)行比較判斷,由于查找過(guò)程需要大量的移位及循環(huán)。這樣的解碼效率非常低。針對(duì)這種情況,充分考慮到的存儲(chǔ)容量的限制,在讀文件頭時(shí),軟件事先構(gòu)造出不同碼長(zhǎng)下的哈夫曼碼字的最小值表和最大值表如表1所示,最小值在哈夫曼表中的索引以及哈夫曼樹(shù)各葉子結(jié)點(diǎn)對(duì)應(yīng)的編碼表。

在解碼的時(shí)候,讀取1串二進(jìn)制,分別與各碼長(zhǎng)下的最大值和最小值進(jìn)行比較,如果在哈夫曼表中沒(méi)有該碼長(zhǎng)的碼字,說(shuō)明該比特不是完整的Huff_man編碼,接著讀取下一個(gè)比特加在前面的比特?cái)?shù)據(jù)組成的新的碼字,然后再在最小值表和最大值表中進(jìn)行查找,直至找到確切的碼字。最后把該碼字減去同一碼長(zhǎng)下最小值,加上此最小值在哈夫曼表中的索引即可得到該碼字在編碼表中的位置。
2.2 IDCT變換的實(shí)現(xiàn)
將8×8塊中的顏色分量單元的64個(gè)值逐一乘以對(duì)應(yīng)的量化表內(nèi)位置相同的系數(shù),然后再將64個(gè)數(shù)據(jù)進(jìn)行Z字型的重新排列,進(jìn)行IDCT變換。IDCT的運(yùn)算量很大,其中要進(jìn)行大量的浮點(diǎn)乘法和加法運(yùn)算,因而在解碼過(guò)程中IDCT所占時(shí)間最多。采用行列分解法先將二維IDCT分解成一維8點(diǎn)的IDCT,對(duì)于一維8點(diǎn)IDCT采用Loeffler的快速算法。圖2為L(zhǎng)oef―fler算法的流程圖,Loeffler算法運(yùn)算因子的解釋如圖3 所示。

直接對(duì)旋轉(zhuǎn)因子進(jìn)行計(jì)算需要4次乘法和2次加法,這樣1次8個(gè)點(diǎn)的一維IDCT變換總共需要14次乘法和26次加法??梢詫?duì)旋轉(zhuǎn)因子進(jìn)行變形如式(1)所示:


從而1次旋轉(zhuǎn)因子計(jì)算只需要3次乘和3次加。進(jìn)而進(jìn)行1次一維IDCT只需11次乘和29次加。因?yàn)槌朔ㄟ\(yùn)算的代價(jià)高于加法運(yùn)算,所以這種變形是有益的。完成一次二維的IDCT運(yùn)算總共要進(jìn)行16次的8點(diǎn)一維IDCT運(yùn)算。由于在速度方面的限制,在IDCT運(yùn)算過(guò)程中把浮點(diǎn)操作改進(jìn)為整形運(yùn)算,并且把的值擴(kuò)大211倍存儲(chǔ)起來(lái),為IDCT運(yùn)算做準(zhǔn)備。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉