專利名稱:一種優(yōu)化的霍夫曼解碼方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)壓縮編解碼技術(shù)領(lǐng)域,特別涉及一種優(yōu)化的霍夫曼(Huffman)解碼方法和裝置。
背景技術(shù):
霍夫曼編碼是霍夫曼(Huffman)在1952年提出的一種利用消息符號(hào)的統(tǒng)計(jì)特性的編碼方法,即從下到上的編碼方法?;舴蚵幋a是目前普遍使用的一種熵編碼技術(shù),也是最基礎(chǔ)和主要的編碼技術(shù)之一。
圖1所示為霍夫曼編碼的一種簡(jiǎn)單的實(shí)現(xiàn)流程,包括如下步驟步驟101把總數(shù)為N的信元符號(hào),按每個(gè)信元符號(hào)出現(xiàn)的概率Pi(i=1,2,...N)由大到小順序排列,為P1≥P2≥...≥PN;步驟102將出現(xiàn)概率最小的兩個(gè)信元符號(hào)的概率相加,合成一個(gè)概率;將這個(gè)概率與其他信元符號(hào)的概率一起重新按大小順序排列;步驟103判斷是否概率為1,若是則執(zhí)行步驟104,否則轉(zhuǎn)至步驟102;步驟104用線將信元符號(hào)連接起來(lái),逐步從后向前進(jìn)行編碼,每個(gè)節(jié)點(diǎn)有兩個(gè)分支,對(duì)概率大的賦0,概率小的賦1(也可以對(duì)概率大的賦1,概率小的賦0),經(jīng)過(guò)幾個(gè)節(jié)點(diǎn)后到達(dá)末節(jié)點(diǎn),也稱為端點(diǎn);步驟105將從首節(jié)點(diǎn)到端點(diǎn)的0或1按順序排列起來(lái),就是這個(gè)端點(diǎn)所對(duì)應(yīng)的信元符號(hào)的碼字。
圖2所示為霍夫曼編碼的碼字結(jié)構(gòu)示意圖。其中,白色圓圈代表中間節(jié)點(diǎn)(Internal Node),灰色圓圈則代表端點(diǎn)(Result Node)。可以看出,該碼字的長(zhǎng)度是可變的。根據(jù)上述編碼流程可知,概率最大的信元符號(hào)對(duì)應(yīng)最短的碼字,而概率最小的信元符號(hào)對(duì)應(yīng)最長(zhǎng)的碼字,這樣就可以縮短總的編碼長(zhǎng)度。
目前常采用二進(jìn)樹搜索法對(duì)上述碼字進(jìn)行解碼。其基本原理是從首節(jié)點(diǎn)開(kāi)始,每次從碼字中讀取一個(gè)比特,根據(jù)0或1判斷選擇二叉樹的分支,然后根據(jù)分支結(jié)點(diǎn)的值判斷是否已經(jīng)尋找到需要的碼字還是需要下一步搜索,已經(jīng)讀取的比特可以丟棄??梢钥吹?,二進(jìn)樹搜索法最壞情況下搜索的次數(shù)為霍夫曼碼字中最長(zhǎng)碼字的長(zhǎng)度。搜索得到碼字后,再查找預(yù)先設(shè)置的碼字與信元符號(hào)的對(duì)應(yīng)關(guān)系表,就可以得到該碼字對(duì)應(yīng)的信元符號(hào)。
從分組的角度看二進(jìn)搜索樹的結(jié)構(gòu),可以認(rèn)為二進(jìn)搜索樹的分組長(zhǎng)度固定為1。解碼的時(shí)候?qū)Υa流的搜索是逐比特的,即一次分析一個(gè)比特。二進(jìn)樹搜索法的霍夫曼解碼方法可以達(dá)到很高的解碼效率,但是需要存儲(chǔ)每一個(gè)中間節(jié)點(diǎn)以及端點(diǎn)。從圖2可以看出,由于每個(gè)節(jié)點(diǎn)只對(duì)應(yīng)一個(gè)比特的碼字,但對(duì)于每個(gè)節(jié)點(diǎn)需要分配一定長(zhǎng)度的存儲(chǔ)空間,因此,現(xiàn)有的二進(jìn)樹搜索法需要消耗較多的存儲(chǔ)空間。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于,提出一種優(yōu)化的霍夫曼解碼方法和裝置,能夠在解碼效率基本不受影響的情況下,大大節(jié)省所需的存儲(chǔ)空間。
所述霍夫曼解碼方法包括如下步驟對(duì)霍夫曼碼表中的所有碼字進(jìn)行變長(zhǎng)度的動(dòng)態(tài)分組,根據(jù)分組得到的變長(zhǎng)度的碼字片段生成節(jié)點(diǎn),并將所述節(jié)點(diǎn)組成變長(zhǎng)度分組霍夫曼搜索樹;根據(jù)所述變長(zhǎng)度分組霍夫曼搜索樹對(duì)碼流進(jìn)行搜索,得到碼字對(duì)應(yīng)的信元符號(hào)。
所述霍夫曼解碼裝置包括碼表信息檢索模塊、分組模塊和搜索模塊,其中,所述碼表信息檢索模塊用于存儲(chǔ)變長(zhǎng)度分組霍夫曼搜索樹的相關(guān)信息,并將所存儲(chǔ)的變分組霍夫曼樹的節(jié)點(diǎn)信息分別發(fā)送至搜索模塊和分組模塊;所述分組模塊用于接收霍夫曼碼流,根據(jù)來(lái)自搜索模塊的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度對(duì)所接收的霍夫曼碼流進(jìn)行分組,得到當(dāng)前需要搜索的碼字片段;將所得碼字片段發(fā)送到搜索模塊;所述搜索模塊用于接收來(lái)自分組模塊的碼字片段,并接收來(lái)自碼表信息檢索模塊的變長(zhǎng)度分組霍夫曼搜索樹的節(jié)點(diǎn)信息,根據(jù)所述節(jié)點(diǎn)信息對(duì)所述碼字片段進(jìn)行搜索,找到與所述碼字片段對(duì)應(yīng)的節(jié)點(diǎn),進(jìn)而最終找到完整的霍夫曼碼字對(duì)應(yīng)的信元符號(hào)。
從以上技術(shù)方案可以看出,本發(fā)明方案對(duì)霍夫曼碼字進(jìn)行變長(zhǎng)度分組,可以用較少存儲(chǔ)空間的實(shí)現(xiàn)霍夫曼解碼。
圖1為霍夫曼編碼的一種實(shí)現(xiàn)流程圖;圖2為霍夫曼編碼的碼字結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例的節(jié)點(diǎn)存儲(chǔ)結(jié)構(gòu)示意圖;圖4為本發(fā)明實(shí)施例根據(jù)變長(zhǎng)度分組霍夫曼搜索樹對(duì)碼流進(jìn)行解碼的流程圖;圖5為一種變長(zhǎng)度分組霍夫曼搜索樹的實(shí)例;圖6為與圖5對(duì)應(yīng)的二進(jìn)樹實(shí)例;圖7為本發(fā)明實(shí)施例裝置示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)闡述。
本發(fā)明實(shí)施例對(duì)霍夫曼碼表中的所有碼字進(jìn)行可變長(zhǎng)度的分組,根據(jù)分組得到的變長(zhǎng)度碼字片段生成節(jié)點(diǎn),并將所述節(jié)點(diǎn)組成變長(zhǎng)度分組霍夫曼搜索樹;然后,根據(jù)所述變長(zhǎng)度分組霍夫曼搜索樹對(duì)霍夫曼編碼形成的碼流進(jìn)行搜索。
本發(fā)明實(shí)施例的變長(zhǎng)度分組霍夫曼搜索樹的節(jié)點(diǎn)存儲(chǔ)結(jié)構(gòu)如圖3所示。假設(shè)存儲(chǔ)長(zhǎng)度為16比特,包括一個(gè)比特的端點(diǎn)標(biāo)識(shí),用于表示該節(jié)點(diǎn)是否為端點(diǎn),例如值為1表示該節(jié)點(diǎn)為端點(diǎn),值為零表示該節(jié)點(diǎn)為中間節(jié)點(diǎn),當(dāng)然也可以用0表示該節(jié)點(diǎn)為中間節(jié)點(diǎn),用1表示該節(jié)點(diǎn)為端點(diǎn)。接下來(lái)的三個(gè)比特用于表示下級(jí)節(jié)點(diǎn)的碼字片段的比特?cái)?shù),稱為下一級(jí)節(jié)點(diǎn)的分組長(zhǎng)度(Segmentation Length)。剩下的12比特則用于存儲(chǔ)下一級(jí)節(jié)點(diǎn)的首地址或者下一級(jí)節(jié)點(diǎn)的首地址偏移量,所述首地址偏移量可以是相對(duì)于首節(jié)點(diǎn)地址的偏移量,也可以是相對(duì)于上一級(jí)節(jié)點(diǎn)首地址的偏移量,以下統(tǒng)一用首地址表示。用于存儲(chǔ)分組長(zhǎng)度的比特?cái)?shù)不限于上述取值,可根據(jù)實(shí)際需要進(jìn)行調(diào)整。節(jié)點(diǎn)的總存儲(chǔ)長(zhǎng)度也不限于16比特,可以為其它值,例如為24比特、32比特或64比特等。端點(diǎn)的存儲(chǔ)內(nèi)容包括端點(diǎn)標(biāo)識(shí)、端點(diǎn)的碼字片段長(zhǎng)度以及信元符號(hào)。這樣搜索完畢后就直接得到信元符號(hào),而無(wú)需再查找碼字與信元符號(hào)的對(duì)應(yīng)關(guān)系表,提高了解碼效率。
本發(fā)明實(shí)施例包括以下兩個(gè)基本步驟A、對(duì)霍夫曼碼表中的碼字進(jìn)行變長(zhǎng)度分組,根據(jù)分組得到的變長(zhǎng)度碼字片段生成節(jié)點(diǎn)并將所述節(jié)點(diǎn)組成變長(zhǎng)度分組霍夫曼搜索樹。變長(zhǎng)度的分組的方法可有許多種,因此所得到的變長(zhǎng)度分組霍夫曼搜索樹也可能不唯一。
例如,一種簡(jiǎn)單的變長(zhǎng)度分組的方法如下第一級(jí)節(jié)點(diǎn)的長(zhǎng)度為碼表中的最短碼字長(zhǎng)度,中間各級(jí)的長(zhǎng)度為3。各個(gè)分支的最后一級(jí)根據(jù)剩余碼字的長(zhǎng)度,其長(zhǎng)度可以為1,2,或者3。這樣就組成了一種分組的方法。
然后在存儲(chǔ)空間中生成變長(zhǎng)度分組霍夫曼搜索樹,具體地說(shuō),包括如下步驟a、為各級(jí)節(jié)點(diǎn)分配存儲(chǔ)空間。屬于同一個(gè)上級(jí)節(jié)點(diǎn)的各個(gè)節(jié)點(diǎn),其存儲(chǔ)空間是連續(xù)的,并且存儲(chǔ)空間的大小視當(dāng)前節(jié)點(diǎn)的分組長(zhǎng)度而定。比如說(shuō)如果當(dāng)前節(jié)點(diǎn)的分組長(zhǎng)度為2,則長(zhǎng)度為2比特的碼字片段一共有00、01、10和11共計(jì)4種可能,如果一個(gè)節(jié)點(diǎn)的存儲(chǔ)空間為16比特,則需要至少分配4個(gè)16比特存儲(chǔ)空間;如果當(dāng)前節(jié)點(diǎn)的分組長(zhǎng)度為8,則如果節(jié)點(diǎn)存儲(chǔ)空間為16比特的前提下需要至少分配256個(gè)16比特存儲(chǔ)空間。
b、對(duì)碼字分組得到的碼字片段分配相應(yīng)的端點(diǎn)標(biāo)識(shí)。判斷該碼字片段是否為一個(gè)完整碼字的最后一個(gè)片斷,若是則端點(diǎn)標(biāo)識(shí)為真,否則為假,可以分別用0或1表示。
對(duì)于端點(diǎn)標(biāo)識(shí)為假的碼字片段,將該節(jié)點(diǎn)對(duì)應(yīng)的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度、首地址和端點(diǎn)標(biāo)識(shí)保存到該節(jié)點(diǎn)的存儲(chǔ)空間;對(duì)于端點(diǎn)標(biāo)識(shí)為真的碼字片段,則將端點(diǎn)標(biāo)識(shí)、碼字片段長(zhǎng)度以及信元符號(hào)保存在該節(jié)點(diǎn)的存儲(chǔ)空間。此外,如果該節(jié)點(diǎn)為空節(jié)點(diǎn),則仍然保持該存儲(chǔ)空間為空。
B、根據(jù)所述變長(zhǎng)度分組霍夫曼搜索樹對(duì)碼流進(jìn)行搜索,得到碼字對(duì)應(yīng)的信元符號(hào)。
本發(fā)明實(shí)施例根據(jù)變長(zhǎng)度分組霍夫曼搜索樹對(duì)霍夫曼編碼形成的碼流進(jìn)行解碼的流程如圖4所示,包括如下步驟步驟401以首節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),根據(jù)首節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容得到第一級(jí)節(jié)點(diǎn)分組長(zhǎng)度和地址。
步驟402從輸入的霍夫曼碼流中截取與本級(jí)分組長(zhǎng)度相同的碼字片段,根據(jù)得到的碼字片段和本級(jí)節(jié)點(diǎn)的首地址,從本級(jí)節(jié)點(diǎn)中搜索到當(dāng)前節(jié)點(diǎn)。
例如,若碼片字段為“011”,則本級(jí)節(jié)點(diǎn)首地址之后第一個(gè)節(jié)點(diǎn)對(duì)應(yīng)的碼字片段是“001”,第二個(gè)節(jié)點(diǎn)對(duì)應(yīng)的碼字片段是“010”,第3個(gè)節(jié)點(diǎn)就是當(dāng)前節(jié)點(diǎn);同理,若碼片字段為“1101”,則本級(jí)節(jié)點(diǎn)首地址之后存儲(chǔ)的第13個(gè)節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)。
步驟403判斷當(dāng)前節(jié)點(diǎn)是否為端點(diǎn),若是,則轉(zhuǎn)至步驟405,否則轉(zhuǎn)至步驟404。
步驟404根據(jù)當(dāng)前節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容,獲得下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度和節(jié)點(diǎn)首地址,然后轉(zhuǎn)至步驟402。
步驟405將端點(diǎn)存儲(chǔ)的信元符號(hào)作為解碼結(jié)果輸出。
對(duì)連續(xù)的霍夫曼碼流,重復(fù)以上步驟401至步驟405的處理過(guò)程,直到所以碼字都解碼完畢。
下面用一個(gè)具體的例子對(duì)本發(fā)明的解碼過(guò)程進(jìn)行進(jìn)一步說(shuō)明。假設(shè)對(duì)一組信元符號(hào)進(jìn)行霍夫曼編碼,得到如表1所示的霍夫曼碼字
表1對(duì)表1所示的碼字進(jìn)行變長(zhǎng)度分組,第一級(jí)節(jié)點(diǎn)的長(zhǎng)度為碼表中的最短碼字長(zhǎng)度1,中間1級(jí)的長(zhǎng)度為3,各個(gè)分支的最后一級(jí)根據(jù)剩余碼字的長(zhǎng)度,其長(zhǎng)度為1或2,得到的一種變長(zhǎng)度分組霍夫曼搜索樹如圖5所示。其中,菱形框表示首節(jié)點(diǎn),白色橢圓框表示中間節(jié)點(diǎn),灰色橢圓框表示端點(diǎn),而黑色橢圓框則表示空節(jié)點(diǎn)。
那么為各級(jí)節(jié)點(diǎn)分配的存儲(chǔ)空間,其存儲(chǔ)結(jié)構(gòu)為對(duì)于節(jié)點(diǎn)501,其為首節(jié)點(diǎn),因此端點(diǎn)標(biāo)志設(shè)為0;其下級(jí)節(jié)點(diǎn)502、503長(zhǎng)度為1,則下級(jí)分組長(zhǎng)度設(shè)為1,下級(jí)節(jié)點(diǎn)首地址為節(jié)點(diǎn)502的存儲(chǔ)地址ADD502,因此節(jié)點(diǎn)501的存儲(chǔ)結(jié)構(gòu)為
對(duì)于節(jié)點(diǎn)502,其為端點(diǎn),因此端點(diǎn)標(biāo)志設(shè)為0,碼字片段長(zhǎng)度為1,霍夫曼解碼內(nèi)容為a1,因此節(jié)點(diǎn)502的存儲(chǔ)結(jié)構(gòu)為
對(duì)于節(jié)點(diǎn)503,其為中間節(jié)點(diǎn),下級(jí)分組長(zhǎng)度為3,下級(jí)節(jié)點(diǎn)首地址為節(jié)點(diǎn)504對(duì)應(yīng)的地址ADD504,則得到節(jié)點(diǎn)503的存儲(chǔ)結(jié)構(gòu)為
……對(duì)于節(jié)點(diǎn)516,其為端點(diǎn),碼字片段為1,對(duì)應(yīng)的霍夫曼解碼內(nèi)容為a9,即
……假設(shè)霍夫曼編碼得到的二進(jìn)碼流為10011110110110010110010100......,則在解碼時(shí),根據(jù)圖5所示的變長(zhǎng)度分組霍夫曼搜索樹,首先根據(jù)首節(jié)點(diǎn)的下一級(jí)分組長(zhǎng)度為1,下級(jí)節(jié)點(diǎn)首地址為ADD502,二進(jìn)制碼流的第一個(gè)比特為1,將該首地址加1,搜索到節(jié)點(diǎn)503;然后,根據(jù)節(jié)點(diǎn)503的下一級(jí)分組長(zhǎng)度為3,下級(jí)節(jié)點(diǎn)首地址為ADD504,且二進(jìn)制碼流的第2至第4比特的內(nèi)容為001,將首地址ADD504加1,則搜索到節(jié)點(diǎn)505,這樣就得到了第一個(gè)碼字1001,相應(yīng)的得到該碼字對(duì)應(yīng)的霍夫曼解碼內(nèi)容為a3。對(duì)于之后的碼字重復(fù)這樣的搜索過(guò)程,就將上述碼流分解為1,001;1,110;1,101,1;0;0;1,011,00;1,010;0;......。其中逗號(hào)為分組邊界,分號(hào)為碼字片段邊界。從而解碼獲得對(duì)應(yīng)的霍夫曼解碼內(nèi)容為a3a11a10a1a1a5a4a1......
從圖5可以看出,對(duì)于不同級(jí)的節(jié)點(diǎn),其分組長(zhǎng)度可能不同;對(duì)于同一級(jí)節(jié)點(diǎn),其分組長(zhǎng)度也可能不同。例如節(jié)點(diǎn)512和節(jié)點(diǎn)517屬于同一級(jí),但節(jié)點(diǎn)512的分組長(zhǎng)度為2比特,而節(jié)點(diǎn)517的分組長(zhǎng)度為1比特。但是,同一級(jí)中具有相同上級(jí)節(jié)點(diǎn)的那些節(jié)點(diǎn)的分組長(zhǎng)度都是相同的,例如節(jié)點(diǎn)512至節(jié)點(diǎn)516。其上級(jí)節(jié)點(diǎn)507中存儲(chǔ)的下一級(jí)節(jié)點(diǎn)的首地址為節(jié)點(diǎn)512的地址,節(jié)點(diǎn)512至節(jié)點(diǎn)516是連續(xù)存儲(chǔ)的,因此根據(jù)該首地址可以搜索到節(jié)點(diǎn)512至節(jié)點(diǎn)516中的任何一個(gè)節(jié)點(diǎn)。
碼字101110為空,也就是說(shuō)碼表中不存在該碼字,這說(shuō)明可能碼流出現(xiàn)誤碼或者解碼過(guò)程出現(xiàn)錯(cuò)誤。
如果對(duì)上述碼流采用傳統(tǒng)的二進(jìn)樹搜索,則節(jié)點(diǎn)結(jié)構(gòu)如圖6所示。與圖5進(jìn)行比較,圖5中的節(jié)點(diǎn)總數(shù)為17(包括首節(jié)點(diǎn)和空節(jié)點(diǎn)),圖6中節(jié)點(diǎn)總數(shù)為23(不算首節(jié)點(diǎn))。如果每個(gè)節(jié)點(diǎn)需要相同的存儲(chǔ)單元,則圖5所示方法需要的存儲(chǔ)空間比圖6中的少6個(gè)存儲(chǔ)單元,如果這兩種方法的節(jié)點(diǎn)單元所需存儲(chǔ)空間相同,則該實(shí)施例中,變分組霍夫曼解碼方法節(jié)省了26.1%的存儲(chǔ)空間。
另外從比較次數(shù)看,二進(jìn)樹的節(jié)點(diǎn)級(jí)數(shù)為6,而變長(zhǎng)度分組霍夫曼搜索樹為3。如碼字1001,在變長(zhǎng)度分組霍夫曼搜索樹方法中只需要進(jìn)行2次判斷就可以解碼成功,而二進(jìn)搜索樹需要進(jìn)行4次判斷才能解碼。雖然本發(fā)明方案需要額外獲取分組信息,但是通過(guò)將結(jié)果和中間需要的信息耦合到節(jié)點(diǎn)中,可以完成高效的解碼。
本發(fā)明實(shí)施例的變分組霍夫曼解碼裝置如圖7所示,包括分組模塊701、碼表信息檢索模塊702和搜索模塊703。其中,碼表信息檢索模塊702用于存儲(chǔ)變長(zhǎng)度分組霍夫曼搜索樹的相關(guān)信息,包括該變長(zhǎng)度分組霍夫曼搜索樹的各個(gè)節(jié)點(diǎn)的信息。若該節(jié)點(diǎn)為中間節(jié)點(diǎn),則節(jié)點(diǎn)信息包括端點(diǎn)標(biāo)識(shí)、下一級(jí)分組長(zhǎng)度以及下一級(jí)節(jié)點(diǎn)首地址信息;若該節(jié)點(diǎn)為端點(diǎn),則節(jié)點(diǎn)信息包括端點(diǎn)標(biāo)識(shí)、碼字片段長(zhǎng)度以及霍夫曼解碼內(nèi)容。所述首地址信息可以是下一級(jí)首個(gè)節(jié)點(diǎn)的物理地址,也可以是下一級(jí)首個(gè)節(jié)點(diǎn)的物理地址的偏移量。碼表信息檢索模塊702中可以進(jìn)一步包括生成單元,用于生成所述變長(zhǎng)度分組霍夫曼搜索樹,也就是根據(jù)各級(jí)節(jié)點(diǎn)的分組長(zhǎng)度,分配變長(zhǎng)度分組霍夫曼搜索樹各個(gè)節(jié)點(diǎn)的存儲(chǔ)空間,并將各節(jié)點(diǎn)的相關(guān)信息存儲(chǔ)到各個(gè)存儲(chǔ)空間。
碼表信息檢索模塊702還包括端點(diǎn)判斷單元,用于判斷當(dāng)前節(jié)點(diǎn)是端點(diǎn)還是中間節(jié)點(diǎn),若是中間節(jié)點(diǎn),則所述生成單元將該中間節(jié)點(diǎn)的端點(diǎn)標(biāo)識(shí)設(shè)置為假,并將該節(jié)點(diǎn)對(duì)應(yīng)的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度、首地址存儲(chǔ)到所述中間節(jié)點(diǎn)的存儲(chǔ)空間;若是端點(diǎn),則所述生成單元將該端點(diǎn)的端點(diǎn)標(biāo)識(shí)設(shè)置為真,并將該端點(diǎn)的碼字片段長(zhǎng)度和端點(diǎn)對(duì)應(yīng)的信元符號(hào)存儲(chǔ)到所述端點(diǎn)的存儲(chǔ)空間。
碼表信息檢索模塊702將所述變長(zhǎng)度分組霍夫曼搜索樹的相關(guān)信息分別發(fā)送至分組模塊701和搜索模塊703。
分組模塊701用于接收霍夫曼碼流,根據(jù)來(lái)自搜索模塊702的下一級(jí)節(jié)點(diǎn)的分組長(zhǎng)度,對(duì)霍夫曼碼流進(jìn)行分組,得到當(dāng)前需要搜索的碼字片段;若首次執(zhí)行時(shí)則根據(jù)來(lái)自碼表信息檢索模塊702的變長(zhǎng)度分組霍夫曼搜索樹的首節(jié)點(diǎn)指示的分組長(zhǎng)度,對(duì)霍夫曼碼流進(jìn)行分組并得到當(dāng)前需要搜索的碼字片段。將所得碼字片段發(fā)送到搜索模塊703。
搜索模塊703,用于接收來(lái)自分組模塊701的碼字片段,并接收來(lái)自碼表信息檢索模塊702的變長(zhǎng)度分組霍夫曼搜索樹的節(jié)點(diǎn)信息,根據(jù)所述節(jié)點(diǎn)信息中的物理地址或物理地址偏移量,對(duì)所述碼字片段進(jìn)行搜索,找到與所述碼字片段對(duì)應(yīng)的節(jié)點(diǎn)。
搜索模塊703中還進(jìn)一步包括判斷單元和輸出單元,所述判斷單元用于根據(jù)所搜索到的節(jié)點(diǎn)的端點(diǎn)標(biāo)識(shí)判斷所述節(jié)點(diǎn)是否為端點(diǎn),若是通知輸出單元將該節(jié)點(diǎn)中存儲(chǔ)的信元信息提取出來(lái)并對(duì)外輸出。所述輸出單元?jiǎng)t用于輸出所述信元符號(hào)。
若判斷單元判斷該節(jié)點(diǎn)不是端點(diǎn),則搜索模塊702將該節(jié)點(diǎn)的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度發(fā)送至分組模塊701。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種優(yōu)化的霍夫曼解碼方法,其特征在于,該方法包括如下步驟對(duì)霍夫曼碼表中的所有碼字進(jìn)行變長(zhǎng)度的動(dòng)態(tài)分組,根據(jù)分組得到的變長(zhǎng)度的碼字片段生成節(jié)點(diǎn),并將所述節(jié)點(diǎn)組成變長(zhǎng)度分組霍夫曼搜索樹;根據(jù)所述變長(zhǎng)度分組霍夫曼搜索樹對(duì)碼流進(jìn)行搜索,得到碼字對(duì)應(yīng)的信元符號(hào)。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,所述將分組得到的變長(zhǎng)度的碼字片段作為節(jié)點(diǎn),并將所述節(jié)點(diǎn)組成變長(zhǎng)度分組霍夫曼搜索樹包括為各級(jí)節(jié)點(diǎn)分配存儲(chǔ)空間;為所述變長(zhǎng)度的碼字片段分配相應(yīng)的端點(diǎn)標(biāo)識(shí);對(duì)于端點(diǎn)標(biāo)識(shí)為假的碼字片段,將端點(diǎn)標(biāo)識(shí)、該節(jié)點(diǎn)對(duì)應(yīng)的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度和下一級(jí)節(jié)點(diǎn)首地址保存到該節(jié)點(diǎn)的存儲(chǔ)空間;對(duì)于端點(diǎn)標(biāo)識(shí)為真的碼字片段,則將端點(diǎn)標(biāo)識(shí)、該碼字片段的長(zhǎng)度以及信元符號(hào)保存在該節(jié)點(diǎn)的存儲(chǔ)空間。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述為各級(jí)節(jié)點(diǎn)分配存儲(chǔ)空間包括對(duì)于屬于同一個(gè)上級(jí)節(jié)點(diǎn)的所有節(jié)點(diǎn)分配連續(xù)的存儲(chǔ)空間。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述為各級(jí)節(jié)點(diǎn)分配存儲(chǔ)空間包括根據(jù)每一級(jí)節(jié)點(diǎn)所對(duì)應(yīng)的分組長(zhǎng)度,確定該級(jí)節(jié)點(diǎn)的存儲(chǔ)空間的大小。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述首地址為用于存儲(chǔ)下一級(jí)節(jié)點(diǎn)的存儲(chǔ)空間的起始地址;或者,所述起始地址相對(duì)于用于存儲(chǔ)上一級(jí)節(jié)點(diǎn)的存儲(chǔ)空間起始地址的偏移量;或者,所述起始地址相對(duì)于用于存儲(chǔ)首節(jié)點(diǎn)的存儲(chǔ)空間首地址的偏移量。
6.根據(jù)權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,所述根據(jù)所述變長(zhǎng)度分組霍夫曼搜索樹對(duì)碼流進(jìn)行搜索包括以首節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),根據(jù)首節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容得到第一級(jí)節(jié)點(diǎn)分組長(zhǎng)度和地址;從輸入的霍夫曼碼流中截取與本級(jí)節(jié)點(diǎn)分組長(zhǎng)度相同的碼字片段,根據(jù)得到的碼字片段和本級(jí)節(jié)點(diǎn)的首地址,從本級(jí)節(jié)點(diǎn)中搜索到當(dāng)前節(jié)點(diǎn);判斷當(dāng)前節(jié)點(diǎn)是否為端點(diǎn),若否,根據(jù)當(dāng)前節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容,獲得下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度和節(jié)點(diǎn)首地址,然后轉(zhuǎn)至所述從輸入的霍夫曼碼流中截取與本級(jí)分組長(zhǎng)度相同的碼字片段的步驟;若是,則輸出當(dāng)前節(jié)點(diǎn)中存儲(chǔ)的信元符號(hào)作為搜索結(jié)果。
7.一種優(yōu)化的霍夫曼解碼裝置,其特征在于,該裝置包括碼表信息檢索模塊、分組模塊和搜索模塊,其中,所述碼表信息檢索模塊用于存儲(chǔ)變長(zhǎng)度分組霍夫曼搜索樹的相關(guān)信息,并將所存儲(chǔ)的變分組霍夫曼樹的節(jié)點(diǎn)信息分別發(fā)送至搜索模塊和分組模塊;所述分組模塊用于接收霍夫曼碼流,根據(jù)來(lái)自搜索模塊的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度對(duì)所接收的霍夫曼碼流進(jìn)行分組,得到當(dāng)前需要搜索的碼字片段;將所得碼字片段發(fā)送到搜索模塊;所述搜索模塊用于接收來(lái)自分組模塊的碼字片段,并接收來(lái)自碼表信息檢索模塊的變長(zhǎng)度分組霍夫曼搜索樹的節(jié)點(diǎn)信息,根據(jù)所述節(jié)點(diǎn)信息對(duì)所述碼字片段進(jìn)行搜索,找到與所述碼字片段對(duì)應(yīng)的節(jié)點(diǎn),進(jìn)而最終找到完整的霍夫曼碼字對(duì)應(yīng)的信元符號(hào)。
8.根據(jù)權(quán)利要求7所述的霍夫曼解碼裝置,其特征在于,所述碼表信息檢索模塊進(jìn)一步包括生成單元,用于分配變長(zhǎng)度分組霍夫曼搜索樹各個(gè)節(jié)點(diǎn)的存儲(chǔ)空間,并將各節(jié)點(diǎn)的相關(guān)信息存儲(chǔ)到所述各個(gè)存儲(chǔ)空間。
9.根據(jù)權(quán)利要求8所述的霍夫曼解碼裝置,其特征在于,所述碼表信息檢索模塊進(jìn)一步包括端點(diǎn)判斷單元,用于判斷當(dāng)前節(jié)點(diǎn)是端點(diǎn)還是中間節(jié)點(diǎn),若是中間節(jié)點(diǎn),則所述生成單元將該中間節(jié)點(diǎn)的端點(diǎn)標(biāo)識(shí)設(shè)置為假,并將該節(jié)點(diǎn)對(duì)應(yīng)的下一級(jí)節(jié)點(diǎn)分組長(zhǎng)度、首地址存儲(chǔ)到所述中間節(jié)點(diǎn)的存儲(chǔ)空間;若是端點(diǎn),則所述生成單元將該端點(diǎn)的端點(diǎn)標(biāo)識(shí)設(shè)置為真,并將該端點(diǎn)的碼字片段長(zhǎng)度和端點(diǎn)對(duì)應(yīng)的信元符號(hào)存儲(chǔ)到所述端點(diǎn)的存儲(chǔ)空間。
10.根據(jù)權(quán)利要求7所述的霍夫曼解碼裝置,其特征在于,所述碼表信息檢索模塊進(jìn)一步用于將所述變長(zhǎng)度分組霍夫曼搜索樹的首節(jié)點(diǎn)的分組長(zhǎng)度發(fā)送至分組模塊;則所述分組模塊用于根據(jù)來(lái)自碼表信息檢索模塊的分組長(zhǎng)度,對(duì)碼字進(jìn)行分組,得到當(dāng)前需要搜索的碼字片段;將所得碼字片段發(fā)送到搜索模塊。
11.根據(jù)權(quán)利要求7至10任一項(xiàng)所述的霍夫曼解碼裝置,其特征在于,所述搜索模塊進(jìn)一步包括判斷單元和輸出單元,所述判斷單元用于判斷所搜索到的節(jié)點(diǎn)是否為端點(diǎn),若是通知輸出單元將該節(jié)點(diǎn)中存儲(chǔ)的信元符號(hào)提取出來(lái)并對(duì)外輸出;所述輸出單元?jiǎng)t用于輸出所述信元符號(hào)。
全文摘要
本發(fā)明公開(kāi)了一種優(yōu)化的霍夫曼解碼方法,包括如下步驟對(duì)霍夫曼碼表中的所有碼字進(jìn)行變長(zhǎng)度分組,根據(jù)分組得到的變長(zhǎng)度碼字片段生成節(jié)點(diǎn),并將所述節(jié)點(diǎn)組成變長(zhǎng)度分組霍夫曼搜索樹;根據(jù)所述變長(zhǎng)度分組霍夫曼搜索樹對(duì)碼流進(jìn)行搜索,得到碼字對(duì)應(yīng)的信元符號(hào)。本發(fā)明還公開(kāi)了一種優(yōu)化的霍夫曼解碼裝置,包括碼表信息檢索模塊、分組模塊和搜索模塊。本發(fā)明方案對(duì)霍夫曼碼字進(jìn)行變長(zhǎng)度分組,可以用較少存儲(chǔ)空間的實(shí)現(xiàn)霍夫曼解碼。
文檔編號(hào)H03M7/40GK101060337SQ20071009947
公開(kāi)日2007年10月24日 申請(qǐng)日期2007年5月22日 優(yōu)先權(quán)日2007年5月22日
發(fā)明者王簫程 申請(qǐng)人:北京中星微電子有限公司