專利名稱:產生數據流的設備和方法和讀取數據流的設備和方法
技術領域:
本發明與用可變長度碼字進行編碼的技術有關,具體地說,本發明涉及產生和讀取對在傳輸中出現的差錯不敏感即魯棒(robust)的用可變長度碼字編碼的數據流。
背景技術:
現代的例如遵從MPEG層3標準的音頻編碼或解碼方法可以將音頻信號的數據率壓縮到例如1/12(即壓縮因子為12),而不會使音頻信號的質量有明顯的下降。為了實現這樣高的數據率的壓縮,通過對音頻信號采樣得到一個離散時間樣點序列。如在該技術領域所知的那樣,這個離散時間樣點序列經窗處理后,得到一系列經窗處理的時間樣點塊。一個在時間上加窗的樣點塊用濾波器組、變型離散余弦變換(MDCT)或其他適當的措施變換到頻域,得到一些頻譜值,這些頻譜值作為一個整體就是這個離散時間樣點塊確定的這段時間的音頻信號的頻域表示。通常,以50%的交疊產生時間塊,通過MDCT變換到頻域,由于MDCT的特性,例如1024個離散時間樣點總是產生1024個頻譜值。
眾所周知,人耳的感覺取決于音頻信號本身的瞬時頻譜。這個關系遵從所謂的心理聲學模型,用這個模型可以為一段時間計算出一些取決于瞬時頻譜的遮蔽門限。遮蔽意味著一個特定的音或頻譜分量在例如一個相鄰的頻譜范圍具有比較高的能量的情況下會受到掩蓋。為了盡可能盡可能精確地量化變換后得得出的頻譜值,可以利用遮蔽這個現實。目的是一方面避免再解碼得到的音頻信號內有聽得到的干擾,另一方面也可以在這種情況下用盡可能少的比特來編碼或量化音頻信號。所希望的是,量化引入的干擾,即量化噪聲,低于遮蔽門限,從而成為聽不見的。按照已知的方法,將這些頻譜值分成一些所謂的比例因子頻帶(scale factor band),這些頻帶應該相應于人耳的臨界頻帶,即頻率組。在一個比例因子組內的各個頻譜值乘以一個比例因子,執行對一個比例因子頻帶的各個頻譜值整體定標。然后對用比例因子定標的這些比例因子頻帶進行量化,產生量化的頻譜值。當然,分成比例因子頻帶并不是關鍵性的。然而,它用于MPEG層3標準或MPEG 2 AAC(高級音頻編碼)標準。
數據壓縮的一個非常重要的方面是對量化后的頻譜值進行熵編碼。熵編碼通常用霍夫曼(Huffman)編碼。霍夫曼編碼是一種可變長度編碼,也就是說,一個需編碼的值的碼字長度取決于這個值的出現概率。在邏輯上,霍夫曼編碼對最可幾的字符賦予最短的碼,即最短的碼字,從而可以實現很好的冗余度壓縮。一個普遍所知的用普通長度編碼的例子是莫爾斯(Morse)碼。
在音頻編碼領域,用霍夫曼碼對量化的頻譜值編碼。一種現代的例如按照MPEG 2 AAC標準工作的音頻編碼器用不同的霍夫曼碼表對這些量化的頻譜值編碼,這些霍夫曼碼表由一定的準則分配給頻譜各段。在這個過程中,2個或4個頻譜值總是一起編碼成一個碼字。
遵從MPEG 2 AAC的方法與遵從MPEG層3的方法之間的一個差別是將不同的比例因子頻帶,即不同的頻譜值,組合成任何個數的頻譜段。采用AAC,一個頻譜段包括至少四個頻譜值,最好是四個以上的頻譜值。因此,這些頻譜值的整個頻率范圍分割成一些相鄰的段,一段表示一個頻帶,而所有的段一起覆蓋了整個頻率范圍,它是變換后的這些頻譜值的疊加。
在MPEG層3方法中,從多個所謂的“霍夫曼表”中將一個可以實現最大的冗余度壓縮的表分配給一個段。在AAC方法的比特流中,通常包括1024個頻譜值,現在就是這些頻譜值按頻率遞升次序排列的霍夫曼碼字。有關在各頻率段中所用的表的信息在輔助信息中傳送。這種情況如圖6所示。
圖6示出了包括10個霍夫曼碼字的比特流的示范性情況。在一個碼字總是由一個頻譜值形成的情況下,這可以是對10個頻譜值編碼得到的結果。然而,通常總是將2個或4個頻譜值一起編碼成一個碼字,這樣圖6就示出了包括20個或40個頻譜值的編碼比特流的一部分。在各霍夫曼碼字包括2個頻譜值的情況下,標號為1的碼字表示開頭兩個頻譜值,碼字1的長度比較短,意味著開頭兩個頻譜值(即兩個頻率最小的系數)較為經常地出現這。然而,標號為2的碼字具有比較長的長度,這意味著在編碼音頻信號中的第三和第四個頻譜系數這樣的值較少出現,因此用比較多的比特編碼。此外,從圖6可見,表示頻譜系數5和6、7和8、9和10的編號為3、4、5的碼字也較為經常地出現,因為這些碼字的長度也比較短。對于編號為6至10的這些碼字同樣也可以作這樣的分析。
如已經提到的那樣,從圖6可以清楚地看到,在考慮比特流由已知的編碼設備產生的情況下,這些編碼頻譜值的霍夫曼碼字在這個比特流中按頻率線性遞增方式排列。
霍夫曼碼的一個主要缺點是在信道不理想的情況下會出現差錯傳播。例如,假設圖6中的碼字2受到了干擾。這很可能也改變了這個錯誤的碼字2的長度,因此使它與正確的長度不同。在圖6這個例子中,在碼字2由于受到干擾而長度改變的情況下,一個解碼器就不再能確定碼字3至10(幾乎表示整個音頻信號)的開始點。這意味著在受到干擾的碼字之后的所有其他碼字不再能正確地編碼,因為不知道這些碼字的開始點,而由于這個差錯選擇了不正確的開始點。
作為差錯傳播問題的一種解決方案,歐洲專利No.0 612 156建議將一部分可變長度的碼字排列在一個格柵(raster)內,而將其余的碼字分布在剩下的空隙內,因此不需要完全譯碼或者在傳輸有錯的情況下可以更為容易地發現排列在柵格點上的碼字的開始點。
確實,這種已知方法通過重排碼字對差錯傳播提供了某些改善措施。對于某些碼字,可以占用比特流中的一些固定位置,而剩余的空隙可用于剩下的碼字。這并不需要任何額外的比特,但是防止了在有差錯的情況下差錯在這些重排的碼字之間傳播。
在本申請提交日期后公布的德國專利申請19 747 119.6-31建議不是就將任何碼字置在柵格點上,而是將從心理聲學看來是重要的碼字,即對音頻信號有明顯影響的那些頻譜值的碼字,置于柵格點上。諸如由這樣的編碼器產生的可變長度碼字數據流示于圖5。如在圖6中那樣,該數據流也包括10個碼字,其中打上了陰影線的是優先碼字。第一優先碼字安排成在第一格柵點100處開始,第二優先碼字安排成在第二格柵點101處開始,第三優先碼字安排成在第三格柵點102處開始,第四優先碼字安排成在第四格柵點103處開始,而第五優先碼字安排成在第五格柵點104處開始。第一段105由柵格點100和101限定。類似,第二段106、第三段107、第四段108和最后段109也相應這樣限定。由圖5可見,前兩段105和106的長度與下兩段107和108的不同,還與最后段109的不同。然后,將非優先碼字6、7、8、9和10接在這些優先碼字之后填滿數據流。如圖5所示,在這種后發表的方法中,非優先碼字相繼插入已經寫有優先碼字的柵格。具體地說,非優先碼字6插在優先碼字1后。在這段105還剩下的空間內充以接著的非優先碼字7,而非優先碼字7的剩余部分,即7b,寫入下一空閑空間,即寫入段107內,緊接優先碼字3。對于非優先碼字8至10,也是這樣處理。
圖5所示的這種后發表的方法的優點是,優先碼字1至5得到保護,不受差錯傳播影響,因為它們的開始點與柵格點一致,因此是已知的。
例如,在優先碼字2在傳輸中受到損害的情況下,用圖6所示的現有技術很可能解碼器就不能對任何其余的碼字3至10正確解碼。然而,用圖5所示的方法,下一個碼字,即優先碼字3,在柵格點102處開始,因此解碼器無論如何都能發現碼字3的開始點。因此,用圖5所示的方法,無論怎樣也不會出現序列性差錯(sequence error),而只有優先碼字2會受到損害。因此,這種方法為處在柵格點的優先碼字提供了有效保護。
然而,對于非優先碼字來說,卻沒有得到有效保護。參照圖5,如果非優先碼字6受到損害,使得解碼器得出一個短一個比特的錯誤碼字6,這將導致不再能對碼字7正確解碼,因為正確的碼字6的最后一個比特將被解釋為下一個碼字7的開始點。因此,碼字6的差錯將很可能由于序列性差錯導致不再能對后面的任何碼字正確解碼,即使這些碼字并沒有受到傳輸差錯的有害影響。
發明概述本發明的目的是使可變長度碼字具有更好的差錯魯棒(error-robust)。
這個目的由按照權利要求1提出的產生數據流的設備、按照權利要求12提出的讀取數據流的設備、按照權利要求18提出的產生數據流的方法和按照權利要求19提出的讀取數據流的方法來實現。
本發明基于認識到在不只在一個寫方向而且還在另一個寫方向寫數據流時數據流對傳輸差錯,具體地說是對可變長度碼字的序列性差錯的魯棒性(robustness)可以有決定性的增強。在大多數情況下,一個數據流總是有一個開始點和一個結束點。在現有技術中,在最簡單的情況下,數據流是從開始點開始一直寫到結束。這樣就有可能在第一個碼字內的一個傳輸差錯會導致整個數據流不再能正確解碼,即使是所有其他碼字都是正確傳輸的。按照本發明,一個數據流可以寫成第一半從數據流的開始點開始寫,而第二半從數據流的結束點開始寫。即使從這個簡單的例子也可以看到,在數據流的第一半內的傳輸差錯不再會影響到數據流的第二半使其也由于序列性差錯而不能正確解碼。這是因為解碼器知道數據流的后一半必須從數據流的結束點開始,確切地說沿相反的讀方向,繼續讀取。因此,只是由于使寫方向/讀方向反向而實際上不用額外的代價就可以獲得一定的差錯魯棒性。
如已經提到的那樣,利用柵格點將可變長度碼字寫入數據流可以使解碼器解碼的序列性差錯受到限制,因為按規定,確定的碼字在柵格點開始。為了使差錯魯棒性最高,原則上希望使柵格盡可能窄,從而使解碼器可以發現盡可能多的碼字的正確開始點。但是,增多柵格點,即減小段長,如所知的那樣,將導致越來越少的具有可變長度的碼字可以完全裝入柵格內,從而需要采取一些措施將不能完全裝入柵格的那些碼字的末端部分寫入其他的柵格,以便在解碼時能正確檢測。這導致在增多柵格點、縮短段長時要增加額外的代價。
在現有技術中,碼字只沿單個寫方向從柵格點開始寫,如結合圖5和6所說明的那樣。按照本發明,碼字現在也沿相反的寫方向從柵格點開始寫,這使可以在柵格點開始寫的碼字數加倍,在最佳情況下基本上不需任何額外的代價。通過用一個裝置沿一個第一寫方向從一個基準點開始寫而用另一個裝置沿一個與第一寫方向相反的第二寫方向從另一個基準點開始寫來寫數據流,就不僅能利用一個基準點的“一側”而且能利用一個基準點的兩側來增強差錯魯棒性,即防止傳播差錯或序列性差錯的能力。根據實現的方式,例如可以每隔一個碼字沿相同的方向寫,而其余各碼字可以沿另一個方向寫。另一方面,可以將可變長度碼字例如按照它們的優先權劃分成一些不同的碼字組,使得例如第一組的所有碼字都沿第一寫方向從柵格點開始寫,而第二組的所有碼字都可以沿第二寫方向從柵格點開始寫。
此外,碼字的剩余部分可以沿與碼字的開始部分相同的寫方向或者相反的寫方向寫。顯然,必須采取一些措施使解碼器,即讀數據流的設備,可以始終完全知道在寫數據流時的寫方向。這可以明確設定,或者作為可變長度碼字數據流的輔助信息傳輸。對于段長也可以這樣,段長可以是相等的,或者在整個數據流上是可改變的,當前段長當然也可以在解碼器內明確設定,或者也可以作為輔助信息與可變長度碼字一起傳輸。
下面將結合附圖詳細說明本發明的優選實施例。在這些附圖中圖1示出了本發明的一種寫一個差錯魯棒的數據流的設備;圖2示出了本發明的一種讀一個差錯魯棒的數據流的設備;圖3示出了本發明的方法在三個可變長度碼字組情況下的程序圖;圖4示出了例示本發明的方法讀按照圖3產生的數據流的程序圖;圖5示出了一種已知設備產生的優先碼字遭受差錯傳播的數據流;圖6示出了一個執行了按優先碼字和非優先碼字排列的數據流。
實施例詳述在詳細說明圖1前,應指出的是,用可變長度碼字編碼在這個技術領域中也稱為熵編碼。熵編碼的一個典型例子是所謂的霍夫曼編碼。原則上,在霍夫曼編碼中,對需編碼的這些信息碼元進行統計檢驗后,確定對于經常出現的信息碼元用比不經常出現的信息碼元短的碼字。在完全的霍夫曼碼中,所有的碼字都終止于一個碼樹的端或分支。例如,一個霍夫曼解碼器串行讀入一個霍夫曼碼字的數據流,每讀入一個比特就跳轉至這個規定的碼樹的一個分支,直到若干次(與碼字的比特數即碼字長度相應)跳轉后,到達一個沒有任何分支的分支端,就得出一個碼字。于是,解碼器知道下一個比特就是一個新碼字的開始。這個過程按需要一直重復到數據流完全讀入。每當霍夫曼編碼器跳回開始點,即碼樹的根,在它的起始點就給出一個碼字。由于碼字的長度隱含地由碼字本身或者在編碼器和在解碼器內已知的碼樹規定,因此可以看到,會導致數據流內一個比特翻轉的干擾將誤導解碼器在碼樹中的跳轉,從而最后得到一個不同的即錯誤的碼字,這個錯誤碼字很可能具有與正確碼字不同的長度。在這種情況下,解碼器得出錯誤碼字后,將跳轉回來,按后面的比特重新在碼樹內從一個分支點移動到另一個分支點。然而,這個解碼器不可能避免序列性差錯,除非它偶然得出一個正確的“碼端”。
因此,為了保證差錯魯棒的傳輸,必須執行防錯,如本發明所作的那樣。實際上,按照本發明設計的產生可變長度碼字數據流的設備可以起著霍夫曼編碼器的發送或輸出級的作用,而讀取可變長度碼字數據流的設備可以起著霍夫曼解碼器的接收或輸入級的作用。由此可見,本發明不僅適用于霍夫曼編碼器,而且也適用于任何容易出現序列性差錯的有可變長度碼字的碼。
圖1示出了按照本發明設計的設備10,在可變長度碼字加到輸入端14上輸入設備10時,它在輸出端12上產生一個差錯魯棒的數據流。這種設備包括一個沿一個第一寫方向從一個第一基準點開始寫的第一裝置16和一個沿一個第二寫方向從一個第二基準點開始寫的第二裝置16。根據設備10的復雜性,可變長度碼字可以如圖1所示加到裝置16和18上,由一個簡單的分支點20和一個相應的合并點22寫。裝置16和18確定選擇哪些碼字沿哪個方向寫和/或碼字的哪些部分沿哪個方向寫。代替節點20,也可以用一個多路分用器將一些特定的碼字(例如一個碼字組中的碼字)提供給第一裝置16而將另一些特定的碼字提供給第二裝置18。同樣,合并點22可以用一個多路復用器實現,多路復用差錯魯棒的數據流12。也可以用其他受相應控制為裝置16和18提供可變長度碼字的器件,這對于熟悉該技術的人員來說在看本說明時是很清楚的。
圖2示出了讀差錯魯棒的數據流的設備30,設備30是一個與圖1所示的產生數據流的設備10互補的設備。設備30包括一個輸入端32,差錯魯棒的數據流在通過例如一個無線電鏈路傳輸后加到這個輸入端32上,以便在開始點34上重新得出已加到圖1中的設備10的輸入端14上的可變長度碼字。讀數據流的設備30包括一個沿第一方向從第一基準點開始讀的第一裝置36和一個沿第二方向從第二基準點開始讀的第二裝置38。
顯然,設備30也有一個分支點40和一個合并點42,根據例如一個明確設定的算法或者可以與差錯魯棒的數據流一起從發送方(即圖1的設備10)發送給接收方(即圖2的設備30)的輔助信息將差錯魯棒的數據流饋入裝置36和38。
圖3以一個例子為例示出了本發明的寫可變長度碼字的方法。在這個例子中,有15個可變長度碼字30,這些碼字分成有6個碼字1至6的第一組、也有6個碼字7至12的第二組和有剩下的3個碼字13至15的第三組。如圖3所示,碼字30具有可變長度。
按照本發明的一個優選實施例,段長(即段的長度)比第一組內最長的碼字的長度還長一些。第一組的碼字排列在柵格點41至46上,其中,對于最后段No.6,一個柵格點用虛線表示,這個柵格點并不使用,然而,由于數據流的終端47實際上也可以認為是一個柵格點,用虛線表示的這個柵格點因此是冗余的柵格點。第一段No.6因此比其他段都長,然而,這對于本發明來說是無關緊要的。一般說來,這些段可以具有任何長度,可以在數據流內改變,當然解碼器必須知道當前段的長度,從而可以利用本發明的優點。
首先,在步驟a)將第一組的碼字寫入數據流,產生一個由碎片組成的數據流31,第一組的碼字如圖3中符號化表示寫入方向的箭頭48所示從左至右寫入相應各段。由于段長度選擇成比第一組內最長的碼字還長,因此步驟a )只需要一次試寫。在這些段較短的情況下,可能因此需要多次試寫。
然后在步驟b)將第二組的碼字寫入數據流31。為了獲得高的差錯魯棒性(error robustness),第二組的碼字不是像第一組的碼字那樣從左至右而是從右到左分別從第二柵格點開始(例如對于第一段從柵格點42開始)寫,如相應的寫方向箭頭所示。寫第二組的碼字按照預定指配規則進行,在所選的這個例子中,第二組的第一個碼字寫入與第一組的第一個碼字相同的段,然而始終要在這段還有空間的情況下才行。由第一次試寫產生的數據流32表明在第一段內只有可以寫入碼字7的開始部分那么多的空間。
與將碼字7的第二部分寫入第二段的現有技術相反,將碼字7的第二半(即7b)存儲起來,在第二次試寫中按照解碼器也必須知道的預定條例寫入數據流。圖3清楚地示出了在第二段內碼字2與8之間還有足夠的空間可以讓碼字No.7的最后部分插入。在沒有足夠的空間的情況下,這個碼字的第三部分可以插入段3。因此,在圖3中,將碼字7插入數據流的預定條例是在每個情況下用一個段繼續進行。當然,也可以用兩個段或三個段或者更多段繼續進行,使得在下一次試寫中第二部分7b可以寫入不是第二段而是第三段、第五段等。用來容納碼字7的第二部分的各段的次序可以任意。然而,這必須對解碼器是透明的,使得這個重排的數據流可以重讀取。
然后,將第三組的碼字13至15插入所得到的仍由碎片組成的數據流33。與步驟b)類似,最好用相同的指配規則進行,使得第三組的第一個碼字分配給第一段、第三組的第二個碼字分配給第二段、第三組的第三個碼字分配給第三段等等。這個指配規則對于第三組完全是任意的,也可以與第二組的指配規則不同,按照本發明將一個組的各個碼字分配給不同的段。類似,各個組的寫的方向也可以任意選擇。最好采用交替的寫方向次序。然而,也可以將兩個相鄰的組用相同的寫方向寫入。原則上,在一個組內寫方向也可以改變。
在步驟c)中,第一次試寫只是將碼字15的第一部分插入,產生一個由碎片組成的數據流34。碼字13、14和碼字15的第二部分15b存儲起來,在第二、第三、第四、第五和第六次試寫中插入,其中在第二次試寫中碼字15的第二部分15b可以插入第四段(產生數據流35),在第三次試寫中第四段不再能容納什么,于是在第四次試寫中將碼字14的開始部分插入(產生數據流36),碼字14的最后部分14b可以在第五次試寫中插入(產生數據流37),而最后在第六次也就是最后一次試寫中可以將第三組的第一個碼字插入第六段,從而產生在這里所示的例子的差錯魯棒數據流38。圖3所示的方法保證了這種差錯魯棒數據流的長度完全與這些可變長度碼字的長度相應,對于數據壓縮的熵解碼是自明的。然而,本發明并不局限于具有最小長度的差錯魯棒數據流,因為差錯魯棒性不受可能出現的填充比特的影響。
從圖3所示的魯棒數據流可見,碼字8的開始點即柵格點43完全與碼字7的結束點無關。而且,碼字9的開始點即柵格點44完全與碼字8的結束點無關。此外,應指出的是,由于反向寫入的規則,例如第一段內碼字1的導致錯誤的碼字比正確的碼字1短一個比特的數據差錯不會破壞碼字7a的開始部分,因為后者是從右到左而不是從左至右寫入的。在從左至右寫入的情況下,解碼器會取最初正確的碼字1剩下的這個比特作為碼字7的開始比特,這將產生一個從1至7的序列性差錯。然而,這個序列性差錯不會傳播至8,因為碼字8完全地完全與碼字7無關,選擇成從右到左寫入。在碼字8的寫入次序等于第一組的碼字的寫入次序的情況下,這個差錯也不會從7傳播到8,因為碼字8按指配規則在第二部分7b前寫入,與碼字2鄰接,因此不受錯誤部分7b的影響。
圖4通過一個適當的例子示出讀取差錯魯棒數據流38的設備的操作。首先,在步驟a)從差錯魯棒數據流提取第一組的碼字。為此,本發明的可以與一個霍夫曼解碼器連接的設備從第一柵格點41開始讀取第一組的碼字1、從第二柵格點42開始讀取第一組的碼字2等等,直到讀取了第一組內的所有碼字1至6。顯然,讀取數據流的設備選擇與產生數據流的設備所用的相同的方向。
接著,在步驟b)從剩下的數據流50提取第二組的碼字。于是,解碼器跳至第一段的第二柵格點42,得出第二組的碼字7的開始部分7a(第一段現在已讀空),但是它不是就讀第二部分7b,而是將第一部分7a先存儲起來,再從第二段的第二柵格點開始讀取第二組的第二個碼字,等等。結果得到一個剩余的數據流51,其中第一段已經完全出空。由于解碼器并不馬上就連續讀取碼字7,而是始終根據產生數據流的設備所用的指配規則逐段讀取,因此保證了已經說明的差錯魯棒性,大大減少了序列性差錯的傳播。
在第二次試提取第二組的碼字中,按照現有的寫入方向在第二段內讀取碼字7的第二部分7b,得到只剩下第三組的碼字的數據流52,而第二段已出空。在步驟c)提取第三組的碼字,首先在第一次試讀中確定碼字15的開始部分,然而不將它存儲起來,因為發現在第三段內碼字15沒有結束。于是,第三段出空。在第二次試讀中,可以發現碼字15讀完。然而,從數據流54可見,在段3內搜索碼字14和在段4內搜索碼字15都沒有成功。于是,在第四次試讀中,在第五段內搜索到碼字14。然而,碼字14沒有結束,因此將開始部分14a存儲起來,在第五次試讀中檢驗剩余的數據流55,完全讀取,在最后的第六次試讀中,數據流56現在只有第六段和只有碼字13。
雖然在前面的例子中只是用將碼字分成一個開始部分和一個最后部分作為例子來說明,但是原則上可以用任何類型的劃分。只要解碼器知道第二組或第三組和其它組的碼字分別指配給不同的段的情況,就可以保證差錯魯棒解碼。而且,將碼字的最后部分安排入數據流顯然可以是任意的,只要解碼器或解碼器上游寫入電路確切知道編碼器執行的預定條例。
為了再次強調本發明的優點和/或工作情況,再對圖3中的差錯魯棒數據流38進行一些說明。在考慮柵格點41和42之間的第一段時,可以看到碼字1從左至右從第一柵格點41開始寫入,如由圖下箭頭清楚示出的那樣。然而,碼字7的第一部分7a從右到左從第二柵格點42開始寫入。如果兩個碼字1和7或7a都只是從左至右寫入數據流,碼字7的開始點或碼字7的開始部分7a的開始點就取決于碼字1的結束點。因此,在碼字1內的傳輸差錯幾乎不可避免地在碼字7內引起序列性差錯。然而,如果按照本發明,將碼字7沿相反的寫方向從第二柵格點42開始寫入,碼字7的開始點或碼字7的開始部分7a的開始點就不再取決于碼字1,而由格柵或柵格點42確定。解碼器將始終知道這個開始點,這就是碼字1內的差錯不會在碼字7內引起差錯的原因。從圖3中的差錯魯棒數據流38可以看到,碼字7的第一部分7a和第二部分7b都在相同的寫方向寫入。然而,這并非強制性的。當然,碼字7的第二部分7b也可以從左至右在第二碼字2的結束點開始寫入。
如果柵格點選擇成使這些段長度比第一組內的最長碼字還長,例如從圖3的數據流31可以看到,就沒有一個段會被第一組的碼字完全填滿。在這種情況下,可以使在柵格點開始寫的碼字的數目實際上加倍,而不需要提供任何一個額外的柵格點。
權利要求
1.一種產生一個包括兩個基準點(41-47)的可變長度碼字數據流(38)的設備(10),所述設備包括一個將一個碼字的至少一部分沿一個第一寫方向從一個第一基準點開始寫入所述數據流的第一裝置(16);一個將一個碼字的至少一部分在一個與所述第一寫方向相反的第二方向從另一個基準點開始寫入所述數據流的第二裝置(18)。
2.如權利要求1所述的設備,其中所述數據流的兩個基準點分別為所述數據流的開始點(41)和結束點(47)。
3.如權利要求1所述的設備,其中所述第一寫裝置(16)配置成寫一個碼字的一個開始部分,而所述第二寫裝置(18)配置成寫同一個碼字的剩余部分的至少一部分。
4.如權利要求1所述的設備,其中所述數據流包括許多作為基準點的柵格點(41-46),這些柵格點規定了一個格柵,而兩個相鄰的柵格點限定了一個段,所述第一寫裝置(16)配置成在一個段的第一柵格點開始寫入一個第一碼字,而所述第二寫裝置(18)配置成在這個段的第二基準點開始寫入一個第二碼字。
5.如權利要求1所述的設備,其中所述數據流包括許多作為基準點的柵格點,這些柵格點規定了一個格柵,而兩個相鄰的柵格點限定了一個段,所述第一寫裝置(16)配置成在第一段的第一柵格點寫一個第一碼字的一個開始部分和在下一段的第一柵格點寫一個第二碼字的一個開始部分,而所述第二寫裝置(18)配置成分別從第二段的第二基準點開始寫第一碼字的其余部分和從再下一段的第二基準點開始寫第二碼字的其余部分。
6.如任何以上權利要求中所述的設備,其中所述這些碼字分成多個碼字組,所述第一寫裝置(16)配置成將第一組的每個碼字從一個段的第一基準點開始寫入數據流,而第二寫裝置(18)配置成將第二組的每個碼字從一個相應的段的第二基準點開始寫入數據流。
7.如權利要求6所述的設備,其中所述第二寫裝置(18)配置成從所述第一寫裝置(16)已經寫入的段的第二基準點開始寫,如果第二組的相應碼字比這段內的未占用的空間還長,就將第二組的這個碼字的適合未占用的空間的這部分寫入這段,而將其余部分存儲起來。
8.如權利要求6或7所述的設備,其中所述第二寫裝置(18)配置成只在第一組的所有碼字都已經寫入數據流后激活。
9.如權利要求8所述的設備,其中所述第二寫裝置(18)配置成將碼字的剩余部分在作為一個基準點的第二組的一個碼字的結束點后寫入數據流。
10.如權利要求6至9中任何一項所述的設備,其中所述第二組的碼字按照一個預定的指配規則分配給各段,使得第二組的每個碼字分配給一個不同的段,而所述第二寫裝置(18)配置成如果第二組的一個碼字不能完全寫入所分配的段就在它用第二組的其他碼字處理了所有剩余的段后再將剩余部分寫入另一個沒有被完全占用的段。
11.如權利要求4至10中任何一項所述的設備,其中所述碼字分成至少三個組,所述第一寫裝置(16)配置成從各段的第一柵格點開始寫第一組的碼字,所述第二寫裝置(18)配置成從各段的另一個柵格點開始寫第二組的碼字,所述第一或第二寫裝置(16,18)還配置成分別從第一和第二組的碼字的結束點開始寫第三組。
12.一種讀取一個包括兩個基準點的數據流(32)的設備(30),一個碼字的至少一部分沿一個第一或第二寫方向從這兩個基準點開始寫入數據流,所述設備包括一個在一個與第一寫方向相應的第一讀方向從第一基準點開始進行讀取的第一裝置(36);以及一個在一個與第一讀方向相反的第二讀方向從第二基準點開始進行讀取的第二裝置(38)。
13.如權利要求12所述的設備,其中所述數據流包括許多作為基準點的柵格點,這些柵格點規定了一個格柵,兩個相鄰的柵格點限定了一個段,所述數據流包括多個碼字組,第一碼字組沿第一方向寫入而第二碼字組沿第二方向寫入,第二組的碼字按照一個預定的指配規則分配給數據流的各段,使得一個組的每個碼字分配給一個不同的段,所述設備還包括一個控制裝置(40),用來將在柵格點開始的第一組的碼字提供給第一讀裝置(36)和將第二組的碼字提供給第二讀裝置(38),其中,按照預定的指配規則跳至相應的柵格點,如果在一個基準點發現沒有碼字,就按照指配規則驗證第二組的碼字是否出現在相應的柵格點,在讀取了第二組的所有碼字后,按照預定規則跳至一個不同的柵格點,以便完全得出第二組的所有碼字。
14.如權利要求13所述的設備,其中一個讀裝置如果在一個段內讀取的只是一個碼字的開始部分,就將這個開始部分存儲起來。
15.如任何以上權利要求所述的設備,其中所述碼字為霍夫曼碼字。
16.如任何以上權利要求所述的設備,其中所述碼字表示信息碼元,而所述第一組的碼字表示比第二組或其它組的碼字重要的信息碼元。
17.如權利要求16所述的設備,其中所述信息碼元為一個音頻信號的頻譜值,而所述第一組的碼字為從心理聲學觀點看來是重要的那些頻譜值,需要予以保護,以免受到數據流傳輸差錯引起的差錯傳播的影響。
18.一種產生一個包括兩個基準點(41)至(47)的可變長度碼字數據流(38)的方法(10),所述方法包括下列步驟將一個碼字的至少一部分沿一個第一寫方向從一個第一基準點開始寫入數據流;將一個碼字的至少一部分沿一個與所述第一寫方向相反的第二寫方向從另一個基準點開始寫入數據流。
19.一種讀取一個包括兩個基準點的數據流(32)的方法(30),一個碼字的至少一部分分別沿一個第一和第二寫方向從這兩個基準點開始寫入數據流,所述方法包括下列步驟沿一個與第一寫方向相應的第一讀方向從所述第一基準點開始進行讀取;以及沿一個與第一讀方向相反的第二讀方向從第二基準點開始進行讀取。
全文摘要
熵編碼器包括一個產生包括兩個基準點的可變長度碼字數據流的設備(10),這個設備包括一個將一個碼字的至少一部分沿一個第一寫方向從一個第一基準點開始寫入數據流的第一裝置(16)和一個將一個碼字的至少一部分沿一個與第一寫方向相反的第二寫方向從另一個基準點開始寫入數據流的第二裝置(18)。具體地說,在用一個具有多個段的格柵將可變長度碼字寫入數據流時,在最佳情況下,可以在柵格點開始寫入的碼字的數目可以加倍,從而使可變長度碼字數據流對于序列性差錯的傳播是魯棒的。
文檔編號H03M7/40GK1343390SQ00804929
公開日2002年4月3日 申請日期2000年1月17日 優先權日1999年2月23日
發明者拉爾夫·斯皮爾施內德, 馬丁·迪茨, 丹尼爾·霍姆, 雷恩霍爾德·貝姆 申請人:弗蘭霍菲爾運輸應用研究公司