国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于非完備碼表解析碼長的哈夫曼解碼方法

      文檔序號:7514414閱讀:269來源:國知局
      專利名稱:一種基于非完備碼表解析碼長的哈夫曼解碼方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種哈夫曼解碼方法,尤其涉及一種基于非完備碼表快速解析碼長的
      哈夫曼解碼方法。
      背景技術(shù)
      哈夫曼算法是一種根據(jù)待壓縮數(shù)據(jù)中各元素出現(xiàn)的概率進行編碼和解碼的算法, 能無損的壓縮數(shù)據(jù)所占用的空間。圖1是一個哈夫曼碼字生成樹的例子,以其碼字為葉子, 碼字所屬層數(shù)為級別數(shù)。 解析哈夫曼碼時,先確定要解析的碼流的首個碼字長度,將其取出,用哈夫曼編碼 提供的符號表就可以找到這個碼字所對應(yīng)的數(shù)據(jù)元素。除去碼流里的首個碼字,將剩余的 碼流按上述方法逐一解析,即可完成哈夫曼的解碼過程。由于哈夫曼編碼是變長編碼,在整 個解碼過程中,必須解決的一個問題是確定哈夫曼碼字的長度,以下描述了哈夫曼解碼中 碼字長度解析的常見解決方案 1、級別比較解析法?;诠蚵a字生成樹建立一個葉子檢索表來指示最近下一 級存在哈夫曼碼字的級別(等同碼字長度),并將同一級上最小碼字作為前綴位,其余位補 O,擴充到最大碼長長度。以哈夫曼前綴碼所在級別為索引,以這個擴充碼為索引值,建一 張各級最小哈夫曼碼字為前綴的定長碼字檢索表。在哈夫曼碼碼長解析時,按葉子檢索表 O級檢索下一級別,并以這個下一級別檢索定長碼字檢索表里的碼字,取出最大碼長長度的 碼流數(shù)值與之比較,如果這個碼流數(shù)值不小于定長碼字檢索表里的碼字,葉子檢索表的當(dāng) 前級別用下一級別替換,并用這個新的當(dāng)前級別檢索下一級存在葉子的級別,然后用這個 新的下一級級別檢索定長碼字檢索表里的碼字,用碼流數(shù)值與之比較,直到碼流數(shù)值小于 定長碼字檢索表里的碼字,此時葉子檢索表里當(dāng)前級別和碼流里存在的碼字長度相同。
      2、完備碼表解析法?;诖a流中所包含的所有哈夫曼碼字生成樹的葉子碼字,建 立一張完備碼長碼表。這個完備碼長碼表的每項索引以哈夫曼碼字為前綴、按一定規(guī)則擴 展到最大碼長長度,其索引值為相應(yīng)的哈夫曼前綴碼碼長。對于當(dāng)前待解析的哈夫曼碼流, 按照其待解析碼字所屬的哈夫曼碼字生成樹,在定長碼字完備碼長碼表中檢索到與這個哈 夫曼碼字生成樹相對應(yīng)的碼表部分。以最大碼字長度截取當(dāng)前待解析的哈夫曼碼流,并將 這個截取出的碼流數(shù)值作為索引,在當(dāng)前碼流哈夫曼碼字生成樹對應(yīng)的碼長碼表部分檢 索,檢索到的當(dāng)前碼長碼表值即為當(dāng)前待解析碼流中首個碼字碼長。 得到碼長后提取首個碼字,在當(dāng)前哈夫曼碼字生成樹所對應(yīng)的符號表中即可解析 到當(dāng)前碼字所對應(yīng)的數(shù)據(jù)。從碼流中除去已解析的部分,在剩余碼流中繼續(xù)逐個操作,即可 完成所有哈夫曼碼的解析。 現(xiàn)有普遍使用的哈夫曼解碼算法雖然利用了編碼表體現(xiàn)的碼字出現(xiàn)的概率,并基 于哈夫曼碼生成樹各級葉子的存在性對檢索算法進行了優(yōu)化,但對于絕大部分碼字,碼長 均需要多次才能確定,在總的解碼算法中耗時比例較大;基于完備碼表解析碼長雖然提高 了碼長解析速度,但是對于嵌入式系統(tǒng)的硬件存儲要求而言,其空間復(fù)雜度增加太大,難以滿足要求。 在音頻、視頻領(lǐng)域,基于哈夫曼數(shù)據(jù)壓縮的編碼、解碼算法在嵌入式系統(tǒng)中應(yīng)用非 常廣泛。在哈夫曼算法中,碼字以變長二進制前綴碼表示,為了解析一個哈夫曼碼字,必須 先解析哈夫曼碼字的字長,傳統(tǒng)的碼長解析算法不是速度過慢就是碼表數(shù)據(jù)量過大,如何 在不增加碼表數(shù)據(jù)量的同時減少碼長解析的時間,這對于哈夫曼解碼有很重要的意義。

      發(fā)明內(nèi)容
      本發(fā)明目的在于提供一種基于非完備碼表解析碼長的哈夫曼解碼方法,該方法可 以大大減少碼表占用的儲存空間和加快解碼速度。 本發(fā)明的目的可以通過以下方案實現(xiàn)一種基于非完備碼表的哈夫曼解碼方法, 步驟包括 1、按級別比較解析法,構(gòu)建所有用于級別比較解析的碼表,包括葉子檢索表和各 級哈夫曼最小碼字為前綴的定長碼字檢索表; 2、確定非完備碼表臨界碼長L :從最小碼長和最大碼長之間選擇一個值L,作為構(gòu) 建非完備碼表的臨界碼長; 3、基于碼流中所包含的所有哈夫曼碼字生成樹的不超過臨界碼長L比特的葉子 碼字,再構(gòu)建一個以哈夫曼碼字為前綴的L比特非完備碼表; 4、按照當(dāng)前碼流中待解析部分所屬的哈夫曼碼字生成樹,讀取最大碼長長度的碼 流數(shù)值,以這個碼流數(shù)值為索引,按照當(dāng)前待解析碼流所屬的哈夫曼碼字生成樹,在對應(yīng)的 以各級哈夫曼最小碼字為前綴的定長碼字檢索表里檢索級別(碼長)為(L+l)的碼字;
      5、比較碼流數(shù)值與剛檢索到的(L+l)級的定長碼字,若碼流數(shù)值小于剛檢索到的 碼字,以碼流數(shù)值的前L比特為新的索引,在對應(yīng)的非完備碼長碼表部分檢索,檢索到的值 即為當(dāng)前碼流待解析部分首個碼字碼長;反之,以舊的碼流數(shù)值作為比較對象,按照級別比 較解析法,解析其對應(yīng)的L級之后的首個碼字長度; 6、根據(jù)已解析的碼長,在當(dāng)前碼流中提取其碼字,基于碼字對應(yīng)的符號表,查取其 對應(yīng)符號值,即可完成碼流中首個碼字的解析; 7、從當(dāng)前碼流中剔除已經(jīng)解析的碼字,將剩余碼流重復(fù)步驟4、5、6,即可完成所有 哈夫曼碼的解碼。 所述的非完備碼長碼表以碼流包含的每個哈夫曼碼字生成樹為單位,按相同的方 式逐一構(gòu)建;對于每棵哈夫曼碼字生成樹,以不超過L比特的哈夫曼碼字為前綴,其余位由 全0到全1擴展到L比特長度,建立非完備碼長碼表的索引;索引指向的值為哈夫曼前綴碼 碼長。 所述的每個哈夫曼碼字生成樹對應(yīng)的碼長碼表部分構(gòu)建過程首先,按照對應(yīng)的 哈夫曼碼字生成樹,構(gòu)建L比特長度的各個比特位為全O到全1的索引,并將所有索引值 (即碼長碼表值)初始化為0 ;以哈夫曼生成樹的所有不超過L比特葉子碼子為前綴,將剩 余碼字位以全0到全1填充到L比特長度,將所有同哈夫曼碼字前綴的擴充碼的碼長碼表 值以對應(yīng)哈夫曼前綴碼的長度賦值。 本發(fā)明可以大大減少存儲空間和加快了檢測速度。例如當(dāng)最大碼長為N( —般為
      416)時,級別比較解析法的碼長解析時間復(fù)雜度為o(l>, x/ )—其中Pi為碼長為i的碼
      字的統(tǒng)計概率,每個描述符對應(yīng)的碼長碼表空間復(fù)雜度為N ;完備碼表碼長解析時間復(fù)雜 度為O(l),對應(yīng)每個描敘符的完備碼長碼表空間復(fù)雜度為(2~N);對比于這兩種技術(shù),非完
      備碼表碼長解析法的時間復(fù)雜度為0(1+^P, XZ'),接近于完備碼表馬場時間解析復(fù)雜度,
      其對應(yīng)的每個描述符的空間復(fù)雜度為(2'8+N),按普通碼長16計算,其空間復(fù)雜度只有完 備碼表解析法的i ,極大地節(jié)省了存取空間。


      圖1是現(xiàn)有技術(shù)中的哈夫曼碼字生成樹; 圖2是本發(fā)明的單個哈夫曼碼字生成樹對應(yīng)的非完備碼長碼表生成流程示意圖;
      圖3是本發(fā)明的碼長解析流程示意圖。
      具體實施例方式
      先構(gòu)建一個基于級別比較解析法的用于檢索定長碼字的碼表;按現(xiàn)有技術(shù)中的級 別比較解析法,構(gòu)建所有用于級別比較解析的碼表,包括葉子檢索表和各級哈夫曼最小碼 字為前綴的定長碼字檢索表; 再構(gòu)建一個以哈夫曼碼字為前綴的L比特非完備碼表基于碼流中所包含的所有 哈夫曼碼字生成樹的不超過L比特的葉子碼字,建立一張非完備碼長碼表,L為構(gòu)建非完備 碼表的臨界碼長,從最小碼長和最大碼長之間選擇,對于最大碼長為16位的碼表,推薦使 用8作為臨界碼長L。這個非完備碼長碼表的每項索引以不超過L比特的哈夫曼碼字為前 綴、其余由全0到全1擴展到L比特長度,其索引值為相應(yīng)的哈夫曼前綴碼碼長。在這個非 完備碼長碼表的構(gòu)建過程中,以碼流包含的每個哈夫曼碼字生成樹為單位,按相同的方式 逐一構(gòu)建。 每個哈夫曼碼字生成樹對應(yīng)的碼長碼表部分構(gòu)建過程如下,首先,按照對應(yīng)的哈 夫曼碼字生成樹,構(gòu)建L比特長度的各個比特位為全O到全1的索引,并將所有索引值(即 碼長碼表值)初始化為0 ;以哈夫曼生成樹的所有不超過L比特葉子碼子為前綴,將剩余碼 字位以全0到全1填充到L比特長度,將所有同哈夫曼碼字前綴的擴充碼的碼長碼表值以 對應(yīng)哈夫曼前綴碼的長度賦值。 圖2是選用8比特非完備碼長碼表構(gòu)建過程中單個哈夫曼碼字生成樹對應(yīng)部分的
      處理,其中當(dāng)前級別、當(dāng)前葉子數(shù)和當(dāng)前碼字在當(dāng)前級別中的位序均從o起始。具體步驟如
      下 1、初始化將所有碼長設(shè)為0,并設(shè)置當(dāng)前級別為1 ; 2、計算當(dāng)前級別葉子總數(shù);然后設(shè)置當(dāng)前級別當(dāng)前葉子位序位0 ; 3、以葉子位序?qū)?yīng)碼字為前綴碼,補0到L位,計算其擴充碼字總數(shù);然后設(shè)置當(dāng)
      前葉子當(dāng)前碼字位序位O; 4、以擴充碼字加其位序位索引,索引值為當(dāng)前級別值;
      5、比較擴充碼字位序是否小于當(dāng)前碼字總數(shù),如果結(jié)果返回是,則擴充碼字位序
      加1并返回步驟4 ;如果結(jié)果返回否,則進行下一步; 6、將前綴碼加1作為下一個前綴碼,比較當(dāng)前葉子位序是否小于級別總?cè)~子數(shù),
      如果結(jié)果返回是,則當(dāng)前葉子位序加1并返回步驟3 ;如果結(jié)果返回否,則進行下一步; 7、檢測當(dāng)前碼字級別是否不大于L,如果結(jié)果返回是,則返回步驟2 ;如果結(jié)果返 回否,則碼表生成完畢并結(jié)束。 構(gòu)建上述兩個碼表后,然后解析碼長,按照當(dāng)前碼流待解析部分所屬的哈夫曼碼 字生成樹,讀取其最大碼長長度的碼流數(shù)值,以這個碼流數(shù)值為索引,在對應(yīng)的各級哈夫曼 碼最小碼字前綴定長碼字檢索表里檢索級別(碼長)為L+1的碼字。 比較碼流數(shù)值與剛檢索到的碼字,若碼流數(shù)值小于剛檢索到的碼字,以碼流數(shù)值 的前L比特為新的索引,在與當(dāng)前碼流待解析部分所屬的哈夫曼碼字生成樹對應(yīng)的非完備 碼長碼表部分檢索,檢索到的值即為當(dāng)前碼流待解析部分首個碼字碼長;反之,以舊的碼流 數(shù)值作為比較對象,按照級別比較解析法,從對應(yīng)的哈夫曼碼字生成樹的L級之后檢索當(dāng) 前碼流中待解析的首個碼字長度。從當(dāng)前碼流中提取剛解析到的碼長碼流,在當(dāng)前碼字所 屬哈夫曼碼字生成樹對應(yīng)的符號表中即可查出其對應(yīng)的數(shù)據(jù)。 從當(dāng)前碼流剔除已經(jīng)解析的碼字,將剩余碼流按上述方法解析,即可完成所有哈 夫曼碼的解碼。 具體解碼流程如圖3所示,首先提取當(dāng)前比特流最大碼長比特A和定長碼字表中 級別為L+l的碼字B,并比較A、 B的大小。如果A小于B則取A的前L比特數(shù)作為索引在 對應(yīng)的非完備碼表部分檢索,碼長為索引值,并結(jié)束解碼。如果A不小于B,則在葉子檢索表 中檢索哈夫曼碼字數(shù)第L級之后存在碼字的下一級級別;在定長碼表檢索當(dāng)下一級別對應(yīng) 的碼字C。如果A不小于C,則以下一級別代替當(dāng)前級別,在葉子檢索表中檢索存在碼字的 下一級別,并返回重新檢索碼字C ;如果A小于C,則碼長為當(dāng)前級別值,并結(jié)束解碼。
      權(quán)利要求
      一種基于非完備碼表解析碼長的哈夫曼解碼方法,其特征在于,步驟包括(a)、按級別比較解析法,構(gòu)建所有用于級別比較解析的碼表,包括葉子檢索表和各級哈夫曼最小碼字為前綴的定長碼字檢索表;(b)、確定非完備碼表臨界碼長L從最小碼長和最大碼長之間選擇一個值L,作為構(gòu)建非完備碼表的臨界碼長;(c)、基于碼流中所包含的所有哈夫曼碼字生成樹的不超過臨界碼長L比特的葉子碼字,再構(gòu)建一個以哈夫曼碼字為前綴的L比特非完備碼表;(d)、按照當(dāng)前碼流中待解析部分所屬的哈夫曼碼字生成樹,讀取最大碼長長度的碼流數(shù)值,以這個碼流數(shù)值為索引,按照當(dāng)前待解析碼流所屬的哈夫曼碼字生成樹,在對應(yīng)的以各級哈夫曼最小碼字為前綴的定長碼字檢索表里檢索級別(碼長)為(L+1)的碼字;(e)、比較碼流數(shù)值與剛檢索到的(L+1)級的定長碼字,若碼流數(shù)值小于剛檢索到的碼字,以碼流數(shù)值的前L比特為新的索引,在對應(yīng)的非完備碼長碼表部分檢索,檢索到的值即為當(dāng)前碼流待解析部分首個碼字碼長;反之,以舊的碼流數(shù)值作為比較對象,按照級別比較解析法,解析其對應(yīng)的L級之后的首個碼字長度;(f)、根據(jù)已解析的碼長,在當(dāng)前碼流中提取其碼字,基于碼字對應(yīng)的符號表,查取其對應(yīng)符號值,即可完成碼流中首個碼字的解析;(g)、從當(dāng)前碼流中剔除已經(jīng)解析的碼字,將剩余碼流重復(fù)步驟d、e、f,即可完成所有哈夫曼碼的解碼。
      2. 根據(jù)權(quán)利要求1所述的一種基于非完備碼表解析碼長的哈夫曼解碼方法,其特征在 于,所述的非完備碼長碼表以碼流包含的每個哈夫曼碼字生成樹為單位,按相同的方式逐 一構(gòu)建;對于每棵哈夫曼碼字生成樹,以不超過L比特的哈夫曼碼字為前綴,其余位由全0 到全1擴展到L比特長度,建立非完備碼長碼表的索引;索引指向的值為哈夫曼前綴碼碼 長。
      3. 根據(jù)權(quán)利要求1所述的一種基于非完備碼表解析碼長的哈夫曼解碼方法,其特征在 于,所述的每個哈夫曼碼字生成樹對應(yīng)的碼長碼表部分構(gòu)建過程首先,按照對應(yīng)的哈夫曼 碼字生成樹,構(gòu)建L比特長度的各個比特位為全O到全1的索引,并將所有索引值(即碼長 碼表值)初始化為0 ;以哈夫曼生成樹的所有不超過L比特葉子碼子為前綴,將剩余碼字位 以全0到全1填充到L比特長度,將所有同哈夫曼碼字前綴的擴充碼的碼長碼表值以對應(yīng) 哈夫曼前綴碼的長度賦值。
      全文摘要
      本發(fā)明公開了一種基于非完備碼表解析碼長的哈夫曼解碼方法,步驟包括構(gòu)建所有用于級別比較解析的碼表;確定非完備碼表臨界碼長L;再構(gòu)建L比特非完備碼表;讀取最大碼長長度的碼流數(shù)值,在對應(yīng)的以各級哈夫曼最小碼字為前綴的定長碼字檢索表里檢索級別為(L+1)的碼字;解析L級之后的首個碼字長度;查取其對應(yīng)符號值,完成碼流中首個碼字的解析;從當(dāng)前碼流中剔除已經(jīng)解析的碼字,重復(fù)上述步驟完成所有哈夫曼碼的解碼。本發(fā)明可以大大減少存儲空間和加快了檢測速度;當(dāng)最大碼長為16時,其空間復(fù)雜度只有完備碼表解析法的,極大地節(jié)省了存取空間。
      文檔編號H03M7/42GK101729076SQ20081021856
      公開日2010年6月9日 申請日期2008年10月22日 優(yōu)先權(quán)日2008年10月22日
      發(fā)明者葉廣明, 胡勝發(fā), 蘇丹, 裴少芳 申請人:安凱(廣州)軟件技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1