專利名稱:可變長度碼字序列的解碼方法
技術領域:
本發(fā)明涉及一種對可變長度碼字序列進行源解碼的方法,所述源解碼是基于一個相關的碼字表。本發(fā)明還涉及一種解碼器,所述解碼器利用了所述方法。
這種方法可以被用在任何使用可變長度編碼的系統(tǒng)中,比如用在舉例而言視頻或音頻通信系統(tǒng)中。
背景技術:
一個視頻通信系統(tǒng)典型地包括一個源編碼系統(tǒng)、一個信道和一個源解碼系統(tǒng)。所述源編碼系統(tǒng)產生可變長度的碼字序列,并將它們通過所述信道傳送到所述源解碼系統(tǒng),其中所述源解碼系統(tǒng)利用一個共享代碼對它們進行解碼。
由于在所述信道上存在著一些干擾,所以接收到的碼字序列就包括了誤差;因此,就會出現(xiàn)多個可能的解碼的碼字序列。
然后,源解碼器通過基于所有與這些可能的序列有關聯(lián)的度量之間的最佳度量、來從所述的可能的解碼碼字序列中選擇一個,而擔當所接收到的序列的估計器。最佳度量的計算通常被稱為度量導出。這種估計通常是基于一種Viterbi(維特比)算法或者基于一種堆棧算法,所述堆棧算法在參考文獻“Buttigieg-Variable-length error-correctingcodes-PhD thesis,University of Manchester,United Kingdom,1995(Buttigieg-可變長度糾錯編碼-博士論文,曼徹斯特大學,英國)”中已有描述。
這種估計的一個主要問題是所述估計需要在每個解碼步驟中對關聯(lián)于每個碼字的所述度量進行計算。因此,最佳的部分解碼碼字序列由所有的碼字進行擴展,即對所有碼字的所有度量進行計算,然后選擇在所考慮的時間的一個新的最佳碼字作為其度量的一個函數(shù),并用所有碼字再次對其進行擴展,直至擴展的碼字的數(shù)目與接收到的碼字序列的長度相等。這種計算使所述Viterbi或堆棧算法中使用的度量導出在中央處理單元(cpu)要求方面成為解碼的最昂貴的部分。
發(fā)明概述及發(fā)明目的因此,本發(fā)明的一個目的是要提供一種對可變長度碼字序列進行源解碼的方法和解碼器,所述源解碼是基于一個相關的碼字表的,這種源解碼能夠以合理的CPU成本、時間和復雜性來實現(xiàn)有效的解碼。
為了實現(xiàn)該目的,提供一種如在權利要求1中所定義的可變長度碼字序列的解碼方法。
另外,提供一種如在權利要求12中所定義的對可變長度碼字序列進行解碼的源解碼器。
在之后的詳細描述中我們將看到,這種方法所具有的重要優(yōu)點在于碼字是以其度量值的遞增順序被選擇的。這樣,通過只搜索有用的碼字,來使所提出的方法在CPU成本、復雜性和時間方面非常高效,因為其它的碼字不再予以考慮。
本發(fā)明的另一目的是要進一步降低所述解碼的復雜性和快速性。
因此,在第一優(yōu)選實施例中,每個碼字都具有一個長度,并且樹包括與定義在所述碼字表中的最大碼字長度相等的級數(shù)。由于所述樹中的級數(shù)有一個合理的值,所以可以快速地產生結果而不必使用太多的計算。
在第二優(yōu)選實施例中,所述的擴展子步驟包括一個停止度量計算條件測試,使得如果所述條件被驗證,則該擴展被停止并且該擴展后隨對路徑重新排序的子步驟,所述的停止度量計算條件測試是基于最佳樹形路徑的第一累積度量與最差的已保存路徑的第二累積度量的比較。這樣,所述方案允許只對有用的最佳樹形路徑進行擴展,從而只對有用的相關碼字進行檢查。
此外,在第三優(yōu)選實施例中,如果先驗條件是基于符號準則的,那么所述選擇子步驟適合于只選擇一個碼字,該碼字具有的長度與在解碼步驟中所有先前選擇的碼字的長度不同。這樣我們就避免了對比那些已經被選擇的碼字更差的碼字進行檢查。
在第四優(yōu)選實施例中,該解碼步驟還包括在測試所述先驗條件之前對頂端路徑測試結束條件的一個子步驟,使得如果所述頂端路徑驗證了結束條件,就執(zhí)行測試先驗條件的子步驟,否則就執(zhí)行測試停止解碼條件的一個子步驟,并且如果所述停止解碼條件沒有被驗證,就發(fā)生到擴展步驟的返回。這種結束條件允許測試我們是否已達到一個可能的結果,該結果具有與所接收到的序列相當?shù)哪承┨卣鳌?br>
在優(yōu)選實施例中,這些特征是所接收到的碼字序列的長度,該長度是所接收到的碼字序列中的位數(shù)。因此,路徑中的相應的數(shù)據還包括位的累積數(shù)目,并且該結束條件是基于頂端路徑的位的累積數(shù)目與所接收到的碼字序列的長度的比較。
在另一優(yōu)選實施例中,所述的停止解碼條件是基于解碼步驟計數(shù)器的增量并基于所述計數(shù)器與一個設定閾值的比較,使得如果所述計數(shù)器超過了所述閾值,就停止該解碼。這樣,避免了花費太長的時間來為解碼序列尋找一個結果,該結果可能不存在或者需要花費過長的時間才能找到。
附圖簡述本發(fā)明另外的目的、特征和優(yōu)點將通過閱讀以下的詳細描述并參考附圖而變得顯而易見,其中
圖1示出了根據本發(fā)明的包括編碼器和解碼器的通信系統(tǒng)模型,圖2是與圖1的可變長度碼字序列解碼器有關的一個碼字表,圖3是表示與圖2的碼字表有關的碼樹,圖4是示出了由圖1的可變碼字序列解碼器使用的度量導出計算的第一狀態(tài)圖,圖5a是示出了由圖1的可變碼字序列解碼器使用的可變編碼序列估計的第二狀態(tài)圖,圖5b是示出了由圖1的可變碼字序列解碼器使用的可變編碼序列估計的第二狀態(tài)圖的后繼部分,圖6是示出了圖1中所示的根據本發(fā)明的方法與其它方法相比的第一性能曲線圖,圖7是示出了圖1中所示的根據本發(fā)明的方法與其它方法相比的第二性能曲線圖,以及圖8是示出了圖1中所示的根據本發(fā)明的方法與其它方法相比的第三性能曲線圖,以及圖9是示出了圖1中所示的根據本發(fā)明的方法與其它方法相比的復雜性結果的曲線圖。
圖10是示出了圖1中所示的根據本發(fā)明的方法與其它方法相比的快速性結果的曲線圖。
發(fā)明詳述在下面的描述中,本領域的技術人員所公知的功能或結構將不被詳細描述,這是因為它們會在不必要的細節(jié)上遮蓋本發(fā)明。
本發(fā)明涉及一種基于一個相關的碼字表的可變長度碼字序列的源解碼的方法,其中相關的碼字表通常也被稱做霍夫曼編碼。如圖1所示,所述方法特別被用于一個視頻通信系統(tǒng)VS中的被稱為VLC解碼器的可變長度碼解碼器中。此外,所述視頻通信系統(tǒng)VS包括一個含有VLC編碼器VLC-ENC的源編碼系統(tǒng)S-ENC、一個信道CH和一個包含所述的VLC解碼器VLC-DEC的源解碼系統(tǒng)S-DEC。源編碼系統(tǒng)S-ENC通過VLC編碼器將一個符號序列編碼為一個碼字序列SQ,并通過所述信道CH在多個位時間期間將其傳輸?shù)剿鲈唇獯a系統(tǒng)S-DEC,該源解碼系統(tǒng)S-DEC通過VLC解碼器VLC-DEC、依靠定義在所述碼字表中的共享代碼C對其進行解碼。所述傳輸是逐位進行的。
一個碼字序列SQ具有一個可變長度L_SQ。這就意味著發(fā)送的碼字序列SQs可能具有不同的長度;因此,由所述解碼系統(tǒng)S_DEC所接收的接收碼字序列SQr也可能具有不同的長度。碼字序列SQ包括多個通過共享代碼C定義的符號S。值得注意的是一個符號S包括至少一個位。
碼字表的一個實例在圖2中給出。所述共享代碼C如下定義。碼字CWDi與符號Si相關,這里碼字CWDi具有長度LTHi。碼字CWDi的值也代表了可由所述相關的符號Si所取的值。此外,出現(xiàn)的概率Pi與每個碼字CWDi有關。
這樣,通過這種共享代碼C,發(fā)送碼字序列SQs被如下定義。例如,SQs=100 0 110。該碼字序列包括3個符號S3 S1 S4并且包含7位。然后,在該源編碼系統(tǒng)S-ENC中的調制步驟之后,例如在BPSK調制之后,所述序列就等于SQs’=1;-1;-1;-1;1;1;-1,其中該調制步驟對本領域的技術人員是公知的。然后,由于所述信道CH上的噪聲,由所述源解碼系統(tǒng)S_DEC所接收到的序列就成為,例如,SQr=0.8-0.9-0.8-1.11.2-1.3。
從現(xiàn)在起,所接收到的序列SQr必須被解碼以便恢復所發(fā)送的序列SQs。換言之,我們必須恢復已經在所述發(fā)送序列SQs中發(fā)送的符號Si。由于導致差錯的擾動,我們注意到可能存在多種可能的解碼碼字序列SQd。該解碼是由所述VLC解碼器VLC_DEC執(zhí)行的,并且是基于對該發(fā)送的序列SQs的估計。
所述VLC解碼器VLC_DEC包括-一個樹形路徑列表L_PTH,它包括一組樹形路徑T_PTH,每個樹形路徑包括第一累積度量CM_LPTH和一組節(jié)點NSET,并且該樹形路徑列表包括一個頂端樹形路徑,該頂端樹形路徑是按照所述的累積度量的最佳樹形路徑,以及-一個堆棧STCK,它包括一組路徑PTH,每個路徑包括數(shù)據和一組符號Si,所述數(shù)據包括第二累積度量CM_STCK及位的累積數(shù)目CBITS。
樹形路徑的第一累積度量CM_LPTH是分支B的分支度量之和,其中分支B構成了所述的樹形路徑T_PTH以及在下文中定義的初始化累積度量。
路徑的第二累積度量CM_STCK是組成所述路徑PTH的符號Si的度量之和。如上所述,符號Si關聯(lián)于碼字CDWi。
為了找到正確的解碼碼字序列SQd,該解碼方法采用了所考慮的碼字表的樹形表示和度量導出算法。如下文所述,樹由節(jié)點N和分支B組成??紤]到度量能夠關聯(lián)于樹的每個分支B,所述解碼方法就在該樹中搜索最大似然樹形路徑,該最大似然樹形路徑可被用于確定在某個時間t處具有最小度量的碼字CWDi。我們將看到,所提出的方法的一個重要優(yōu)點在于碼字是以它們的度量值的遞增順序被選擇的。
I)度量導出算法該度量導出算法采用一個逐位分支度量的遞歸公式以及先前所提及的樹形表示。
逐位分支度量遞歸公式所述度量計算是依照Massey(梅西)度量(如在參考文獻J.L.Massey“Variable-Length codes and the Fano metric(可變長度編碼和范諾度量)”IEEE Transactions on Information Theory,IT-18(1)196-198,1972年1月中描述的)來完成的,其中該Massey度量是近似“最大后驗”準則(被稱為MAP準則),如同本領域的技術人員所公知的那樣,所述度量計算等同于計算部分的接收序列SQr和調制(假設存在加性高斯白噪聲)之后的部分發(fā)送序列SQs之間的歐幾里得距離,其后接著是由一個取決于碼字的出現(xiàn)概率的因子和一個校正因子logP0(y)對其加權,其中該校正因子logP0(y)近似所述接收序列y的似然性,這里x是發(fā)送序列。
所述度量M的公式為M(x,y)=-logP(x|y)=-logP(y|x)-logP(x)+logP0(y)[1]其中P0(y)=Σi=0nb_bitP(x[t]=0)P(y[t]x[t]=0)+P(x[t]=1)P(y[t]x[t]=1)]]>其中nb_bit是序列SQ中的位數(shù)。
因此,逐位的分支度量公式可被寫作M(CWDi,y[t:t+LTHi])=Σk=0LTHi-1m(CWDi[k],y[t+k])---[2]]]>其中m(CWDi[k],y[t+k])=logP(y[t+k]|CWDi[k])-logP(x[t+k]=CWDi[k]|x[tt+k-1])+logP0(y[t+k])是與相應于碼字CWDi的樹形路徑的第n個分支有關的分支度量。CWDi[k]是碼字CWDi的第k位。
項logP(y[t+k]|CWDi[k])表示一個距離,項logP(x[t+k]=CWDi[k]|x[tt+k-1])表示與所述碼字CWDi的第k位有關的先驗概率,而logP0(y[t+k])表示校正因子。
碼字表的樹形表示這種樹包括多個-節(jié)點N,其中多個節(jié)點與一個可能的碼字CWDi相應;-分支B,這里一個度量與一個分支B相關聯(lián)。一個分支B包括兩個節(jié)點N,也就是,從一個節(jié)點N可創(chuàng)建一個或兩個分支,即一個“左”分支和一個“右”分支;分支具有相應的位值0或1;-樹形路徑T_PTH,其中一個樹形路徑T_PTH表示一個解碼碼字序列SQd。一個樹形路徑T_PTH包括多個分支B,并從一個初始節(jié)點N00擴展到一個可能的符號Si。
除此之外,樹具有不同的級,第一級為0級,并且樹包括初始節(jié)點N00。
度量的計算在所述的度量導出算法中,我們從初始節(jié)點N00出發(fā)查驗樹中的樹形路徑,并沿著這些路徑一直到一條樹形路徑到達符號S。將之前查驗過的樹形路徑的列表保存在存儲器中。一個列表項目包括所查驗的樹形路徑的最后一個節(jié)點以及它的第一累積度量,即組成這個樹形路徑的分支的分支度量之和。通過計算樹形路徑的最后一個節(jié)點的后繼分支(通過構建而成的一個或兩個分支)的分支度量,然后將其加入所述頂端樹形路徑的第一累積度量來形成后繼者,這樣每個解碼步驟在該樹形路徑列表中產生了頂端樹形路徑的一個擴展(也就是具有最小累積度量的最佳樹形路徑)。然后將該頂端樹形路徑從所述樹形路徑列表中刪除并將其后繼者插入。當該列表中的所述頂端樹形路徑與一個完整的碼字CWDi相應時,就將該碼字加到主要最佳碼字列表CWD_LIST中。重復這種操作直至驗證到停止條件。
這樣,如圖4中所示,所述度量導出算法執(zhí)行下列步驟。
在第1步CREAT_TREE)中,我們創(chuàng)建一個與所述碼字表相關的樹。我們通過計算與每個分支B有關的先驗概率logP(x[t+k]=CWDi[k]|x[tt+k-1]),如參考文獻“L.Guivarch,Carlach,Siohan-Joint Source Channel soft decoding of Huffmancodes with turbo-codes(帶有渦輪碼的霍夫曼編碼的聯(lián)合源信道軟解碼)-In Proceeding of the Data compression Conference DCC’00第83-91頁,Snowbird,Utah,USA,2000年3月”中所描述的,來定義節(jié)點N之間的關系從而創(chuàng)建該樹。注意到在優(yōu)選實施例中,樹的級數(shù)等于在所述碼字表中定義的最大碼字長度LTHi,即這里為4。
在第2步INIT_L_PTH)中,我們通過在所述頂端樹形路徑列表L_PTH中將初始節(jié)點N00的度量設為0來初始化所述樹形路徑L_PTH。
在第3步EXT_BEST_TPTH)中,我們在所述樹形路徑列表L_PTH中計算最佳樹形路徑BT_PTH的后繼分支的度量。我們從該樹形路徑列表L_PTH中刪除該最佳樹形路徑BT_PTH,并且將所述擴展的樹形路徑T_PTH插入到該樹形路徑列表中。
在第4步SEL_BEST_TPTH)中,我們選擇新的最佳樹形路徑BT_PTH,也就是具有最小第一累積度量的樹形路徑列表L_PTH的樹形路徑。
在第5步STOP_METRIC_COND)中,我們測試某些停止度量計算條件。如果驗證了其中一個停止條件,我們就停止,否則我們繼續(xù)執(zhí)行第六步。
可以定義幾個停止條件。在優(yōu)選實施例中,下面的停止條件可以被驗證。
-如果每個節(jié)點N都被檢驗過了,我們就停止。
-如果已選擇了足夠數(shù)量的碼字CWDi,我們就停止。
-如果相應于最佳樹形路徑的第一累積度量CM_LPTH超過了某個閾值,我們就停止,這里該閾值為最差的第二累積度量CM_STCK。最好使用最后一個條件。
在第6步中,我們測試最佳樹形路徑BT_PTH是否與一個完整的碼字CWDi相應。如果是,我們繼續(xù)第7步。否則我們回到第3步。
在第7步中,我們將所找出的、相應于最佳樹形路徑BT_PTH的碼字CWDi加入該碼字列表CWD_LIST中并回到第4步。
注意某些找出的碼字CWDi可能沒有被估計方法所使用,特別是在選擇了等長(所述碼字中的位數(shù))的幾個碼字CWDi時,也就是在下面將要描述的、當某些先驗條件是基于符號準則時。
II)解碼方法或VLC算法現(xiàn)在我們將要看到所述的解碼方法(也被稱作TREE-VLC-STACK算法)如何通過執(zhí)行下述步驟來使用這種度量導出算法,如圖5a和5b中所示。
在第1步CREAT_TREE)中,如前所述,我們創(chuàng)建與所述碼字表相關的樹。該樹如圖3中所示。這里,它的級數(shù)等于4。
創(chuàng)建完相關的樹之后,在第2子步INIT_STCK)中,我們通過將零度量放入所述堆棧STCK的棧頂?shù)捻椫幸约皩o窮大度量放入其它項中來初始化該堆棧STCK。
在第3子步INIT_LPTH)中,我們通過將所述初始節(jié)點N00設為初始累積度量來初始化所述樹形路徑列表L_PTH,其中初始累積度量是所述堆棧STCK的頂端路徑的第二累積度量CM_STCK。
在第4子步EXT_BEST_TPTH)中,我們從所述最佳樹形路徑BT_PTH擴展樹形路徑T_PTH,并計算后繼分支B的第一累積度量CM_LPTH。然后,我們從所述樹形路徑列表L_PTH中刪除最佳樹形路徑,并將該擴展后的樹形路徑插入所述樹形列表L_PTH。
在第5子步SEL_BEST_TPTH)中,我們在所述樹形路徑列表L_PTH中選擇新的最佳樹形路徑BT_PTH,也就是選擇具有最佳第一累積度量,即最小累積度量CM_LPTH的樹形路徑。
在第6子步SEL_CWD)中,如果從上一次經過步驟3起,至少一個所選的最佳樹形路徑BT_PTH是一個碼字,那么轉到步驟10。如果不是,則轉到步驟7。
在第7子步=CWD)中,我們測試所述最佳樹形路徑BT_PTH是否與一個完整的碼字CWDi相應。這樣,如果該最佳樹形路徑BT_PTH與一個完整的碼字相應,則我們從所述樹形路徑列表L_PTH中刪除該最佳樹形路徑BT_PTH,然后我們轉到步驟8,否則我們回到步驟4。
注意到當所述先驗條件是基于符號準則時,我們最好測試該相應的完整碼字CWDi具有的長度LTHi是否與從上一次經過步驟3起所有的之前所選的碼字長度不同。
如果長度相同,那么我們就從所述樹形路徑列表L_PTH中刪除該最佳樹形路徑BT_PTH,然后我們回到步驟5。這就意味著該碼字CWDi不值得檢驗,因為該碼字CWDi是在已經選擇了另一具有相同長度的碼字之后被選擇的,所以它比所述的另一碼字更差。因此,這種測試具有節(jié)省時間的優(yōu)點。
如果長度不同,我們就從所述樹形路徑列表L_PTH中刪除該最佳樹形路徑BT_PTH,然后我們轉到步驟8。
在第8子步DEL_TOPTH_STCK)中,我們從所述堆棧STCK中刪除頂端路徑TOP_PTH。
在第9子步INS_PTH_STCK)中,我們通過選擇在步驟7中獲得的碼字CWDi,而將從所述最佳擴展路徑中形成的新的路徑PTH插入到堆棧STCK中。然后我們回到步驟5。
在第10子步CM_LPTH>CM_STCK)中,我們測試所述的停止度量計算條件。這樣,我們將所述最佳樹形路徑的第一累積度量與最差的已保存路徑的累積度量進行比較。因此,如果在所述樹形路徑列表L_PTH中的最佳樹形路徑BT_PTH的第一累積度量CM_LPTH超過了所述堆棧STCK中的最差路徑PTH的第二累積度量CM_STCK,那么我們轉到步驟14。這意味著該最佳樹形路徑BT_PTH的第一累積度量比該最差路徑PTH的第二累積度量更差。否則,轉到步驟11。
在第11子步=CWD)中,如果所述樹形路徑列表L_PTH中的所述最佳樹形路徑BT_PTH與一個完整的碼字CWDi相應,我們就從該樹形路徑列表L_PTH中刪除所述最佳樹形路徑BT_PTH,然后我們繼續(xù)步驟12。否則,我們回到步驟4,即我們繼續(xù)查找一個相應的碼字CWDi。
在第12子步DEL_WORSPTH_STCK)中,我們刪除所述堆棧STCK中的最差路徑PTH,也就是,具有最大累積度量的路徑。
在第13子步INS_PTH_STCK)中,我們通過在步驟11中所獲得的被選中的碼字CWDi,在堆棧STCK中,將從所述擴展的最佳路徑中形成的新路徑PTH插入到所述堆棧STCK中,然后我們回到步驟5。
在第14子步REORD_STCK)中,我們按照所述第二累積度量值CM_STCK,將所述堆棧STCK從最佳到較差進行重新排序。
在第15子步CBITS=L_SQ)中,我們在頂端路徑上測試結束條件。這樣,我們將所述頂端路徑的累積位數(shù)與所述的接收碼字序列的長度進行比較。如果,該頂端路徑的累積位數(shù)CBITS等于該接收序列SQr的長度L_SQ,我們就繼續(xù)執(zhí)行步驟16。否則,我們轉到步驟18。
在第16子步AP_COND)中,我們測試所述堆棧STCK中的所述頂端路徑TOP_PTH是否驗證了關于發(fā)送序列的先驗條件。
該先驗條件最好是符號Si的數(shù)目或者是一個序列中的塊數(shù)目。在該實例中,該先驗條件是符號Si的數(shù)目。如果的確驗證了該先驗條件,我們就停止,并且我們輸出所述頂端路徑TOP_PTH,其中所述頂端路徑TOP_PTH就是對所述接收序列SQs的被解碼的解。否則,我們轉到步驟17。
在第17子步DEL_TOPTH_STCK)中,我們從所述堆棧STCK中刪除所述頂端路徑PTH,并將無窮大度量放入該堆棧STCK中的頂端路徑的項中,然后我們轉到步驟14。
在第18子步STOP_COND)中,我們測試所述的停止解碼條件。這樣,我們增加一個相應于解碼步驟的數(shù)目的計數(shù)器CPT,并且我們將所述計數(shù)器CPT與一個設定的閾值TH進行比較。如果所述計數(shù)器CPT超出了給定的閾值TH,解碼就被停止。這意味著沒有找到解。例如,將該閾值TH設置為3*所述發(fā)送序列SQs的位數(shù)。否則我們回到步驟3。
III)示意性實例步驟1所述樹的創(chuàng)建這種樹如圖3中所示。在該圖中,與圖2中的碼字表相關的樹具有6個符號S1至S6、11個節(jié)點N00至N40以及10個分支。它具有第一節(jié)點N00。例如,它具有一條樹形路徑N00-N11-N20-S3,該樹形路徑包括形成該符號S3的所述的3個中間節(jié)點N00-N11-N20,所述節(jié)點等同于3個分支B1(N00-N11)、B2(N11-N20)、B3(N20-N30)。這3個分支分別具有相關的位值“1”、“0”和“0”。
注意到我們用k=該樹的級數(shù)作索引來表示節(jié)點Nk1。例如,N20指的是該節(jié)點在樹的第二級。
步驟2所述堆棧STCK的初始化。這里,該堆棧具有2個路徑PTHPTH1和PTH2。
步驟3所述樹形路徑列表L_PTH的初始化。
步驟4擴展因此,我們具有兩個擴展的樹形路徑T_PTH10和T_PTH11。
步驟5在該實例中,所述最佳樹形路徑為樹形路徑BT_PTH=T_PTH11(N00-N11)。
步驟6之前沒有選擇任何碼字。因此,我們轉到步驟7。
步驟7這里,所述最佳樹形路徑BT_PTH=T_PTH11(N00-N11)不與任何碼字相對應,因此我們回到步驟4。
步驟4此時我們有兩個擴展的樹形路徑T_PTH20和T_PTH21
步驟5新的最佳樹形路徑是BT_PTH=T_PTH20。
步驟6之前沒有選擇任何碼字。因此,我們轉到步驟7。
步驟7這里,所述最佳樹形路徑BT_PTH=T_PTH20(N00-N11-N20)不與任何碼字相對應,因此,我們回到步驟4。
步驟4
步驟5我們達到具有第一累積度量M11+M20+M30的一條最佳樹形路徑BT_PTH=T_PTH30。
步驟6從上一次經過步驟3起,所選的最佳樹形路徑BT_PTH都不是一個碼字,我們轉到步驟7。
步驟7由于所述最佳樹形路徑BT_PTH=T_PTH30與完整的碼字100相對應,我們就從所述樹形路徑列表中刪除該最佳樹形路徑BT_PTH=T_PTH30,然后我們轉到步驟8。
步驟8在所述堆棧STCK中刪除頂端路徑TOP_PTH=PTH1。
步驟9我們通過選擇在步驟7中所獲得的碼字CWDi來插入所述新的路徑PTH。所述碼字CWDi包括3位100,并與符號S3相應。因此,該新的路徑PTH1包括下列數(shù)據第二累積度量M10+M20+M30、3位的值以及該符號S3。
我們回到步驟5。
步驟5我們選擇新的最佳樹形路徑BT_PTH=T_PTH10。
步驟6所選的最佳樹形路徑BT_PTH中的至少一個是一個碼字,因此轉到步驟10。
步驟10所述最佳樹形路徑T_PTH10的第一累積度量小于所述堆棧中的最差路徑的第二累積度量,這里該第二累積度量為無窮大,然后轉到步驟11。
步驟11所述新的最佳樹形路徑BT_PTH=T_PTH10與新的碼字0以及符號S1相應,因此我們從所述樹形路徑列表中刪除該最佳樹形路徑BT_PTH=T_PTH10,然后我們轉到步驟12。
步驟12我們從所述堆棧中刪除最差路徑。
步驟13我們通過選擇在步驟11中獲得的所述碼字,向所述堆棧STCK中插入新的路徑PTH。這樣,在該堆棧STCK中,我們獲得具有第二累積度量M10、1位和所述符號S1的所述路徑PTH2,如下文所示。
我們回到步驟5。我們選擇新的最佳樹形路徑BT_PTH=T_PTH31。
步驟6、步驟10所述最佳樹形路徑T_PTH31的第一累積度量大于所述堆棧中的最差路徑PTH2的第二累積度量,MP2<M11+M20+M31,因此我們轉到步驟14。
步驟14我們對所述堆棧重新排序。這里所述路徑PTH1優(yōu)于路徑PTH2。
步驟15這里,所述頂端路徑的累積位CBITS不等于所述接收序列SQr長度位。因此我們轉到步驟18。
步驟18CPT=1,回到步驟3。
步驟3所述樹形路徑列表L_PTH被全部清除。新的頂端樹形路徑T_PTH是具有所述節(jié)點N00的MP1。
步驟4我們從所述節(jié)點N00開始擴展分支。
步驟5、步驟6和步驟7T_PTH10是最佳樹形路徑BT_PTH,沒有碼字被選擇并且T_PTH10相應于所述符號S1。我們在所述樹形路徑列表中刪除該最佳樹形路徑BT_PTH=T_PTH10。
步驟8我們在所述堆棧STCK中刪除該頂端路徑PTH1。
步驟9然后,在所述堆棧STCK中,我們有
步驟5我們選擇新的最佳樹形路徑BT_PTH=T_PTH11。
步驟6存在一個之前選擇的碼字,因此轉到步驟10。
步驟10所述最佳樹形路徑T_PTH11的第一累積度量大于所述堆棧中的最差路徑PTH2的第二累積度量,MP2<MP1+M11,因此我們轉到步驟14。
步驟14我們對所述堆棧重新排序。這里維持原樣,這意味著該路徑PTH1優(yōu)于所述路徑PTH2。
步驟15、步驟18CPT=2,我們回到步驟3。
步驟3所述樹形路徑列表L_PTH被全部清除。新的頂端樹形路徑T_PTH00對所述節(jié)點N00是MP1。
步驟4擴展。
步驟5、步驟6然后我們繼續(xù)所述新的最佳樹形路徑BT_PTH=T_PTH11(N00-N11)。
步驟7該新的最佳樹形路徑不與任何碼字相對應。我們回到步驟4。
步驟4擴展。
步驟5、步驟6和步驟7T_PTH21(MP1+M11+M21,N00-N11-N21)是不與碼字相應的新的最佳樹形路徑BT_PTH。我們回到步驟4。
擴展
步驟5、步驟6和步驟7T_PTH32(MP1+M11+M21+M32 N00-N11-N21-N32)是相應于碼字11O的新的最佳樹形路徑BT_PTH,也就是相應于符號S4。我們在所述樹形路徑列表L_PTH中刪除所述最佳樹形路徑BT_PTH=T_PTH32。
步驟8、步驟9在所述堆棧STCK中刪除頂端路徑TOP_PTH,然后在該堆棧STCK中,我們可得
回到步驟5新的最佳樹形路徑是BT_PTH=T_PTH33。
步驟6、步驟10新的第一累積度量MP1+M11+M21+M33超過了所述堆棧STCK中的最差第二累積度量,這里最差第二累積度量是MP2,因此我們轉到步驟14。
步驟14我們對所述堆棧重新排序。這里該堆棧保持原樣。
步驟15所述堆棧STCK中的頂端路徑的累積位CBITS等于所述接收序列L_SQ的長度,這里為7,于是我們轉到步驟16。
步驟16先驗條件符號S的數(shù)目等于所述發(fā)送序列SQs中的符號數(shù)目,這里是3。于是,我們停止并輸出所述頂端路徑TOP_PTH=S3,S1,S4,該頂端路徑TOP_PTH就是該接收序列SQr=0.8 -0.9 -0.8 -1.1 1.2 -1.3的解。
IV)性能圖6、圖7和圖8示出了與其它用于可變長度碼字序列的源解碼方法相比,根據本發(fā)明的方法的性能。描述了下面的方法性能-硬VLC解碼“HARD”(以菱形表示),-基于Demir和Sayoud算法的新的符號trellis(網格)算法“TRELLIS”(以圓圈表示),參考Proceeding Data CompressionConference DCC‘98,139-148頁,Snowbird,Utah,USA,1998年3月30日-4月1日的“Joint Source Channel coding for variable lengthcodes(用于可變長度編碼的聯(lián)合源信道編碼)”,將公式[1]用于度量計算,-由Buttigieg提出的VLC堆棧算法“VLC-STACK”(以向上的三角形表示),該算法如在現(xiàn)有技術部分描述的那樣(參考“variable-lengtherror-correcting codes(可變長度糾錯編碼)”博士論文,Universityof Manchester(曼徹斯特大學),UK 1995),以及-根據本發(fā)明的方法“TREE-VLC-STACK”(以向左的三角形表示)。
該硬VLC方法是一種包括采用VLC編碼的前綴屬性逐位地對所述的接收序列SQr進行解碼的方法。前綴屬性指的是一個碼字不能作另一個碼字的開始。
其它的方法都是軟VLC解碼方法。
圖6、圖7和圖8的曲線圖都示出了在分組差錯率PER相對信噪比Eb/N0方面的仿真性能,這里分組是相應于一個碼字序列SQ的。應當指出,所述信噪比的計算對本領域的技術人員來說是公知的。也就是說,我們計算性能開銷比。所述性能示出了碼字序列是否已被正確地解碼,并且所述開銷示出了為發(fā)送碼字序列SQ的位而消耗了多少功率(能量/噪聲)。然后,取決于我們可以接受的誤差以及/或者我們想要使用的功率,來選擇最佳的解。最優(yōu)方法和硬(hard)方法限制了所有的性能。
仿真特征如下所示。
-碼字以100個分組被傳輸,-按給出的VLC表產生符號并對其進行VLC解碼,-信道噪聲是加性高斯白噪聲,-用在所述軟解碼方法中的存留路徑的最大數(shù)目,將所述最大數(shù)目設為10。
圖6表示以Bauer和Haugenauer介紹的26碼字表進行的仿真結果(參考在Proceeding of third ITG Conference on Source and ChannelCoding CSCC00,第111-116頁,Munich,Germany,2000年1月中的“symbol by symbol MAP decoding of variable length codes(可變長度編碼的逐個符號的MAP解碼)”)。
圖7表示以MPEG4標準定義的208碼字表進行的仿真結果(參考RobKoenen“Overview of the MEPEG4 Standard(MEPEG4標準總覽)”ISO/IECJTC2/SC29/WG11 N3156,International organization forstandardization,http//drogo.cselt.stet.it/mpeg/standards/mpeg-4/Mpeg-4.htm,2000年3月)。
圖8表示用與H.26L標準有關的最大長度為19的1023碼字UVLC表進行的仿真結果(參考Gisle Bjontegaard “H.26L Test Model Long TermNumber6(H.26L測試模型長期號6)”draft0,ITU,Telecommunicationstandardization Sector Study Group 6,http://standard.pictel.com/ftp/video-site/h26L/tml6d0.doc,2001年3月)。
這些仿真示出了就PER而言,所有有關的軟解碼方法都幾乎獲得了相同的性能。因此,選擇的準則將是解碼的復雜性、快速性以及所需的存儲器大小。
圖9示出了在與其它有關方法相比的復雜性方面,根據本發(fā)明的TREE-VLC-STACK方法的性能。Y軸表示操作的數(shù)目除以秒,NBOP/SEC。X軸表示位數(shù)除以分組,NBITS/PACK。
正如可以看見的那樣,根據本發(fā)明的方法在解碼復雜性方面高效得多。
而且,如圖10中所示,根據本發(fā)明所提出的TREE-VLC-STACK方法所需的成本約為現(xiàn)有的VLC-STACK方法的六分之一。
V)應用根據本發(fā)明所提出的VLC解碼方法優(yōu)選地用于解碼有噪聲的MPEG4幀。
在MPEG-4視頻標準中(參考Rob Koenen“Overview of the MEPEG4Standard”ISO/IEC JTC2/SC29/WG11 N3156,Internationalorganization for standardization,http://drogo.cselt.stet.it/mpeg/standards/mpeg-4/Mpeg-4.htm,2000年3月以及Soares和Pereira“MPEG4a flexible codingstandard for the emerging mobile multimedia applications”Proceeding of IEEE International Symposium on Personal Indoorand Mobile Radio Communication,Boston,USA,1998年9月),圖象場景被構建為相關的對象的組合。對每一個對象來說,形狀、運動和紋理數(shù)據被編碼。與形狀和運動數(shù)據相反,對紋理數(shù)據進行完全的VLC編碼。此外,MPEG-4已經定義了一個數(shù)據分區(qū)模式,該模式在一個分組內對所述數(shù)據進行重新排序,并且MPEG-4數(shù)據通過分組被發(fā)送出去。如此,通過一個標記而將所述形狀和運動數(shù)據與所述紋理數(shù)據分開。然后,所提出的軟解碼技術能夠在數(shù)據分區(qū)模式中對MPEG-4紋理分區(qū)成功地使用。
紋理編碼是基于塊的使用離散余弦變換(DCT)對8×8的塊進行編碼,通過與EVENT(事件)有關的游程長度編碼和可變長度編碼對該塊進行量化并將其映射到位。一個EVENT是最后一個非零系數(shù)指示(如果LAST被置為“0”,則該塊中存在更多的非零系數(shù),如果LAST被置為“1”,則意味著這是該塊中的最后一個非零系數(shù))、在一個第一編碼系數(shù)RUN之前的連零數(shù)目以及一個第二編碼系數(shù)LEVEL的非零值的組合。
一個可能的EVENT可由一個VLC編碼表示。然而,某些可能的EVENT沒有VLC編碼來表示它們。但在統(tǒng)計上這些EVENT非常罕見。為了編碼這些統(tǒng)計上非常罕見的組合,就采用一種使用轉義模式碼字ESC的轉義(Escape)編碼方法,這種轉義編碼方法在MPEG-4標準中是公知的。它包括三種類型的轉義模式碼字ESC。
類型1一種之后跟著“0”的轉義模式碼字ESC。
類型2一種之后跟著“10”的轉義模式碼字ESC。
類型3一種之后跟著“11”以及一個長度為21的固定長度編碼的轉義模式碼字ESC。
這三種類型在參考文獻Rob Koenen的“Overview of the MEPEG4Standard”中給出。
由于所述轉義模式碼字,軟解碼算法不能直接被應用在所述MPEG-4紋理分區(qū)。然而,對于轉義模式碼字ESC的前兩種類型(類型1和類型2),提出的一種解決方案是我們通過在所述VLC碼字表中分別增加位“0”和“10”而人為地得到這些轉義模式碼字ESC。這樣,所述碼字表就包括轉義模式碼字ESC,并且然后這些轉義模式碼字ESC可以與任何其它的VLC碼字同樣地被使用。
對于所述的轉義模式碼字ESC的第三類型3,提出的一種解決方案如下所述。在所述第14步REORDER_STCK)中,剛好在對所述堆棧STCK進行重新排序之前,我們考慮類型3的轉義模式碼字ESC的問題如下所述,我們計算類型3的轉義模式碼字的度量。我們將該度量增加到我們當前正工作的路徑PTH(即所述堆棧中的最佳路徑)的第二累積度量CM_STCK。然后,我們將其與該堆棧STCK中的最差路徑PTH的第二累積度量CM_STCK進行比較。如果它優(yōu)于該CM_STCK,我們就用通過所述擴展堆棧STCK中的最佳路徑而形成的所述新的路徑PTH來代替該堆棧STCK中的最差路徑PTH,其中擴展堆棧STCK中的最佳路徑是通過所述轉義模式碼字ESC來擴展的,這里轉義模式碼字ESC之后跟著11以及21個后隨的接收位的硬值(hard value)。可以看到,這種擴展路徑的特征為上述的累積度量,以及等于所關心的頂端路徑的位累積數(shù)目CBITS+30的位累積數(shù)目CBITS。
在任何情況下,我們都轉入步驟14。
在時間t處,后面跟隨著一個固定長度編碼的、類型3的轉義模式碼字的度量如下所示。
M(ESC′′+11′′,y[t:t+8])+Σi=929(||y[t+i]-sign(y[t+i)]||2-log12+logp0(y[t+i]))]]>對于用在所提出的VLC解碼算法中的先驗條件,軟VLC解碼算法經常使用按序列的符號數(shù)目的所述先驗知識而使得對所述發(fā)送序列的估計更準確。不幸的是,在標準MPEG-4中,包含在每個紋理分區(qū)中的符號數(shù)目的知識并不能從MPEG-4幀中獲得(當然除了完整并正確地對該幀進行解碼之外)。然而,通過解碼頭標和運動分區(qū),就可以知道包含在該紋理分區(qū)中的塊數(shù)。
因此,對于MPEG-4標準,在根據本發(fā)明所提出的VLC解碼算法中,我們將使用一個紋理分區(qū)中的塊數(shù)的先驗知識來執(zhí)行這種解碼。
事實上,通過對相應于LAST參數(shù)等于1的碼字的數(shù)目進行計數(shù),便很容易地確定出在一個給定的碼字序列中包含的塊數(shù)。這樣,在其包含了精確的塊數(shù)的意義上,按分區(qū)的塊數(shù)的知識是可被用作符號數(shù)來選擇一個可能序列的一種先驗知識。因此,在所提出的VLC算法的第16步中,我們將所述解碼的序列的塊數(shù)與已知的所述發(fā)送序列SQs的塊數(shù)進行比較。
注意到如果所述先驗條件是基于塊準則的,那么我們不選擇相應于同一LAST參數(shù)值的相同長度的兩個碼字,從而節(jié)省了時間。
應當理解,本發(fā)明不局限于前述的實施例,并且可以作出變化和修改而不背離由在所附權利要求中定義的本發(fā)明的精神和范圍。在此,做出下面的結論意見。
應當理解本發(fā)明不局限于前述的MPEG4應用。它也可以被應用于任何使用可變長度編碼以及可支持所述解碼的成本的應用。典型地,這例如可被用于視頻、音頻或文本壓縮。
應當理解根據本發(fā)明的方法不局限于任何實施。
存在著許多方式來通過硬件項或軟件項或者軟硬項結合去實現(xiàn)根據本發(fā)明的方法的功能,只要單獨一個硬件項或軟件項能夠完成幾項功能的話。這不排除硬件項或軟件項或軟硬項結合的組件來實現(xiàn)一個功能。例如,所述樹形路徑擴展步驟4)可與選擇新的最佳樹形路徑BT_PTH的步驟5)相結合,這樣不需要修改根據本發(fā)明的源解碼方法就可以產生一個單獨的功能。
所述硬件項或軟件項能以幾個方式來實現(xiàn),例如通過有線電子電路或通過適當?shù)鼐幊痰募呻娐?。該集成電路可裝于一臺計算機或一個解碼器中。該解碼器包括適用于執(zhí)行所述擴展步驟4)的樹形路徑擴展裝置,以及適用于執(zhí)行所述選擇步驟5)的選擇裝置,如上所述,所述裝置是前述的硬件項或軟件項。
所述集成電路包括一組指令。這樣,所述包括在,例如,一個計算機程序存儲器或一個解碼器存儲器中的指令組可使該計算機或該解碼器完成所述VLC解碼方法的不同步驟。
這組指令可通過讀取一個數(shù)據載體,比如,舉例而言一張磁盤,而被加載到所述程序存儲器中。服務提供商也可以通過通信網絡,例如因特網,而使這組指令可得到。
在后面的權利要求中的任何標記都不構成對該權利要求的限制。顯而易見地,使用動詞“包括”和它的變化形式并不排除也存在有在任意權利要求中定義的那些之外的步驟或者元素的情況。在一個元素或步驟之前的冠詞“一個”或“一種”并不排除存在有多個這種元素或步驟的情況。
權利要求
1.一種對可變長度碼字序列(SQr)進行源解碼的方法,所述源解碼是基于一碼字表,其特征在于該方法包括以下步驟-創(chuàng)建一個與所述碼字表相關的樹,所述樹包括樹形路徑(T_PTH),一樹形路徑(T_PTH)包括多個分支(B),-解碼一個接收到的序列(SQr),所述步驟包括如下子步驟-從所述樹中的一個節(jié)點(N)擴展最佳樹形路徑(BT_PTH),所述擴展是通過計算來自所述節(jié)點(N)的后繼分支(B)的第一累積度量(CM_LPTH)來實現(xiàn)的,-選擇相應于該最佳樹形路徑(BT_PTH)的碼字(CWDi),并保存路徑(PTH)中的相應的數(shù)據,所述相應的數(shù)據包括一個第二累積度量(CM_STCK),-按照所述的已保存路徑(PTH)的第二累積度量(CM_STCK)對所述的已保存路徑重新排序,-對頂端路徑(TOP_PTH)測試先驗條件,并且如果該先驗條件被驗證,則輸出所述頂端路徑(TOP_PTH),否則就返回所述的擴展子步驟。
2.如權利要求1中的方法,其特征在于每個碼字(CWDi)具有一個長度(LTHi),并且該樹包括與定義在所述碼字表中的最大碼字長度(LTHi)相等的級數(shù)。
3.如權利要求1中的方法,其特征在于所述擴展子步驟包括一個停止度量計算條件測試,使得如果所述條件被驗證,則所述擴展被停止并后隨所述的對路徑重新排序的子步驟。
4.如權利要求3中的方法,其特征在于所述停止度量計算條件測試是基于所述最佳樹形路徑(BT_PTH)的所述第一累積度量(CM_LPTH)與所述的最差的已保存路徑的第二累積度量(CM_STCK)的比較。
5.如權利要求1中的方法,其特征在于,如果先驗條件是基于符號準則的,那么所述選擇子步驟適合于只選擇一個碼字(CWDi),該碼字具有的長度(LTHi)與在一個解碼步驟中所有之前被選擇的碼字長度不同。
6.如權利要求1中的方法,其中該解碼步驟還包括在測試所述先驗條件之前對該頂端路徑(TOP_PTH)測試結束條件的一個子步驟,使得如果所述頂端路徑(TOP_PTH)驗證了結束條件,就執(zhí)行測試所述先驗條件的子步驟,否則就執(zhí)行對停止解碼條件進行測試的一個子步驟,而如果所述停止解碼條件沒有被驗證,就發(fā)生對擴展步驟的返回。
7.如權利要求6中的方法,其特征在于該停止解碼條件是基于一個解碼步驟計數(shù)器(CPT)的增量,并且基于所述計數(shù)器(CPT)與一個設定的閾值(TH)的比較,使得如果所述計數(shù)器(CPT)超過所述閾值(TH)就停止該解碼。
8.如權利要求6中的方法,其特征在于在路徑(PTH)中的所述相應的數(shù)據還包括位的累積數(shù)目(CBITS),并且該結束條件是基于該頂端路徑的位累積數(shù)目(CBITS)與所述接收到的碼字序列(SQr)的長度(L_SQ)的比較。
9.如權利要求1中的方法,其特征在于該碼字表包括轉義模式碼字(ESC)。
10.一種用于解碼器的計算機程序產品,它包括一組指令,其中,當這些指令被加載到所述解碼器中時,所述指令使該解碼器執(zhí)行如權利要求1至9中要求的方法。
11.一種用于計算機的計算機程序產品,它包括一組指令,其中,當這些指令被加載到所述計算機中時,所述指令使該計算機執(zhí)行如權利要求1至9中要求的方法。
12.一種對可變長度碼字序列進行源解碼的解碼器,所述源解碼是基于一相關的碼字表,其特征在于所述解碼器包括-適合于創(chuàng)建一個與所述碼字表相關的樹的樹創(chuàng)建裝置,所述樹包括樹形路徑(T_PTH),一樹形路徑(T_PTH)包括多個分支(B),-適合于對一個接收的序列(SQr)進行解碼的序列解碼裝置,所述解碼裝置包括-適合于從該樹中的一個節(jié)點(N)擴展最佳樹形路徑(BT_PTH)的最佳樹形路徑擴展裝置,所述擴展是通過計算來自所述節(jié)點(N)的后繼分支(B)的第一累積度量(CM_LPTH)來實現(xiàn)的,-適合于選擇相應于該最佳樹形路徑(BT_PTH)的碼字(CWDi)并將保存路徑(PTH)中的相應的數(shù)據的碼字選擇裝置,其中該相應的數(shù)據包括一個第二累積度量(CM_STCK),-適合于按照所述的已保存路徑(PTH)的第二累積度量(CM_STCK)對所述已保存路徑重新排序的路徑重新排序裝置,以及-適合于對頂端路徑(TOP_PTH)測試先驗條件,并且如果所述先驗條件被驗證,就輸出所述頂端路徑(TOP_PTH)的先驗條件測試裝置。
全文摘要
本發(fā)明涉及一種對一個可變長度碼字序列進行源解碼的方法,所述解碼是基于一個相關的碼字表的。其特征在于該方法包括以下步驟a)創(chuàng)建具有樹形路徑(T_PTH)和分支(B)的一個樹,b)對一個接收的序列(SQr)進行解碼,所述步驟還包括以下子步驟1)通過計算后繼分支(B)的第一累積度量(CM_LPTH)來擴展該樹中的最佳樹形路徑(BT_PTH),2)選擇相應于該最佳樹形路徑(BT_PTH)的碼字(CWDi),并保存路徑(PTH)中的相應的數(shù)據,該相應的數(shù)據包括第二累積度量(CM_STCK),3)按照該已保存路徑的第二累積度量(CM_STCK)對該已保存路徑進行重新排序,4)對頂端路徑(TOP_PTH)測試先驗條件,并且如果該先驗條件被驗證,就輸出所述頂端路徑,否則返回所述擴展子步驟。
文檔編號H03M13/41GK1593013SQ02822413
公開日2005年3月9日 申請日期2002年11月13日 優(yōu)先權日2001年11月13日
發(fā)明者C·拉米, L·梅哈 申請人:皇家飛利浦電子股份有限公司