專利名稱:一種變長碼的編碼和解碼方法
技術領域:
本發明涉及信源編碼領域,尤其涉及一種在信源編碼領域廣泛應用的變長碼的編碼和解碼方法。
背景技術:
變長編碼是一種無損數據壓縮方法,其通過給信源符號集中出現概率越大的符號分配長度越短的碼字來減少編碼每個符號所需的平均碼長,從而提高整體壓縮效率。碼字長度與對應信源符號出現的概率匹配得越好,編碼效率就越高。變長編碼是現代圖像和視頻編碼系統中的重要組成部分。在實際應用中,不僅要求變長碼的壓縮效率高,而且要求其編解碼規則盡可能簡單。
圖像和視頻編碼中經離散余弦變換(DCT)、量化后的系數分布可看作廣義高斯信源。在現有變長編碼方法中,Golomb-Rice(GR)碼[Rice R F.Somepractical universal noiseless coding techniques.Tech.Rep.JPL.CA PasadenaJet Propulsion Laboratory,l97979-22]和Exp-Golomb(EG)碼[Teuhola J.Acompression method for clustered bit-vectors.Inf.Process.Lett,1978,10(7)308-311]是目前既能較好地與此概率分布相匹配,編解碼規則又相對簡單的兩種碼字。
GR碼是以后綴長度(記為k)為參數的碼字,它的前綴長度是一個一元函數,后綴具有固定的長度k。GR碼的碼字長度是呈線性增長的,而且具有相同碼字長度的碼字數目是固定不變的。因此,GR碼是一種針對幾何分布的準最優編碼,也就是針對υ=1(υ為高斯信源的形狀參數)的高斯信源(即拉普拉斯信源)的最優編碼。但是隨著υ值的減小,廣義高斯分布具有更尖銳的峰值和更緩慢的拖尾,所以GR碼的效率會越來越低。
EG碼是一種異前綴變長編碼。它實際上是Elias提出的碼字的一種特殊形式[Elias P.Universal codeword sets and representations of the integers.IEEE Trans.on Inf.Theory,1975,3(21)194-203]。EG碼的相同碼長的碼字的數目隨著碼長的增長而呈指數增長。因此,EG碼能較好地表征具有尖銳峰值的0<υ<1的廣義高斯分布,而且隨著υ值的減小,EG碼相對于GR碼的優勢越來越明顯,但是EG碼對于υ值接近于1的量化廣義高斯信源來說,其最優效率達不到GR碼的性能。
由此可見,無論是EG碼,還是GR碼,都不能在υ值的整個區間上取得最優編碼性能。
為了在υ值的整個區間上取得最優編碼性能,需要提出一種新的變長碼編解碼方法。
發明內容
本發明的一個目的是提供一種變長碼的編碼和解碼方法。該方法可以在υ值的整個區間上取得良好的編碼性能,并能用簡單的算法進行編碼和解碼。
本發明提供的一種變長碼的編碼方法,其步驟包括(A)設要編碼的信源符號集為S={s0,s1,…,sN-1},對應的出現概率分布為P={P0,P1,…,PN-1},其中N為信源符號的個數,按照概率從大到小的原則對信源符號集S中的符號進行重新排序,分配對應的編碼序號c分別為0,1,…,N-1;(B)設中間變量M,令M=c/2k,其中k為后綴碼的碼字長度,按如下規則計算MG碼的層次j和碼字長度l(B1)若M等于0,則令j=0,l=1+k,轉入步驟(C);(B2)若M等于1,則令j=1,l=2+k,轉入步驟(C);(B3)若M大于1,設中間變量t和s,并令j=1,t=1,s=1,再進行以下步驟(B31)重復賦值過程s=s×2,t=t+s+1,j=j+1,直至t≥M時轉入步驟(B32);(B32)如果t≥(M+2),則l=2×j+k,轉入步驟(C);否則,l=2×j+k+1,轉入步驟(C);(C)若j=0或1,無信息字段INFO,k個比特的后綴為0~(2k-1)的二進制表示;若j>1,按如下規則計算信息字段DECINFO的十進制值,記為[DECINFO]10若l=2×j+k,則[DECINFO]10=c-(t-s)×2k;若l=2×j+k+1,則[DECINFO]10=c-(t+1-2×s)×2k;(D)所得到的與編碼序號對應的MG碼字為[j個0][1][INFO][k個比特的后綴],其中,由INFO字段與k個比特的后綴構成的部分記為DECINFO。
上述編碼的解碼方法,其步驟包括(A)在接收端,接收一個編碼碼流;(B)從得到的編碼碼流中讀取0,直到遇到1為止,記讀出0的個數為j,并按如下規則繼續進行若j≤1,則再讀取k個比特,其中k為后綴碼的碼字長度,將這k個比特記為DECINFO;若j>1,則再讀取j+k-1個比特,并將與其對應的十進制值記為MEDINFO;如果MEDINFO≥(2k+j-1-2k),則再讀取一個比特,將這j+k個比特記為DECINFO,其碼長l=2×j+k+1;如果MEDINFO<(2k+j-1-2k),則將此j+k-1個比特記為DECINFO,其碼長為l=2×j+k;(C)記DECINFO字段的十進制值為[DECINFO]10,按如下規則計算出編碼序號c若j=0,則c=[DECINFO]10;若j=1,則c=2k+[DECINFO]10;若j>1,當l=2×j+k時,則c=[Σi=2i=j(2i-2+1)]×2k+[DECINFO]10;]]>否則,c=[2×j-2i+Σi=2i=j(2i-1-1)]×2k+[DECINFO]10;]]>計算得到編碼序號,再根據編碼序號得到對應的信源符號。
本發明結合了EG和GR碼的優點,每一層碼字都包含兩種碼長的碼字,其中一種的碼字數目隨層數的增加呈指數增長,另一種則保持不變;從而對于形狀參數在更大范圍內變化的量化廣義高斯信源,也具有穩定的編碼性能。而且,本發明所獲得的變長碼具有非常規則的結構,可以通過簡單的算法實現編解碼,從而避免傳遞及存儲碼表,節省了傳輸帶寬和存儲空間。
圖1示出了根據本發明的變長碼的編碼方法的流程示意圖;圖2示出了根據本發明的變長碼的解碼方法的流程示意圖。
具體實施例方式
本發明首先根據信源符號的概率分布,按照出現概率從大到小的原則對要編碼的信源符號集中的符號進行重新排序,分配對應的編碼序號;利用得到的編碼序號計算出編碼的碼字層次和碼字長度;在得到碼字層次和碼字長度后,產生與該編碼序號相對應的碼字。而在接收到一個輸入變長碼碼流后;從所接收的變長碼碼流中得出碼字層次和信息字段DECINFO;然后利用所得出的碼字層次和信息字段DECINFO來確定對應的編碼序號;最后根據編碼序號得到對應的信源符號。
對本發明作進一步詳細說明之前,首先對變長碼(以下簡稱MG碼)的構成進行簡單介紹。
MG碼中的一個碼字通常由前綴碼和后綴碼兩部分構成,后綴碼的碼字長度為k位。k是一個事先給定的的非負整數,用來控制每層碼字的數目。k不宜過大,本發明約定k<256。MG碼由若干層(層數記為j)組成,每層碼字的數目設置如下1 對于MG碼最短的兩層碼字,即j=0和j=1,碼字數目保持為2k不變。
2 在j>1時,MG碼的每一層存在兩種碼長的碼字,即碼長為2j+k或2j+k+1。對于碼長為2j+k的碼字,其碼字數目隨層數增加呈指數增長,數目為2k+j-1-2k;而對于碼長為2j+1+k的碼字,保持碼字數目不變,均為2k+1。
當MG碼的后綴長度設為k時,第一層(即j=0時)的2k個碼字的前綴為“1”,第二層(即j=1時)的2k個碼字的前綴為“01”。第一層和第二層的碼字均是各自的前綴與k個比特的后綴連接而成,其中k個比特的后綴為0~(2k-1)的二進制表示。對于其余層次(即j>1時)的碼字,按以下規則產生(1)對于碼長為2j+k的碼字,即前綴為偶數位比特的碼字,先用j個0與一個1連接,然后再與j+k-1個比特連接來構成。其中,后j+k-1個比特為0~(2k+j-1-2k-1)的二進制表示。
(2)對于碼長為2j+1+k的碼字,即前綴為奇數位比特的碼字,先用j個0與一個1相連,然后再與j+k個比特連接來構成。其中,后j+k個比特為(2k+j-2k+1)~(2k+j-1)的二進制表示。
總之,MG碼字的構成如下[j個0][1][INFO][k個比特的后綴]其中,第一層碼字(即j=0)沒有前置0及INFO字段。第二層碼字(即j=1)有一個前置0,但沒有信息字段INFO。當j>1時,若碼字長度為2j+k,則信息字段INFO為j-1個比特,其值為0~(2j-1-2)的二進制表示;若碼字長度為2j+1+k,則信息字段INFO為j個比特,其值為(2j-2)~(2j-1)的二進制表示。而k個比特的后綴則為0~(2k-1)的二進制表示。為方便起見,將MG碼字中由INFO字段與k個比特的后綴構成的部分記為DECINFO。
下面結合附圖1和2來具體說明變長碼的編碼和解碼方法。
MG碼的編碼方法如圖1所示,假設要編碼的信源符號集為S={s0,s1,…,sN-1},對應的出現概率分布為P={p0,p1,…,pN-1},其中N為信源符號的個數。按照概率從大到小的原則對信源符號集S中的符號進行重新排序,分配對應的編碼序號(用c表示)分別為0,1,…,N-1(步驟S10)。其中,概率最大的符號對應的編碼序號為0,概率第二大的符號對應的編碼序號為1,依此類推,概率最小的符號對應的編碼序號為N-1。
MG碼的構造是與碼字所在的層次數j及碼字的后綴長度k相關的。要得到MG碼的碼字,首先要由編碼序號c計算出j。另外,由于同一層次的碼字有兩類長度分別為2j+k和2j+1+k。因此,還需要確定碼字所屬的類別。具體編碼步驟如下第一步,根據編碼序號c計算對應MG碼的層次j及碼字長度l(步驟S20)。令M=c/2k,按如下規則進行計算(1)若M等于0,則令j=0,l=1+k,轉入第二步。
(2)若M等于1,則令j=1,l=2+k,轉入第二步。
(3)若M大于1,則j和l由下面的步驟得到(設中間變量t和s,其中t用于表示累加和。實際上,t的值為j層的最后一個碼字的編碼序號)。
(3.1)開始時,令j=1,t=1,s=1;(3.2)重復賦值過程s=s×2,t=t+s+1,j=j+1,直至t≥M時轉入步驟(3.3)繼續進行;(3.3)如果t≥(M+2),則l=2×j+k;否則,l=2×j+k+1;第二步,在得到j和l后,按照下述方法產生與編碼序號c對應的碼字(步驟S30)。前j+1個比特為j個0與一個1相連而成,后j-1+k/j+k個比特為信息字段INFO和k個比特的后綴,即信息字段DECINFO,其中,信息字段DECINFO的十進制值記為[DECINFO]10。其計算規則如下若j=0或1,無信息字段INFO,k個比特的后綴為0~(2k-1)的二進制表示;若j>1,則[DECINFO]10由以下步驟得到若l=2×j+k,則[DECINFO]10=c-(t-s)×2k;若l=2×j+k+1,則[DECINFO]10=c-(t+1-2×s)×2k;由此,就得到與編碼序號對應的MG碼字為[j個0][1][INFO][k個比特的后綴],其中,由INFO字段與k個比特的后綴構成的部分即為DECINFO。
MG碼的解碼方法如圖2所示,在接收端,解碼器對輸入碼流進行解碼,得出編碼序號。
解碼步驟如下首先,在接收端,接收一個編碼碼流(步驟S40)。
其次,基于接收的輸入碼流,獲取MG碼的層次j和DECINFO字段(步驟S50)。即從得到的編碼碼流中讀取0,直到遇到1為止,記讀出0的個數為j,并按如下規則繼續進行
(1)若j≤1,則再讀取k個比特,這k個比特記為DECINFO。
(2)否則再讀取j+k-1個比特,并將與其對應的十進制值記為MEDINFO。如果MEDINFO≥(2k+j-1-2k),則再讀取一個比特。將這j+k個比特記為DECINFO。此時,碼長為l=2×j+k+1。如果MEDINFO<(2k+j-1-2k),則將此j+k-1個比特記為DECINFO,碼字的碼長為l=2×j+k。
然后,在得到j和DECINFO(DECINFO字段的十進制值記為[DECINFO]10)后,按如下規則進行計算出編碼序號c(步驟S60),即若j=0,則c=[DECINFO]10;若j=1,則c=2k+[DECINFO]10;若j>1,可依照以下步驟來計算得到c若l=2×j+k,則c=[Σi=2i=j(2i-2+1)]×2k+[DECINFO]10;]]>否則,c=[2×j-2i+Σi=2i=j(2i-1-1)]×2k+[DECINFO]10.]]>由此,通過計算表達式,就可根據編碼碼流得到對應的編碼序號。再根據編碼序號得到對應的信源符號,至此,解碼過程完成。
實例表1給出了MG碼的一個具體例子(k=0)。
由前面的內容可知,碼長為2j+k(j>1)的碼字對應的編碼序號的范圍是[2+2×(j-2)+Σi=2i=j(2i-2-1)]×2k~[2+2×(j-2)+Σi=2i=j(2i-1-1)]×2k-1.]]>而碼長為2j+k+1(j>1)的碼字對應的編碼序號的范圍是[2+2×(j-2)+Σi=2i=j(2i-1-1)]×2k~[4+2×(j-2)+Σi=2i=j(2i-1-1)]×2k.]]>由于相同碼字長度的碼字個數均是2k的整數倍,將編碼序號除以2k,記所得的值為M,則M相同的編碼序號對應的碼字的長度是相同的,而且這些碼字的區別僅在于k個比特的后綴。也就是說,與原編碼序號c對應的MG碼字的[j個0][1][INFO]部分,就是通過對編碼序號M進行k=0的MG編碼構造出來的。以上分析結果給出了MG碼的層次特點,其如表2所示。其中,k為MG碼的后綴長度;M=c/2k(c為編碼序號)。
表1 MG碼的一個例子(k=0)
表2 MG碼的層次特點
權利要求
1.一種變長碼的編碼方法,其步驟包括(A)設要編碼的信源符號集為S={s0,s1,…,sN-1},對應的出現概率分布為P={p0,p1,…,pN-1},其中N為信源符號的個數,按照概率從大到小的原則對信源符號集S中的符號進行重新排序,分配對應的編碼序號c分別為0,1,…,N-1;(B)設中間變量M,令M=c/2k,其中k為后綴碼的碼字長度,按如下規則計算MG碼的層次j和碼字長度l(B1)若M等于0,則令j=0,l=1+k,轉入步驟(C);(B2)若M等于1,則令j=1,l=2+k,轉入步驟(C);(B3)若M大于1,設中間變量t和s,并令j=1;t=1;s=1,再進行以下步驟(B31)重復賦值過程s=s×2,t=t+s+1,j=j+1,直至t≥M時轉入步驟(B32);(B32)如果t≥(M+2),則l=2×j+k;否則,l=2×j+k+1;(C)若j=0或1,無信息字段INFO,k個比特的后綴為0~(2k-1)的二進制表示;若j>1,按如下規則計算信息字段DECINFO的十進制值,記為[DECINFO]10若l=2×j+k,則[DECINFO]10=c-(t-s)×2k;若l=2×j+k+1,則[DECINFO]10=c-(t+1-2×s)×2k;(D)所得到的與編碼序號對應的MG碼字為[j個0][1][INFO][k個比特的后綴],其中,由INFO字段與k個比特的后綴構成的部分即為DECINFO。
2.一種變長碼的解碼方法,其步驟包括(A)在接收端,接收一個編碼碼流;(B)從得到的編碼碼流中讀取0,直到遇到1為止,記讀出0的個數為j,并按如下規則繼續進行若j≤1,則再讀取k個比特,其中k為后綴碼的碼字長度,將這k個比特記為DECINFO;若j>1,則再讀取j+k-1個比特,并將與其對應的十進制值記為MEDINFO;如果MEDINFO≥(2k+j-1-2k),則再讀取一個比特,將這j+k個比特記為DECINFO,其碼長l=2×j+k+1;如果MEDINFO<(2k+j-1-2k),則將此j+k-1個比特記為DECINFO,其碼長為l=2×j+k;(C)記DECINFO字段的十進制值為[DECINFO]10,按如下規則計算出編碼序號c若j=0,則c=[DECINFO]10;若j=1,則c=2k+[DECINFO]10;若j>1,當l=2×j+k時,則c=[Σi=2i=j(2i-2+1)]×2k+[DECINFO]10;]]>否則,c=[2×j-2i+Σi=2i=j(2i-1-1)]×2k+[DECINFO]10;]]>計算得到編碼序號,再根據編碼序號得到對應的信源符號。
全文摘要
本發明公開了一種變長碼的編碼和解碼方法。該方法首先根據信源符號的出現概率,按照從大到小的原則對要編碼的信源符號集中的信源符號進行重新排序,分配對應的編碼序號;利用得到的編碼序號計算出編碼的碼字層次和碼字長度;在得到碼字層次和碼字長度后,產生與該編碼序號相對應的碼字。而在接收到一個輸入變長碼碼流后;從所接收的變長碼碼流中得出碼字層次和DECINFO字段;然后利用所得出的碼字層次和DECINFO字段來確定對應的編碼序號,再根據編碼序號得到對應的信源符號。本發明的變長碼具有非常規則的結構,可以通過簡單的算法實現編解碼,從而避免傳遞及存儲碼表,節省了傳輸帶寬和存儲空間。
文檔編號H03M7/40GK1645750SQ200510018179
公開日2005年7月27日 申請日期2005年1月21日 優先權日2005年1月21日
發明者周敬利, 余勝生, 郭紅星, 陳博明, 陳加忠, 張愛華, 范曄斌 申請人:華中科技大學