專利名稱:靜態(tài)赫夫曼解碼的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)壓縮領(lǐng)域,更具體而言涉及一種對(duì)赫夫曼編碼的代碼字進(jìn)行解碼的系統(tǒng)和方法。
背景技術(shù):
赫夫曼代碼在數(shù)據(jù)壓縮和遠(yuǎn)程通信領(lǐng)域中被廣泛使用。一些應(yīng)用包括JPEG圖片壓縮和MPEG視頻和音頻壓縮。赫夫曼代碼具有可變字長(zhǎng),這意味著用于組成消息的單個(gè)符號(hào)均由不同長(zhǎng)度的不同位序列代表(編碼)。代碼字的這種特征有助于減小消息數(shù)據(jù)中的冗余量,即,它使數(shù)據(jù)壓縮成為可能。
由于不同符號(hào)具有不同的發(fā)生概率,因此赫夫曼代碼的使用提供了壓縮。該性質(zhì)通過(guò)根據(jù)那些符號(hào)各自的發(fā)生概率剪裁對(duì)應(yīng)于那些符號(hào)的代碼長(zhǎng)度而得到有利的使用。具有更高發(fā)生概率的符號(hào)用更短的代碼字編碼,而具有更低概率的符號(hào)用更長(zhǎng)的代碼字編碼。然而,更長(zhǎng)的代碼字仍然出現(xiàn),但是傾向于頻率更低,因而典型位串中的所有代碼字的總代碼長(zhǎng)度由于赫夫曼編碼而傾向于更小。
解碼赫夫曼代碼的基本困難在于解碼器起先不能知道輸入代碼字的長(zhǎng)度。如先前所解釋的,赫夫曼代碼是可變長(zhǎng)度的代碼。通過(guò)為這一目的而專門(mén)使用數(shù)量龐大的存儲(chǔ)器就能夠極快地檢測(cè)到赫夫曼代碼。對(duì)于最大字長(zhǎng)為N位的赫夫曼代碼字的集合,需要2N個(gè)存儲(chǔ)位置,原因是N個(gè)輸入位被用作進(jìn)入查找表中找到相應(yīng)代碼字的地址。
需要更少存儲(chǔ)器的技術(shù)當(dāng)前使用按下列方法進(jìn)行的逐位解碼執(zhí)行。取出一位并且與具有字長(zhǎng)為1的所有可能代碼比較。如果未發(fā)現(xiàn)匹配,移入另一位以嘗試從具有字長(zhǎng)為2的所有代碼字中找到位偶。繼續(xù)該過(guò)程直到找到匹配。盡管該方法存儲(chǔ)效率很高,但是它很慢,尤其在正被解碼的代碼字長(zhǎng)的時(shí)候。
另一技術(shù)是二叉樹(shù)搜索法。在該實(shí)現(xiàn)方式的技術(shù)中,使用的赫夫曼表應(yīng)當(dāng)以二叉樹(shù)的形式被轉(zhuǎn)換。二叉樹(shù)是空的或被分割成三個(gè)不相交子集的元素的微集。第一子集包含被稱為樹(shù)根的單一元素。另兩個(gè)子集被稱為原始樹(shù)的左右子樹(shù)。二叉樹(shù)的每個(gè)元素被稱為樹(shù)的節(jié)點(diǎn)。一個(gè)分支連接兩個(gè)節(jié)點(diǎn)。不帶有任何分支的節(jié)點(diǎn)被稱為葉子。用于符號(hào)搜索的赫夫曼解碼開(kāi)始于二叉樹(shù)的根并且結(jié)束于任何葉子;當(dāng)遍歷二叉樹(shù)時(shí)每個(gè)節(jié)點(diǎn)的一位被從位流提取。與以上兩種方法相比,該方法在存儲(chǔ)要求和赫夫曼代碼搜索的數(shù)量之間折衷。另外,該技術(shù)的編碼速度將按照是赫夫曼代碼的最大長(zhǎng)度的倍數(shù)下降。
當(dāng)前用于解碼赫夫曼代碼的另一技術(shù)是使用正則赫夫曼代碼。正則赫夫曼代碼受到特別關(guān)注,原因是它們使解碼更容易。它們通常用于多媒體和遠(yuǎn)程通信中。它們減小存儲(chǔ)并降低解碼復(fù)雜性。然而,這些技術(shù)的大多數(shù)使用赫夫曼代碼字表中的特殊樹(shù)結(jié)構(gòu)進(jìn)行編碼,因而僅僅適用于特殊類型的赫夫曼代碼并且通常不適用于解碼一般類型的赫夫曼代碼。
如以上例子中所指出的,使用可變代碼字長(zhǎng)的問(wèn)題是在實(shí)現(xiàn)速度與合理的存儲(chǔ)器利用率之間的平衡上的困難。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的第一方面,提供了一種赫夫曼解碼的方法,所述方法包括以下步驟a)基于關(guān)聯(lián)的可能值來(lái)排序赫夫曼代碼本中的代碼字,其中使用赫夫曼代碼本中的代碼字的基本參數(shù)計(jì)算可能值;b)基于赫夫曼代碼本從具有多個(gè)可變長(zhǎng)度的代碼字的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列;c)基于赫夫曼代碼本的代碼字的基本參數(shù)計(jì)算被提取當(dāng)前位序列的可能值;d)執(zhí)行搜索以在被排序赫夫曼代碼本中找到計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值;和e)根據(jù)二分搜索來(lái)解碼被提取的當(dāng)前位序列。
優(yōu)選地,通過(guò)按照指數(shù)規(guī)律地壓低(weighing down)每個(gè)代碼字中的每一位并且求和產(chǎn)生的所有被壓低的位值計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值。優(yōu)選地,從左到右按照指數(shù)規(guī)律地壓低代碼字中的位。
根據(jù)本發(fā)明的第二方面,提供了一種物品,所述物品包括具有指令的存儲(chǔ)媒體,當(dāng)由計(jì)算平臺(tái)執(zhí)行時(shí)所述指令導(dǎo)致音節(jié)點(diǎn)輸入方法的執(zhí)行,所述方法包括以下步驟
a)基于關(guān)聯(lián)可能值來(lái)排序赫夫曼代碼本中的代碼字,其中使用赫夫曼代碼本中的代碼字的基本參數(shù)計(jì)算可能值;b)基于赫夫曼代碼本從具有多個(gè)可變長(zhǎng)度代碼字的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列;c)基于赫夫曼代碼本的代碼字的基本參數(shù)計(jì)算被提取當(dāng)前位序列的可能值;d)執(zhí)行搜索以在被排序赫夫曼代碼本中找到計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值;和e)根據(jù)二分搜索解碼被提取的當(dāng)前位序列。
根據(jù)本發(fā)明的第三方面,提供了一種靜態(tài)赫夫曼解碼的系統(tǒng),所述系統(tǒng)包括a)網(wǎng)絡(luò)接口;b)輸入模塊,其耦合到網(wǎng)絡(luò)接口,用以經(jīng)由網(wǎng)絡(luò)接口基于赫夫曼代碼本接收具有多個(gè)可變長(zhǎng)度代碼字的編碼位流;c)解碼器,其耦合到所述輸入模塊;和d)可操作地耦合到解碼器的存儲(chǔ)器,用以存儲(chǔ)赫夫曼代碼本,其中該解碼器基于赫夫曼代碼本中的代碼字的參數(shù)計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值,其中該解碼器基于計(jì)算出的可能值排序赫夫曼代碼本中的代碼字,其中該解碼器從接收的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列,其中該解碼器基于赫夫曼代碼本的代碼字的參數(shù)計(jì)算被提取當(dāng)前位序列的可能值,其中該解碼器執(zhí)行二分搜索以在被排序赫夫曼代碼本中找到計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值,并且其中該解碼器根據(jù)二分搜索解碼被提取的當(dāng)前位序列。
圖1是圖解根據(jù)本發(fā)明的實(shí)施方式的赫夫曼解碼的示例方法的流程圖。
圖2是可以用于運(yùn)行本發(fā)明的一些或所有部分的典型計(jì)算機(jī)系統(tǒng)的框圖。
具體實(shí)施例方式
在優(yōu)選實(shí)施方式的以下詳細(xì)描述中,參考了形成其一部分的附圖,其中通過(guò)圖解顯示了可以實(shí)踐本發(fā)明的特定實(shí)施方式。應(yīng)當(dāng)理解的是可以利用其他實(shí)施方式并且在不脫離本發(fā)明的范圍的情況下可以進(jìn)行結(jié)構(gòu)變化。
出現(xiàn)在圖中的附圖標(biāo)記的一個(gè)或多個(gè)前導(dǎo)數(shù)字總體上對(duì)應(yīng)于該組件首先被引入的圖號(hào),使得相同的附圖標(biāo)記在全文中用于指示出現(xiàn)在多幅圖中的相同組件。相同的附圖標(biāo)記或標(biāo)號(hào)可以指示信號(hào)和連接,并且實(shí)際含義將從其在說(shuō)明書(shū)的上下文中的使用顯而易見(jiàn)。
術(shù)語(yǔ)術(shù)語(yǔ)“二分搜索”表示用在被排序表例如“赫夫曼代碼本”上的對(duì)數(shù)搜索算法,其中所述表在搜索的每個(gè)步驟期間被分成兩半,搜索僅僅在一半中繼續(xù),由此導(dǎo)致((log2(n))+1)次搜索次數(shù)。通常,這樣的對(duì)數(shù)搜索比線性搜索快得多。
圖1示出了解碼的示例方法100。在110,方法100計(jì)算赫夫曼代碼本中每個(gè)代碼字的可能值。使用赫夫曼代碼本中的代碼字的基本參數(shù)計(jì)算每個(gè)代碼字的可能值。在一個(gè)實(shí)施方式中,通過(guò)按照指數(shù)規(guī)律地壓低代碼字中的每一位并且求和產(chǎn)生的所有被壓低值來(lái)計(jì)算每個(gè)代碼字的可能值以獲得代碼字的可能值。在這些實(shí)施方式中,從左到右壓低每個(gè)代碼字中的位。
在一些實(shí)施方式中,使用以下方程計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值P(sl)=b1*2(N+M)+b2*2((N-1)+M)+...+bn*2((N-(N-1))+M)其中P是赫夫曼代碼本中的代碼字sl的計(jì)算出的可能值,b1,b2...bn是每個(gè)代碼字中的二進(jìn)位值,N是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的位的最高數(shù)目,M是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的前零的最高數(shù)目。
以下的例子示出了使用以上方程計(jì)算赫夫曼代碼本中的代碼字的可能值下面的表示出了簡(jiǎn)化的赫夫曼代碼本。
在上面的表中,代碼字參數(shù)的值分別是N=4和M=3,即4是在以上赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的位的最高數(shù)目,3是在以上赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的前零的最高數(shù)目。
下面的表示出了使用較早所示的方程計(jì)算上表中的每個(gè)代碼字的可能值。
在120,基于計(jì)算出的可能值來(lái)排序赫夫曼表中的代碼字。在一些實(shí)施方式中,按照計(jì)算出的可能值的升序或降序排序代碼字。通過(guò)我們使用中的例子,下面的表示出了按照計(jì)算出的可能值的降序排序的代碼字。
在130,基于赫夫曼代碼本接收具有多個(gè)可變代碼字的編碼位流。下面示出了接收的包括以上赫夫曼表中所示的代碼字的編碼位流的例子。
U=[1011100001011110001],其中U是編碼位流。
接收的編碼流的以上例子基本上包括以上赫夫曼表中所示的代碼字[a3,a4,a6,a2,a1,和a7]。包括以上赫夫曼表中所示的代碼字的這種編碼流的問(wèn)題在于在解碼時(shí)不知道這些代碼字的長(zhǎng)度。在這樣的編碼流中,困難通常在于使用高效計(jì)算技術(shù)解碼該編碼流而不使用大量的存儲(chǔ)器。
在140,從接收的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列。在這些實(shí)施例中,從編碼位流的左側(cè)開(kāi)始提取當(dāng)前位序列,原因是通常如以上例子中所示從左到右接收編碼位流。在這些實(shí)施例中,預(yù)定長(zhǎng)度也等于赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中的位的最高數(shù)目。
在以上我們使用中的例子中,預(yù)定長(zhǎng)度將等于4,因?yàn)橐陨虾辗蚵碇辛谐龅拇a字中的位的最高數(shù)目是4。所以,在以上接收的編碼位流中提取的當(dāng)前位序列將是“1011”,即如早先所述從左到右開(kāi)始提取位序列。
在150,為被提取的當(dāng)前位序列計(jì)算可能值。在一些實(shí)施例中,使用以上所示的方程計(jì)算可能值。在我們使用中的例子中,分別是N=4和M=3,原因分別是赫夫曼表中的所有代碼字之中的代碼字中的位的最高數(shù)目等于4并且赫夫曼表中的所有代碼字之中的代碼字中的前零的最高數(shù)目等于3。使用M和N的這些值,按如下計(jì)算被提取位序列1011的可能值
P(esl)=1*2^7+0*2^6+1*2^5+1*2^4=176,其中P(esl)代表被提取位序列的可能值。
在160,通過(guò)使用被提取當(dāng)前位序列的計(jì)算出的可能值搜索赫夫曼代碼本中的被排序可能值以找到赫夫曼代碼本中的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值。在一些實(shí)施例中,對(duì)在赫夫曼代碼本中的被排序可能值執(zhí)行二分搜索以找到赫夫曼代碼本中的計(jì)算出的可能值,該可能值基本接近于被提取位序列的計(jì)算出的可能值。
在我們使用中的例子中,按照如下執(zhí)行二分搜索以找到被排序赫夫曼表中的可能值,該可能值基本接近于被提取位序列的計(jì)算出的可能值。
·找到以上赫夫曼代碼本中的中間位置。使用方程N(yùn)_1=(赫夫曼表中的代碼字的數(shù)目/2)來(lái)計(jì)算中間位置,即在我們使用的例子中 計(jì)算中間位置。
·提取在該中間位置的關(guān)聯(lián)可能值。在我們使用的例子中,它將是192。
·檢查赫夫曼表的在中間位置的被提取的可能值是否大于當(dāng)前位序列的計(jì)算出的可能值。在我們使用的例子中,從赫夫曼表提取的可能值192大于當(dāng)前位序列的計(jì)算出的可能值176。所以,通過(guò)重復(fù)以上步驟在下半個(gè)表中繼續(xù)搜索直到搜索在赫夫曼表中結(jié)束。在我們使用的例子中,以上執(zhí)行的二分搜索在計(jì)算出的可能值P(cl)等于160的代碼字101結(jié)束。
·在被排序赫夫曼表中,剛好在與可能值P(cl)等于160對(duì)應(yīng)的代碼字之上的代碼字的計(jì)算出的可能值在完成二分搜索之后作為P(ck)等于192被獲取。
在170,使用以下準(zhǔn)則來(lái)解碼提取的當(dāng)前位序列如果P(ck)<=P(esl),則被提取位序列的代碼字被指派為等于與計(jì)算出的可能值P(ck)關(guān)聯(lián)的代碼字。如果P(ck)>P(esl)并且P(ck)>P(cl),則被提取位序列的代碼字被指派為等于與可能值P(cl)關(guān)聯(lián)的代碼字。
在我們使用的例子中,由于P(ck)>P(esl)并且P(ck)>P(cl),即192>178并且192>160,因此被提取位序列的可能值將被指派為等于可能值P(cl),該可能值因此等于160。然后使用以上指派的可能值160作為代碼字a3解碼被提取位序列1011。
在175,檢查接收的編碼流以了解接收的位流的解碼是否完成。如果解碼完成,則方法100轉(zhuǎn)到動(dòng)作190并且停止解碼過(guò)程。如果解碼未完成,則方法100轉(zhuǎn)到動(dòng)作180并且從接收的編碼位流提取下一個(gè)位序列和重復(fù)上述動(dòng)作150-190。在我們使用的例子中,由于僅僅當(dāng)前被提取位的三個(gè)位被解碼(由于被解碼代碼字a3對(duì)應(yīng)于赫夫曼表中的赫夫曼代碼101),因此被提取位序列1011中的剩余1位被加回到接收的編碼位流中并且下一個(gè)位序列1100從剩余編碼位序列被提取并通過(guò)重復(fù)上述動(dòng)作150-190被解碼。
盡管流程圖100包括連續(xù)布置在示例性實(shí)施例中的步驟110-190,但是可以使用多個(gè)處理器或組織成兩個(gè)或以上的虛擬機(jī)或子處理器的單一處理器來(lái)實(shí)現(xiàn)該主題的其他實(shí)施例。而且,還有其他的實(shí)施例可以將這些步驟實(shí)現(xiàn)為帶有在模塊之間或通過(guò)模塊通信的相關(guān)控制和數(shù)據(jù)信號(hào)的兩個(gè)或以上的特定互連硬件模塊,或?qū)S眉呻娐返牟糠?。因此,示例性處理流程圖可應(yīng)用于軟件、固件和/或硬件實(shí)現(xiàn)。
本發(fā)明的各實(shí)施例可以在軟件中實(shí)現(xiàn),所述軟件可以在圖2中所示的環(huán)境(將在下面描述)中或在任何其他合適的計(jì)算環(huán)境中運(yùn)行。本發(fā)明的實(shí)施例可在許多通用或?qū)S糜?jì)算環(huán)境中運(yùn)行。一些計(jì)算環(huán)境包括個(gè)人計(jì)算機(jī),通用計(jì)算機(jī),服務(wù)器計(jì)算機(jī),手持設(shè)備(包括但不限于所有類型的電話和個(gè)人數(shù)字助理(PDA)),膝上型設(shè)備,多處理器,微處理器,置頂盒,可編程消費(fèi)電子產(chǎn)品,網(wǎng)絡(luò)計(jì)算機(jī),小型計(jì)算機(jī),大型計(jì)算機(jī),分布式計(jì)算環(huán)境等用于執(zhí)行存儲(chǔ)在計(jì)算機(jī)可讀媒體上的代碼。本發(fā)明的實(shí)施例可以部分或全部實(shí)現(xiàn)為機(jī)器可執(zhí)行指令,例如由計(jì)算機(jī)執(zhí)行的程序模塊。通常,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,用以執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地或遠(yuǎn)程存儲(chǔ)設(shè)備中。
圖2顯示了用于實(shí)現(xiàn)本發(fā)明的實(shí)施例的合適計(jì)算系統(tǒng)環(huán)境的例子。圖2和以下討論的目的是提供合適計(jì)算環(huán)境的簡(jiǎn)單、一般描述,包含在這里的發(fā)明思想的某些實(shí)施例可以在其中實(shí)現(xiàn)。
采用計(jì)算機(jī)210的形式的普通計(jì)算設(shè)備可以包括處理器202,存儲(chǔ)器204,可卸存儲(chǔ)器212,不可卸存儲(chǔ)器214。計(jì)算機(jī)210附加地包括總線205和網(wǎng)絡(luò)接口(NI)201。處理器202可以包括解碼器230。
計(jì)算機(jī)210可以包括或具有計(jì)算環(huán)境的入口,所述計(jì)算環(huán)境包括一個(gè)或多個(gè)用戶輸入設(shè)備216和一個(gè)或多個(gè)輸出設(shè)備218。用戶輸入設(shè)備216可以包括鍵盤(pán),鼠標(biāo),跟蹤球,光標(biāo)檢測(cè)鍵,和/或類似物。輸出設(shè)備218可以包括計(jì)算機(jī)顯示設(shè)備和類似物。網(wǎng)絡(luò)接口201可以是USB連接。計(jì)算機(jī)210可以在使用網(wǎng)絡(luò)接口201的聯(lián)網(wǎng)環(huán)境中操作以經(jīng)由因特網(wǎng)連接到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)。遠(yuǎn)程計(jì)算機(jī)可以包括個(gè)人計(jì)算機(jī),服務(wù)器,路由器,網(wǎng)絡(luò)PC,對(duì)等設(shè)備或其他網(wǎng)絡(luò)節(jié)點(diǎn),和/或類似物。網(wǎng)絡(luò)接口201也可以包括局域網(wǎng)(LAN),廣域網(wǎng)(WAN),和/或其他網(wǎng)絡(luò)。
存儲(chǔ)器204可以包括易失性存儲(chǔ)器206和非易失性存儲(chǔ)器208。存儲(chǔ)器204存儲(chǔ)赫夫曼代碼本。各種計(jì)算機(jī)可讀媒體可以存儲(chǔ)在計(jì)算機(jī)210的存儲(chǔ)元件中或者從其訪問(wèn),例如易失性存儲(chǔ)器206和非易失性存儲(chǔ)器208,可卸存儲(chǔ)器212和不可卸存儲(chǔ)器214。計(jì)算機(jī)存儲(chǔ)元件可以包括用于存儲(chǔ)數(shù)據(jù)和機(jī)器可讀指令的任何合適的一個(gè)或多個(gè)存儲(chǔ)設(shè)備,例如只讀存儲(chǔ)器(ROM),隨機(jī)存取存儲(chǔ)器(RAM),可擦可編程只讀存儲(chǔ)器(EPROM),電可擦可編程只讀存儲(chǔ)器(EEPROM),硬盤(pán)驅(qū)動(dòng)器,操作壓縮盤(pán)(CD)的可卸媒體驅(qū)動(dòng)器,數(shù)字視頻盤(pán)(DVD),磁盤(pán),磁帶盒,存儲(chǔ)卡,記憶棒TM,和類似物;化學(xué)存儲(chǔ)器;生物存儲(chǔ)器;和其他類型的數(shù)據(jù)存儲(chǔ)器。
在此所使用的“處理器”或“處理單元”表示任何類型的計(jì)算電路,例如但不限于微處理器,微控制器,復(fù)雜指令集計(jì)算(CISC)微處理器,精簡(jiǎn)指令集計(jì)算(RISC)微處理器,超長(zhǎng)指令字(VLIW)微處理器,顯式平行指令計(jì)算(EPIC)微處理器,圖形處理器,數(shù)字信號(hào)處理器,或任何其他類型的處理器或處理電路。該術(shù)語(yǔ)也包括嵌入式控制器,例如普通或可編程邏輯設(shè)備或陣列,專用集成電路,單芯片計(jì)算機(jī),智能卡,和類似物。在此所使用的“計(jì)算機(jī)”210表示使用Unix操作系統(tǒng)的計(jì)算機(jī)系統(tǒng)。
本發(fā)明的實(shí)施例可以結(jié)合程序模塊實(shí)現(xiàn),所述程序模塊包括函數(shù)、過(guò)程、數(shù)據(jù)結(jié)構(gòu)、應(yīng)用程序等,用于執(zhí)行任務(wù),或限定抽象數(shù)據(jù)類型或低級(jí)硬件上下文。
存儲(chǔ)在任一上述存儲(chǔ)媒體上的機(jī)器可讀指令可由計(jì)算機(jī)210的處理器202執(zhí)行。例如,計(jì)算機(jī)程序225可以包括能夠根據(jù)教導(dǎo)和這里描述的本發(fā)明的實(shí)施例進(jìn)行赫夫曼解碼的計(jì)算機(jī)可讀指令。在一個(gè)實(shí)施例中,計(jì)算機(jī)程序225可以被包括在CD-ROM上并且從CD-ROM裝載到非易失性存儲(chǔ)器208中的硬盤(pán)驅(qū)動(dòng)器。機(jī)器可讀指令導(dǎo)致計(jì)算機(jī)210根據(jù)本發(fā)明的實(shí)施例解碼赫夫曼代碼字。
在操作中,輸入模塊216經(jīng)由網(wǎng)絡(luò)接口基于赫夫曼代碼本接收具有多個(gè)可變長(zhǎng)度代碼字的編碼位流。解碼器230基于赫夫曼代碼本中的代碼字的參數(shù)來(lái)計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值。解碼器230然后基于計(jì)算出的可能值排序赫夫曼代碼本中的代碼字。解碼器230從接收的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列。解碼器230然后基于赫夫曼代碼本中的代碼字的參數(shù)來(lái)計(jì)算被提取當(dāng)前位序列的可能值。解碼器230然后執(zhí)行二分搜索以找到被排序赫夫曼代碼本中的計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值。解碼器230然后基于二分搜索的結(jié)果解碼當(dāng)前被提取的編碼位序列。
在一些實(shí)施例中,解碼器230使用以下方程計(jì)算赫夫曼代碼本中每個(gè)代碼字的可能值P(sl)=b1*2(N+M)+b2*2((N-1)+M)+...+bn*2((N-(N-1))+M)其中P是赫夫曼代碼本中的代碼字sl的計(jì)算出的可能值,b1,b2...bn是每個(gè)代碼字中的二進(jìn)位值,N是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的位的最高數(shù)目,M是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的前零的最高數(shù)目。
更詳細(xì)地參考圖1解釋解碼器解碼被接收的編碼位流的操作。
本發(fā)明的通信技術(shù)是模塊化的并且在“分布式可配置體系結(jié)構(gòu)”的形式的利用方面是靈活的。結(jié)果,部分Unix構(gòu)架可以放置在網(wǎng)絡(luò)的不同點(diǎn),取決于所選的模型。例如,所述技術(shù)可以部署在服務(wù)器中,并且輸入和輸出模塊可以分別在從客戶端到服務(wù)器并從服務(wù)器到客戶端地被流送。
所提出的技術(shù)使用赫夫曼代碼本的基礎(chǔ)性質(zhì)來(lái)基于赫夫曼代碼本解碼具有多個(gè)可變長(zhǎng)度代碼字的編碼數(shù)據(jù)位流。而且,提出的技術(shù)通過(guò)使用二分搜索技術(shù)將解碼被提取位序列所需的搜索次數(shù)減小到((log2(n))+1)次搜索次數(shù)而減小解碼被接收數(shù)據(jù)位流中的計(jì)算復(fù)雜性。進(jìn)一步地,提出的技術(shù)并不使用赫夫曼代碼字表中的任何特殊樹(shù)結(jié)構(gòu)來(lái)解碼,因而適合于解碼一般類型的赫夫曼代碼。
上描述的目的是示例性的而非限定性的。許多其他實(shí)施例對(duì)本領(lǐng)域的技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的。因此本發(fā)明的范圍應(yīng)當(dāng)由后附權(quán)利要求以及所述權(quán)利要求的等價(jià)物的完整范圍確定。
應(yīng)當(dāng)理解的是希望以上描述的目的是示例性的而非限定性的。在回顧以上描述的基礎(chǔ)上,許多其他實(shí)施例對(duì)本領(lǐng)域的技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的。所以,該主題的范圍應(yīng)當(dāng)參考以下權(quán)利要求以及所述權(quán)利要求的等價(jià)物的完整范圍確定。
如這里所示,本發(fā)明可以在許多不同的實(shí)施例中實(shí)現(xiàn),包括各種方法,電路,I/O設(shè)備,系統(tǒng),和包括具有關(guān)聯(lián)指令的機(jī)器可訪問(wèn)媒體的物品。
其他實(shí)施例對(duì)本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的。元件、算法和操作順序可以改變以適合特殊要求。相對(duì)于圖2中所示的方法的上述操作可以采用與這里所示和所述的那些不同的順序執(zhí)行。
圖1和2僅僅是代表性的并且未按比例繪制。其中的某些部分可能被擴(kuò)大,而其他部分可能被縮小。圖1-2示出了可以被本領(lǐng)域的普通技術(shù)人員理解和適當(dāng)實(shí)施的本發(fā)明的各種實(shí)施例。
需要強(qiáng)調(diào)的是提供摘要以符合37C.F.R.§1.72(b),其要求摘要將允許讀者快速地確定技術(shù)公開(kāi)的性質(zhì)和要點(diǎn)。提交它時(shí)應(yīng)當(dāng)理解的是它將不用于解釋或限制權(quán)利要求的范圍或含義。
在本發(fā)明的實(shí)施例的前面具體描述中,各種特征在單一實(shí)施例中被分在一起,以用于使公開(kāi)流線化。該公開(kāi)方法不應(yīng)當(dāng)被理解成反映這樣一個(gè)意圖,即提出權(quán)利要求的本發(fā)明的實(shí)施例需要比每個(gè)權(quán)利要求中清楚敘述的更多的特征。而是,如下面權(quán)利要求所反映的,發(fā)明主題在于少于單一公開(kāi)實(shí)施例的所有特征。因而,下面的權(quán)利要求由此被結(jié)合到本發(fā)明的實(shí)施例的具體描述中,每個(gè)權(quán)利要求作為單獨(dú)權(quán)利要求而獨(dú)立。
應(yīng)當(dāng)理解的是以上描述目的是示例性的而非限定性的。希望涵蓋可以包括在后附權(quán)利要求所限定的本發(fā)明的精神和范圍內(nèi)的所有備選、修改和等效替換。本領(lǐng)域的技術(shù)人員在回顧以上描述的基礎(chǔ)上許多其他實(shí)施例都將顯而易見(jiàn)。所以,本發(fā)明的范圍應(yīng)當(dāng)參考后附權(quán)利要求以及所述權(quán)利要求的等價(jià)物的完整范圍確定。在后附權(quán)利要求中,術(shù)語(yǔ)“包括”和“在其中”分別被用作各自術(shù)語(yǔ)“包含”和“其中”的通俗英語(yǔ)等效替換。
權(quán)利要求
1.一種方法(100),包括基于關(guān)聯(lián)的可能值來(lái)排序赫夫曼代碼本中的代碼字(120),其中使用赫夫曼代碼本中的代碼字的基本參數(shù)計(jì)算可能值;基于赫夫曼代碼本從具有多個(gè)可變長(zhǎng)度代碼字的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列(140);基于赫夫曼代碼本的代碼字的基本參數(shù)來(lái)計(jì)算被提取當(dāng)前位序列的可能值(150);執(zhí)行搜索(160)以在被排序赫夫曼代碼本中找到計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值;和根據(jù)二分搜索解碼被提取的當(dāng)前位序列(170)。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括通過(guò)按照指數(shù)規(guī)律地壓低每個(gè)代碼字中的每一位并且求和產(chǎn)生的所有被壓低位值計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值,其中從左到右壓低代碼字中的位。
3.根據(jù)權(quán)利要求1所述的方法,其中使用以下方程計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值P(sl)=b1*2(N+M)+b2*2((N-1)+M)+…+bn*2((N-(N-1))+M)其中P是赫夫曼代碼本中的代碼字sl的計(jì)算出的可能值,b1,b2…bn是每個(gè)代碼字中的二進(jìn)位值,N是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的位的最高數(shù)目,M是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的前零的最高數(shù)目。
4.根據(jù)權(quán)利要求1所述的方法,其中基于關(guān)聯(lián)的計(jì)算出的可能值排序赫夫曼代碼本中的代碼字(120)包括排序赫夫曼代碼本中的代碼字,以使得關(guān)聯(lián)的計(jì)算出的可能值處于選自升序和降序組成的組的次序。
5.根據(jù)權(quán)利要求1所述的方法,其中從編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列(140)包括基于赫夫曼代碼本接收具有多個(gè)可變長(zhǎng)度代碼字的編碼位流(130);和從接收的編碼位流提取當(dāng)前位序列(140),其中被提取當(dāng)前位序列具有的長(zhǎng)度等于在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的位的最高數(shù)目。
6.根據(jù)權(quán)利要求1所述的方法,其中計(jì)算被提取當(dāng)前位序列的可能值(150)包括P=b1*2(N+M)+b2*2((N-1)+M)+…+bn*2((N-(N-1))+M)其中P是赫夫曼代碼本中的被提取當(dāng)前位序列的計(jì)算出的可能值,b1,b2…bn是被提取當(dāng)前位序列代碼字中的二進(jìn)位值,N是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中的位的最高數(shù)目,M是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中的前零的最高數(shù)目。
7.根據(jù)權(quán)利要求1所述的方法,其中執(zhí)行搜索(160)以在被排序赫夫曼代碼本中找到基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值的計(jì)算出的可能值包括執(zhí)行二分搜索(160)以在被排序赫夫曼代碼本中找到計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值。
8.根據(jù)權(quán)利要求1所述的方法,其中根據(jù)二分搜索解碼被提取的當(dāng)前位序列(170)包括確定與在被排序赫夫曼代碼本中找到的計(jì)算出的可能值關(guān)聯(lián)的代碼字名。
9.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括確定解碼是否完成(175);如果未完成,則從編碼位流提取具有預(yù)定長(zhǎng)度的下一個(gè)位序列(180)并且重復(fù)以上步驟以解碼被提取的下一個(gè)位序列;和如果完成,則結(jié)束解碼(190)。
10.一種系統(tǒng)(200),包括網(wǎng)絡(luò)接口(220);輸入模塊(216),其耦合到網(wǎng)絡(luò)接口(220),用以經(jīng)由網(wǎng)絡(luò)接口基于赫夫曼代碼本接收具有多個(gè)可變長(zhǎng)度代碼字的編碼位流;解碼器(230),其耦合到所述輸入模塊;和可操作地耦合到解碼器(230)的存儲(chǔ)器(204),用于存儲(chǔ)赫夫曼代碼本,其中解碼器(230)基于赫夫曼代碼本中的代碼字的參數(shù)來(lái)計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值,其中解碼器(230)基于計(jì)算出的可能值來(lái)排序赫夫曼代碼本中的代碼字,其中該解碼器(230)從接收的編碼位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列,其中該解碼器(230)基于赫夫曼代碼本的代碼字的參數(shù)來(lái)計(jì)算被提取當(dāng)前位序列的可能值,其中該解碼器(230)執(zhí)行二分搜索以在被排序赫夫曼代碼本中找到計(jì)算出的可能值,該可能值基本接近于被提取當(dāng)前位序列的計(jì)算出的可能值,并且其中該解碼器(230)根據(jù)二分搜索解碼被提取的當(dāng)前位序列。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中解碼器(230)使用以下方程計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值P(sl)=b1*2(N+M)+b2*2((N-1)+M)+…+bn*2((N-(N-1))+M)其中P是赫夫曼代碼本中的代碼字sl的計(jì)算出的可能值,b1,b2…bn是每個(gè)代碼字中的二進(jìn)位值,N是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的位的最高數(shù)目,M是在赫夫曼代碼本中的所有代碼字之中的一個(gè)代碼字中找到的前零的最高數(shù)目。
12.根據(jù)權(quán)利要求10所述的系統(tǒng),其中解碼器(230)排序赫夫曼代碼本中的代碼字,以使得關(guān)聯(lián)的計(jì)算出的可能值處于選自升序和降序組成的組的次序。
13.根據(jù)權(quán)利要求10所述的系統(tǒng),其中解碼器(230)通過(guò)按照指數(shù)規(guī)律地壓低每個(gè)代碼字中的每一位并且求和產(chǎn)生的所有被壓低位值來(lái)計(jì)算赫夫曼代碼本中的每個(gè)代碼字的可能值,其中從左到右壓低所述位。
全文摘要
提出的技術(shù)使用赫夫曼代碼本的基本性質(zhì)來(lái)基于赫夫曼代碼本解碼具有多個(gè)可變長(zhǎng)度的代碼字的編碼數(shù)據(jù)位流。這通過(guò)基于可能值排序赫夫曼代碼本中的代碼字(120)來(lái)實(shí)現(xiàn)。使用赫夫曼代碼本中的代碼字的基本參數(shù)計(jì)算可能值。從編碼數(shù)據(jù)位流提取具有預(yù)定長(zhǎng)度的當(dāng)前位序列(140)。然后使用赫夫曼代碼本中的代碼字的基本參數(shù)計(jì)算被提取位序列的可能值(150)。然后搜索被排序的赫夫曼代碼本以找到被排序赫夫曼代碼本中的計(jì)算出的可能值(160),該可能值基本接近于被提取位序列的計(jì)算出的可能值。基于搜索的結(jié)果解碼被提取的當(dāng)前位序列(170)。
文檔編號(hào)H03M7/40GK101036298SQ200580034153
公開(kāi)日2007年9月12日 申請(qǐng)日期2005年7月13日 優(yōu)先權(quán)日2004年8月6日
發(fā)明者P·多米尼克 申請(qǐng)人:模擬裝置公司