亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于FPGA的快速哈夫曼編碼設(shè)計

        2018-09-26 03:10:44陸哲敏易慶陽楊一凡蔣劍飛
        電子產(chǎn)品世界 2018年3期
        關(guān)鍵詞:碼表范式應(yīng)用

        陸哲敏 易慶陽 楊一凡 蔣劍飛

        摘要:針對不同的應(yīng)用場景,給出兩種方案,一種用碼表實(shí)現(xiàn),另一種用靜態(tài)編碼實(shí)現(xiàn)。碼表方式將題目與實(shí)際應(yīng)用結(jié)合起來,針對不同場景給出不同的碼表快速編碼;不過考慮到無規(guī)律信號的編碼,所以通過靜態(tài)編碼使我們的作品更加具有普適性,我們還采用三位范式編碼的方式,縮短輸出周期;同時在數(shù)據(jù)輸入結(jié)束之前開始排序,減少編碼實(shí)際占用的時間。

        關(guān)鍵詞:哈夫曼編碼;靜態(tài)編碼;碼表;范式;應(yīng)用

        0 引言

        哈夫曼編碼是基于帶權(quán)路徑最小的最優(yōu)二叉樹啥夫曼樹的一種平均碼長最短的編碼方式。哈夫曼編碼常用于數(shù)據(jù)的無損壓縮,尤其在衛(wèi)星探測、醫(yī)學(xué)圖像處理、雷達(dá)測試系統(tǒng)等領(lǐng)域有著廣泛應(yīng)用[1]。

        以對一段長度為256的0-9的數(shù)據(jù)進(jìn)行編碼為例,如果采用定長編碼,則需要4位表示一個0-9的數(shù)字,一共需要4*256=1024位實(shí)現(xiàn)編碼,而如果采用哈夫曼編碼可以大大降低需要的位數(shù)。

        1算法設(shè)計

        在開始設(shè)計前,我們先對目前主流啥夫曼方案作簡單分析:

        1.靜態(tài)編碼:編碼速度與資源占用方面都在合理范圍內(nèi),雖然編碼速度比碼表慢,但是通用性要比碼表好:

        2.動態(tài)編碼:動態(tài)編碼依據(jù)的是一棵動態(tài)變化的哈夫曼樹,每個數(shù)據(jù)的編碼都是由它前面所有數(shù)據(jù)組成的哈夫曼樹決定的,雖然可以同步輸出編碼序列,但是對資源占用較大;

        3.碼表方案:碼表只針對特定分布的數(shù)據(jù)可以獲得良好壓縮率,但是有著其極小的資源占用和無需復(fù)雜運(yùn)算的優(yōu)點(diǎn)。

        經(jīng)過以上分析,我們選擇碼表和靜態(tài)編碼相結(jié)合的方式進(jìn)行編碼。在輸入完成前,對輸入序列的分布進(jìn)行判斷,如果符合碼表的分布要求,則直接由碼表編碼,加快編碼的速度,如果不符合,則進(jìn)行靜態(tài)編碼,以實(shí)現(xiàn)編碼速度和壓縮率的平衡。

        為實(shí)現(xiàn)哈夫曼編碼,我們將整個系統(tǒng)分為5個模塊:統(tǒng)計、排序、編碼、碼表和輸出。

        數(shù)據(jù)由數(shù)據(jù)源輸入之后,首先對其統(tǒng)計與排序。在整個過程中,排序進(jìn)行兩次,第一次在第251個周期,用于判斷使用碼表還是靜態(tài)編碼:第二次則根據(jù)編碼方式的不同而改變:如果使用碼表編碼,則在第256個周期開始排序:如果使用靜態(tài)編碼,則在第254個周期排序,這是由于最后兩個權(quán)值對壓縮率影響極小,所以通過丟棄最后兩個權(quán)值信息加快編碼速度。

        為了進(jìn)一步減小資源占用與輸出周期,編碼和碼表模塊輸出的碼長均由3位構(gòu)成,這樣設(shè)計比起4位輸出時要節(jié)省10個周期。理論支撐是出現(xiàn)碼長為9的情況時,數(shù)據(jù)頻率需要滿足第i個數(shù)的碼長大于前i-2個數(shù)的碼長之和,這種情況的概率是極小的:而且即使出現(xiàn)碼長為9的情況時,最大的4個碼長——9、9、8、7也可以用8、8、8、8來近似,由于最大碼長對應(yīng)的數(shù)據(jù)的頻率很小,壓縮率的損失也很小。故碼長為9的情況可以舍棄,所以認(rèn)為碼長在1-8之間,用3位二進(jìn)制來表示。

        1.1 統(tǒng)計模塊

        統(tǒng)計模塊的功能是對輸入的數(shù)據(jù)統(tǒng)計出現(xiàn)的頻數(shù)。設(shè)計的思想是給0到9每個數(shù)字構(gòu)造一個計數(shù)器,先初始化計數(shù)器值為0,每次輸入一個數(shù)字之后其相應(yīng)的計數(shù)器加1,這樣,在數(shù)據(jù)全部輸入完成后即可得到0到9這10個數(shù)字的權(quán)重。

        1.2 排序模塊

        排序模塊的功能是對已經(jīng)統(tǒng)計好的數(shù)據(jù)進(jìn)行排序。設(shè)計的思想是:將每個權(quán)值都兩兩比較一次,由比較結(jié)果就可以快速確定它在一個降序排列的存儲器seq中的位置。由于這些比較都是并行的組合邏輯,所以只需要讀一次比較結(jié)果,一個周期即可完成排序。

        1.3 碼表模塊

        排序模塊的排序結(jié)果作為碼表模塊選擇何種編碼方式的判斷依據(jù),當(dāng)序列接近于等概率分布時,哈夫曼編碼基本等效于等長編碼,此時進(jìn)行靜態(tài)編碼效率較低,所以通過碼表1直接編碼;除此之外,當(dāng)序列分布范圍極廣,即分布十分不均勻的時候,用靜態(tài)編碼效率也比較低,此時采用碼表2進(jìn)行編碼。兩張碼表如表1、表2所示。

        1.4編碼模塊

        如果碼表模塊無法對輸入數(shù)據(jù)進(jìn)行編碼,則必須通過編碼模塊完成靜態(tài)編碼。

        編碼過程是由構(gòu)建哈夫曼樹和分配碼長兩個過程組成的[4],此模塊中我們使用到3個存儲器,一個是上文提到的seq,記錄排序好的十個數(shù)據(jù)以及各自權(quán)值;另一個存儲器是node,是由哈夫曼樹中的非葉節(jié)點(diǎn)構(gòu)成的;而最后一個存儲器為result,保存整棵哈夫曼樹。

        10個葉結(jié)點(diǎn)組成的哈夫曼樹應(yīng)有19個結(jié)點(diǎn),但是根結(jié)點(diǎn)不參與編碼,所以result只保存18個結(jié)點(diǎn),同樣,node結(jié)點(diǎn)也只保存8個內(nèi)部結(jié)點(diǎn)。

        為了提高編碼效率,構(gòu)建node存儲器和構(gòu)建result存儲器是同步進(jìn)行的,而構(gòu)建哈夫曼樹和分配碼長的操作均為兩個結(jié)點(diǎn)同時操作,編碼過程也沒有選擇常規(guī)的自底向上的編碼,而是選擇了自頂向下的編碼方式,避免重復(fù)讀取內(nèi)部結(jié)點(diǎn)[5],如此下來,構(gòu)造result的過程耗時10個周期,編碼過程最快只需耗時8個周期。

        具體過程如下:

        假設(shè)已有:降序排列的權(quán)值序列seq= {seq0,seq1,seq2, seq3, seq4, seq5, seq6, seq7, seq8. seq9),初始化好的存儲器為node={FFH,F(xiàn)FH……,F(xiàn)FH)。

        1)第1個周期開始構(gòu)造內(nèi)部結(jié)點(diǎn)node存儲器:

        a)依次從seqn、seqn-l、nodek和nodek+l中尋找最小的兩個值(如果權(quán)值相同,認(rèn)為排前面的權(quán)值?。?/p>

        b)將最小的兩個權(quán)值相加后放入node中;

        c)將n、k作相應(yīng)移動;

        d重復(fù)a。

        2)第2個周期開始同步進(jìn)行哈夫曼樹result存儲器的構(gòu)造:

        a)依次從seqn、seqn-l、nodek和nodek+l中尋找最小的兩個值(如果權(quán)值相同,認(rèn)為排前面的權(quán)重?。?/p>

        b)將兩個最小權(quán)值依次放入result中;

        c)將n、k作相應(yīng)移動:

        d)重復(fù)a。

        3)第11個周期開始編碼:

        a)初始碼長result[17]=result[16]=1;

        b)根據(jù)標(biāo)記位,可以知道某一個結(jié)點(diǎn)是否有子結(jié)點(diǎn);

        i.如果有子結(jié)點(diǎn),給子結(jié)點(diǎn)分配碼長:如果子節(jié)點(diǎn)已經(jīng)是樹尾,則編碼結(jié)束:

        ii如果沒有子結(jié)點(diǎn),排查下一個結(jié)點(diǎn)。

        4)輸出碼長數(shù)據(jù),即按O~9順序輸出編碼結(jié)果。

        1.5 輸出模塊

        輸出模塊主要有三個工作:存儲輸入數(shù)據(jù)、求范式哈夫曼編碼、對輸入數(shù)據(jù)編碼并輸出。具體介紹求范式哈夫曼編碼[6]工作:

        編碼模塊工作完成后,輸出模塊開始接收碼長信息(code_length),同時記錄每個碼長出現(xiàn)的次數(shù)(size_of_len)相順序(code_order),然后根據(jù)這些信息求出每個符號的范式哈夫曼編碼。

        如表3所示,第一行表示code的位,第一列表示碼長。把碼長1出現(xiàn)的次數(shù)二進(jìn)制值對齊第8位,把碼長2出現(xiàn)的次數(shù)二進(jìn)制值對齊第7位,以此類推,最后將表格按行相加,即得到數(shù)i的編碼。

        2 驗(yàn)證分析與FPGA實(shí)現(xiàn)

        根據(jù)前述的算法設(shè)計,最終得到如圖1所示的模塊連接圖。

        為了驗(yàn)證編碼的準(zhǔn)確性,首先采用C++編寫常規(guī)的靜態(tài)哈夫曼編碼算法,同時在TestbencH中,采用讀寫文件的方式將輸出結(jié)果就保存到文件中,最后再驗(yàn)證兩者輸出的一致性。

        對于題目提出的Totalcycles參數(shù),它主要包含了輸入數(shù)據(jù)的256個周期,編碼用時以及輸出用時。我們的輸出用時包含2個部分:一是輸出范式編碼表,總計30個周期;二是輸出編碼序列。所以Totalcycles=256+編碼用時+ 30+編碼序列長度。根據(jù)測量結(jié)果,Totalcycles最優(yōu)為碼表2的547個周期,最差為碼表1的1159個周期。

        對于壓縮算法的另一個重要指標(biāo)壓縮率,這里定義為編碼后的數(shù)據(jù)長度與編碼前的數(shù)據(jù)長度之比[7],根據(jù)測量結(jié)果,最優(yōu)壓縮率為25.20%,最差為85.06%,同樣分別發(fā)生在表1和表2。

        在目標(biāo)器件XC7A100T-1CSG324C上綜合實(shí)現(xiàn)后,可以得到我們的設(shè)計一共使用了1819個查找表和785個寄存器:同時調(diào)用了Block Ram的lP核用于存儲輸入的256個序列。在將扇出約束為50的情況下,由時序報告可知8.600ns的時鐘下還有0.025ns的余量,經(jīng)計算此時的工作頻率為ll6.28MHz[8],關(guān)鍵路徑位于編碼模塊的哈夫曼樹構(gòu)造過程。

        在FPGA上,運(yùn)用Vivado Logic Analyzer驗(yàn)證后,得到的波形與預(yù)期結(jié)果完全一致。

        3 結(jié)論

        哈夫曼編碼從被提出開始,就一直被關(guān)注和研究。經(jīng)過60多年的發(fā)展,它已經(jīng)被廣泛應(yīng)用于數(shù)據(jù)壓縮的各個領(lǐng)域。

        我們的設(shè)計的主要有以下特點(diǎn):

        1)與實(shí)際應(yīng)用場景結(jié)合起來,提供了兩個碼表和一種靜態(tài)編碼的方案。在輸入數(shù)據(jù)符合碼表?xiàng)l件時,自動調(diào)用碼表加快編碼速度。

        2)采用范式編碼的方式輸出,易于解碼,并使輸出哈夫曼編碼表的過程縮短4~24個周期。

        3)采用3位碼長輸出,在幾乎不損失壓縮率的情況下,將輸出碼表的體積減小25%。

        4)采用預(yù)先編碼方案,進(jìn)一步縮短編碼耗時。

        最初的方案中,靜態(tài)編碼耗時共需要70多個周期,后來幾經(jīng)優(yōu)化,利用FPGA同步處理的優(yōu)勢,最終降到19個周期,加上預(yù)先編碼方案,實(shí)際占用為17個周期。

        在判斷使用表1、表2或使用靜態(tài)編碼的時候,設(shè)計采用了數(shù)據(jù)頻度的極差作為條件,但是在實(shí)際測試中我們發(fā)現(xiàn)極差并不是特別準(zhǔn)確,真正的碼表選擇和數(shù)據(jù)分布有著極為復(fù)雜的關(guān)系,最終我們只能通過收緊判斷條件,更多的采用靜態(tài)編碼以避免加速失效。所以碼表和碼表的選擇條件,還需要更多的實(shí)驗(yàn)檢驗(yàn)和數(shù)學(xué)證明。

        參考文獻(xiàn):

        [1]Latha Pillai,“Huffman Coding”EXILINX, Virtex Series, XAPP616 (vl.0) Apr 22, 2003

        [2]方敏,泰曉新動態(tài)哈夫曼編碼的數(shù)據(jù)壓縮方法[J]計算機(jī)世界,1994(7):29-33

        [3]Matai, Janarbek,J Y Kim, and R Kastner”Energy efficient canonical huffman encoding.”IEEE, International Conference On Application-Specific Systems, Architectures and ProcessorslEEE, 2014:202-209

        [4]李偉生,李域,王濤一種不用建造Huffman樹的高效Huffman編碼算法[J].中國圖像圖形學(xué)報,2005,10(3):382-387

        [5]林建英,伍勇,李建華,等一種易于硬件實(shí)現(xiàn)的快速自適應(yīng)哈夫曼編碼算法[J]大連理工大學(xué)學(xué)報.2008,48(3):436-440

        [6]張全伙,于洪斌,林榆優(yōu)化哈夫曼編碼數(shù)據(jù)壓縮技術(shù)及程序?qū)崿F(xiàn)[J]華僑大學(xué)學(xué)報(自然科學(xué)版).1995,16(3):344-348

        [7]張穎超基于FPGA的Huffman編碼并行實(shí)現(xiàn)及高速存儲系統(tǒng)設(shè)計[D]長安大學(xué),2015

        [8]Latha Pillai,“Huffman Coding”EXILIN×, Virtex Series, XAPP616 (vl.0) Apr 22, 2003

        猜你喜歡
        碼表范式應(yīng)用
        以寫促讀:構(gòu)建群文閱讀教學(xué)范式
        甘肅教育(2021年10期)2021-11-02 06:14:08
        范式空白:《莫失莫忘》的否定之維
        孫惠芬鄉(xiāng)土寫作批評的六個范式
        iGPSPORTiGS618智能GPS碼表測評
        中國自行車(2018年9期)2018-10-13 06:17:04
        管窺西方“詩辯”發(fā)展史的四次范式轉(zhuǎn)換
        皺皺眉頭就是一首詩
        優(yōu)雅(2017年8期)2017-08-08 06:01:53
        廉價親民黑鳥單車BB10 GPS碼表評測
        中國自行車(2017年1期)2017-04-16 02:54:07
        GM(1,1)白化微分優(yōu)化方程預(yù)測模型建模過程應(yīng)用分析
        科技視界(2016年20期)2016-09-29 12:03:12
        煤礦井下坑道鉆機(jī)人機(jī)工程學(xué)應(yīng)用分析
        科技視界(2016年20期)2016-09-29 11:47:01
        氣體分離提純應(yīng)用變壓吸附技術(shù)的分析
        科技視界(2016年20期)2016-09-29 11:02:20
        国产精品白丝久久av网站| 中文字幕一二区中文字幕| 最新日本久久中文字幕| 日本xxxx色视频在线观看免费| 无码精品久久久久久人妻中字| 欧美黄色免费看| 成人一区二区三区蜜桃| 亚洲av久播在线一区二区| 香蕉人人超人人超碰超国产| 亚洲天堂资源网| 精品国精品自拍自在线| 五月开心婷婷六月综合| 人妻精品动漫h无码网站| 亚洲精品亚洲人成在线下载 | 国产360激情盗摄一区在线观看| 国产日产韩国级片网站| 亚洲 欧美 日韩 国产综合 在线| 无码国产激情在线观看| 国产精品白浆免费观看| 国产一区二区三区视频地址| 狠狠噜天天噜日日噜无码| 国产a级午夜毛片| 午夜在线观看一区二区三区四区| 中文无码av一区二区三区| 国产成人啪精品视频免费软件| 精品午夜一区二区三区久久| 91亚洲免费在线观看视频| 偷拍激情视频一区二区三区 | 性做久久久久久久| 国产一区二区不卡av| 五月丁香六月综合缴清无码| 中文字幕无码无码专区| 日本中文字幕av网址| 国产精品自线一区二区三区| 少妇无码av无码专区线| 无码一区二区三区网站| 国产乱子伦一区二区三区国色天香 | 一区二区三区免费自拍偷拍视频| 欧美精品欧美人与动人物牲交| 一本一本久久a久久精品综合麻豆| 国产精品麻豆A在线播放|