專利名稱:整數(shù)數(shù)據(jù)的無損自適應(yīng)編碼與解碼的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及數(shù)字?jǐn)?shù)據(jù)的處理,尤其是使用新穎的后向自適應(yīng)技術(shù)進(jìn)行整數(shù)數(shù)據(jù)的無損編碼與解碼的改進(jìn)方法和系統(tǒng)。
背景技術(shù):
隨著計(jì)算機(jī)數(shù)據(jù)(諸如文本、音頻、視頻、圖像和程序文件)的大小持續(xù)增長,數(shù)據(jù)壓縮正變得越來越重要。數(shù)據(jù)壓縮是一種將數(shù)字?jǐn)?shù)據(jù)編碼為比原始數(shù)據(jù)使用更少比特的經(jīng)編碼表示的方法。以較少比特表示數(shù)據(jù)意味著數(shù)據(jù)占據(jù)較少的存儲(chǔ)空間并需要較小的傳輸帶寬。
通常,數(shù)據(jù)壓縮通過預(yù)測最常出現(xiàn)的數(shù)據(jù)并將之以較少的空間存儲(chǔ)來壓縮數(shù)據(jù)。具體地,數(shù)據(jù)壓縮涉及至少兩個(gè)不同的任務(wù)(1)定義一數(shù)據(jù)模型來預(yù)測輸入數(shù)據(jù)的概率;以及(2)用編碼器從這些概率生成代碼。此外,某些數(shù)據(jù)壓縮技術(shù)在數(shù)學(xué)上變換并量化數(shù)據(jù)以達(dá)到甚至更大的壓縮。
壓縮技術(shù)可以是無損或有損的。無損壓縮技術(shù)是可逆的,從而編碼前的原始數(shù)據(jù)和解碼后的解壓縮數(shù)據(jù)的每一比特都是相同的。有損壓縮利用了數(shù)據(jù)中有很多可以扔掉的重復(fù)而在質(zhì)量上有更多損失這一事實(shí)。有損壓縮接受某些原始數(shù)據(jù)的損失以便得到更高的壓縮。
無損壓縮一般用于壓縮文本或二進(jìn)制數(shù)據(jù),而有損壓縮一般用于音頻、圖像和視頻數(shù)據(jù)。然而,即使有損壓縮技術(shù)有時(shí)也使用無損壓縮技術(shù)。例如,兩種常用的壓縮(或編碼)技術(shù)是變換編碼和預(yù)測編碼。對(duì)于這些種類的壓縮系統(tǒng),原始數(shù)據(jù)經(jīng)變換并隨后被量化(舍入到最近的整數(shù)),或者根據(jù)(固定或自適應(yīng)的)信號(hào)模型進(jìn)行預(yù)測,且預(yù)測誤差(原始和預(yù)測的數(shù)據(jù)之間的差異)隨后被量化。在這兩種情況下,經(jīng)量化的數(shù)據(jù)是整數(shù)形式的。一旦獲得這些整數(shù),就要用無損壓縮技術(shù)來編碼經(jīng)量化的值,以減少表示該數(shù)據(jù)所需要的比特?cái)?shù)。
這些整數(shù)值集合通常有相關(guān)聯(lián)的概率分布函數(shù)(PDF)。這些PDF具有這樣的分布當(dāng)在預(yù)測編碼中數(shù)據(jù)性質(zhì)由預(yù)測者很好地模型化時(shí),預(yù)測誤差應(yīng)在大多數(shù)時(shí)間接近于零。類似地,在變換編碼中,大多數(shù)量化變換系數(shù)為零。圖1示出對(duì)于這些整數(shù)值的典型概率分布;零是最可能的值,而非零值的概率隨數(shù)量增加呈接近指數(shù)級(jí)下降。數(shù)據(jù)具有圖1所示的概率分布,因?yàn)槭褂脽o損壓縮編碼的數(shù)據(jù)不是原始數(shù)據(jù)。圖1是通過量化變換系數(shù)或預(yù)測誤差所得的整數(shù)數(shù)據(jù)。
從數(shù)學(xué)上講,問題是要找出編碼包含N個(gè)整數(shù)的向量x的有效解決方案。每個(gè)元素x(n),n=0,1,...,N-1,有一個(gè)按照類似于圖1的概率分布的值,因而最可能值為零,而距零更遠(yuǎn)的值具有快速減少的概率。
像圖1中這樣的概率分布的簡單數(shù)學(xué)模型是拉普拉斯(Laplacian)分布,或者雙邊幾何(TSG)分布,由參數(shù)θ特征化P(x,θ)=1-θ1+θθ|x|---(1)]]>注意,參數(shù)θ控制當(dāng)|x|增長時(shí)概率的衰減速率。θ值越大,衰減越快。參數(shù)θ可直接相關(guān)于概率,當(dāng)x=0時(shí),即P(0,θ)=(1-θ)/(1+θ)。同樣,源碼元的期望絕對(duì)值是E[|x|]=2θ1-θ2---(2)]]>源的熵按比特/碼元給出,如下式H(x)=log2(1+θ1-θ)-2θ1-θ2log2(θ)---(3)]]>因此,一個(gè)好的編碼器應(yīng)將x的N個(gè)值的向量映射到包含不多于N·H(x)個(gè)比特(理論最小值)的比特流。
拉普拉斯分布是媒體壓縮系統(tǒng)中的常用模型,用于預(yù)測編碼器(如大多數(shù)無損音頻和圖像編碼器)中的預(yù)測誤差,或者用于量化變換系數(shù)(如大多數(shù)有損音頻、圖像和視頻編碼器)。
對(duì)于具有拉普拉斯/TSG分布的源有多種建議的編碼器。一個(gè)簡單而有效的編碼器是Golomb/Rice編碼器。首先,通過以下簡單的可逆映射將TSG源值x映射到非負(fù)值uu=Q(x)=2x,x≥0-2x-1,x<0---(4)]]>即,等效于將u視作重新排序的字母表的索引{0,-1,+1,-2,+2,...}。新源u具有接近幾何源的概率分布,對(duì)它而言Golomb碼是最優(yōu)的,因?yàn)樗鼈兪菐缀卧吹腍uffman碼,只要適當(dāng)?shù)剡x擇Golomb參數(shù)。
Golomb/Rice(G/R)碼的一個(gè)示例示于表1,示出參數(shù)m的幾個(gè)值。應(yīng)該注意,當(dāng)m等于二的冪時(shí),使用了參數(shù)k,它通過m=2k與m相關(guān)。G/R碼優(yōu)于Huffman碼的主要優(yōu)點(diǎn)在于對(duì)于任意輸入值,二進(jìn)制碼字可通過簡單的規(guī)則來計(jì)算。因此,不需要存儲(chǔ)表。這對(duì)現(xiàn)代處理器特別有用,對(duì)它們而言,從存儲(chǔ)表?xiàng)l目的存儲(chǔ)位置讀取可能比執(zhí)行若干指令花更長時(shí)間。易于明白,參數(shù)m確定多少連續(xù)的碼字具有相同的比特?cái)?shù)。這也表明計(jì)算碼字涉及計(jì)算u/m。其中u是輸入值。對(duì)于大多數(shù)處理器,整數(shù)除法采用多次循環(huán),因而G/R碼對(duì)于一般的m并沒有吸引力。當(dāng)選擇了對(duì)應(yīng)于Rice碼的m=2k,則除法u/m可用位移來代替,因?yàn)閡/m=u>>k(其中>>表示右移運(yùn)算符)。從而,對(duì)于任意輸入u計(jì)算G/R碼是容易的;只需計(jì)算p=u>>k和v=u-(p<<k)。隨后通過將具有p個(gè)1的串與v的k位二進(jìn)制表示串接來形成代碼。
表1從表1中顯而易見,G/R參數(shù)k的選擇必須依賴于源的統(tǒng)計(jì)量。當(dāng)u增加時(shí),概率衰減得越慢,因此應(yīng)選擇更大的k。否則,碼字長度增長過太。選擇k的簡單規(guī)則是對(duì)于給定輸入值u的碼字長度應(yīng)接近于該值出現(xiàn)概率以2為底的對(duì)數(shù)。
盡管G/R碼對(duì)于幾何分布源是最優(yōu)的,但對(duì)于經(jīng)由公式4的映射從拉普拉斯/TSG源編碼碼元并非最優(yōu)。這是因?yàn)閷?duì)于具有TSG分布的輸入變量x,從公式4得到的變量u具有接近但不完全是幾何的概率分布。實(shí)際上,性能足夠接近于最優(yōu)(例如,一般具有比熵少5%的速率),因此G/R碼相當(dāng)流行。TSG源的最優(yōu)碼包括一組四個(gè)代碼變量,在大多數(shù)情況下,實(shí)現(xiàn)它們且按5%或更少來改進(jìn)壓縮更為復(fù)雜。因此,在大多數(shù)情況下,G/R編碼器在性能和簡便之間提供最佳折衷。
在圖1中,概率分布由單個(gè)參數(shù)表示,即指數(shù)衰減速率。衰減速率越快,則更可能是零值。這意味著在許多情況下零是很可能的,使得幾個(gè)零連串變得非常可能。換言之,如果概率分布衰減速率足夠快,則編碼連串是個(gè)好方法。編碼零連串意味著僅有幾個(gè)比特用于處理輸入數(shù)據(jù)中的許多項(xiàng)。
對(duì)連串?dāng)?shù)據(jù)編碼是使用游程編碼來有效地執(zhí)行的。游程編碼是數(shù)據(jù)壓縮的簡單形式,其中連續(xù)重復(fù)的相同值序列(或“連串”)被存儲(chǔ)為單個(gè)數(shù)據(jù)值和連串的長度,而不是原始連串。
例如,如果數(shù)據(jù)與預(yù)測編碼中預(yù)測器所使用的模型相匹配,則預(yù)測誤差更可能為零。但即使有了好模型,偶爾有個(gè)大值也是可能的。這會(huì)在到達(dá)邊界時(shí)發(fā)生,諸如像素值從背景值到前景值。不時(shí)地會(huì)出現(xiàn)大數(shù)字。當(dāng)這種現(xiàn)象發(fā)生時(shí),比游程編碼更有用的一種類型的編碼技術(shù)被稱為“游程Golomb/Rice(RLGR)”編碼技術(shù)。一種這樣的RLFT編碼技術(shù)在美國專利第6,771,828號(hào),Malvar的題為“System andMethod for Progressively Transform Coding Digital Data(用于漸進(jìn)變換編碼數(shù)字?jǐn)?shù)據(jù)的系統(tǒng)和方法)”和美國專利第6,477,280號(hào),Malvar的題為“Lossless AdaptiveEncoding of Finite Alphabet Data(有限字母數(shù)據(jù)的無損自適應(yīng)編碼)”中公開。
事實(shí)上,隨著數(shù)據(jù)源變化,概率將不保持常量而隨時(shí)間變化。這對(duì)于例如圖像和音頻都是真實(shí)的。通常,這些輸入數(shù)據(jù)中的概率變化可用大量不同的方法來處理。在JPEG中,例如,有一熵編碼器(Huffman編碼器),其中不同長度的碼字用于要編碼的不同值。Huffman表通常是預(yù)先設(shè)計(jì)的,即,通常是獲得大量圖像、測試它們的概率、并構(gòu)造用于所有圖像的平均模型。這種方法的一個(gè)問題是對(duì)于圖像的每個(gè)部分,編碼效率上都有損耗,因?yàn)殪鼐幋a器使用的概率模型平均上很好,但對(duì)圖像的某個(gè)部分不夠好。
從表1可看出,Golomb/Rice碼有兩個(gè)主要問題(1)概率衰減參數(shù)θ,或者等價(jià)的概率P(x=0)必須已知,因此k的近似值才能確定;以及(2)如果衰減參數(shù)太小,則熵H(x)比1小,且因而Golomb/Rice碼不是最理想的,因?yàn)槠淦骄a字長度不能小于1比特/碼元。
實(shí)際上,第一個(gè)問題(最優(yōu)Golomb/Rice參數(shù)的估算)通常是通過將輸入向量劃分成預(yù)定長度的塊來解決的。對(duì)于每個(gè)塊,編碼器兩次通過數(shù)據(jù)。第一次通過時(shí),計(jì)算輸入值的平均量。為此,參數(shù)θ可從公式2估算,且可確定相應(yīng)的最優(yōu)k。在第二次通過時(shí),編碼器通過首先輸出二進(jìn)制形式的k的值,隨后是塊內(nèi)數(shù)據(jù)值的Golomb/Rice碼的串接串,來生成該塊的比特流。這是實(shí)際上所有使用Golomb/Rice碼的無損壓縮系統(tǒng)中都使用的方法,諸如用于無損圖像壓縮的JPEG-LS、用于無損音頻壓縮的SHORTEN及其它等。這被稱為“按塊自適應(yīng)”或者“前向自適應(yīng)”模型。前向自適應(yīng)模型在以下意義上上是前向的編碼器在編碼前先考察數(shù)據(jù)、測量統(tǒng)計(jì)參數(shù)(通常是平均量)、隨后基于該參數(shù)編碼并將用于編碼數(shù)據(jù)的參數(shù)值放入首部,以便由解碼器使用。數(shù)據(jù)被拆成小部分,即塊,而不是試圖同時(shí)編碼所有數(shù)據(jù)。對(duì)于每個(gè)塊,測量該塊的統(tǒng)計(jì)量,對(duì)于與緩沖區(qū)的內(nèi)容相匹配的數(shù)據(jù)部分測量統(tǒng)計(jì)參數(shù),且將熵編碼器調(diào)整到該參數(shù)。在編碼文件中,插入首部,指示用于編碼該數(shù)據(jù)塊的參數(shù)值。
實(shí)踐中的第二個(gè)問題,即,具有非常低的熵的編碼源,通常是使用按塊自適應(yīng)或前向自適應(yīng)模型來解決的,且如果塊中輸入碼元的平均量的值小到足以使估算的熵H(x)小于1,則編碼器使用游程編碼而非Golomb/Rice編碼。
盡管這些方法在實(shí)踐中用得很好,但有兩個(gè)主要缺點(diǎn)。一個(gè)缺點(diǎn)是編碼器需要兩次讀取每個(gè)輸入塊,這樣在數(shù)據(jù)上執(zhí)行兩次通過第一次計(jì)算平均量以確定Golomb/Rice參數(shù),而第二次執(zhí)行真正的編碼。這要求編碼器執(zhí)行附加的工作并增加了復(fù)雜性。在某些應(yīng)用中,編碼時(shí)間不是問題,但對(duì)于例如數(shù)碼相機(jī)而言,它會(huì)減慢編碼過程或增加隨機(jī)存取存儲(chǔ)器的開銷。具體而言,前向自適應(yīng)模型必須先考察數(shù)據(jù)并測量統(tǒng)計(jì)量,找出模型參數(shù),然后編碼。如果編碼器在具有大量處理能力的個(gè)人計(jì)算機(jī)上運(yùn)行,則這不是個(gè)問題。然而,如果用手機(jī)拍照,照片要由手機(jī)自己編碼,而其處理能力相當(dāng)有限。
第二個(gè)但最重要的缺點(diǎn)涉及選擇塊尺寸的難度。如果塊尺寸太大,則統(tǒng)計(jì)量在塊內(nèi)會(huì)劇烈變化。另一方面,如果塊尺寸太小,則必須告知解碼器哪個(gè)參數(shù)用于編碼該數(shù)據(jù)塊的額外開銷變得難以承擔(dān)。對(duì)于每個(gè)塊,編碼器必須存儲(chǔ)正用于編碼該塊的參數(shù)值。從某種觀點(diǎn)看,編碼小塊所需要的額外開銷對(duì)于所得到的壓縮是不值得的。這就造成了權(quán)衡。一方面,如果用了小塊,則塊的統(tǒng)計(jì)量可匹配,但測量統(tǒng)計(jì)量是困難的,因?yàn)橹挥袔讉€(gè)數(shù),且編碼的額外開銷是巨大的。另一方面,如果使用大塊,則問題是統(tǒng)計(jì)量在塊內(nèi)變動(dòng)巨大。實(shí)際上,很難找到這兩個(gè)矛盾因素之間的折衷,因此塊尺寸通常被選擇在128和1,048個(gè)樣值之間,取決于要編碼的數(shù)據(jù)類型。
一種解決方案是在編碼器中使用后向自適應(yīng)技術(shù)。采用后向自適應(yīng),編碼始于解碼器和編碼器對(duì)每個(gè)塊達(dá)成初始狀態(tài)的一致。換言之,每個(gè)參數(shù)被初始化為預(yù)定值,隨后編碼開始。每次當(dāng)編碼器產(chǎn)生一輸出碼元,該碼元即可立即被發(fā)送至解碼器,因?yàn)榻獯a器知道用于編碼它的參數(shù)值。在編碼器輸出碼元后,它就按照預(yù)定的自適應(yīng)規(guī)則計(jì)算用于編碼參數(shù)的新值,這取決于所輸出的碼元。解碼器知道該參數(shù)自適應(yīng)規(guī)則,因此它也可計(jì)算用于編碼參數(shù)的新值。因而,編碼參數(shù)可在每個(gè)編碼的碼元后調(diào)整,且編碼器和解碼器始終是同步的,即,解碼器追蹤編碼參數(shù)中的變化。這意味著編碼器不需要向解碼器發(fā)送有關(guān)什么參數(shù)用于編碼該數(shù)據(jù)方面的任何額外開銷信息。
因此,所需要的是一種無損壓縮編碼器和方法,它通過在用于編碼零連串的游程編碼和用于編碼零連串后面的數(shù)字的Golomb/Rice編碼之間切換來提供整數(shù)數(shù)據(jù)的有效壓縮。還有,所需要的是一種能夠處理和編碼可能出現(xiàn)在零連串后的任意輸入整數(shù)數(shù)字的自適應(yīng)編碼器和方法。此外,還需要的是一種自適應(yīng)編碼器和方法,它通過后向自適應(yīng)技術(shù)避免前向自適應(yīng)的前述問題,以提供對(duì)輸入數(shù)據(jù)的快速追蹤和有效壓縮。
發(fā)明內(nèi)容
這里所公開的本發(fā)明包括自適應(yīng)游程Golomb/Rice(RLGR)編碼器和解碼器(編解碼器),以及用于整數(shù)數(shù)據(jù)的無損編碼方法。自適應(yīng)RLGR編解碼器和方法使用后向自適應(yīng)來提供對(duì)輸入數(shù)據(jù)中變化的統(tǒng)計(jì)量的快速追蹤。使用后向自適應(yīng),自適應(yīng)RLGR編解碼器和方法快速獲知輸入數(shù)據(jù)中的統(tǒng)計(jì)量的任何變化。此外,自適應(yīng)RLGR編解碼器和方法能夠編碼任何輸入整數(shù)值。自適應(yīng)RLGR編解碼器和方法可應(yīng)用于各種各樣的壓縮應(yīng)用,包括諸如音頻、圖像和視頻編碼器等多媒體壓縮系統(tǒng)。
自適應(yīng)RLGR編解碼器和方法以一種新穎的方式組合了游程編碼和Golomb/Rice(G/R)編碼。具體而言,該自適應(yīng)RLGR編解碼器和方法具有只有G/R編碼的第一模式(單G/R模式)和G/R編碼加游程編碼的第二模式(RLGR模式)。自適應(yīng)RLGR編解碼器和方法還使用了在每個(gè)編碼的碼元后調(diào)整編碼參數(shù)的新穎的后向自適應(yīng)技術(shù)。編碼模式(單G/R模式或RLGR模式)從參數(shù)值自動(dòng)確定。不需要概率表或碼字表,因而自適應(yīng)RLGR編解碼器和方法可適合于小存儲(chǔ)器場合。自適應(yīng)RLGR編解碼器和方法因此很適于現(xiàn)代處理器,其中存儲(chǔ)器訪問通常比指令取出和執(zhí)行花費(fèi)更多的周期。它也很好地適用于只有有限存儲(chǔ)器和有限處理能力的小型設(shè)備,因?yàn)樽赃m應(yīng)RLGR編解碼器和方法不需要緩沖塊中的輸入數(shù)據(jù),也不需要兩次處理每個(gè)數(shù)據(jù)值。
自適應(yīng)RLGR編解碼器和方法使用簡單而新穎的編碼規(guī)則組合,根據(jù)編碼模式將輸入數(shù)據(jù)串映射到輸出碼字。自適應(yīng)RLGR編解碼器和方法還使用了具有新穎的自適應(yīng)規(guī)則的后向自適應(yīng)技術(shù)。使用了兩個(gè)參數(shù),即,編碼器連串參數(shù)(s)和Golomb/Rice(G/R)參數(shù)(k)。編碼器連串參數(shù)控制自適應(yīng)RLGR編解碼器和方法是否使用游程編碼(對(duì)于s>0),且如果是,如何使用游程編碼。G/R參數(shù)用于兩種編碼模式,或者直接編碼輸入值(在單G/R模式中,s=0),或者編碼不完全零連串后的輸入值(在RLGR模式中)。
自適應(yīng)RLGR編解碼器和方法的主要優(yōu)點(diǎn)之一是在生成的每個(gè)碼字之后調(diào)整和更新其參數(shù)(s和k)。這使得輸入數(shù)據(jù)的統(tǒng)計(jì)量中的任何變化都能被很快追蹤到。不需要將編碼參數(shù)發(fā)送到解碼器的額外開銷,因?yàn)樗鼈兊淖兓寄鼙唤獯a器追蹤。由于自適應(yīng)規(guī)則是簡單的,因此使用后向自適應(yīng)的計(jì)算復(fù)雜度很低。因而,自適應(yīng)RLGR編解碼器和方法對(duì)許多實(shí)際應(yīng)用都有吸引力。
自適應(yīng)RLGR方法包括在使用熵編碼器而不是游程編碼器的第一模式和使用結(jié)合游程編碼器和熵編碼器的第二模式之間進(jìn)行選擇,并使用后向自適應(yīng)技術(shù)來自適應(yīng)第一和第二模式的編碼器。一般而言,熵編碼器是Golomb/Rice編碼器。后向自適應(yīng)技術(shù)包括使用編碼模式參數(shù)s以在第一和第二模式之間選擇,并使用Golomb/Rice(G/R)參數(shù)k用于G/R編碼器。如果s=0,則選擇第一編碼模式,且如果s>0,則選擇第二編碼模式。這些參數(shù)的每一個(gè)都在由游程編碼器或G/R編碼器生成的每個(gè)碼字之后更新。
編碼規(guī)則取決于編碼模式。如果s=0,則下一輸入值x是通過先經(jīng)簡單的1-1映射規(guī)則(當(dāng)x>0時(shí)u=2x,當(dāng)x<0時(shí)u=-2x-1)將它映射到非負(fù)值u上、然后使用帶有參數(shù)k的Golomb/Rice編碼器編碼來編碼的,因此輸出碼字被表示為GR(u,k)。如果s>0,則先檢查輸入值x的零連串r。如果r=2s,則連串r被定義為完全連串且輸出碼字是等于0的單個(gè)比特。如果r<2s,則連串r被定義為不完全連串且碼字是1+bin(r,s)+GR(u,k),其中bin(r,s)是s個(gè)比特中不完全連串r的長度的二進(jìn)制表示,而GR(u,k)是跟在不完全連串r后的值的Golomb/Rice碼(再次使用從x到u的映射)。
在編碼一個(gè)碼元后,應(yīng)用參數(shù)自適應(yīng)規(guī)則。后向自適應(yīng)技術(shù)的自適應(yīng)規(guī)則包括用于參數(shù)s和k的每一個(gè)的規(guī)則。s的自適應(yīng)規(guī)則如下。如果s=0(單G/R模式),則檢查輸入值x的絕對(duì)值。如果|x|=0,則將s經(jīng)比例縮放的形式,即S,增加第一整數(shù)常數(shù)A1。如果|x|>0,則S減少第二整數(shù)常數(shù)B1。如果s>0(RLGR模式),則如果連串r是完全連串,則S增加第三整數(shù)常數(shù)A2。如果連串r是不完全連串,則s減少第四整數(shù)常數(shù)B2。要用于生成下一碼字的s值隨后被計(jì)算為s=S/L,其中L是固定參數(shù)(如果L被選擇為二的冪,則除以L的除法就是位移運(yùn)算)。
用于k的自適應(yīng)規(guī)則如下。從輸入值u(記住G/R編碼器總是在u值上運(yùn)算),通過p=u>>k來計(jì)算臨時(shí)值p(其中>>表示右移運(yùn)算符)。如果p=0,則k的經(jīng)比例縮放的形式,即K,減少第五整數(shù)常數(shù)B3。如果p=1,則k保持不變。如果p>1,則K增加p。以這種方法,在生成每個(gè)碼字后,對(duì)于第一和第二模式中的G/R編碼器更新參數(shù)k。隨后計(jì)算要用于生成下一碼字的k值,為k=K/L,其中L是固定參數(shù)(記住如果L選為二的冪,則除以L的除法只是位移運(yùn)算)。
從以下自適應(yīng)規(guī)則的描述中可以看出,自適應(yīng)RLGR方法還包括稱為“小數(shù)自適應(yīng)”的特征。小數(shù)自適應(yīng)允許對(duì)自適應(yīng)速率的更精細(xì)控制。首先,定義比例縮放參數(shù)L,且L值一般被設(shè)為二的冪。接著,定義經(jīng)比例縮放的編碼模式參數(shù)S=s*L和經(jīng)比例縮放的G/R參數(shù)K=k*L。當(dāng)使用以上關(guān)于s和k的自適應(yīng)規(guī)則時(shí),經(jīng)比例縮放的參數(shù)值S和K增加或減少整數(shù)常數(shù),這取決于所生成的碼字。在S和K的自適應(yīng)后,最終的參數(shù)值s和k通過s=S/L和k=K/L來計(jì)算。那樣,S和K的整數(shù)增量可以被視為s和k的小數(shù)增量,這使得能夠?qū)和k進(jìn)行更平滑控制,從而更好地追蹤輸入統(tǒng)計(jì)量中的變化。如果在每個(gè)編碼的碼元后只是按整數(shù)增量來調(diào)整s和k,則它們的值將波動(dòng)太大。這種參數(shù)值中的噪聲將導(dǎo)致壓縮比(以直接二進(jìn)制格式存儲(chǔ)輸入數(shù)據(jù)所需的比特?cái)?shù)與存儲(chǔ)所編碼的比特流所需比特?cái)?shù)之比)的降低。
一種自適應(yīng)RLGR編解碼器包括用于結(jié)合上述自適應(yīng)RLGR方法的模塊。
自適應(yīng)RLGR編解碼器和方法通過使用對(duì)應(yīng)于以上編碼規(guī)則的解碼規(guī)則,并使用上述相同的參數(shù)自適應(yīng)規(guī)則來工作。解碼器處的解碼規(guī)則反轉(zhuǎn)了前述的編碼器處的編碼規(guī)則。即,如果s=0,則解碼器根據(jù)GR參數(shù)k的當(dāng)前值,從輸入比特流(或文件)中讀取與所述的一樣多的比特。以這種方法,解碼器按照表1讀取對(duì)應(yīng)于有效的Golomb/Rice碼GR(u,k)的完整碼字。由于Golomb/Rice碼對(duì)每個(gè)參數(shù)k是唯一可解碼的,因此解碼器隨后可解碼該碼字。換言之,解碼器可確定現(xiàn)在在編碼器處的碼元值u。從u,解碼器可簡單地通過使用1-1逆映射規(guī)則來確定相應(yīng)的數(shù)據(jù)值x。具體而言,如果u是偶數(shù),則x=u/2,而當(dāng)u是奇數(shù)時(shí),則x=-(u+1)/2。如果s>0,則解碼器從輸入比特流或文件中讀取下一比特。如果該比特等于0(零),則解碼器產(chǎn)生r個(gè)零的串的輸出,其中r=2s。如果該比特等于1(一),則解碼器讀取下s個(gè)比特,作為變量r的二進(jìn)制表示。解碼器然后根據(jù)GR參數(shù)k的當(dāng)前值,從輸入比特流(或文件)中讀取與所述的一樣多的比特。以這種方法,讀取對(duì)應(yīng)于有效的Golomb/Rice碼GR(u,k)的完整碼字。從G/R碼,解碼器可確定臨時(shí)變量u,并通過1-1逆映射規(guī)則來計(jì)算跟在零的部分串后的輸入數(shù)據(jù)值x。特別地,如果u是偶數(shù),則x=u/2,而當(dāng)u是奇數(shù)時(shí),則x=-(u+1)/2。解碼器然后輸出后面跟著值x的r個(gè)零的串。執(zhí)行上述解碼過程,以將輸入碼字解碼成完全匹配在編碼器處所見到的輸出值或值串。這樣,解碼過程是無損的。
在如上所述解碼來自輸入比特流或文件的碼字后,解碼器然后計(jì)算如以上對(duì)編碼器所述的相同自適應(yīng)規(guī)則。以這種方式,解碼器將以與編碼器完全相同的方法調(diào)整參數(shù)值s和k。從而,參數(shù)將具有用于解碼下一比特流(或文件)碼字的正確值。
本發(fā)明可通過參考以下描述和示出本發(fā)明各方面的附圖來進(jìn)一步理解。通過結(jié)合附圖閱讀以下本發(fā)明的詳細(xì)描述,其它特征和優(yōu)點(diǎn)將是顯而易見的,附圖作為示例示出了本發(fā)明的原理。
現(xiàn)在參考附圖,其中相同的參考標(biāo)號(hào)通篇表示相應(yīng)的部件圖1示出適用于此處所公開的自適應(yīng)游程Golomb/Rice(RLGR)編碼器和方法的整數(shù)值的典型概率分布。
圖2A是示出此處所公開的RLGR編解碼器和方法的編碼器部分的示例性實(shí)現(xiàn)的框圖。
圖2B是示出此處所公開的RLGR編解碼器和方法的解碼器部分的示例性實(shí)現(xiàn)的框圖。
圖3示出其中可實(shí)現(xiàn)圖2所示的自適應(yīng)RLGR編解碼器的合適的計(jì)算系統(tǒng)環(huán)境的示例。
圖4是示出圖2所示的自適應(yīng)RLGR編碼器的組件的概括框圖。
圖5是示出圖2和4所示的自適應(yīng)RLGR編碼器和方法的概括操作的概括流程圖。
圖6是進(jìn)一步示出圖5所示的自適應(yīng)RLGR編碼器和方法的細(xì)節(jié)的流程圖。
圖7是圖4所示的自適應(yīng)RLGR編碼器和方法的編碼器模式選擇器的操作的詳細(xì)流程圖。
圖8是圖4所示的自適應(yīng)RLGR編碼器和方法的編碼器模式參數(shù)自適應(yīng)模塊的操作的詳細(xì)流程圖。
圖9是圖4所示的自適應(yīng)RLGR編碼器和方法的Golomb/Rice(G/R)參數(shù)自適應(yīng)模塊的操作的詳細(xì)流程圖。
圖10是圖9所示的Golomb/Rice(G/R)參數(shù)自適應(yīng)模塊所使用的自適應(yīng)值的計(jì)算的流程圖。
圖11是示出選擇用于自適應(yīng)RLGR編碼器和方法的編碼器模式的細(xì)節(jié)的工作示例。
圖12是示出單G/R模式的編碼細(xì)節(jié)和附隨的編碼模式參數(shù)s自適應(yīng)的工作示例。
圖13是示出RLGR模式的編碼細(xì)節(jié)和附隨的編碼模式參數(shù)s自適應(yīng)的工作示例。
圖14是示出自適應(yīng)單G/R模式的編碼細(xì)節(jié)和其時(shí)的G/R參數(shù)k自適應(yīng)規(guī)則的工作示例。
具體實(shí)施例方式
在本發(fā)明的以下描述中,對(duì)附圖進(jìn)行了參考,附圖構(gòu)成本發(fā)明的一部分,其中作為說明給出可實(shí)施本發(fā)明的特定示例。要理解,也可使用其它實(shí)施例且可作出結(jié)構(gòu)性變化,而不脫離本發(fā)明的范圍。
I.介紹這里所公開的游程Golomb/Rice(RLGR)編碼器和方法可用于各種各樣的壓縮應(yīng)用中。多媒體壓縮系統(tǒng)(例如音頻、圖像和視頻編解碼器)以及使用預(yù)測或變換方法進(jìn)行壓縮的其它系統(tǒng)通常生成帶有類似于圖1那樣的概率分布的整數(shù)數(shù)據(jù)??稍趹?yīng)用中實(shí)現(xiàn)RLGR編解碼器和方法,用于圖像、音頻、地形標(biāo)高和幾何地圖數(shù)據(jù)的壓縮。在這些應(yīng)用中使用RLGR編解碼器和方法的結(jié)果是具有可與最復(fù)雜的熵編碼器相比較,但以更簡單的實(shí)現(xiàn)的壓縮比。
這里所公開的RLGR編解碼器和方法是用于整數(shù)數(shù)據(jù)的無損壓縮的改進(jìn)技術(shù)。包含整數(shù)值的向量由編碼器映射到比特流中,它稍后可由解碼器精確重建。為改進(jìn)性能使用后向自適應(yīng),RLGR編解碼器和方法快速獲知和自適應(yīng)輸入數(shù)據(jù)的統(tǒng)計(jì)量中的變化。RLGR編解碼器和方法可應(yīng)用于各種各樣的壓縮應(yīng)用中,包括諸如音頻、圖像和視頻編解碼器等多媒體壓縮系統(tǒng)。
RLGR編解碼器和方法以一種新穎的方法組合了游程編碼和Golomb/Rice編碼,并以在每個(gè)編碼的碼元后調(diào)整編碼器參數(shù)的后向自適應(yīng)策略為特征。概率表或碼字表是不需要的,它們使RLGR編解碼器和方法適合于很小的存儲(chǔ)器情況。因而RLGR編解碼器和方法特別適合現(xiàn)代處理器,其中存儲(chǔ)器訪問通常比指令取出和執(zhí)行花費(fèi)更多的周期。
RLGR編解碼器和方法與以前各種熵編碼器相比的一個(gè)關(guān)鍵優(yōu)點(diǎn)是其后向自適應(yīng)策略快速獲知數(shù)據(jù)的統(tǒng)計(jì)量中的變化。因而,實(shí)際上RLGR編解碼器和方法展示出比諸如Huffman編碼器、塊自適應(yīng)Golomb/Rice編碼器或上下文自適應(yīng)算術(shù)編碼器等其它各種編碼器更好的性能。使用后向自適應(yīng)策略用于編碼參數(shù)的另一個(gè)優(yōu)點(diǎn)是不需要概率估算器。RLGR編解碼器和方法還有另一個(gè)優(yōu)點(diǎn)是它在每個(gè)編碼的碼元之后執(zhí)行自適應(yīng),只在數(shù)據(jù)上通過一次,這樣比使用按塊或前向自適應(yīng)的編碼器產(chǎn)生更好的壓縮結(jié)果和更快的編碼。
II.概覽圖2A和B是方框圖,示出此處所公開的自適應(yīng)游程Golomb/Rice(RLGR)編解碼器和方法的示例性實(shí)現(xiàn)。在圖2A中,示出了自適應(yīng)游程RLGR編解碼器和方法的編碼器部分的框圖。在圖2B中,示出了自適應(yīng)游程RLGR編解碼器和方法的解碼器部分的框圖。應(yīng)該注意,圖2A和B只是其中可實(shí)現(xiàn)和使用自適應(yīng)RLGR編解碼器和方法的幾種方式中的兩種。
參考圖2A,自適應(yīng)RLGR編碼器200運(yùn)行在第一計(jì)算設(shè)備210上。自適應(yīng)RLGR編碼器200輸入并處理整數(shù)數(shù)據(jù)220。一般而言,給定整數(shù)數(shù)據(jù)220,諸如包含整數(shù)值的向量,自適應(yīng)RLGR編碼器200將整數(shù)數(shù)據(jù)220編碼或映射為已編碼比特流230。整數(shù)數(shù)據(jù)220一般包含整數(shù)向量,因而大多數(shù)可能值為零且任意非零值具有隨值增長而減少的概率。這種類型的整數(shù)數(shù)據(jù)一般具有類似于圖1所示的概率分布函數(shù)(PDF)。在編碼了整數(shù)數(shù)據(jù)后,已編碼比特流230可被存儲(chǔ)或發(fā)送。
參考圖2B,RLGR解碼器240駐留在第二計(jì)算設(shè)備250上。應(yīng)該注意,盡管示出為單獨(dú)的計(jì)算設(shè)備,但第一計(jì)算設(shè)備210和第二計(jì)算設(shè)備250可以是同一計(jì)算設(shè)備。換言之,RLGR編碼器200和解碼器240可駐留在同一計(jì)算設(shè)備上。一般而言,RLGR解碼器240處理編碼器比特流230并輸出經(jīng)重建的整數(shù)數(shù)據(jù)260。因?yàn)樽赃m應(yīng)RLGR編碼器200執(zhí)行整數(shù)數(shù)據(jù)220的無損編碼,因此RLGR解碼器240可讀取已編碼比特流230,并精確地重建包含在整數(shù)數(shù)據(jù)220中的原始數(shù)據(jù)向量。
應(yīng)該注意,在實(shí)際應(yīng)用中,設(shè)備或儀器可包含RLGR編碼器而不包含RLGR解碼器(例如,數(shù)碼相機(jī))。同樣地,設(shè)備或儀器可包含RLGR解碼器而不包含RLGR編碼器(例如,數(shù)字音頻播放器或數(shù)字圖像查看器)。
III.示例性操作環(huán)境自適應(yīng)游程Golomb/Rice(RLGR)編解碼器和方法被設(shè)計(jì)為在計(jì)算環(huán)境中和計(jì)算設(shè)備上運(yùn)行,諸如圖2所示的第一計(jì)算設(shè)備210和第二計(jì)算設(shè)備250?,F(xiàn)在將討論自適應(yīng)RLGR編解碼器和方法在其中運(yùn)行的計(jì)算環(huán)境。以下討論旨在提供可在其中實(shí)現(xiàn)自適應(yīng)游程Golomb/Rice(RLGR)編碼器和方法的適當(dāng)計(jì)算環(huán)境的簡要概括描述。
圖3示出可在其中實(shí)現(xiàn)圖2所示的自適應(yīng)RLGR編解碼器和方法的適當(dāng)計(jì)算系統(tǒng)環(huán)境的示例。計(jì)算系統(tǒng)環(huán)境300只是適當(dāng)計(jì)算環(huán)境的一個(gè)示例,而不旨在對(duì)本發(fā)明使用范圍或功能提出任何限制。計(jì)算環(huán)境300不應(yīng)被解釋為對(duì)于示例性操作環(huán)境300中所示任意一個(gè)組件或其組合具有任何依賴或需求。
自適應(yīng)RLGR編解碼器和方法可用大量其它通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置來操作。眾所周知的適于自適應(yīng)RLGR編解碼器和方法使用的計(jì)算系統(tǒng)、環(huán)境和/或配置的示例包括,但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、諸如蜂窩電話和PDA等手持式、膝上型或移動(dòng)計(jì)算機(jī)或通信設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型計(jì)算機(jī)、可包括任意以上系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。
自適應(yīng)RLGR編解碼器和方法可在諸如程序模塊等由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的通用上下文環(huán)境中描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型。自適應(yīng)RLGR編解碼器和方法還可在分布式計(jì)算環(huán)境中實(shí)施,其中任務(wù)由通過通信網(wǎng)絡(luò)連接的遠(yuǎn)程處理設(shè)備執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可位于包括存儲(chǔ)器存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。參考圖3,用于實(shí)現(xiàn)自適應(yīng)RLGR編解碼器和方法的示例性系統(tǒng)包括計(jì)算機(jī)310形式的通用計(jì)算設(shè)備。計(jì)算機(jī)310是圖2所示第一計(jì)算設(shè)備210和第二計(jì)算設(shè)備250的示例。
計(jì)算機(jī)310的組件可包括,但不限于,處理單元320、系統(tǒng)存儲(chǔ)器330和將包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)組件耦合到處理單元320的系統(tǒng)總線321。系統(tǒng)總線321可以是任意幾種類型的總線結(jié)構(gòu)的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線或外部總線、和/或使用任意各種各樣總線體系結(jié)構(gòu)的任一種的局部總線。作為示例,而非限制,這樣的體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MSA)總線、擴(kuò)展ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線以及外圍部件互連(PCI)總線,也稱為Mezzanine總線。
計(jì)算機(jī)310通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是能夠被計(jì)算機(jī)訪問的任何可用介質(zhì),包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。作為示例,而非限制,計(jì)算機(jī)可讀介質(zhì)可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的存儲(chǔ)的方法或技術(shù)實(shí)現(xiàn)的任何易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。
計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或者其它光盤存儲(chǔ)、磁盒、磁帶、磁盤存儲(chǔ)或者其它磁存儲(chǔ)設(shè)備,或者可用于存儲(chǔ)需要的信息并且可由計(jì)算機(jī)310訪問的任何其它介質(zhì)。通信介質(zhì)一般具體化為在如載波或其它傳送機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并且包括任何信息傳遞介質(zhì)。
注意,術(shù)語“已調(diào)制數(shù)據(jù)信號(hào)”意指以將信息編碼到該信號(hào)中的方式設(shè)置或改變其一個(gè)或多個(gè)特征的信號(hào)。作為示例,而非限制,通信介質(zhì)包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或者直接線連接,以及無線介質(zhì),諸如聲學(xué)、RF、紅外和其它無線介質(zhì)。任何上述內(nèi)容的組合也包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
系統(tǒng)存儲(chǔ)器330包括以易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì),諸如只讀存儲(chǔ)器(ROM)331和隨機(jī)存取存儲(chǔ)器(RAM)332?;据斎?輸出系統(tǒng)333(BIOS)一般存儲(chǔ)在ROM 331中,它包含諸如在啟動(dòng)期間幫助在計(jì)算機(jī)310內(nèi)各元件間傳送信息的基本例程。RAM 332一般包含由處理單元320可直接訪問和/或目前正運(yùn)行的數(shù)據(jù)和/或程序模塊。作為示例而非限制,圖3示出操作系統(tǒng)334、應(yīng)用程序335、其它程序模塊336和程序數(shù)據(jù)337。
計(jì)算機(jī)310還可包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。僅作為示例,圖3示出讀寫不可移動(dòng)非易失性磁介質(zhì)的硬盤驅(qū)動(dòng)器341、讀寫可移動(dòng)非易失性磁盤352的磁盤驅(qū)動(dòng)器351,以及讀寫如CD-ROM或其它光介質(zhì)等可移動(dòng)非易失性光盤356的光盤驅(qū)動(dòng)器355。
可在示例性操作環(huán)境中使用的其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動(dòng)器341一般通過諸如接口340等不可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線321,而磁盤驅(qū)動(dòng)器351和光盤驅(qū)動(dòng)器355一般通過諸如接口350等可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線321。
以上討論并在圖3中示出的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī)310提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。例如,在圖3中,硬盤驅(qū)動(dòng)器341被示出為存儲(chǔ)操作系統(tǒng)344、應(yīng)用程序345、其它程序模塊346和程序數(shù)據(jù)347。注意這些組件可以相同或不同于操作系統(tǒng)334、應(yīng)用程序335、其它程序模塊336和程序數(shù)據(jù)337。操作系統(tǒng)344、應(yīng)用程序345、其它程序模塊346和程序數(shù)據(jù)347在這里給出不同的標(biāo)號(hào)是為了指出至少它們是不同的副本。用戶可通過諸如鍵盤362和定點(diǎn)設(shè)備361(通常指鼠標(biāo)、軌跡球或觸摸板)等輸入設(shè)備將命令和信息輸入到計(jì)算機(jī)310。
其它輸入設(shè)備(未示出)可包括話筒、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀、無線電接收器或者電視或廣播視頻接收器等等。這些和其它輸入設(shè)備通過耦合到系統(tǒng)總線321的用戶輸入接口360連接到處理單元320,但也可通過其它接口和總線結(jié)構(gòu),如并行端口、游戲端口或通用串行總線(USB)來連接。監(jiān)示器391或其它類型的顯示設(shè)備也通過接口,如視頻接口390連接到系統(tǒng)總線321。除了監(jiān)示器以外,計(jì)算機(jī)還可包括其它外設(shè)輸出設(shè)備,諸如揚(yáng)聲器397和打印機(jī)396,它們可通過輸出外圍接口395連接。
計(jì)算機(jī)310可使用到一或多個(gè)遠(yuǎn)程計(jì)算機(jī),如遠(yuǎn)程計(jì)算機(jī)380的邏輯連接在網(wǎng)絡(luò)化環(huán)境中工作。遠(yuǎn)程計(jì)算機(jī)380可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它普通網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括上面相對(duì)于計(jì)算機(jī)310所述的許多或所有元件,盡管在圖3中所示的只有存儲(chǔ)器存儲(chǔ)設(shè)備381。圖3所示的邏輯連接包括局域網(wǎng)(LAN)371和廣域網(wǎng)(WAN)373,但也可包括其它網(wǎng)絡(luò)。這樣的圖絡(luò)環(huán)境在辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)中是很常見的。
當(dāng)在LAN環(huán)境中使用時(shí),計(jì)算機(jī)310通過網(wǎng)絡(luò)接口或適配器370連接到LAN371。當(dāng)在廣域網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)310一般包括調(diào)制解調(diào)器372或通過WAN373,如因特網(wǎng)建立通信的其它裝置。調(diào)制解調(diào)器372可以是內(nèi)置或外置的,通過用戶輸入接口360或其它適當(dāng)機(jī)制連接到系統(tǒng)總線321。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī)310描述的程序模塊或其部分可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。作為示例而非限制,圖3例示了遠(yuǎn)程應(yīng)用程序385駐留在存儲(chǔ)器設(shè)備381上。要理解,所示的網(wǎng)絡(luò)連接是示例性的,并且可使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。
IV.系統(tǒng)組件圖4是示出圖2所示的自適應(yīng)RLGR編碼器200組件的總框圖。自適應(yīng)RLGR編碼器接收輸入值(或值串)400作為輸入。然后使用編碼器模式選擇器405在自適應(yīng)RLGR編碼器200的兩個(gè)模式之間選擇和切換。具體而言,如圖4所示,編碼器模式選擇器405可以選擇單Golomb/Rice模式或者游程和Golomb/Rice編碼器模式。單Golomb/Rice模式只使用具有自適應(yīng)參數(shù)的Golomb/Rice編碼器410。游程和Golomb/Rice編碼器模式使用具有自適應(yīng)參數(shù)的游程編碼器415和自適應(yīng)Golomb/Rice編碼器410。
使用以上兩種模式之一來編碼輸入值(或串)400以獲得碼字420。在每個(gè)輸入值(或串)400的編碼后,編碼參數(shù)被自適應(yīng)來追蹤輸入數(shù)據(jù)的統(tǒng)計(jì)量。自適應(yīng)RLGR編碼器200使用至少兩種類型的參數(shù)。第一種,使用編碼模式參數(shù)來控制編碼模式是否使用游程編碼器,以及如果是這樣,如何使用游程編碼器。第二種,在兩種模式中都使用Golomb/Rice(G/R)參數(shù),以便(a)編碼每個(gè)輸入值(如果編碼器是單G/R模式);以及(b)編碼跟在不完全0連串后的數(shù)字(如果編碼器在RLGR模式)。這些參數(shù)及這些參數(shù)的自適應(yīng)將在下面詳細(xì)討論。
編碼模式參數(shù)自適應(yīng)模塊430用于使用后向自適應(yīng)技術(shù)來更新編碼模式參數(shù)。模塊430產(chǎn)生更新編碼模式參數(shù)435。類似地,G/R參數(shù)自適應(yīng)模塊440用于使用后向自適應(yīng)技術(shù)來更新原始G/R參數(shù)。這產(chǎn)生經(jīng)更新的G/R參數(shù)445。編碼模式參數(shù)和G/R參數(shù)的自適應(yīng)都將在下面詳細(xì)討論。一旦參數(shù)被更新,下一個(gè)輸入值450將由自適應(yīng)RLGR編碼器200用更新后的編碼模式參數(shù)435和更新后的G/R參數(shù)445來處理。
V.操作概覽現(xiàn)在將討論如圖2和4所示的自適應(yīng)RLGR編碼器200的操作和其中所使用的方法。圖5是總流程圖,示出自適應(yīng)RLGR編碼器和方法的總操作。該方法始于輸入要編碼的數(shù)字?jǐn)?shù)據(jù)(框500)。在一個(gè)經(jīng)測試的實(shí)施例中,輸入數(shù)字?jǐn)?shù)據(jù)是具有整數(shù)值元素的向量形式的整數(shù)數(shù)據(jù)。應(yīng)該注意,每個(gè)輸入數(shù)字?jǐn)?shù)據(jù)值可以是任意整數(shù)值,而不限于特定的范圍(例如,二進(jìn)制或二進(jìn)制加符號(hào),因?yàn)檫@在其它熵編碼器中很常見)。接下來,選擇自適應(yīng)RLGR編碼器的編碼器模式(框510)。模式可以是單G/R模式或RL+G/R模式,取決于編碼模式參數(shù)的值。所選擇的編碼器然后編碼輸入數(shù)字?jǐn)?shù)據(jù)。
數(shù)字?jǐn)?shù)據(jù)在所選模式中使用被初始化為某些值的編碼參數(shù)來編碼。然而,由于輸入數(shù)字?jǐn)?shù)據(jù)的統(tǒng)計(jì)量可以變化,因此RLGR編碼器200是自適應(yīng)的。這種自適應(yīng)使得自適應(yīng)RLGR編碼器200能夠追蹤輸入數(shù)字?jǐn)?shù)據(jù)的統(tǒng)計(jì)量并快速自適應(yīng)到那些統(tǒng)計(jì)量,以提供更高的編碼效率。自適應(yīng)RLGR編碼器200和方法使用后向自適應(yīng)技術(shù)來更新編碼參數(shù)(框520)。編碼參數(shù)的這種更新在編碼了輸入數(shù)字?jǐn)?shù)據(jù)的每個(gè)值或值串后發(fā)生。此外,后向自適應(yīng)技術(shù)包括新穎的自適應(yīng)規(guī)則,這將在下面詳細(xì)討論。然后,輸出已編碼數(shù)字?jǐn)?shù)據(jù)(框530)。接下來,使用剛才描述的方法處理輸入數(shù)字?jǐn)?shù)據(jù)的下一值或串。編碼參數(shù)的更新值用于編碼下一輸入值或串。一直重復(fù)這個(gè)過程,直到所有數(shù)字?jǐn)?shù)據(jù)都被編碼成已編碼比特流。
圖6是一流程圖,示出圖5所示的自適應(yīng)RLGR編碼器和方法的進(jìn)一步細(xì)節(jié)。特別地,數(shù)字?jǐn)?shù)據(jù)的值或串作為輸入接收(框600)。接下來,從下列模式中選擇編碼模式(a)單G/R模式;以及(b)游程和G/R模式(框610)。然后使用所選的編碼器模式來編碼輸入值或串(框620)。
在編碼了輸入值或串后,更新G/R參數(shù)。該自適應(yīng)過程始于定義小數(shù)自適應(yīng)參數(shù)(框630)。小數(shù)自適應(yīng)參數(shù)用來減慢編碼參數(shù)的自適應(yīng),這樣可更緊密地追蹤最優(yōu)參數(shù)值。小數(shù)自適應(yīng)參數(shù)將在下面更詳細(xì)地討論。接下來,使用包含新穎的自適應(yīng)規(guī)則的后向自適應(yīng)技術(shù)來更新編碼模式參數(shù)的小數(shù)自適應(yīng)形式(框640)。類似地,使用后向自適應(yīng)技術(shù)和新穎的自適應(yīng)規(guī)則來更新G/R參數(shù)(框650)。經(jīng)編碼的輸入值或串被追加到已編碼比特流后,且輸入要編碼的下一個(gè)數(shù)字?jǐn)?shù)據(jù)值或串(框660)。該過程重新開始,用更新后的編碼模式參數(shù)和G/R參數(shù)編碼下一值或串。
VI.操作細(xì)節(jié)現(xiàn)在將討論以上所述圖4、5和6的自適應(yīng)RLGR編碼器200和方法的操作細(xì)節(jié)。
編碼器模式選擇器圖7是圖4所示的自適應(yīng)RLGR編碼器200和方法的編碼器模式選擇器405的操作的詳細(xì)流程圖。一般而言,編碼器模式選擇器405基于編碼模式參數(shù)的值在兩種編碼器模式之間選擇和切換。編碼器模式的選擇發(fā)生在數(shù)字?jǐn)?shù)據(jù)的值或串被編碼及編碼參數(shù)被更新之后。
該過程始于接收初始編碼模式參數(shù)(框705)和要編碼的輸入值(或零串)(框710)為輸入。做出關(guān)于編碼模式參數(shù)值是否等于零的判斷(框715)。如果是,則編碼模式為G/R模式。否則,編碼模式為RLGR模式。
在G/R模式中,使用自適應(yīng)G/R編碼器編碼輸入值(框720)。這是使用用于G/R參數(shù)的后向自適應(yīng)自適應(yīng)規(guī)則的G/R編碼器。在RLGR模式中,意味著編碼模式參數(shù)大于零,可期望輸入值包含一連串零的高概率。做出關(guān)于零連串是完全還是不完全連串的判斷(框725)。連串被定義為彼此鄰接的相同值的串。完全連串被定義為具有的零的個(gè)數(shù)等于2的編碼模式參數(shù)的冪的連串。例如,如果編碼模式參數(shù)等于3,則23=8。因而,在這個(gè)示例中,完全連串是8個(gè)零的連串。
如果連串是完全連串,則使用自適應(yīng)游程編碼器將輸入值串編碼為碼字=0(框730)。換言之,完全連串由零碼字表示。在以上示例中,8個(gè)零的串(它表示完全串)將由碼字=0表示。如果連串是不完全連串,則編碼該輸入值串,以便告知編碼器該連串是不完全的、不完全連串中的零的個(gè)數(shù)以及緊隨在不完全連串后的值。特別地,使用自適應(yīng)游程編碼器將輸入值串編碼為不完全連串,由碼字=1表示(框735)。這通知解碼器該連串是不完全連串。接著,不完全連串的長度被添加到已編碼輸入值串(框740)。該已編碼值表示不完全連串的長度。例如,如果不完全連串的長度是4個(gè)零,則值4(或二進(jìn)制表示法中的“100”)被添加到已編碼比特流,以告知解碼器連串長度等于四。
剩下的要編碼的唯一信息是緊隨不完全連串后的值。使用自適應(yīng)G/R編碼器來編碼緊隨在不完全連串后的值(框745)。當(dāng)使用自適應(yīng)G/R編碼器時(shí)使用G/R參數(shù)。最后,輸出已編碼輸入值(如果編碼模式為G/R模式)或已編碼輸入值串(如果編碼模式為RLGR模式)(框750)。
編碼模式參數(shù)自適應(yīng)模塊圖8是圖4所示的自適應(yīng)RLGR編碼器200和方法的編碼模式參數(shù)自適應(yīng)模塊430的操作的詳細(xì)流程圖。一般而言,編碼模式參數(shù)自適應(yīng)模塊430使用后向自適應(yīng)技術(shù)更新初始編碼模式參數(shù)。更新在編碼了數(shù)字?jǐn)?shù)據(jù)的每個(gè)值或串后執(zhí)行。后向自適應(yīng)技術(shù)使用新穎的自適應(yīng)規(guī)則來更新編碼模式參數(shù)。
該過程始于接收初始編碼模式參數(shù)(框805)和要編碼的輸入值(框810)作為輸入。然后做出關(guān)于編碼模式參數(shù)是否等于零的判斷(框815)。如果是,則編碼模式為單G/R模式,否則編碼模式為RLGR模式。
對(duì)于單G/R模式,做出關(guān)于輸入值的絕對(duì)值是否等于零的判斷(框820)。如果是,則當(dāng)前經(jīng)比例縮放的編碼模式參數(shù)增加第一整數(shù)常數(shù)(框825)。如果不是,則當(dāng)前經(jīng)比例縮放的編碼模式參數(shù)減少第二整數(shù)常數(shù)(框830)。
對(duì)于RLGR模式,做出關(guān)于值串中的零連串是完全還是不完全連串的判斷(框835)。如果連串是完全連串,則當(dāng)前經(jīng)比例縮放的編碼模式參數(shù)增加第三整數(shù)常數(shù)(框840)。如果連串是不完全連串,則當(dāng)前經(jīng)比例縮放的編碼模式參數(shù)減少第四整數(shù)常數(shù)(框845)。
一旦當(dāng)前經(jīng)比例縮放的編碼模式參數(shù)被更新,用更新后的編碼模式參數(shù)來替代當(dāng)前編碼模式參數(shù)(框850)。這通過將經(jīng)比例縮放的編碼模式參數(shù)除以固定比例縮放因子并保留結(jié)果的整數(shù)部分來獲得。由于自適應(yīng)按整數(shù)步長調(diào)整了經(jīng)比例縮放的編碼模式參數(shù),因此實(shí)際的編碼參數(shù)就象是由小數(shù)步長調(diào)整的一樣。這稱為“小數(shù)自適應(yīng)”,它允許對(duì)自適應(yīng)速度的更精細(xì)控制。然后輸出最終的更新后的編碼模式參數(shù)(框855)。再一次,在編碼了每個(gè)輸入值或串后更新當(dāng)前經(jīng)比例縮放編碼模式參數(shù)。然后,更新后的編碼模式參數(shù)用于下一輸入值或串的編碼。
Golomh/Rice(G/R)參數(shù)自適應(yīng)模塊圖9是圖4所示的自適應(yīng)RLGR編碼器200和方法的Golomb/Rice(G/R)參數(shù)自適應(yīng)模塊440的操作的詳細(xì)流程圖。一般而言,G/R參數(shù)自適應(yīng)模塊440使用具有新穎的自適應(yīng)規(guī)則的后向自適應(yīng)技術(shù)來更新初始G/R參數(shù)。更新是在編碼數(shù)字?jǐn)?shù)據(jù)的每個(gè)值或串后執(zhí)行的。
該操作始于接收初始G/R參數(shù)(框905)和自適應(yīng)值(框910)作為輸入,稍后將描述其計(jì)算。隨后做出關(guān)于自適應(yīng)值是否等于零的判斷(框915)。如果是,則自適應(yīng)規(guī)則將使經(jīng)比例縮放的G/R參數(shù)減少第五整數(shù)常數(shù)(框920)。
如果自適應(yīng)值不等于零,則做出關(guān)于自適應(yīng)值是否等于一的判斷(框925)。如果是,則自適應(yīng)規(guī)則保持經(jīng)比例縮放的G/R參數(shù)不變(框930)。如果不是,則自適應(yīng)規(guī)則將經(jīng)比例縮放的G/R參數(shù)增加自適應(yīng)值(框935)。
一旦G/R參數(shù)已被更新,用更新后的G/R參數(shù)替換當(dāng)前G/R參數(shù)(框940)。這可通過將經(jīng)比例縮放的G/R模式參數(shù)除以固定比例縮放因子并保留結(jié)果的整數(shù)部分來獲得。由于自適應(yīng)按照整數(shù)步長調(diào)整經(jīng)比例縮放的G/R模式參數(shù),因此實(shí)際G/R參數(shù)就象它是由小數(shù)步長來自適應(yīng)的一樣。再一次,這是“小數(shù)自適應(yīng)”的示例,它允許對(duì)自適應(yīng)速度的更精細(xì)控制。當(dāng)然,如果G/R參數(shù)保持不變(框930),則不進(jìn)行更新,且當(dāng)前G/R參數(shù)是相同的。最后,輸出更新后的G/R參數(shù)(框945)。
圖10是自適應(yīng)值計(jì)算模塊1000的操作的詳細(xì)流程圖。參考圖7和9,自適應(yīng)值計(jì)算模塊1000產(chǎn)生作為圖9的流程圖的輸入的自適應(yīng)值(框910)。該操作始于接收兩個(gè)輸入到圖7的Golomb/Rice編碼器(框720和745),即當(dāng)前G/R參數(shù)值(框1005)和輸入值(框1010)。接著,輸入值右移與G/R參數(shù)值相同的位數(shù)(框1020)。結(jié)果值就是自適應(yīng)值,隨后輸出它(框1030)。
VII.工作示例為了更全面地理解這里所公開的自適應(yīng)RLGR編碼器和方法,給出示例性工作示例的操作細(xì)節(jié)。應(yīng)該注意,這個(gè)工作示例只是其中可實(shí)現(xiàn)自適應(yīng)RLGR編碼器和方法的一種方法。
游程Golomb/Rice(RLGR)編碼器和方法是在以上提到的美國專利第6,477,280號(hào)中公開的PTC熵編碼器的擴(kuò)展。然而,美國專利第6,477,280號(hào)的PTC熵編碼器是用于編碼二進(jìn)制數(shù)據(jù)的(一般是整數(shù)數(shù)據(jù)的位平面)。此處所公開的RLGR編碼器和方法可使用任意輸入值來編碼整數(shù)數(shù)據(jù)。換言之,此處所公開的自適應(yīng)RLGR編碼器和方法可編碼任意字母的數(shù)據(jù)。還應(yīng)該注意,盡管此處所描述的RLGR編碼器和方法在數(shù)據(jù)可能包含零連串時(shí)更有效,但修改上述編碼操作來計(jì)算更可能出現(xiàn)在連串中的任何其它值的連串只是很小的問題。
此處所公開的RLGR編碼器和方法的一個(gè)優(yōu)點(diǎn)是,不象PTC熵編碼器,不需要了解輸入數(shù)據(jù)的最大可能數(shù)。相反,RLGR編碼器和方法可處理任意大小的輸入值,不論有多大。這意味著RLGR編碼器假設(shè)輸入數(shù)據(jù)具有如圖1所示的拉普拉斯分布,當(dāng)突然有大數(shù)字出現(xiàn)在輸入數(shù)據(jù)中,RLGR編碼器和方法能夠編碼這個(gè)大數(shù)字。盡管大數(shù)字將比小數(shù)字使用更多比特,但大數(shù)字仍將被編碼。然而,使用更多比特只在大數(shù)字出現(xiàn)時(shí)才自承其果,而不是對(duì)每個(gè)其它值。這歸因于以下提出的新模式選擇和自適應(yīng)規(guī)則。
用PTC熵編碼器,接收輸入數(shù)據(jù)、分解成位平面、然后用G/R編碼器編碼每個(gè)位平面。在此處所公開的自適應(yīng)RLGR編碼器和方法中,G/R編碼器被擴(kuò)展成直接處理拉普拉斯數(shù)據(jù)。這有自適應(yīng)RLGR編碼器和方法使用單次通過編碼的優(yōu)點(diǎn),使得它比PTC熵編碼器要快得多。
PTC熵編碼器的輸入數(shù)據(jù)具有拉普拉斯分布,其中小數(shù)字更可能。有時(shí),小數(shù)字有更多可能,使得編碼零連串對(duì)于比特流的特定部分更加有效。然而,PTC熵編碼器將拾取數(shù)據(jù),在最高位平面上進(jìn)行一次通過,并回去在下一位平面上進(jìn)行一次通過。例如,如果數(shù)據(jù)是16位,通過首先在位#16上完成并編碼。當(dāng)然,大多數(shù)數(shù)據(jù)將是零,因?yàn)樵撐恢粚?duì)很大的數(shù)分割,然后繼續(xù)向下。當(dāng)?shù)搅宋?5、4、3、2和1,這些位具有許多零和一,這意味著它到達(dá)了編碼它們已沒有什么幫助的一點(diǎn)。通常最低位是隨機(jī)的,以至于必須用一個(gè)比特來編碼這個(gè)位,即每個(gè)輸入比特都直接復(fù)制到輸出。PTC熵編碼帶來的問題是位平面上的編碼需要幾次通過數(shù)據(jù)。具體而言,PTC熵編碼器不得不編碼最高位、下一位、然后再下一位等等。顯然,這花費(fèi)了太大量的時(shí)間,而且在某些情況下,PTC熵編碼器比此處所公開的自適應(yīng)RLGR編碼器和方法慢1.5到3倍。
選擇編碼器模式圖11是示出選擇用于自適應(yīng)RLGR編碼器和方法的編碼器模式的細(xì)節(jié)的工作示例。該過程開始(框1105)于讀取具有元素x(n)的輸入向量,其中n=0,1,...,N-1(框1110)。在這個(gè)工作示例中,輸入向量具有與圖1所示的拉普拉斯分布類似的概率分布。概率分布由單個(gè)參數(shù)來表示,它是指數(shù)衰減速率。圖1所示的拉普拉斯衰減下降得相當(dāng)快。實(shí)際上,衰減一般可以更快或更慢。衰減速率越快,則值越可能等于零。
自適應(yīng)RLGR編碼器和方法對(duì)于整數(shù)的有效編碼是有用的。特別地,這發(fā)生在有需要有效地編碼的全是整數(shù)的向量(或緩沖區(qū))時(shí)。通常,整數(shù)數(shù)據(jù)將是這樣的,小數(shù)字比大數(shù)字更可能。且如果數(shù)據(jù)概率分布的衰減速率足夠高(意味著指數(shù)快速衰減),這意味著零變得更可能。在這種情況下,編碼零連串是個(gè)好方法。
在這個(gè)工作示例中,輸入數(shù)據(jù)具有與圖1所示的理想狀態(tài)相似的概率分布,因?yàn)橐幋a的數(shù)據(jù)(或輸入數(shù)據(jù))不是原始多媒體數(shù)據(jù)。例如,在音頻文件的情況下,自適應(yīng)RLGR編碼器和方法不直接應(yīng)用于每個(gè)音頻樣值。類似地,在圖片文件的情況下,自適應(yīng)RLGR編碼器和方法不應(yīng)用于每個(gè)像素值。相反,在許多應(yīng)用(包括音頻和圖像編碼)中,存在數(shù)據(jù)的某個(gè)模型。這意味著某些預(yù)測器可用于做出數(shù)據(jù)應(yīng)該是什么的合理猜測。因而,預(yù)測誤差可以是輸入數(shù)據(jù),且就是要編碼的預(yù)測誤差。預(yù)測誤差是實(shí)際值和預(yù)測值之間的差異。而且,如果數(shù)據(jù)模型是合理的,預(yù)測誤差更可能為零。但即使是好的模型,偶爾有一個(gè)大的值也是可能的。這會(huì)發(fā)生在到達(dá)邊界時(shí),諸如當(dāng)像素值從背景值到了前景值。換言之,即使是如圖1所示的概率分布,時(shí)不時(shí)也有大數(shù)字會(huì)出現(xiàn)。在其它多媒體編碼應(yīng)用中,原始數(shù)據(jù)值(例如音頻樣值或像素)經(jīng)由變換運(yùn)算來變換,其目的是將信息集中在少量大值變換系數(shù)和大量小值變換系數(shù)上。這些系數(shù)然后被量化(舍入為最接近的整數(shù))。這樣,當(dāng)讀取所有量化后的變換系數(shù)為向量時(shí),該向量的元素更可能包含小值,而且因而相當(dāng)適用于經(jīng)由此處所公開的自適應(yīng)RLGR編碼器和方法的壓縮。
此外,自適應(yīng)RLGR編碼器和方法是無損的。無損壓縮意味著輸入數(shù)據(jù)被壓縮進(jìn)較小尺寸并且隨后可被解碼以恢復(fù)為與原來完全相同的輸入數(shù)據(jù)值。相反,有損壓縮不能恢復(fù)與原始輸入數(shù)據(jù)完全相同的值。音頻和視頻壓縮可使用有損壓縮。但是,在許多這種有損壓縮技術(shù)中,對(duì)數(shù)據(jù)生成變換或預(yù)測器。變換或預(yù)測器隨后被量化,意味著它們被舍入為最接近的整數(shù)。一旦獲得這些整數(shù),通常使用無損壓縮。這意味著大多數(shù)多媒體有損編解碼器通常具有無損編碼器部分,以編碼經(jīng)量化的預(yù)測和變換運(yùn)算的整數(shù)值。自適應(yīng)RLGR編碼器和方法可用于編碼這些整數(shù)值。通常,這些整數(shù)值的每一個(gè)都具有相關(guān)聯(lián)的概率分布函數(shù)(PDF)。這些PDF都類似于圖1的概率分布,其意在于如果模型是好的,則大多數(shù)時(shí)間里預(yù)測誤差應(yīng)接近于零。
參考圖11,接下來初始化編碼參數(shù){s,S}和{k,K}(框1115)。然后計(jì)數(shù)器n和run被設(shè)為零(框1120)。在這個(gè)工作示例中,s是編碼模式參數(shù),S是經(jīng)比例縮放的編碼模式參數(shù),k是G/R參數(shù),而K是經(jīng)比例縮放的G/R參數(shù)。通常,s控制編碼模式及如何使用游程編碼器,而k控制G/R編碼器。參數(shù)s=S/L,其中L是比例縮放參數(shù)。在這個(gè)工作示例中,L等于16,它是2的冪。這使得除法能夠通過只做位移來執(zhí)行。
自適應(yīng)RLGR編碼器和方法具有兩種不同的編碼模式。第一編碼模式只執(zhí)行Golomb/Rice(G/R)編碼,而沒有任何游程編碼。當(dāng)數(shù)據(jù)中零不是那么可能的時(shí)候,應(yīng)用該單G/R模式,這樣將不會(huì)頻繁地有零連串。第二編碼模式執(zhí)行游程加G/R編碼。當(dāng)輸入數(shù)據(jù)中零連串非??赡軙r(shí),使用該RLGR編碼模式,這樣編碼零連串節(jié)省了比特。從而,存在兩種不同的編碼模式,且自適應(yīng)RLGR編碼器和方法根據(jù)編碼模式參數(shù)s的值在編碼模式之間自動(dòng)選擇和切換。
做出關(guān)于s是否等于零的判斷(框1123)。如果是,則編碼模式為單G/R模式。在這種情況下,輸入數(shù)據(jù)x(n)是使用自適應(yīng)G/R編碼器來編碼的(框1130)。如果s不等于零,則編碼模式是RLGR模式。這種情況下,輸入數(shù)據(jù)x(n)是使用自適應(yīng)游程編碼器和自適應(yīng)G/R編碼器來編碼的(框1135)。接著,用n+1替換n(框1140),并做出關(guān)于n是否等于N的判斷(框1145)。如果否,則過程以新的x(n)重新開始(點(diǎn)1150)。否則,寫輸出比特流(框1155),且該過程對(duì)給定輸入數(shù)據(jù)完成(框1160)。
編碼規(guī)則自適應(yīng)RLGR編碼器和方法使用新穎的編碼規(guī)則,它們基于編碼模式參數(shù)s和G/R參數(shù)k。表2給出自適應(yīng)RLGR編碼器和方法用于將整數(shù)值x映射到二進(jìn)制比特流的編碼規(guī)則。從表2中可以看出,由參數(shù){s,k}控制代碼。參數(shù)s控制操作的主模式(單G/R或者游程+GR),而參數(shù)k控制G/R編碼器。
表2在這個(gè)工作示例中,定義映射值u。自適應(yīng)RLGR編碼器和方法的輸入值x可正可負(fù)。輸入值x映射到值u,其中u只有正值。因而,帶符號(hào)的輸入值x被轉(zhuǎn)換成不帶符號(hào)的等價(jià)表示u。公式4給出從x到u的映射。具體而言,該映射表示,0映射到0、1映射到1、-1映射到2、2映射到3、-2映射到4等等,因而u值總是正的。這完成后,就可使用G/R表(表1),因?yàn)镚/R表只用于非零值。這種映射使得自適應(yīng)RLGR編碼器和方法能處理任何輸入字母。換言之,由于使用了G/R表(它可處理任何輸入數(shù)),因此輸入字母可以是無限的,且自適應(yīng)RLGR編碼器和方法可處理任意大小的數(shù)字輸入。自適應(yīng)RLGR編碼器和方法只受限于操作系統(tǒng)可處理的數(shù)字的大小。應(yīng)該注意,實(shí)際上,G/R編碼表1不需要存儲(chǔ)在存儲(chǔ)器中。很容易明白,表?xiàng)l目具有足夠的結(jié)構(gòu),使得對(duì)于任意u值和編碼參數(shù)k,都能方便地計(jì)算出碼字。
給定u數(shù)據(jù),表2給出該方法中的代碼,只要參數(shù)s和k是已知的。表2中的規(guī)則精確定義了編碼器如何編碼,這意味著解碼器可使用表2中的相同規(guī)則來恢復(fù)(或解碼)已編碼數(shù)據(jù)。
在單G/R模式中,也即s=0,表2陳述使用自適應(yīng)G/R編碼器和表1例示的G/R編碼規(guī)則來編碼輸入值x的映射值u。因而,用于編碼x的碼字基于u和k值。G/R參數(shù)k是使用后向自適應(yīng)技術(shù)來更新的,如以下詳細(xì)討論。
在RLGR模式中,也即s>0,輸入數(shù)據(jù)被視為r個(gè)值x=0的連串。觀察表2中關(guān)于RLGR模式,在一種情況中(第二行),輸入數(shù)據(jù)為2s個(gè)值x=0的連串。這稱為完全連串。作為示例,假設(shè)s=3。如果一行中輸入數(shù)據(jù)是23=8個(gè)零,則該連串使用表2的規(guī)則被編碼為等于0的單個(gè)比特。換言之,8個(gè)零的整個(gè)連串被映射到其值為0的單個(gè)比特。解碼器了解,如果它讀取一個(gè)0,它必須將它解碼為2s個(gè)零的串。這種情形下,達(dá)到了最大壓縮。本發(fā)明所達(dá)到的總壓縮是RLGR模式和G/R模式的平均。
如果輸入數(shù)據(jù)有少于2s個(gè)零的連串,則該連串為不完全連串。參考表2,第三行,如果輸入數(shù)據(jù)一行中只有例如7個(gè)零(或少于2s),則碼字不能為0,因?yàn)?指一行中8個(gè)零,即完全連串。因此,碼字必須起始為1;這通知解碼器,后面跟著不完全連串。接著,碼字包含不完全連串長度的二進(jìn)制表示。該二進(jìn)制表示使用了s個(gè)比特來指明不完全連串的長度r。
例如,假設(shè)r=7,這樣不完全連串具有7個(gè)零。那么碼字首先始于“1”,以便讓解碼器了解后面跟著一個(gè)不完全連串。由于在這個(gè)示例中s=3,則不完全連串的長度只能是0到7之間的一個(gè)數(shù)(由于只占了3個(gè)比特來表示0到7之間的一個(gè)數(shù))。換言之,r不能占據(jù)超過s個(gè)比特來表示。因此追加該碼字以包括等于111(二進(jìn)制7)的3個(gè)比特。現(xiàn)在,解碼器了解了該連串是不完全連串且該連串長度為7個(gè)零。
接下來,追加該碼字,以表述什么值緊跟在該不完全連串后。跟在不完全連串后的該值由來自自適應(yīng)G/R編碼器的碼字表示。如表2所示,首先,不完全連串后的值通過使用公式4映射。然后,使用自適應(yīng)G/R編碼器獲得G/R碼,它是{u,k}的函數(shù)。表2右下格底部示出用來編碼不完全連串的完整碼字代碼=1+bin(r,s)+GR(u,k),其中bin(r,s)是由s個(gè)比特表示的不完全連串的長度r的二進(jìn)制表示,而GR(u,k)是由表示緊跟在不完全連串后的值的表1給出的G/R碼。
小數(shù)自適應(yīng)小數(shù)自適應(yīng)使用S和K來代替s和k。小數(shù)自適應(yīng)是減慢自適應(yīng)的一種方法。使用沒有小數(shù)自適應(yīng)的自適應(yīng)RLGR編碼器和方法是可能的。然而,如果沒有小數(shù)自適應(yīng),則自適應(yīng)通常變化太快,而無法正確追蹤用于輸入數(shù)據(jù)的最優(yōu)參數(shù)。
在這個(gè)工作示例中,s和k參數(shù)的自適應(yīng)是使用經(jīng)比例縮放的S和K參數(shù)來完成的。因而,更新S和K而非s和k。s和S以及k和K之間的關(guān)系如下s=S/L以及k=K/L,其中L是如上解釋的比例縮放參數(shù)。因此,當(dāng)進(jìn)行自適應(yīng)時(shí),自適應(yīng)S值,而S除以L就獲得s值。注意,所有值都是整數(shù),所以通過s=S/L,意味著是結(jié)果的整數(shù)部分。還要記住,固定比例縮放參數(shù)L被設(shè)為等于2的冪的值(例如L=16),則除以L的除法可通過位移運(yùn)算來有效執(zhí)行。
小數(shù)自適應(yīng)是較佳的,因?yàn)樽赃m應(yīng)RLGR編碼器和方法對(duì)生成的每個(gè)代碼都進(jìn)行了參數(shù)(s和k)的調(diào)整。換言之,在編碼了輸入值或串后,運(yùn)行自適應(yīng)規(guī)則。如果s和k直接通過整數(shù)值變化來自適應(yīng),則由于它們是整數(shù),所有可做的是保持相同或至少增減1。然而,假設(shè)輸入數(shù)據(jù)變得更大,意味著參數(shù)應(yīng)該增加。如果增加s,如加1,它可能太多了。例如,如果s=3,則8個(gè)零的連串將被編碼。s增加1,s則等于4,這意味著現(xiàn)在經(jīng)由單個(gè)碼字=0編碼了16個(gè)零的連串。從8到16的跳躍有點(diǎn)大了。當(dāng)編碼下一串時(shí),它會(huì)發(fā)現(xiàn)s太大,而減少s到3。然而,這可能太小了,而s是振蕩的。
小數(shù)自適應(yīng)允許s的小數(shù)增加。例如,s可以用.5代替1來增加。然而,這是不允許的,因?yàn)閟是整數(shù)參數(shù)。因此小數(shù)自適應(yīng)執(zhí)行S的整數(shù)增加,且用L除以S給出s的小數(shù)增加。例如,假設(shè)L=16,s=3,這意味著S=48。假設(shè)輸入數(shù)據(jù)變得更小,則S應(yīng)該增加。下一次S從48增加到52,當(dāng)除以16時(shí),s仍為3,但S是52。如果另一小輸入數(shù)據(jù)出現(xiàn),則S應(yīng)該從52增加到64,而當(dāng)S=64時(shí),則s=4。這樣,花了兩次發(fā)現(xiàn)輸入數(shù)據(jù)值中的減少以從s=3變成s=4,而不是只因?yàn)槌霈F(xiàn)一個(gè)較小的輸入數(shù)據(jù)s就立即跳到4。這保證了參數(shù)s和k沒有振蕩。
作為使用自適應(yīng),定義一個(gè)標(biāo)志是可能的,這樣如果數(shù)據(jù)有增減,在增減該參數(shù)前通過則某些數(shù)量的編碼周期。可定義追蹤編碼周期數(shù)的新參數(shù)。換言之,該參數(shù)將追蹤在參數(shù)改變前條件(輸入數(shù)據(jù)增加或減少)發(fā)生了多少次。但是應(yīng)該注意,這一技術(shù)是經(jīng)試驗(yàn)的,且小數(shù)自適應(yīng)提供了較好的結(jié)果。
編碼模式參數(shù)自適應(yīng)編碼模式參數(shù)s在編碼了每個(gè)輸入值或串后被自適應(yīng)。當(dāng)使用小數(shù)自適應(yīng)時(shí),實(shí)際自適應(yīng)了小數(shù)編碼模式參數(shù)S,而非直接自適應(yīng)s。表3給出編碼模式參數(shù)s的自適應(yīng)規(guī)則。在自適應(yīng)后,s的值被設(shè)為s=S/L,其中L是比例縮放參數(shù)。在這個(gè)工作示例中,L等于二的冪,因此除法可由右移來實(shí)現(xiàn)。在這個(gè)工作示例中,L=16。
表3在表3上部,給出當(dāng)編碼器處于單G/R模式時(shí)s自適應(yīng)的規(guī)則。如果要編碼的碼元x的絕對(duì)值等于0,則參數(shù)s增加稱為A1的第一整數(shù)常數(shù)。左向箭頭(←)指S由S+A1置換。如果x的絕對(duì)值大于0,則參數(shù)s減少稱為B1的第二整數(shù)常數(shù)。整數(shù)常數(shù)A1和B1都是說明s應(yīng)該向上或下調(diào)整多少的增量或減量。
在表3的下部,給出當(dāng)編碼器處于RLGR模式時(shí)s自適應(yīng)的規(guī)則。如果連串是完全連串,意味著該連串包含2s個(gè)值x=0,則參數(shù)s增加第三整數(shù)常數(shù)A2。但如果連串是部分連串,意味著該連串包含少于2s數(shù)量的零并跟著一個(gè)不是零的x值,則參數(shù)s減少第四整數(shù)常數(shù)B2。使用這些自適應(yīng)規(guī)則,參數(shù)s(或S,如果使用了小數(shù)自適應(yīng))在編碼了每個(gè)輸入值或串后被更新。
通過使用包含在表3中的自適應(yīng)規(guī)則,隱式測算出輸入數(shù)據(jù)的概率模型。事實(shí)上,不是先測算概率隨后嘗試自適應(yīng)參數(shù),而是參數(shù)直接被改變了。在這個(gè)工作示例中,找到以下值來達(dá)到極好的效果L=16,A1=3,B1=3,A2=4,B2=6以及B3=2。如果使用了適當(dāng)?shù)腁1、B1、A2、B2值,則可觀察到實(shí)際上自適應(yīng)RLGR編碼器和方法將比現(xiàn)有技術(shù)更快地追蹤輸入數(shù)據(jù)的統(tǒng)計(jì)量中的變化。這是因?yàn)楝F(xiàn)有技術(shù)首先測算整個(gè)統(tǒng)計(jì)模型,然后調(diào)整參數(shù),諸如G/R參數(shù)?,F(xiàn)有技術(shù)這樣做是因?yàn)闉榱擞?jì)算合理的概率估算,需要大量的數(shù)據(jù)。唯一可用的數(shù)據(jù)是當(dāng)前解碼的值和以前解碼的值。這意味著為使概率估算精確,必須在可進(jìn)行概率估算和找到G/R參數(shù)之前使用大量數(shù)據(jù)。即,在編碼過程中將有延遲。例如,如果正在編碼音頻文件,則在檢測輸入數(shù)據(jù)中的變化時(shí)存在延遲。這意味著G/R參數(shù)不匹配一段時(shí)間中的輸入數(shù)據(jù)。換言之,表3(對(duì)于s參數(shù))和下面表4(對(duì)于k參數(shù))所給出的自適應(yīng)規(guī)則要快得多,并且比現(xiàn)有技術(shù)方法更快地自適應(yīng)輸入數(shù)據(jù)的統(tǒng)計(jì)量。事實(shí)上,這是超過現(xiàn)有技術(shù)的巨大優(yōu)點(diǎn),即對(duì)輸入數(shù)據(jù)的統(tǒng)計(jì)量的快速自適應(yīng)。
單Golomb/Rice模式圖12是示出單G/R模式編碼細(xì)節(jié)及附隨的編碼模式參數(shù)s自適應(yīng)的工作示例。該過程開始(框1205)于讀取輸入向量x(n)(框1210)。單G/R模式的二個(gè)主要過程是碼元編碼(框1215)和編碼模式參數(shù)自適應(yīng)(框1220)。碼元編碼過程開始于定義映射值u(框1225),如表2對(duì)于單G/R模式所示的。接著,使用自適應(yīng)G/R編碼器來編碼輸入值(框1230)。應(yīng)該注意,自適應(yīng)G/R編碼器使用了G/R參數(shù)k自適應(yīng),如圖14所示。碼元編碼過程結(jié)束于將G/R碼追加到輸出編碼比特流(框1235)。
編碼模式參數(shù)自適應(yīng)過程開始于確定u值是否等于零(框1240)。如果否,則更新S并用S增加第一整數(shù)常數(shù)A1來替換(框1245)。如果u不等于零,則更新S并用S減少第二整數(shù)常數(shù)B1來替換(框1250)。最后,設(shè)置s等于S除以L(框1255),且該過程結(jié)束(框1260)。
RLGR模式圖13是示出RLGR模式編碼細(xì)節(jié)和附隨的編碼模式參數(shù)s自適應(yīng)的工作示例。該過程開始(框1305)于讀取輸入向量x(n)(框1310)。再一次,RLGR模式的兩個(gè)主要過程是碼元編碼(框1315)和編碼模式參數(shù)自適應(yīng)(框1320)。但這次,碼元編碼過程使用了自適應(yīng)游程編碼器和自適應(yīng)G/R編碼器來編碼輸入值x(n)。
碼元編碼過程開始于確定x值是否等于零(框1325)。如果這樣,則run由run+1替換(框1330)。接著,確定是否run=2s(框1335)。換言之,連串是完全連串還是不完全連串。如果連串是不完全連串,則該過程結(jié)束(點(diǎn)1340)。如果連串是完全連串,則比特=0追加到比特流(框1345)。然后設(shè)置run值等于零(框1350)。
如果x值不等于零(框1325),則比特=1追加到比特流(框1355)。接著,run的s位二進(jìn)制值(或由s個(gè)比特表示的不完全連串長度)追加到比特流(框1360)。然后使用自適應(yīng)G/R編碼器來編碼不完全連串后的值。具體而言,定義映射值u(框1365),使用自適應(yīng)G/R編碼器來編碼該值,并將G/R碼追加到比特流(框1370)。再一次,應(yīng)該注意,自適應(yīng)G/R編碼器使用G/R參數(shù)k自適應(yīng),如圖14所示。碼元編碼過程結(jié)束于設(shè)置run等于零(框1380)。
如果值x等于零(框1325),編碼模式參數(shù)自適應(yīng)過程更新S并用S增加第三整數(shù)常數(shù)A2來替換(框1385)。如果x值不等于零(框1325),則更新S并用S減少第四整數(shù)常數(shù)B2來替換(框1390)。最后,該過程設(shè)置s等于S除以L(框1395)且該過程結(jié)束(框1398)。如前面所指出的,如果L值選擇為二的冪,則除以L的除法可通過位移運(yùn)算來實(shí)現(xiàn)。
Golomb/Rice(k)參數(shù)自適應(yīng)G/R參數(shù)k在編碼了每個(gè)輸入值或串后被自適應(yīng)。當(dāng)使用小數(shù)自適應(yīng)時(shí),實(shí)際上自適應(yīng)經(jīng)比例縮放的G/R參數(shù)K,而非直接自適應(yīng)k。表4給出用于G/R參數(shù)k的自適應(yīng)規(guī)則。在編碼了值u后,通過自適應(yīng)值p=u>>k來控制自適應(yīng),這意味著u向右移k位。在自適應(yīng)后,k的值被設(shè)為k=K/L,其中L是常數(shù)。在這個(gè)工作示例中,L=16。
表4表1的G/R碼取決于參數(shù)k。例如,如果一個(gè)不完全連串后的值為13,13的GR碼是“1111111111110”(對(duì)于k=0),且如果k=1,則為“11111101”。k越大,則表示13的數(shù)將越小。而k越小,則表示13的數(shù)將越大。因而,參數(shù)k必須已知。這意味著如果對(duì)s和k選擇了合適的值,自適應(yīng)RLGR編碼器和方法會(huì)完成得很好。但是,使用k的大值并不總是有利的,因?yàn)檫@將對(duì)于輸入數(shù)據(jù)的較小值產(chǎn)生較長串,如表1所示。換言之,k值的合適選擇取決于輸入數(shù)據(jù)。如果值為13,則使用k的大值是個(gè)好主意。但是,假設(shè)不完全連串后的值為“1”。則k的較小值是所希望的。因而,對(duì)于不完全連串之后的小值,使用小k更好,而對(duì)于大值,使用大k更好。因此,k的選擇與值的概率有關(guān)。在現(xiàn)有技術(shù)中,有對(duì)為此目的的大量理論成果輸入數(shù)據(jù)的概率已知(例如,如果輸入數(shù)據(jù)是拉普拉斯,其中存在控制衰減的單個(gè)參數(shù)),則有眾所周知的公式,從中可計(jì)算要使用的衰減參數(shù),即參數(shù)k。這平均起來使映射使用盡可能少的比特。
因而,k參數(shù)是自適應(yīng)的是很重要的。以這種方法,如果在輸入數(shù)據(jù)上有大值出現(xiàn),則k應(yīng)該增加,因?yàn)閷?duì)于大值,k越大越好。另一方面,如果有較小值出現(xiàn),則k應(yīng)該減少。直觀上,能夠明白,對(duì)于大數(shù)字,k應(yīng)該增加,而對(duì)于小數(shù)字,k應(yīng)該減少。因此,只要k以足夠小的幅度改變(諸如當(dāng)使用小數(shù)自適應(yīng)時(shí)),對(duì)于輸入數(shù)據(jù)的最優(yōu)參數(shù)將總是被正確地追蹤。
表4所示的k的自適應(yīng)規(guī)則是相當(dāng)新穎的。在自適應(yīng)RLGR編碼器和方法中,任何值都可在不完全零連串后出現(xiàn),因此這個(gè)值必須被編碼。編碼是使用自適應(yīng)G/R編碼器和G/R參數(shù)k來完成的。參考表4,輸入數(shù)據(jù)是x。輸入數(shù)據(jù)x可以是任何整數(shù),小x更可能(可以是正的或是負(fù)的)。但是,G/R編碼只用于正數(shù)。x的直接映射(見公式4)用于將x映射成u。k的自適應(yīng)是由自適應(yīng)值p來控制的,p被定義為u向右移k位。因而,自適應(yīng)值p是u的按比例縮小形式?;蛘撸葍r(jià)地,p參數(shù)是近似于u/2k的整數(shù)。向右移k位等于將此數(shù)除以2k。例如,如果一個(gè)數(shù)向右移5位,這就與將此數(shù)除以32(即25)相同。余數(shù)被舍去,而只使用商。
參考表4,如果自適應(yīng)值p等于零,則K被更新并由K減少第五整數(shù)常數(shù)B3來替換。如果自適應(yīng)值p等于一,則K不變。如果自適應(yīng)值p大于一,則K被更新并由K減少自適應(yīng)值p來替換。
如果p的自適應(yīng)值等于一,這意味著u值接近于2k,且就是對(duì)它們而言參數(shù)k是正確的那些值。因此,如表4所示,沒有變化。如果自適應(yīng)值p的值是0,這意味著輸入值小于2k。即要開始減少k(因?yàn)檩斎胫敌∮?k)。自適應(yīng)值p大于1的情況是不太可能的,因?yàn)檩斎胫挡豢赡芊浅4蟆5绻麛?shù)字是大的且p>1,則要開始增加k參數(shù)。
自適應(yīng)G/R編碼器圖14是示出自適應(yīng)G/R編碼器模塊的編碼細(xì)節(jié)的工作示例,包括G/R參數(shù)k自適應(yīng)規(guī)則。應(yīng)該注意,k自適應(yīng)用于單G/R模式和RLGR模式兩者,但未在圖12和13中示出以免弄亂附圖。該過程開始(框1405)于讀取輸入值u(框1410)。自適應(yīng)G/R模式的兩個(gè)主要過程是G/R編碼(框1415)和G/R參數(shù)自適應(yīng)(框1420)。
G/R編碼過程始于計(jì)算自適應(yīng)值p和v(框1425)。向比特流追加等于一的p個(gè)比特(框1430)。v的k位二進(jìn)制值則被追加在該比特流后(框1435)。這些操作包括如表1所定義的Golomb/Rice編碼器。
G/R參數(shù)自適應(yīng)過程包括確定自適應(yīng)值p是否等于一(框1440)。如果是,則自適應(yīng)值p保持不變(點(diǎn)1445)。否則,做出關(guān)于自適應(yīng)值p是否等于零的另一判斷(框1450)。如果不是,則K被更新并用K減少第五整數(shù)常數(shù)B3來替換(框1455)。否則,K被更新并用K增加自適應(yīng)值p來替換(框1460)。最后,該過程設(shè)置k等于K除以L(框1465),并且該過程結(jié)束(框1470)。
結(jié)果該工作示例的RLGR編碼器和方法已在圖像、音頻和地圖數(shù)據(jù)壓縮的應(yīng)用中實(shí)現(xiàn)。在這些應(yīng)用中使用RLGR編碼器和方法的結(jié)果是壓縮比可與最復(fù)雜熵編碼器相比,但以更簡單的實(shí)現(xiàn)方式。
特別地,對(duì)于用于整數(shù)數(shù)據(jù)的現(xiàn)有熵編碼器,RLGR編碼器和方法對(duì)于大量如圖1中的源碼元概率分布達(dá)到了接近于理論最大值(由源熵所規(guī)定的)壓縮比。作為示例,眾所周知的Golomb/Rice和Huffman編碼器只對(duì)于每碼元1個(gè)比特或更高些的源熵有效。
VIII.解碼自適應(yīng)RLGR編解碼器和方法還包括可基于上述編碼器精確實(shí)現(xiàn)的解碼器。參考圖2B,計(jì)算設(shè)備(框250)可以只實(shí)現(xiàn)RLGR解碼器240。自適應(yīng)RLGR解碼器240和方法從已編碼比特流接收碼字(框230)。接著,自適應(yīng)RLGR解碼器240通過應(yīng)用對(duì)應(yīng)于單G/R模式或RLGR模式中的規(guī)則的逆規(guī)則來解碼碼字。接下來,編碼模式和G/R參數(shù)使用與編碼器的規(guī)則(以上所述的)完全相同的規(guī)則來自適應(yīng)。最后,輸出解碼后的(或重建的)整數(shù)數(shù)據(jù)(框260)。
由于編碼規(guī)則是唯一可解碼的,且解碼器的自適應(yīng)規(guī)則與編碼器的相同,因此前面描述的編碼規(guī)則和自適應(yīng)規(guī)則也精確地描述了解碼器的操作。
本發(fā)明的以上描述已為說明和描述之途而給出。它并不旨在窮盡本發(fā)明或?qū)⒈景l(fā)明限于所公開的精確形式。各種修改和變體鑒于以上示教都是可能的。本發(fā)明范圍不受本發(fā)明詳細(xì)描述所限,而只受所附權(quán)利要求書所限。
權(quán)利要求
1.一種用于編碼數(shù)字?jǐn)?shù)據(jù)(200)的方法,其特征在于,包括在第一編碼模式和第二編碼模式之間選擇,以將所述數(shù)字?jǐn)?shù)據(jù)編碼成已編碼比特流(510),所述第一模式使用第一類熵編碼器而不使用游程編碼器,而所述第二模式使用與所述游程編碼器相結(jié)合的所述第一類熵編碼器;以及使用后向自適應(yīng)技術(shù),基于所述已編碼比特流自適應(yīng)所述第一模式和所述第二模式的編碼器(520)。
2.如權(quán)利要求1所述的方法,其特征在于,所述第一類熵編碼器是結(jié)合了所述第二模式中的游程編碼器的Golomb/Rice編碼器,以生成游程Golomb/Rice(RLGR)編碼器(610)。
3.如權(quán)利要求2所述的方法,其特征在于,還包括使用一編碼模式參數(shù)在所述第一和第二模式之間選擇(520)。
4.如權(quán)利要求2所述的方法,其特征在于,還包括更新一Golomb/Rice參數(shù)(650),包括按照所述Golomb/Rice參數(shù)定義自適應(yīng)值(910);如果所述自適應(yīng)值等于零,則將所述Golomb/Rice參數(shù)減少第三整數(shù)常數(shù)(920);如果所述自適應(yīng)值等于一,則保持所述Golomb/Rice參數(shù)不變(930);以及如果所述自適應(yīng)值大于一,則將所述Golomb/Rice參數(shù)增加所述自適應(yīng)值(935);
5.如權(quán)利要求2所述的方法,其特征在于,還包括在生成的每個(gè)代碼字后自適應(yīng)所述第一模式和第二模式的編碼器。
6.一種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)(310、331、332、341、352、356),如果在計(jì)算機(jī)系統(tǒng)(300)上執(zhí)行所述指令,將指示所述計(jì)算機(jī)系統(tǒng)(300)執(zhí)行如權(quán)利要求1所述的方法。
7.一種用于編碼具有整數(shù)值的數(shù)字整數(shù)數(shù)據(jù)的方法,其特征在于,包括接收所述數(shù)字整數(shù)數(shù)據(jù)的輸入串x(1110);使用一編碼模式參數(shù)s在使用下列之一間選擇(a)只使用自適應(yīng)Golomb/Rice(G/R)編碼器的第一模式;(b)使用自適應(yīng)游程編碼器和所述自適應(yīng)G/R編碼器的第二模式(1115、1120、1125、1130、1135);定義一經(jīng)比例縮放的編碼模式參數(shù)為S=s*L,其中L是比例縮放參數(shù)(1255);在所述第一和第二模式的自適應(yīng)G/R編碼器中使用經(jīng)比例縮放的G/R參數(shù)K;以及使用后向自適應(yīng)技術(shù)更新所述經(jīng)比例縮放的編碼模式參數(shù)S(1395)和所述經(jīng)比例縮放的G/R參數(shù)K(1465)。
8.如權(quán)利要求7所述的方法,其特征在于,還包括如果s=0,以所述第一模式編碼所述輸入串(1130);如果|x|=0,將S增加第一整數(shù)常數(shù)A1(1245);以及如果|x|>0,將S減少第二整數(shù)常數(shù)B1(1250)。
9.如權(quán)利要求7所述的方法,其特征在于,還包括如果s=0,以所述第二模式編碼所述輸入串(1135);如果x包含零連串r,使得r=2s,將S增加第三整數(shù)常數(shù)A2(1385);以及如果x包含零連串r,使得r<2s,將S減少第四整數(shù)常數(shù)B2(1390)。
10.如權(quán)利要求9所述的方法,其特征在于,還包括定義自適應(yīng)值p(1425);如果p=0,將K減少第五整數(shù)常數(shù)B3(1455);如果p=1,保持K不變(1445);以及如果p>1,將K增加p(1460)。
11.一種用于解碼已編碼比特流(230)的方法,其特征在于,包括從所述已編碼比特流(230)接收一碼字;在第一解碼模式和第二解碼模式之間選擇以解碼所述碼字,所述第一模式使用第一類熵解碼器而不使用游程解碼器,而所述第二模式使用與所述游程解碼器相結(jié)合的所述第一類熵解碼器(240);使用后向自適應(yīng)技術(shù)自適應(yīng)所述第一模式和第二模式的解碼器(240);以及從所述經(jīng)解碼的碼字重建數(shù)字?jǐn)?shù)據(jù)的值(260)。
12.一種用于解碼已編碼比特流(230)的計(jì)算機(jī)實(shí)現(xiàn)的過程,所述比特流是從使用具有后向自適應(yīng)技術(shù)的自適應(yīng)游程Golomb/Rice(RLGR)編碼器(200)編碼數(shù)字整數(shù)數(shù)據(jù)中獲得的,其特征在于,包括從表示所述已編碼數(shù)字整數(shù)數(shù)據(jù)(230)的已編碼比特流中接收碼字;在只執(zhí)行Golomb/Rice(G/R)解碼的第一解碼模式和執(zhí)行游程解碼及G/R解碼的第二模式之間切換(240);使用一編碼模式參數(shù)s控制使用所述第一和第二解碼器中的哪一個(gè)(715);以及在解碼每個(gè)碼字后使用所述后向自適應(yīng)技術(shù)來更新所述編碼模式參數(shù)s。
13.如權(quán)利要求12所述的計(jì)算機(jī)實(shí)現(xiàn)的過程,其特征在于,還包括定義一Golomb/Rice(G/R)參數(shù)k(915),來控制所述第一和第二解碼模式兩者的G/R解碼;以及在解碼每個(gè)碼字后使用所述后向自適應(yīng)技術(shù)解碼來更新所述G/R參數(shù)k(940)。
14.如權(quán)利要求13所述的計(jì)算機(jī)實(shí)現(xiàn)的過程,其特征在于,還包括如果s=0,切換到所述第一解碼模式(720)。
15.如權(quán)利要求13所述的計(jì)算機(jī)實(shí)現(xiàn)的過程,其特征在于,還包括如果s>0,切換到所述第二解碼模式(725、730、735)。
16.如權(quán)利要求13所述的計(jì)算機(jī)實(shí)現(xiàn)的過程,其特征在于,還包括定義一比例縮放參數(shù)L(1255);定義一經(jīng)比例縮放的編碼模式參數(shù)為S=s乘以L(1255);定義一經(jīng)比例縮放的G/R參數(shù)為K=k乘以L(1465);以及在解碼每個(gè)碼字后使用所述后向自適應(yīng)技術(shù)和自適應(yīng)規(guī)則來更新所述經(jīng)縮放的編碼模式參數(shù)S(1385、1390)和所述經(jīng)比例縮放的G/R參數(shù)K(1455、1460),而不是s和k。
17.一種自適應(yīng)游程和Golomb/Rice(RLGR)解碼器(240),用于解碼具有表示包含整數(shù)值的已編碼數(shù)字整數(shù)數(shù)據(jù)的碼字的已編碼比特流(230),其特征在于,包括一自適應(yīng)Golomb/Rice(G/R)解碼器(240),用于解碼所述已編碼比特流(230)的碼字;一自適應(yīng)游程解碼器,用于解碼所述碼字(240);一用于使用編碼模式參數(shù)s在只包含所述自適應(yīng)G/R解碼器的第一解碼模式和包含所述自適應(yīng)游程解碼器和所述自適應(yīng)G/R解碼器的第二模式之間切換(405)的裝置;以及一用于使用具有自適應(yīng)規(guī)則的后向自適應(yīng)技術(shù)來更新所述編碼模式參數(shù)s(435)的裝置。
18.如權(quán)利要求17所述的自適應(yīng)RLGR解碼器(240),其特征在于,還包括Golomb/Rice(G/R)參數(shù)k(445),用于使用所述第一和第二解碼模式兩者的自適應(yīng)G/R解碼器來解碼所述碼字;一用于使用具有自適應(yīng)規(guī)則的后向自適應(yīng)技術(shù)來更新所述G/R參數(shù)k(440)的裝置。
19.如權(quán)利要求18所述的自適應(yīng)RLGR解碼器(240),其特征在于,所述自適應(yīng)規(guī)則還包括一用于如下更新所述編碼模式參數(shù)s(430)的裝置如果s=0,將s增加第一整數(shù)常數(shù)A1(1245);如果s>0,將s減少第二整數(shù)常數(shù)B1(1250);如果零連串r是完全連串,使得r=2s,將s增加第三整數(shù)常數(shù)A2(1385);如果零連串r是不完全連串,使得r<2s,將s減少第四整數(shù)常數(shù)B2(1390);以及一用于如下更新所述G/R參數(shù)k(440)的裝置定義自適應(yīng)值p(1425);如果p=0,將k減少第五整數(shù)常數(shù)(1455);如果p=1,將k保持相同(1445);如果p>1,將k增加p(1460)。
20.如權(quán)利要求19所述的自適應(yīng)RLGR解碼器(240),其特征在于,還包括一用于如下定義經(jīng)比例縮放的編碼模式參數(shù)S和經(jīng)比例縮放的G/R參數(shù)K的裝置定義比例縮放參數(shù)L;定義S=s*L(1255);定義K=k*L(1465);以及一用于使用所述各自的自適應(yīng)規(guī)則更新S和K而非s和k的裝置。
全文摘要
一種使用新穎的后向自適應(yīng)技術(shù)的整數(shù)數(shù)據(jù)無損壓縮的方法和系統(tǒng)。自適應(yīng)游程和Golomb/Rice(RLGR)編碼器和解碼器(編解碼器)及方法在單Golomb/Rice(G/R)編碼器模式和使用結(jié)合了游程編碼碼器的G/R編碼器之間切換。該后向自適應(yīng)技術(shù)包括新穎的自適應(yīng)規(guī)則,它們在每個(gè)已編碼碼元后調(diào)整編碼器參數(shù)。自適應(yīng)編碼模式參數(shù)和G/R參數(shù)。編碼模式參數(shù)控制自適應(yīng)RLGR編碼器和方法是否使用游程編碼,如果是,則使用它。G/R參數(shù)用于兩種模式,以編碼每個(gè)輸入值(在單G/R模式中)或者編碼不完全零連串后的數(shù)字或值(在RLGR模式中)。該自適應(yīng)RLGR編解碼器和方法還包括一解碼器,它能基于逆編碼規(guī)則來精確實(shí)現(xiàn)。
文檔編號(hào)H03M7/30GK1767395SQ20051010849
公開日2006年5月3日 申請日期2005年9月29日 優(yōu)先權(quán)日2004年10月29日
發(fā)明者H·S·馬爾瓦 申請人:微軟公司