專利名稱:改進(jìn)的霍夫曼數(shù)據(jù)壓縮方法
很多數(shù)字通信系統(tǒng)以分組的形式發(fā)送數(shù)據(jù)。這些分組包括在數(shù)據(jù)開始部分的報(bào)頭。所述的報(bào)頭包括的信息涉及例如分組的目的地地址,分組的長度和其中包括有效負(fù)荷數(shù)據(jù)的類型。報(bào)頭可以認(rèn)為是一個(gè)包括一個(gè)比特串的長字符。
移動(dòng)電信網(wǎng)和因特網(wǎng)從功能上講正在融合。對(duì)于第三代移動(dòng)手機(jī)來講,希望直接了解因特網(wǎng)(IP或ATM)數(shù)據(jù)分組以便允許移動(dòng)用戶得到無縫電子郵件、網(wǎng)頁瀏覽和多媒體服務(wù)。例如IP等協(xié)議其目的是在帶寬豐富的固定網(wǎng)絡(luò)上運(yùn)行,因此它們?cè)谝苿?dòng)電話環(huán)境中是很貴的。當(dāng)用于傳送語言時(shí),使用IP產(chǎn)生的開銷可以達(dá)到網(wǎng)絡(luò)容量總數(shù)的75%,對(duì)于移動(dòng)網(wǎng)絡(luò)來講這是不能接受的。
這個(gè)問題的一個(gè)解決方案是在它通過空中接口之前壓縮IP報(bào)頭。一些為了達(dá)到這個(gè)目的壓縮方案(范杰克布森(Van Jacobson),CRTP等等),在效率、靈活性和簡單性之間進(jìn)行了不同地權(quán)衡。
本發(fā)明的一個(gè)目的是提供一個(gè)用于二進(jìn)制(或其它)數(shù)據(jù)單元的報(bào)頭和字符的壓縮和隨后的解壓縮的改進(jìn)方法。
發(fā)明人確定了一種改進(jìn)數(shù)字?jǐn)?shù)據(jù)壓縮的方法,它在連續(xù)的數(shù)據(jù)塊中利用行為模式檢測(cè),它有效率的對(duì)數(shù)據(jù)進(jìn)行壓縮。行為模式定義為任何非隨機(jī)性的形式并且可以采用任何適當(dāng)形式例如,重復(fù)、計(jì)數(shù)器加1計(jì)數(shù)、或在少量值之間的數(shù)據(jù)塊交換。
公知的數(shù)據(jù)壓縮系統(tǒng)包括霍夫曼算法。這個(gè)公眾可用的標(biāo)準(zhǔn)被廣泛用于很多的壓縮方案中,包括“WinZip”?;舴蚵幋a壓縮數(shù)據(jù)流一次一個(gè)字符,其中一個(gè)字符通常是一個(gè)字節(jié)?;镜膲嚎s不是非常有效率,但是可以通過應(yīng)用遞歸方法或增加一個(gè)字符的大小而獲得良好的效果。然而,這個(gè)增加了算法的處理與/或存儲(chǔ)器需求。
本發(fā)明人已經(jīng)開發(fā)了一個(gè)改進(jìn)型的霍夫曼方法,同普通的霍夫曼方法相比顯著地降低了存儲(chǔ)器需求,允許增加一個(gè)字符的大小并且因此提供一個(gè)更好的壓縮比。
為了了解本發(fā)明,現(xiàn)在對(duì)現(xiàn)有技術(shù)進(jìn)行說明。
普通的霍夫曼算法霍夫曼編碼是應(yīng)用在諸如″WinZip″的很多流行的壓縮方案中的公眾可用的壓縮標(biāo)準(zhǔn)。所有的霍夫曼壓縮程序都工作在字符流上(例如ASCII字符)。基本思想是創(chuàng)建一套新的壓縮字符或代碼,每個(gè)標(biāo)準(zhǔn)字符映射到一個(gè)壓縮字符,反之亦然。經(jīng)常發(fā)生的是通用字符被給予比很少使用的字符更短的壓縮碼,以減少數(shù)據(jù)流的平均大小。壓縮比可以通過增加一個(gè)字符的大小被改進(jìn),但是要以較高的存儲(chǔ)器需求為代價(jià)。實(shí)際上,在運(yùn)行一個(gè)霍夫曼壓縮程序時(shí)使用的存儲(chǔ)器隨字符大小指數(shù)級(jí)的增長,因此16位字符需要的存儲(chǔ)器是8位字符的256倍。
圖1說明了普通的霍夫曼如何工作。在這個(gè)例子中,它涉及10個(gè)不同的可能字符(一組10個(gè)ASCII字符)如單引號(hào)中所示(通常一個(gè)字符可以是任意的,例如一個(gè)字節(jié)、一個(gè)報(bào)頭、一個(gè)ASCII字符等等)。要知道的對(duì)于字符的一個(gè)必要條件是該字符在數(shù)據(jù)序列中出現(xiàn)的近似概率,本領(lǐng)域技術(shù)人員可以理解,可以以任何的適當(dāng)?shù)姆椒▽?shí)現(xiàn)上述必要條件(例如一個(gè)較大的字符流被獲取并且確定每個(gè)字符出現(xiàn)的頻繁程度)。
在這個(gè)操作例子中,普通的霍夫曼樹需要10個(gè)起始節(jié)點(diǎn),一個(gè)對(duì)應(yīng)于每個(gè)可能的字符。這些節(jié)點(diǎn)被標(biāo)繪在霍夫曼樹頂點(diǎn)上,連同這個(gè)字符在一個(gè)未壓縮的數(shù)據(jù)流中出現(xiàn)的百分比概率。字符通常根據(jù)漸增的概率被排序??崭褡址呛芡ㄓ玫淖址⑶冶环旁谧詈?。如圖所示,在每個(gè)字符下面的框顯示它出現(xiàn)概率。為了構(gòu)造樹,具有最小概率的兩個(gè)節(jié)點(diǎn)相連形成一個(gè)新的節(jié)點(diǎn)。左側(cè)分支用“1”標(biāo)記,右側(cè)分支用″0″標(biāo)記。新節(jié)點(diǎn)由組合的根節(jié)點(diǎn)的概率獲得(在第一種情況下是6%)。這個(gè)處理將持續(xù)到只剩下一個(gè)節(jié)點(diǎn),在這個(gè)點(diǎn),樹創(chuàng)建結(jié)束。通常,概率最小的分支用’1’標(biāo)記,第二小的用’0’標(biāo)記。這兩個(gè)概率的和被給予新的節(jié)點(diǎn)。用于這個(gè)操作例子的完成的霍夫曼樹的如下所示為了壓縮一個(gè)字符,在恰當(dāng)?shù)墓?jié)點(diǎn)開始并且沿著樹向下,讀出它們遇到的“1”和“0”。這樣產(chǎn)生的比特串是壓縮過了的字符。例如“E”,沿著樹到它的根;這里給出的是0001。因此E由0001表示。
壓縮字符有時(shí)倒著寫,這樣E由1000表示。這樣使它易于解壓縮(因?yàn)槲覀兛梢詮淖笾劣易x取壓縮過的字符沿著樹向上)。
類似地,為了解壓縮一個(gè)字符,只要沿著樹向上,使用壓縮過的比特串來判斷在每個(gè)節(jié)點(diǎn)是向左分支還是向右分支。最后,將到達(dá)原始的十個(gè)節(jié)點(diǎn)中的一個(gè)并且發(fā)現(xiàn)正確的解壓縮字符。
可以看到,通用字符由較少的二進(jìn)制比特表示;一個(gè)“空格”字符在此由0表示。
改進(jìn)的霍夫曼算法在一個(gè)公知的根據(jù)霍夫曼算法的壓縮字符流的改進(jìn)方法中,每個(gè)字符被分配給一個(gè)組,并且這些組被認(rèn)為是傳統(tǒng)的霍夫曼算法字符。這個(gè)方法與普通的霍夫曼算法相比顯著地降低存儲(chǔ)器需求,允許增加一個(gè)字符的大小并且因此給定的一個(gè)更好的壓縮比。改進(jìn)的霍夫曼編碼方法還運(yùn)用一個(gè)″字符組″而不是字符本身來構(gòu)造樹;所述的組有效地成為普通霍夫曼算法的字符。
改進(jìn)的霍夫曼樹的構(gòu)造分為兩個(gè)階段。在第一階段,根據(jù)一個(gè)通用的行為模式,字符被分割成組。一個(gè)行為模式可以是例如相同的概率,因此,字符根據(jù)他們的相對(duì)頻率被分組。
然而問題是,在一個(gè)壓縮的字符中,這組的霍夫曼編碼必須跟隨一個(gè)位模式,該位模式識(shí)別該組內(nèi)的哪個(gè)字符已經(jīng)被壓縮。如果該組不包括2的乘方個(gè)字符,那么位模式被浪費(fèi),給出的壓縮效率很差。發(fā)明人已經(jīng)確定了解決這個(gè)問題的方法。
本發(fā)明包括一個(gè)通過確定特定于一個(gè)字符的總代碼來壓縮這個(gè)字符的方法,包括如下步驟a)根據(jù)一個(gè)通用的行為模式對(duì)字符分組;b)當(dāng)組內(nèi)字符的數(shù)量是奇數(shù)時(shí),創(chuàng)建兩個(gè)新的字符組,一個(gè)新組僅僅包括一個(gè)字符,另一個(gè)新組包括其余字符;c)對(duì)于每個(gè)來自步驟b)的新組以及來自步驟a)的具有偶數(shù)個(gè)字符的所述組,分配一個(gè)組特定代碼;d)當(dāng)在步驟c)中涉及的組內(nèi)的字符不止一個(gè)的時(shí)候,分配一個(gè)字符標(biāo)識(shí)符代碼來識(shí)別組內(nèi)的單獨(dú)字符;e)總字符代碼包括連接在一起的組特定和標(biāo)識(shí)符代碼。
現(xiàn)在將參考例子更詳細(xì)地描述本發(fā)明。
例子1一個(gè)本發(fā)明遵循的簡單的基本的例子現(xiàn)在將參考圖2被說明。在示出的例子中有4個(gè)組或行為模式。組A包括3%概率出現(xiàn)的所有字符,即′B′、′C′、′1′和′2′。并且另外一個(gè)組,根據(jù)遇到該字符的概率被建立組B包括字符′A′、′E′和′?′。組C包括′D′和′$′,最后組D僅包括空格字符。
樹最初從每個(gè)組的一個(gè)節(jié)點(diǎn)開始(總共4個(gè))。節(jié)點(diǎn)被利用在組中字符的數(shù)量以及在組中的一個(gè)字符出現(xiàn)在一個(gè)字符隨機(jī)流中的概率來標(biāo)記。
為了構(gòu)造樹,有三個(gè)可能的操作。在組中偶數(shù)個(gè)字符的位置放置一個(gè)節(jié)點(diǎn);這個(gè)節(jié)點(diǎn)被給定為兩倍概率,但是新節(jié)點(diǎn)的計(jì)數(shù)器顯示為字符數(shù)的一半。節(jié)點(diǎn)被分配一個(gè)可變的字符″X″,根據(jù)組中的哪個(gè)字符將被選取壓縮來隨后填寫″X″。每次進(jìn)一步向樹的根節(jié)點(diǎn)移動(dòng)的時(shí)候,創(chuàng)建一個(gè)新節(jié)點(diǎn);概率加倍而且計(jì)數(shù)器中單元的個(gè)數(shù)減半。當(dāng)用樹來壓縮數(shù)據(jù)時(shí),所述的″X″已依據(jù)哪個(gè)字符出現(xiàn)而被填寫。不是在樹的最頂端得到多個(gè)分支,而是得到單一的軌跡和一個(gè)標(biāo)識(shí)符的小排列。
例如,為了解壓縮這個(gè)數(shù)據(jù),字符編碼是101011,1向左,0向左,1向左。然后知道它的B、C、1或2-最后2位將告知它是哪個(gè)字符。
實(shí)際上,壓縮碼包括兩個(gè)部分;一部分包括識(shí)別組的代碼,也就是組代碼。此外,就象霍夫曼組那樣,例如包括很少出現(xiàn)的字符的組,具有比用通用字符的組更長的組代碼。壓縮碼的另一個(gè)部分包括標(biāo)識(shí)符代碼,它是用于將它與組內(nèi)其它字符進(jìn)行區(qū)分的代碼。具有奇數(shù)個(gè)字符的組分成兩個(gè)組;一個(gè)字符的移動(dòng)會(huì)產(chǎn)生一個(gè)具有偶數(shù)個(gè)字符的新組并且新組僅包括一個(gè)移動(dòng)的字符。
如果在一個(gè)組中有奇數(shù)個(gè)字符,則該組被分成兩個(gè)節(jié)點(diǎn)。一個(gè)分支僅表示所述字符中的一個(gè);另一分支表示所有其它字符并且現(xiàn)在表示具有偶數(shù)個(gè)字符的集合。改進(jìn)的霍夫曼編碼樹,在沒有分支的節(jié)點(diǎn)處,實(shí)際包括作為標(biāo)識(shí)符的額外符號(hào)′X′。在具有奇數(shù)成員的組有分支的地方,就有一個(gè)標(biāo)識(shí)符″D″,或?yàn)?或?yàn)?來表示哪個(gè)分支是在上述的分離之后的分支,例如,如果″D″的值是1,這表示這樣一個(gè)分支,它表示從組中被刪除以便提供偶數(shù)編號(hào)組的字符,如果″D″的值是″0″表示新偶數(shù)編號(hào)的組。
符號(hào)′D′用來將組分離成兩個(gè)新組。因?yàn)槊總€(gè)新組都具有它自己的組標(biāo)識(shí)符,不必將將0和1分配給符號(hào)′D′。在原來和新的偶數(shù)組中的標(biāo)識(shí)符′X′標(biāo)識(shí)偶數(shù)組內(nèi)的字符。
如上述提及的,發(fā)明人已經(jīng)確定為了優(yōu)化效率,可以將一個(gè)節(jié)點(diǎn)分離成兩個(gè)節(jié)點(diǎn),這被使用一個(gè)單獨(dú)的數(shù)字標(biāo)識(shí)符來表示。在這個(gè)規(guī)范中,我們將它稱為″D″。
″X″和″D″實(shí)際上是驗(yàn)證碼的數(shù)字并且用于區(qū)別具有相同的狀態(tài)模式的任意兩個(gè)字符。壓縮的初始步驟是用唯一的標(biāo)識(shí)號(hào)標(biāo)記每個(gè)字符,所述的唯一的標(biāo)識(shí)號(hào)可以將它與具有相同的行為模式的其它字符進(jìn)行區(qū)分。
創(chuàng)建改進(jìn)的霍夫曼算法樹的一般的方法如下查找具有最小概率的節(jié)點(diǎn)。假設(shè)這個(gè)節(jié)點(diǎn)包括n個(gè)字符。下一步取決于n的值1)如果n是偶數(shù),則創(chuàng)建一個(gè)具有雙倍概率且具有n個(gè)字符一半數(shù)目的新節(jié)點(diǎn)。將這個(gè)新節(jié)點(diǎn)連接到一個(gè)舊節(jié)點(diǎn),并且用′X′標(biāo)記該分支。
2)如果n是奇數(shù)并且n>1,則創(chuàng)建兩個(gè)概率相同的新節(jié)點(diǎn),左邊的那個(gè)包括n-1個(gè)字符并且右邊的一個(gè)包括1個(gè)字符。將這些新節(jié)點(diǎn)連接到舊節(jié)點(diǎn),并且用′D′標(biāo)記該分支。
3)如果n=1,則查找具有第二最小概率的節(jié)點(diǎn)。假設(shè)這個(gè)節(jié)點(diǎn)包括m個(gè)字符。
a)如果m>1,則創(chuàng)建兩個(gè)概率相同的新節(jié)點(diǎn),一個(gè)包括m-1個(gè)字符且另一個(gè)包括1個(gè)字符。將這個(gè)新節(jié)點(diǎn)連接到舊節(jié)點(diǎn),并且用′D′標(biāo)記該分支。
b)現(xiàn)在有了一個(gè)具有最小概率的節(jié)點(diǎn)和具有第二最小概率的節(jié)點(diǎn),兩者包括一個(gè)字符。把這些節(jié)點(diǎn)連接起來形成一個(gè)包括一個(gè)字符的新節(jié)點(diǎn)。用′1′標(biāo)記具有最小概率的分支并且用′0′標(biāo)記第二最小概率的分支。將兩個(gè)概率的和放置在新節(jié)點(diǎn)中。
為了壓縮和解壓縮,在一個(gè)組中的每個(gè)字符應(yīng)該用集合{0,1,2…}中的唯一的標(biāo)識(shí)數(shù)字標(biāo)記。這用于區(qū)別相同的組中的兩個(gè)字符。
假定將被壓縮的字符具有唯一標(biāo)識(shí)符i。在樹上查找正確的行為模式并且沿著樹向下,在每個(gè)節(jié)點(diǎn)進(jìn)行這些步驟1)如果節(jié)點(diǎn)具有一個(gè)′0′或′1′分支,則將該比特增加到壓縮比特的串。
2)如果標(biāo)簽是′X′,則將i的最低有效位增加到壓縮比特的串。然后用i除以2(下舍入)。
3)對(duì)于標(biāo)簽′D′,如果i是0,沿著分支向右。否則,i減1并且沿著分支向左。
所得到的比特串就是壓縮的字符。解壓縮只不過是將這個(gè)過程顛倒,用壓縮的比特沿著樹回到正確的行為模式。唯一標(biāo)識(shí)符i最初應(yīng)當(dāng)設(shè)置為0,并且通過在每個(gè)節(jié)點(diǎn)的下列步驟重新構(gòu)建1)如果節(jié)點(diǎn)有分支,則用壓縮串中相應(yīng)的比特確定跟隨哪個(gè)分支。
2)如果到達(dá)′X′,則將i乘2,然后如果相應(yīng)的壓縮比特也是′1′,則i加1。
3)如果到達(dá)了左側(cè)″D″分支,則i加1。
可以看到,兩種方法之間的不同之處是,普通的霍夫曼編碼需要用于每個(gè)字符的單獨(dú)節(jié)點(diǎn)。
權(quán)利要求
1.一個(gè)通過確定特定于一個(gè)字符的總代碼來壓縮該字符的方法,包括如下步驟a)根據(jù)一個(gè)通用的行為模式對(duì)字符分組;b)當(dāng)組內(nèi)字符的數(shù)量是奇數(shù)時(shí),創(chuàng)建兩個(gè)新的字符組,一個(gè)新組僅僅包括一個(gè)字符,另一個(gè)新組包括其余字符;c)對(duì)于每個(gè)來自步驟b)的新組以及來自步驟a)的具有偶數(shù)個(gè)字符的所述組,分配一個(gè)組特定代碼;d)當(dāng)在步驟c)中涉及的組內(nèi)的字符不止一個(gè)的時(shí)候,分配一個(gè)字符標(biāo)識(shí)符代碼來識(shí)別組內(nèi)的單獨(dú)字符;e)總字符代碼由連接在一起的組特定和標(biāo)識(shí)符代碼構(gòu)成。
2.如權(quán)利要求1所述的方法,其中所述的組代碼的大小通常根據(jù)單元出現(xiàn)的概率被排序。
3.如權(quán)利要求2所述的方法,其中的步驟包括用以下步驟實(shí)現(xiàn)壓縮樹的步驟i)將所述的數(shù)據(jù)單元排列成具有通用行為的組,并且將這些組作為節(jié)點(diǎn)排列;ii)通過以下步驟創(chuàng)建初步的組末端節(jié)點(diǎn)a)對(duì)于每個(gè)節(jié)點(diǎn)來說,如果組內(nèi)字符的數(shù)目n是偶數(shù),則創(chuàng)建一個(gè)具有雙倍概率但是僅為字符數(shù)量n的一半的新節(jié)點(diǎn)并且將這個(gè)新節(jié)點(diǎn)連接到舊節(jié)點(diǎn),用一個(gè)單獨(dú)的標(biāo)識(shí)符′X′標(biāo)記分支,并且重復(fù)直到節(jié)點(diǎn)中字符的數(shù)目是1;b)如果n是奇數(shù)并且n>1,則創(chuàng)建兩個(gè)概率相同的新節(jié)點(diǎn),一個(gè)包括n-1字符并且在右邊的那個(gè)包括1個(gè)字符,并將這些新節(jié)點(diǎn)連接到舊節(jié)點(diǎn),用標(biāo)識(shí)符′D′標(biāo)記該分支;c)對(duì)于包括n-1個(gè)字符的節(jié)點(diǎn)則創(chuàng)建一個(gè)具有字符數(shù)量一半的新節(jié)點(diǎn)并且將這個(gè)新節(jié)點(diǎn)連接到舊節(jié)點(diǎn),并且用單獨(dú)的標(biāo)識(shí)符′X′標(biāo)記分支并且重復(fù)直到節(jié)點(diǎn)中的字符數(shù)目是1;iii)將所述的初級(jí)末端節(jié)點(diǎn)一次一對(duì)地連接在一起,并且用″1″或″0″標(biāo)記每個(gè)路徑,直到產(chǎn)生一個(gè)單獨(dú)的節(jié)點(diǎn);iv)通過確定包括表示到組終端節(jié)點(diǎn)路徑的“1”或“0”的串的一個(gè)組特定代碼和通過標(biāo)識(shí)符串表示的一個(gè)字符特定代碼來計(jì)算壓縮的二進(jìn)制字符;v)連接在一起的組特定代碼和標(biāo)識(shí)符代碼。
4.如權(quán)利要求1所述的方法,其中所述的行為模式是一個(gè)通用概率(范圍)。
5.如權(quán)利要求所述的方法,在其中的步驟中,標(biāo)識(shí)符代碼是最小尺寸,以便慮及在將被明確分配到的組里出現(xiàn)的每個(gè)單元。
6.如權(quán)利要求1或2所述的方法,其中標(biāo)識(shí)符代碼包括所述字符本身。
7.如前述任何權(quán)利要求所述的方法,其中所述的字符是報(bào)頭。
全文摘要
一種通過確定特定于字符的總代碼的字符壓縮方法,包括如下步驟a)根據(jù)一個(gè)通用的行為模式對(duì)字符分組;b)當(dāng)組內(nèi)字符的數(shù)量是奇數(shù)時(shí),創(chuàng)建兩個(gè)新的字符組,一個(gè)新組僅僅包括一個(gè)字符,另一個(gè)新組包括其余字符;c)對(duì)于每個(gè)來自步驟b)的新組以及來自步驟a)的具有偶數(shù)個(gè)字符的所述組,分配一個(gè)組特定代碼;d)當(dāng)在步驟c)中涉及的組內(nèi)的字符不止一個(gè)的時(shí)候,分配一個(gè)字符標(biāo)識(shí)符代碼來識(shí)別組內(nèi)的單獨(dú)字符;e)總字符代碼包括連接在一起的組特定和標(biāo)識(shí)符代碼。
文檔編號(hào)G06T9/00GK1478255SQ01819559
公開日2004年2月25日 申請(qǐng)日期2001年5月1日 優(yōu)先權(quán)日2000年9月28日
發(fā)明者R·普里斯, R 普里斯 申請(qǐng)人:羅克馬諾爾研究有限公司