国产精品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>

      改進的哈夫曼譯碼方法和裝置的制作方法

      文檔序號:7767705閱讀:260來源:國知局
      專利名稱:改進的哈夫曼譯碼方法和裝置的制作方法
      技術領域
      本發(fā)明涉及一種改進的哈夫曼譯碼方法和裝置,特別涉及一種哈夫曼譯碼方法和裝置,通過構造有效的一維查找表執(zhí)行哈夫曼譯碼,該查找表根據(jù)二叉樹產(chǎn)生,這是哈夫曼編碼的基本原理,通過使用數(shù)字方法可以提高處理過程效率。
      背景技術
      因為哈夫曼編碼的唯一特性,從最大查找時間,平均查找時間,查找時間偏差(search time deviation)角度來衡量,現(xiàn)有技術中使用二叉樹的哈夫曼譯碼方法,被認為是非常有效的方法。然而,根據(jù)傳統(tǒng)二叉樹的查找方法,為了產(chǎn)生用于查找的數(shù)據(jù)結構,為了構造基于鏈表的二叉樹,需要執(zhí)行復雜的處理。另外,在二叉樹節(jié)點之間的、用于轉換的分支和比較語句(comparison and branch statements)減慢了處理器操作的處理流程,從而降低了哈夫曼譯碼的處理速度。
      現(xiàn)有技術中哈夫曼譯碼裝置的結構和操作,以及在裝置中執(zhí)行的哈夫曼譯碼方法將參考附圖進行解釋。
      圖1是現(xiàn)有技術中哈夫曼譯碼裝置的結構方框圖。裝置由輸入緩沖器110,查找機120,哈夫曼查找表130,和輸出緩沖器140組成。
      圖2是解釋現(xiàn)有技術中基于傳統(tǒng)條件分支語句的哈夫曼譯碼器譯碼方法的流程圖。
      圖3是現(xiàn)有技術中二進制哈夫曼樹結構的圖示。節(jié)點310,322,330,332,342,344,和356是分支到下一個節(jié)點的內(nèi)部節(jié)點。節(jié)點320,340,346,350,352,354,360,和362是具有實際上被傳回的返回值的終端節(jié)點。
      表1是圖3中所示的二進制哈夫曼樹的碼本。
      表1


      圖4和4b是現(xiàn)有技術中二叉樹哈夫曼譯碼方法的內(nèi)存結構圖示。如圖4和4b所示,現(xiàn)有技術中哈夫曼使用三部分內(nèi)存空間。如圖4所示,對一個內(nèi)部節(jié)點來說,在分配的三部分內(nèi)存空間的中間部分存儲一個無效值,同時在左面內(nèi)存空間存儲子節(jié)點的左分支節(jié)點地址,在右面內(nèi)存空間存儲子節(jié)點的右分支節(jié)點地址。如圖4b所示,對一個終端節(jié)點來說,節(jié)點的內(nèi)部值,即實際返回值,被存儲在分配的三部分內(nèi)存空間的中間部分,左面和右面的內(nèi)存空間存儲無效值。
      參考圖3到圖5,根據(jù)圖2所示的流程圖來解釋現(xiàn)有技術中的哈夫曼譯碼器的譯碼方法,該方法使用二叉樹結構的哈夫曼表。
      步驟210是譯碼的第一個步驟。在步驟210中,根據(jù)輸入到哈夫曼譯碼器的編碼比特數(shù)據(jù)流的碼字,找到與圖3所示的哈夫曼樹根節(jié)點對應的入口(entry),即內(nèi)部節(jié)點310。
      步驟220是比較和分支語句,在步驟220中,確定在210中相應于所找到的入口的節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。
      在步驟230中,如果在步驟220中確定相應于所找到的入口節(jié)點是終端節(jié)點,那么將分配給該終端節(jié)點的三部分內(nèi)存空間中的中間部分的存儲值作為實際返回的譯碼后的碼字輸出。
      在步驟240中,如果在步驟220中確定找到的入口節(jié)點是內(nèi)部節(jié)點,那么該步驟判斷從該比特流中所輸入的1個比特的值為‘0’,還是‘1’。如果是‘0’,執(zhí)行步驟250;如果是‘1’,執(zhí)行步驟260。
      在步驟250中,找到分配給當前節(jié)點三部分內(nèi)存空間的左面內(nèi)存空間中存儲的地址對應的入口,然后執(zhí)行步驟220。
      在步驟260中,找到分配給當前節(jié)點三部分內(nèi)存空間的右面內(nèi)存空間中存儲的地址對應的入口,然后執(zhí)行步驟220。
      參考圖2和圖5,下面說明對輸入的比特流‘1110100’進行譯碼的過程,該過程根據(jù)上面所述的現(xiàn)有技術的哈夫曼譯碼方法進行譯碼。
      步驟210作為譯碼的第一步,首先找到對應于哈夫曼二叉樹的根地址的入口,該入口對應圖5所示哈夫曼表的地址‘1’。
      在步驟220中,確定找到的入口節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。參考圖5,分配給對應于地址‘1’節(jié)點的三部分內(nèi)存空間的中間內(nèi)存空間存儲值為‘NULL’,左面內(nèi)存空間存儲值為‘4’,右面內(nèi)存空間存儲值為‘7’。因此,確定對應于地址‘1’的節(jié)點是圖4所示的內(nèi)部節(jié)點,然后執(zhí)行步驟240。
      在步驟240中,輸入比特流‘1110100’第一個編碼后的碼字第一個比特‘1’。因為輸入比特(new digit())為‘1’,所以執(zhí)行步驟260。
      在步驟260中,找到對應于地址‘7’的入口,該地址存儲在目前地址‘1’的右面地址‘2’中,即存儲在目前節(jié)點的右面內(nèi)存空間,然后執(zhí)行步驟220。
      在步驟220中,確定對應于哈夫曼表地址‘7’的節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。參考圖5,分配給對應于地址‘7’節(jié)點的三部分內(nèi)存空間的中間部分的存儲值為‘NULL’,左面內(nèi)存空間存儲值為‘10’,右面內(nèi)存空間存儲值為‘13’。因此,確定對應于地址‘7’的節(jié)點是圖4所示的內(nèi)部節(jié)點,然后執(zhí)行步驟240。
      在步驟240中,輸入比特流‘1110100’第一個編碼后碼字的第二個比特‘1’。因為輸入比特(new digit())為‘1’,所以執(zhí)行步驟260。
      在步驟260中,找到對應于地址‘13’的入口,該地址存儲在目前地址‘7’的右面地址‘8’中,即存儲在目前節(jié)點的右面內(nèi)存空間,然后執(zhí)行步驟220。
      在步驟220中,確定對應于哈夫曼表地址‘13’的節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。參考圖5,分配給對應于地址‘13’節(jié)點的三部分內(nèi)存空間的中間內(nèi)存空間存儲值為‘NULL’,左面內(nèi)存空間存儲值為‘22’,右面內(nèi)存空間存儲值為‘25’。因此,確定對應于地址‘13’的節(jié)點是圖4所示的內(nèi)部節(jié)點,然后執(zhí)行步驟240。
      在步驟240中,輸入比特流‘1110100’第一個編碼后的碼字第三個比特‘l’。因為輸入比特(new digit())為‘1’,所以執(zhí)行步驟260。
      在步驟260中,找到對應于地址‘25’的入口,該地址存儲在目前地址‘13’的右面地址‘14’中,即存儲在目前節(jié)點的右面內(nèi)存空間,然后執(zhí)行步驟220。
      在步驟220中,確定對應于哈夫曼表地址‘25’的節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。參考圖5,分配給對應于地址‘25’的節(jié)點的三部分內(nèi)存空間的中間內(nèi)存空間存儲值為‘4’,左面內(nèi)存空間存儲值為‘NULL’,右面內(nèi)存空間存儲值為‘NULL’。因此,在步驟220中確定對應于地址‘25’的節(jié)點是圖4b所示的終端節(jié)點,然后執(zhí)行步驟230。
      在步驟230中,分配給對應于地址‘25’的節(jié)點的三部分內(nèi)存空間的中間部分的存儲值‘4’作為譯碼后的碼字值輸出。
      因此,獲得對應于輸入比特流‘1110100’的第一個碼字‘111’的譯碼后的碼字,然后執(zhí)行比特流‘1110100’的第二個碼字的譯碼。
      按照獲得譯碼的碼字‘4’過程的同樣方法,步驟210作為譯碼的第一步,首先找到對應于哈夫曼表的地址‘1’的入口,即哈夫曼二叉樹的根地址,然后執(zhí)行步驟220。
      在步驟220中,確定找到的對應于哈夫曼表地址‘1’的節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。對應于地址‘1’節(jié)點的三部分內(nèi)存空間的中間部分的存儲值為‘NULL’,左面內(nèi)存空間存儲值為‘4’,右面內(nèi)存空間存儲值為‘7’。因此,在步驟220中確定對應于地址‘1’的節(jié)點是圖4所示的內(nèi)部節(jié)點,然后執(zhí)行步驟240。
      在步驟240中,輸入比特流‘1110100’第二個碼字的第一個比特‘0’。因為輸入比特(new digit())為‘0’,所以執(zhí)行步驟250。
      在步驟250中,找到對應于地址‘4’的入口,該地址存儲在目前地址‘1’的左面地址‘0’,即存儲在目前節(jié)點的左面內(nèi)存空間,然后執(zhí)行步驟220。
      在步驟220中,確定對應于哈夫曼表地址‘4’的節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。參考圖5,分配給對應于地址‘4’節(jié)點的三部分內(nèi)存空間的中間內(nèi)存空間存儲值為‘60’,左面內(nèi)存空間存儲值為‘NULL’,右面內(nèi)存空間存儲值為‘NULL’。因此,步驟220中確定對應于地址‘4’的節(jié)點是圖4b所示的終端節(jié)點,然后執(zhí)行步驟230。
      在步驟230中,分配給對應地址‘4’節(jié)點的三部分內(nèi)存空間的中間部分的存儲值‘60’作為對應于比特流‘1110100’第二個碼字‘0’的譯碼后的碼字值輸出。
      按照這種方法,輸出對應于編碼后的比特流‘1110100’第三個碼字‘100’的譯碼的碼字值‘59’。以次類推,獲得對應于比特流‘1110100’的譯碼的碼字值‘4,60,59,…’。
      這樣,現(xiàn)有技術中基于二叉樹的哈夫曼譯碼方法,為了產(chǎn)生用于查找的數(shù)據(jù)結構,需要執(zhí)行產(chǎn)生基于鏈表的二叉樹的復雜處理。特別是在二叉樹查找中,用于轉換的比較和節(jié)點語句的分支狀態(tài)降低了處理器操作的處理流,從而導致處理速度的效率降低。同樣,既然按照現(xiàn)有技術的哈夫曼譯碼方法,每一個節(jié)點在查找表中使用三部分內(nèi)存空間,所以非常浪費內(nèi)存空間。

      發(fā)明內(nèi)容
      本發(fā)明提供一種改進的哈夫曼譯碼方法,通過此方法,可以去掉現(xiàn)有技術中哈夫曼譯碼過程中降低處理效率的‘比較和分支’命令,從而可以提高哈夫曼譯碼器的處理速度,減少所需的內(nèi)存資源。
      本發(fā)明同時提供一種哈夫曼譯碼系統(tǒng),它執(zhí)行改進的哈夫曼譯碼方法,此方法去掉了現(xiàn)有技術中哈夫曼譯碼過程中降低處理效率的‘比較和分支’命令,從而可以提高哈夫曼譯碼器的處理速度,減少所需的內(nèi)存資源。
      一方面根據(jù)本發(fā)明,提供了一種使用查找表對編碼后的比特流進行譯碼的譯碼方法,該方法包括(a)接收編碼后的比特流;(b)從碼字的第一個比特中獲取索引信息,該碼字通過使用該接收的編碼后的比特流的部分中的比特形成,然后根據(jù)該索引信息找到查找表的入口;和(c)根據(jù)獲得的入口的內(nèi)部值確定入口類型。
      最好在步驟(c)中根據(jù)所找到的入口的內(nèi)部值的符號,確定入口是內(nèi)部節(jié)點,還是終端節(jié)點。
      最好譯碼方法還包括步驟(d)如果在步驟(c)中所確定找到的入口對應內(nèi)部節(jié)點,則根據(jù)當前入口的索引值、所查找到入口的內(nèi)部值以及碼字的第二個比特值,計算下一步需要查找的入口的索引值。
      另一方面根據(jù)本發(fā)明,提供了一種根據(jù)二進制數(shù)查找表對編碼后的比特流進行譯碼的譯碼裝置,該裝置由以下部分組成對編碼后的比特流進行譯碼的處理器;和與處理器連接,存儲與譯碼有關的查找表的內(nèi)存;這里,查找表由對應二叉樹中的各個節(jié)點并具有內(nèi)部值的入口組成,并且對應于每一個入口的二叉樹的節(jié)點類型根據(jù)存儲在相關入口的內(nèi)部值確定。最好根據(jù)對應于入口的節(jié)點類型,存儲在相關入口的內(nèi)部值具有不同的符號。
      如果對應該入口的節(jié)點是內(nèi)部節(jié)點,入口的內(nèi)部值是從當前內(nèi)部節(jié)點到下一個要查找的節(jié)點之間的相對距離。


      通過詳細描述優(yōu)選實施例,本發(fā)明上文描述的幾個方面和其他方面以及優(yōu)點將會變得更清楚。附圖包括圖1是現(xiàn)有技術中哈夫曼譯碼裝置的結構方框圖。
      圖2是解釋在圖1所示的現(xiàn)有技術裝置中執(zhí)行的哈夫曼譯碼方法的流程圖。
      圖3是在哈夫曼譯碼方法中所使用的二叉樹結構的圖示。
      圖4和4b是哈夫曼表內(nèi)存空間圖示,對應于在現(xiàn)有技術中哈夫曼譯碼方法中所使用的各個節(jié)點。
      圖5是在現(xiàn)有技術哈夫曼譯碼方法中所使用的哈夫曼表。
      圖6是根據(jù)本發(fā)明實施例,產(chǎn)生一維查找表過程的示意圖。
      圖7是根據(jù)本發(fā)明實施例,產(chǎn)生的一維查找表的過程的表。
      圖8是根據(jù)本發(fā)明實施例的方法,在譯碼方法中使用的一維查找表。和圖9是根據(jù)本發(fā)明實施例,解釋基于數(shù)字操作的改進哈夫曼譯碼方法的流程圖。
      具體實施例方式
      圖6是產(chǎn)生高效一維查找表過程的結構圖示,此時為了執(zhí)行改進的哈夫曼譯碼方法,根據(jù)本發(fā)明實施例重新構造查找表。在表轉換過程中,對二叉樹的節(jié)點在每一個相同的查找階段進行分組,從左到右按照一維陣列進行排列,以便提高表1所示的碼字大小。當圖6所示的查找表產(chǎn)生后,每一個內(nèi)部節(jié)點存儲當前節(jié)點到下一個查找節(jié)點的相對距離作為內(nèi)部值,而每一個終端節(jié)點存儲實際返回值作為內(nèi)部值。
      在排序過程中產(chǎn)生一維陣列有圖6所示的順序靜態(tài)查找表結構,并沒有通過鏈表產(chǎn)生動態(tài)數(shù)據(jù)結構。
      參考圖6,一維查找表產(chǎn)生過程下面將詳細解釋。圖6所示的二叉樹,索引號從上層到下層順序地賦給各個節(jié)點,即,按照層0,層1,層2,層3,層4,層5的順序。同樣,在同層內(nèi),索引號順序地賦給各個節(jié)點。在本發(fā)明的優(yōu)選實施例中,連續(xù)的索引號賦給圖6所示的兄弟節(jié)點。雖然本實施例中,索引號是從左到右賦值,但是在同層內(nèi),也可以從右到左賦值。
      在圖6中,索引號為0,4,7,8,9,10,12,13,…的終端節(jié)點,按照從左到右表1所示碼字大小的遞增順序,分別分配實際返回值‘60’,‘59’,‘4’,‘61’,‘58’,‘62’,‘57’和‘63’。
      同時,索引號為1,2,3,5,6,11,…的內(nèi)部節(jié)點,分別存儲當前節(jié)點到下一個要查找的節(jié)點的相對距離。在本發(fā)明實施例中,索引號為1,2,3,5,6,11的內(nèi)部節(jié)點,分別存儲當前節(jié)點的索引號與子節(jié)點的左分支節(jié)點索引號的差值,即‘-1’,‘-2’,‘-3’,‘-3’,‘-4’,‘-1’。
      圖7是根據(jù)圖6所示的表重新構造方法,構造的一維查找表。重新構造的一維查找表包括二叉樹各個節(jié)點的索引號,和與索引號相關的節(jié)點的內(nèi)部值。存儲在查找表中的每一個內(nèi)部節(jié)點的內(nèi)部值是當前節(jié)點到下一個要查找的節(jié)點的相對距離,在本發(fā)明例中即為存儲當前節(jié)點的索引號與子節(jié)點的左分支節(jié)點索引號的差值,因此總是負值。同時,每一個終端節(jié)點的內(nèi)部值是返回的結果值,即返回值,因此總是正值。
      雖然本實施例中,每一個內(nèi)部節(jié)點是當前節(jié)點的索引號與子節(jié)點的左分支節(jié)點索引號的差值,在其他實施例中也可以存儲其他相對距離值,比如到右分支節(jié)點索引號的差值。
      圖7所示的一維查找表的列‘左分支節(jié)點0’和‘右分支節(jié)點1’并沒有包括進圖8所示的最終查找表中,而是產(chǎn)生表的中間過程。指示查找地址值的這些列將在查找過程中被訪問。結合從編碼后的比特流中讀入的1比特數(shù)據(jù),這些列的每一條指示在查找階段中到下一個節(jié)點的節(jié)點索引號。
      現(xiàn)有技術的二叉樹哈夫曼查找表中,查找表中每一個節(jié)點包括3個部分,包括節(jié)點的數(shù)據(jù)值和當執(zhí)行到左分支節(jié)點或右分支節(jié)點的分支時,到下一個節(jié)點的地址值。因此,二叉樹的每一個節(jié)點需要三部分內(nèi)存空間。
      同時,根據(jù)圖8所示的本發(fā)明實施例的最終查找表,每一個內(nèi)部節(jié)點只有當前節(jié)點到下一個要查找的節(jié)點的相對距離取值。每一個終端節(jié)點只有要返回的結果取值,即返回取值。還有,在圖7中用粗線指示的兩種取值的每一種取值通?;コ獍l(fā)生,因此,它們可以按照圖8所示的一維空間安排。因此,與現(xiàn)有技術中的查找表相比,所需的內(nèi)存空間減少到三分之一。
      圖9解釋根據(jù)圖8所示的本發(fā)明實施例,使用一維查找表的改進哈夫曼譯碼方法的流程圖。
      步驟910作為使用一維查找表的譯碼的第一步,通過使用編碼后比特流的預定碼字的第一比特值,找到圖8中查找表的入口,該編碼后比特流作為索引信息輸入到哈夫曼譯碼器。
      在步驟920中,確定步驟910中找到的入口對應的當前節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點。在本實施例中,根據(jù)相應入口的內(nèi)部值是正值還是負值,來確定節(jié)點的類型。當在步驟920中,如果相應入口中所存儲的內(nèi)部值是正值,那么確定當前節(jié)點是終端節(jié)點,并且執(zhí)行步驟930。如果該內(nèi)部值是正值,那么確定當前節(jié)點是內(nèi)部節(jié)點,執(zhí)行步驟940。
      當在步驟920中確定當前節(jié)點是終端節(jié)點時,則在步驟930中,將當前節(jié)點的內(nèi)部值作為實際返回值輸出。
      當在步驟920中確定當前節(jié)點是內(nèi)部節(jié)點時,則在步驟940中,將根據(jù)下面的等式1計算新的索引值,根據(jù)計算的索引值從查找表中找到入口index=index-data(index)+new_digit()……(1)在等式1中,右邊的index表示目前節(jié)點的索引號,data(index)表示從作為當前入口內(nèi)部值存儲的當前節(jié)點到下一個要查找的節(jié)點的相對距離取值,new_digit()表示下一個比特值。
      在本發(fā)明中,相對距離取值是當前節(jié)點的索引號與前節(jié)點的子節(jié)點的左分支節(jié)點索引號的差值。
      參考圖8所示的本發(fā)明的一維查找表和圖9的流程圖,下面將解釋對輸入到哈夫曼譯碼器的編碼后的比特流‘1110100’的譯碼過程。
      步驟910作為譯碼的第一步,通過使用作為索引信息輸入到哈夫曼譯碼器的編碼后的比特流‘1110100’的第一個碼字的第一個比特‘1’,找到圖8中查找表的入口。這里,假設對應預定返回值的碼字從比特流‘1110100’的第一個比特開始。
      在步驟920中,根據(jù)在步驟910中所找到的當前入口對應節(jié)點的內(nèi)部值的符號,確定當前節(jié)點是內(nèi)部節(jié)點,還是終端節(jié)點,即圖8中查找表入口的索引值為1。在本發(fā)明實施例中,既然在步驟920中索引值為1的入口的內(nèi)部值為負值‘-1’,所以確定當前節(jié)點為內(nèi)部節(jié)點,執(zhí)行步驟940。
      在步驟940中,根據(jù)等式1計算新的索引取值,并且根據(jù)計算的索引取值找到新的入口,然后執(zhí)行步驟920。在本發(fā)明實施例中,data(index)是索引號1-2的結果值,new_digit()是需要被譯碼的比特流‘1110100’的下一個比特值‘1’。因此新索引值為index=1-(-1)+1=3。
      因此,在步驟940中,對應索引3的入口被找到,然后執(zhí)行步驟920。
      在步驟920中,確定在步驟940所找到的當前入口的節(jié)點,即對應圖8查找表的索引3的入口,是內(nèi)部節(jié)點或者終端節(jié)點。在步驟920中,既然入口的內(nèi)部值為負值‘-3’,所以確定當前節(jié)點為內(nèi)部節(jié)點,再次執(zhí)行步驟940。
      在步驟940中,根據(jù)等式1計算新的索引取值。既然new_digit()是需要被譯碼的比特流‘1110100’中的第一個碼字的第二個比特值‘1’,因此新索引值為index=3-(-3)+1=7。
      因此,對應索引7的入口被找到,然后執(zhí)行步驟920。
      在步驟920中,確定步驟940找到的當前入口的節(jié)點,即對應圖8查找表的索引7的入口,是內(nèi)部節(jié)點還是終端節(jié)點。在步驟920中,既然入口的內(nèi)部值為正值,所以確定當前節(jié)點為終端節(jié)點,然后執(zhí)行步驟930。
      在步驟930中,將對應索引7的入口的內(nèi)部值‘4’作為實際返回值,即譯碼后的碼字輸出。這樣,完成了對編碼后的比特流‘1110100’的第一個比特組,即碼字‘111’的譯碼,然后對第二個碼字的譯碼開始。
      在步驟910中,通過使用比特流‘1110100’的第二個碼字的第一個比特‘0’找到圖8查找表的入口。
      在步驟920中,既然在步驟910中所找到的對應索引0的入口的內(nèi)部值為正值,所以確定當前節(jié)點為終端節(jié)點,并且執(zhí)行步驟930。
      在步驟930中,將對應索引0的入口的內(nèi)部值‘60’作為譯碼后的碼字輸出。這樣,完成了對編碼后的比特流‘1110100’的第二個碼字‘0’的譯碼,然后對第三個碼字的譯碼開始。
      在步驟910中,通過使用比特流‘1110100’的第三個碼字的第一個比特‘1’找到圖8查找表的入口。
      在步驟920中,既然在步驟910中所找到的當前入口的內(nèi)部值,即對應索引1的入口為負值‘-1’,所以確定當前節(jié)點為內(nèi)部節(jié)點,再次執(zhí)行步驟940。
      在步驟940中,根據(jù)等式1計算新的索引取值。既然new_digit()是需要被譯碼的比特流‘1110100’下一個比特值‘0’,因此新索引值為index=1-(-1)+0=2。因此,對應索引2的入口被找到,然后執(zhí)行步驟920。
      在步驟920中,確定在步驟940中所找到的當前入口的節(jié)點,即對應圖8查找表的索引2的入口,是內(nèi)部節(jié)點還是終端節(jié)點。在本發(fā)明實施例中,既然入口的內(nèi)部值為負值‘-2’,所以確定當前節(jié)點為內(nèi)部節(jié)點,執(zhí)行步驟940。
      在步驟940中,根據(jù)等式1計算新的索引取值。既然new_digit()是需要被譯碼的比特流‘1110100’ 第三個碼字的第二個比特‘0’,因此根據(jù)等式1新索引值為index=2-(-2)+0=4。因此,對應索引4的入口被找到,然后執(zhí)行步驟920。
      在步驟920中,確定在步驟940中所找到的當前入口的節(jié)點,即對應圖8查找表的索引4的入口,是內(nèi)部節(jié)點還是終端節(jié)點。在步驟920中,既然入口的內(nèi)部值為正值‘59’,所以確定當前節(jié)點為終端節(jié)點,并且執(zhí)行步驟930。
      在步驟930中,將當前入口的內(nèi)部值‘59’作為編碼后的比特流‘1110100’的第三個碼字‘100’的譯碼后的碼字輸出。
      這樣,執(zhí)行對編碼后的比特流‘1110100’3個碼字的譯碼,作為結果值輸出譯碼的碼字‘4,60,59’。
      因此,當執(zhí)行基于現(xiàn)有技術二叉樹的哈夫曼譯碼方法的過程與執(zhí)行基于本實施例的改進的哈夫曼譯碼方法的過程相比,應用從編碼后的比特流輸入的1個數(shù)據(jù)比特的哈夫曼譯碼方法,直接找到查找表的入口,即計算地址值,從而可以去掉條件語句,該語句在現(xiàn)有技術的哈夫曼譯碼方法節(jié)點之間轉換時使用。因此,根據(jù)本發(fā)明的哈夫曼譯碼方法獲得改進的處理效率。
      表2為根據(jù)本發(fā)明的改進的哈夫曼譯碼方法和現(xiàn)有技術中順序查找的哈夫曼譯碼方法的性能結果。
      表2


      如表2所示的性能結果,當對任意MPEG-2改進聲音編碼(AAC)測試文件進行測試時,根據(jù)哈夫曼碼本的類型獲得的性能提高最小為30%,最大為777%。另外,從平均查找頻率的角度,根據(jù)本實施例的哈夫曼譯碼方法,與使用普通順序查找方法的哈夫曼譯碼器相比,顯示提高了75%的性能。
      表3為在相同測量環(huán)境下使用6種不同的MPEG-2 AAC文件各種方法的測試結果。
      表3

      如表3所示,根據(jù)本實施例的改進的哈夫曼譯碼方法與現(xiàn)有技術中順序查找的哈夫曼譯碼方法相比,按照文件類型提高查找速度最小為24%,最大為776%。
      本發(fā)明并不限于上文所述的優(yōu)選實施例,很明顯的,本領域的技術人員對技術的變化和修改在本發(fā)明權利要求中定義的精神和范圍內(nèi)有效。
      還有,本發(fā)明可以用代碼實現(xiàn),該代碼可以在計算機可讀取記錄介質上通過計算機讀取。計算機可讀取記錄介質包括各種各樣的記錄裝置,計算機可讀取數(shù)據(jù)存儲在這些裝置上。
      計算機可讀取記錄介質包括存儲介質,比如磁存儲介質(比如,ROM’s,軟盤,硬盤等等),光讀取介質(比如,CD-ROMs,DVDs等等),載波(比如,通過互聯(lián)網(wǎng)發(fā)送)。還有,計算機可讀取記錄介質可以發(fā)送至通過網(wǎng)絡連接的計算機系統(tǒng),它可以按照分布模式存儲和執(zhí)行計算機可讀取代碼。
      按照上文所述,根據(jù)本發(fā)明中改進的哈夫曼譯碼方法和裝置可以去掉現(xiàn)有技術中二叉樹查找的‘比較和分支’操作,從而提高查找速度。還有,查找表的存儲空間只有現(xiàn)有技術中的用于‘比較和分支’語句中所使用的查找表的存儲空間的三分之一。
      權利要求
      1.一種使用查找表對編碼后的比特流進行譯碼的譯碼方法,該方法包括(a)接收編碼后的比特流;(b)從碼字的第一個比特中獲取索引信息,該碼字通過使用該接收的編碼后的比特流的部分中的比特形成,然后根據(jù)該索引信息找到查找表的入口;和(c)根據(jù)獲得的入口的內(nèi)部值確定入口類型。
      2.如權利要求1所述的譯碼方法,其中在步驟(c)中根據(jù)所找到的入口的內(nèi)部值的符號,確定入口是內(nèi)部節(jié)點,還是終端節(jié)點。
      3.如權利要求1和2所述的任何一種的譯碼方法,更進一步包括(d)如果在步驟(c)中所確定找到的入口對應內(nèi)部節(jié)點,則根據(jù)當前入口的索引值、所查找到入口的內(nèi)部值以及碼字的第二個比特值,計算下一步需要查找的入口的索引值。
      4.如權利要求3所述的譯碼方法,其中根據(jù)下面公式計算下一個要查找的索引值index=index-data(index)+new_digit()這里,index表示當前入口的索引號,data(index)表示當前入口的返回值,new_digit()表示該碼字的下一個比特值,還包括找到對應于所計算索引值的查找表入口的步驟。
      5.如權利要求3和4所述的任何一種譯碼方法,其中當前入口的內(nèi)部值是從當前節(jié)點到下一個要查找節(jié)點的相對距離。
      6.如權利要求3和4所述的任何一種譯碼方法,其中下一個要查找的入口是對應于當前節(jié)點的子節(jié)點的左分支節(jié)點入口,并且相對距離是當前入口的索引值與左分支節(jié)點入口的索引值的差值。
      7.如權利要求3所述的譯碼方法,進一步包括如果在步驟(c)中確定所找到的入口對應內(nèi)部節(jié)點,則將該所找到的入口的索引值、內(nèi)部值的絕對值和碼字的下一個比特值相加,獲得查找表的入口。
      8.如權利要求1和2所述的任何一種譯碼方法,進一步包括(e)如果在步驟(c)中確定所找到的入口對應終端節(jié)點,則將查找表的內(nèi)部值作為譯碼后的碼字輸出,該碼字由編碼后的比特流的部分的比特所形成的碼字形成。
      9.如權利要求3所述的譯碼方法,其中步驟(c)進一步包括(c1)通過使用計算的索引和基于對應該索引的查找表入口的內(nèi)部值,確定找到的入口所對應的是內(nèi)部節(jié)點,還是終端節(jié)點。
      10.如權利要求9所述的譯碼方法,步驟(c)進一步包括(c2)如果確定入口的節(jié)點是終端節(jié)點,則將查找表的內(nèi)部值作為譯碼后的碼字輸出,該碼字屬于編碼后的比特流的預先編碼的碼字。
      11.如權利要求1所述的譯碼方法,其中編碼后的比特流通過MPEG標準、JPEG標準和H.26x標準中的一種方法進行編碼。
      12.如權利要求1所述的譯碼方法,其中查找表從二叉樹中產(chǎn)生。
      13.一種根據(jù)二叉樹查找對編碼后的比特流進行譯碼的譯碼裝置,該裝置由以下部分組成對編碼后的比特流進行譯碼的處理器;和與處理器連接,存儲與譯碼有關的查找表的內(nèi)存;這里,查找表由對應二叉樹中的各個節(jié)點并具有內(nèi)部值的入口組成,并且對應于每一個入口的二叉樹的節(jié)點類型根據(jù)存儲在相關入口的內(nèi)部值確定。
      14.如權利要求13所述的譯碼裝置,其中根據(jù)對應于入口的節(jié)點類型,存儲在相關入口的內(nèi)部值具有不同的符號。
      15.如權利要求13和14所述的任何一種譯碼裝置,其中如果對應該入口的節(jié)點是內(nèi)部節(jié)點,入口的內(nèi)部值是從當前內(nèi)部節(jié)點到下一個要查找的節(jié)點之間的相對距離。
      16.如權利要求15所述的譯碼裝置,其中下一個要查找的入口是對應于當前入口節(jié)點的子節(jié)點的左分支節(jié)點入口,根據(jù)該入口可以獲取當前入口的內(nèi)部值,而相對距離是當前入口的索引值與左分支節(jié)點入口的索引值之間的差值。
      17.如權利要求13和14所述的任何一種譯碼裝置,其中如果入口對應終端節(jié)點,則入口的內(nèi)部值是比特流預定碼字的譯碼后的碼字。
      18.如權利要求13所述的譯碼裝置,其中編碼后的比特流通過MPEG標準、JPEG標準和H.26x標準中的一種方法進行編碼。
      全文摘要
      提供一種改進的哈夫曼譯碼方法和裝置。該方法由以下步驟組成(a)接收編碼后的比特流;(b)從接收的編碼后的比特流的部分比特形成的碼字中的第一個比特中獲取索引信息,然后根據(jù)索引信息找到查找表的入口;和(c)根據(jù)獲得的入口的內(nèi)部值確定入口類型。
      文檔編號H04N7/26GK1441555SQ0310676
      公開日2003年9月10日 申請日期2003年2月28日 優(yōu)先權日2002年2月28日
      發(fā)明者張興燁, 長泰奎, 鄭鍾勛 申請人:三星電子株式會社
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1