數(shù)據(jù)壓縮與信源編碼第4講算術(shù)編碼_第1頁
數(shù)據(jù)壓縮與信源編碼第4講算術(shù)編碼_第2頁
數(shù)據(jù)壓縮與信源編碼第4講算術(shù)編碼_第3頁
數(shù)據(jù)壓縮與信源編碼第4講算術(shù)編碼_第4頁
數(shù)據(jù)壓縮與信源編碼第4講算術(shù)編碼_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)壓縮與信源編碼

第4講算術(shù)編碼

ArithmeticCoding西安電子科技大學(xué)電子工程學(xué)院主講:林三虎算術(shù)編碼的提出Huffman編碼是最佳變長(zhǎng)碼,但仍包含冗余信息。符號(hào)a1a2a3a4a5概率0.20.40.20.10.1Huffman編碼10011011101111Huffman編碼平均碼長(zhǎng)=0.2*2+0.4*1+0.2*3+0.1*4+0.1*4=2.2bits信源的熵Huffman編碼冗余度=Huffman編碼平均碼長(zhǎng)-信源的熵=0.078bits/symbol算術(shù)編碼的提出為什么Huffman編碼不能達(dá)到理論上的極限?符號(hào)a1a2a3a4a5概率0.20.40.20.10.1信息量bit2.321.322.323.323.32Huffman編碼10011011101111Huffman編碼的問題在于每個(gè)符號(hào)的編碼長(zhǎng)度只能為整數(shù),而信息論告訴我們,對(duì)每個(gè)符號(hào)的最佳編碼長(zhǎng)度為其信息量。能否用小數(shù)個(gè)二進(jìn)制位來進(jìn)行編碼呢?行!這就是算術(shù)編碼。1948年,香農(nóng)提出了算術(shù)編碼的基本思想,并證明了其優(yōu)越性。算術(shù)編碼的主要步驟算術(shù)編碼主要步驟10①將當(dāng)前區(qū)間定義為[0,1)。算術(shù)編碼的主要步驟算術(shù)編碼主要步驟SWIM空格10.50.40.20.10②把當(dāng)前區(qū)間分割為長(zhǎng)度正比于符號(hào)概率的子區(qū)間。示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮符號(hào)SWIM空格頻率51211概率0.50.10.20.10.1算術(shù)編碼的主要步驟算術(shù)編碼主要步驟SWIM空格10.50.40.20.10③為輸入的符號(hào)選擇一個(gè)子區(qū)間,將其定義為新的當(dāng)前區(qū)間。示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮第一個(gè)字符為S,對(duì)應(yīng)區(qū)間為[0.5,1.0),將其作為當(dāng)前區(qū)間,按照概率進(jìn)行分割10.50.5+0.5*0.1=0.550.5+0.5*0.2=0.60.5+0.5*0.4=0.70.5+0.5*0.5=0.75算術(shù)編碼的主要步驟算術(shù)編碼主要步驟SWIM空格10.750.70.60.550.5③為輸入的符號(hào)選擇一個(gè)子區(qū)間,將其定義為新的當(dāng)前區(qū)間。示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮第二個(gè)字符為W,對(duì)應(yīng)區(qū)間為[0.7,0.75),將其作為當(dāng)前區(qū)間,按照概率進(jìn)行分割0.70.750.7+0.05*0.1=0.7050.7+0.05*0.2=0.710.7+0.05*0.4=0.720.7+0.05*0.5=0.725算術(shù)編碼的主要步驟算術(shù)編碼主要步驟SWIM空格③為輸入的符號(hào)選擇一個(gè)子區(qū)間,將其定義為新的當(dāng)前區(qū)間。示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮第三個(gè)字符為I,對(duì)應(yīng)區(qū)間為[0.7,0.75),將其作為當(dāng)前區(qū)間,按照概率進(jìn)行分割0.70.750.7050.710.720.7250.710.720.71+0.01*0.1=0.7110.71+0.01*0.2=0.7120.71+0.01*0.4=0.7140.71+0.01*0.5=0.715算術(shù)編碼的主要步驟算術(shù)編碼主要步驟將當(dāng)前區(qū)間定義為[0,1)。把當(dāng)前區(qū)間分割為長(zhǎng)度正比于符號(hào)概率的子區(qū)間。為輸入的符號(hào)選擇一個(gè)子區(qū)間,將其定義為新的當(dāng)前區(qū)間。重復(fù)②③兩步,知道所有符號(hào)輸入完成。以當(dāng)前區(qū)間中的任意一個(gè)數(shù)字作為輸入符號(hào)序列的編碼。SWIM空格0.70.750.7050.710.720.7250.710.720.71+0.01*0.1=0.7110.71+0.01*0.2=0.7120.71+0.01*0.4=0.7140.71+0.01*0.5=0.715算術(shù)編碼的示例1示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮符號(hào)下限上限S0.51.0W0.70.75I0.710.72S0.7150.72S0.71750.72空格0.71750.71775M0.7175250.71755I0.7175300.717535S0.71753250.717535S0.717533750.717535算術(shù)編碼的示例1示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮輸入序列”SWISSMISS”對(duì)應(yīng)區(qū)間為輸入序列”SWISSMISS”包含10個(gè)字符,0.717534只包含6個(gè)十進(jìn)制數(shù)字,數(shù)碼縮短,完成數(shù)據(jù)壓縮。算術(shù)編碼基本過程可以用下面兩個(gè)式子迭代來完成[0.71753375,0.717535)選擇該區(qū)間中任意一個(gè)數(shù)字可代表該輸入序列,如0.717534。算術(shù)編碼的示例1示例1:對(duì)壓縮序列0.717534進(jìn)行解碼0.717534在[0.5,1)范圍內(nèi),因此第一個(gè)符號(hào)為S。0.435068在[0.4,0.5)范圍內(nèi),因此第二個(gè)符號(hào)為W。0.35068在[0.2,0.4)范圍內(nèi),因此第三個(gè)符號(hào)為I。0.7534在[0.5,1.0)范圍內(nèi),因此第四個(gè)符號(hào)為S。SWIM空格10.50.40.20.10算術(shù)編碼的示例1示例1:對(duì)壓縮序列0.717534進(jìn)行解碼0.5068在[0.5,1.0)范圍內(nèi),因此第五個(gè)符號(hào)為S。0.0136在[0.0,0.1)范圍內(nèi),因此第六個(gè)符號(hào)為空格。0.136在[0.1,0.2)范圍內(nèi),因此第七個(gè)符號(hào)為M。SWIM空格10.50.40.20.10算術(shù)編碼的示例1示例1:對(duì)壓縮序列0.717534進(jìn)行解碼0.8在[0.5,1.0)范圍內(nèi),因此第九個(gè)符號(hào)為S。0.6在[0.5,1.0)范圍內(nèi),因此第十個(gè)符號(hào)為S。0.36在[0.2,0.4)范圍內(nèi),因此第八個(gè)符號(hào)為I。解碼過程可以用下式來表示SWIM空格10.50.40.20.10算術(shù)編碼的示例1問題1:第十個(gè)符號(hào)S解碼出來以后,數(shù)值為0.6,如何知道碼流解碼已經(jīng)結(jié)束?0.6在[0.5,1.0)范圍內(nèi),因此第十個(gè)符號(hào)為S。解答1:在編碼過程中記錄碼流的長(zhǎng)度,添加在壓縮碼流的前面進(jìn)行存儲(chǔ)/傳送。解碼時(shí)首先獲得碼流長(zhǎng)度,當(dāng)解碼到指定長(zhǎng)度時(shí)結(jié)束。解答2:人為添加一個(gè)概率非常小的字符EOF在原始碼流的最后一起編碼,當(dāng)解碼出現(xiàn)EOF的時(shí)候結(jié)束。算術(shù)編碼的示例2示例2:對(duì)輸入序列”SWIS”進(jìn)行壓縮符號(hào)SWIEOF頻率5111概率0.40.20.20.2區(qū)間[0.6,1.0)[0.4,0.6)[0.2,0.4)[0.0,0.2)符號(hào)下限上限S0.61.0W0.6+0.4*0.4=0.760.6+0.4*0.6=0.84I0.76+0.2*0.08=0.7760.76+0.4*0.08=0.792S0.776+0.016*0.6=0.78560.792EOF0.7856+0.0064*0=0.78560.7856+0.0064*0.2=0.78688算術(shù)編碼的示例2示例2:對(duì)輸入序列”SWIS”進(jìn)行壓縮符號(hào)SWIEOF頻率5111概率0.40.20.20.2區(qū)間[0.6,1.0)[0.4,0.6)[0.2,0.4)[0.0,0.2)符號(hào)下限上限S0.61.0W0.6+0.4*0.4=0.760.6+0.4*0.6=0.84I0.76+0.2*0.08=0.7760.76+0.4*0.08=0.792S0.776+0.016*0.6=0.78560.792EOF0.7856+0.0064*0=0.78560.7856+0.0064*0.2=0.78688可以選擇0.7856或者0.786作為輸出算術(shù)編碼的示例2示例2:對(duì)壓縮序列0.786進(jìn)行解碼0.786在[0.6,1)范圍內(nèi),因此第一個(gè)符號(hào)為S。0.465在[0.4,0.6)范圍內(nèi),因此第二個(gè)符號(hào)為W。0.325在[0.2,0.4)范圍內(nèi),因此第三個(gè)符號(hào)為I。0.625在[0.6,1.0)范圍內(nèi),因此第四個(gè)符號(hào)為S。0.125在[0,0.2)范圍內(nèi),因此第五個(gè)符號(hào)為EOF,解碼結(jié)束。SWIEOF10.60.40.20整數(shù)算術(shù)編碼在算術(shù)編碼中,當(dāng)前區(qū)間的下限LOW和上限HIGH隨著碼流長(zhǎng)度的增大,將變的無限長(zhǎng)。而實(shí)際上,雙精度的實(shí)數(shù)也只有16位有效數(shù)字,更長(zhǎng)精度的數(shù)無法表示。比如一個(gè)1MB的文件被壓縮成100KB,即當(dāng)前區(qū)間需要用100KB長(zhǎng)的數(shù)來表示,而兩個(gè)這樣的數(shù)進(jìn)行加減乘除都需要很長(zhǎng)的時(shí)間。因此,一個(gè)實(shí)用的方案應(yīng)當(dāng)采用有限長(zhǎng)度的整數(shù)運(yùn)算。即使有一種方法能夠表示足夠長(zhǎng)的數(shù)據(jù)精度,兩個(gè)很長(zhǎng)的數(shù)進(jìn)行運(yùn)算,花費(fèi)的時(shí)間也無法承受。整數(shù)算術(shù)編碼早在1948年,香農(nóng)就提出了算術(shù)編碼的基本思想。1960年,PeterElias提出了算術(shù)編碼的概念,但他發(fā)現(xiàn)實(shí)際當(dāng)中根本無法實(shí)現(xiàn)。直到1976年,R.Pasco和J.Rissanen才分別用定長(zhǎng)的寄存器實(shí)現(xiàn)了有限精度的算術(shù)編碼。1987年Witten等人發(fā)表了一個(gè)實(shí)用的算術(shù)編碼程序,后用于ITU-T的H.263視頻壓縮標(biāo)準(zhǔn)。整數(shù)算術(shù)編碼示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮符號(hào)下限上限S0.51.0W0.700.75I0.710.72S0.7150.720S0.71750.720空格0.717500.71775M0.7175250.717550I0.7175300.717535S0.71753250.7175350S0.717533750.71753500如何利用有限字長(zhǎng)寄存器來實(shí)現(xiàn)算術(shù)編碼?整數(shù)算術(shù)編碼示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮符號(hào)下限上限S0.51.0W0.700.75I0.710.72S0.7150.720S0.71750.720空格0.717500.71775M0.7175250.717550I0.7175300.717535S0.71753250.7175350S0.717533750.71753500在算術(shù)編碼中,當(dāng)前區(qū)間的下限LOW和上限HIGH左邊的數(shù)字一旦相同,就不會(huì)再變化。整數(shù)算術(shù)編碼示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮相同的數(shù)字可以直接輸出到壓縮碼流,這樣LOW和HIGH中可以不用再保留它們,將它們從LOW和HIGH中移出去。這個(gè)特點(diǎn)使得LOW和HIGH可以使用較短的長(zhǎng)度來表示。符號(hào)下限上限S0.51.0W0.700.75I0.710.72S0.7150.720S0.71750.720空格0.717500.71775M0.7175250.717550I0.7175300.717535S0.71753250.7175350S0.717533750.71753500整數(shù)算術(shù)編碼示例1:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮相同的數(shù)字可以直接輸出到壓縮碼流,這樣LOW和HIGH中可以不用再保留它們,將它們從LOW和HIGH中移出去。這個(gè)特點(diǎn)使得LOW和HIGH可以使用較短的長(zhǎng)度來表示。符號(hào)下限上限S0.51.0W0.700.75I0.710.72S0.7150.720S0.71750.720空格0.717500.71775M0.7175250.717550I0.7175300.717535S0.71753250.7175350S0.717533750.71753500整數(shù)算術(shù)編碼以0.0000…表示0,以0.99999…表示1。以4位表示,則初始值LOW=0000,HIGH=9999。如果最高位數(shù)字相等,則移出最高位,然后LOW的右邊補(bǔ)0,HIGH的右邊補(bǔ)9。符號(hào)SWIM空格頻率51211概率0.50.10.20.10.1區(qū)間[0.5,1.0)[0.4,0.5)[0.2,0.4)[0.1,0.2)[0,0.1)LowCumFreq54210HighCumFreq105421整數(shù)算術(shù)編碼示例3:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮,輸出為717533750符號(hào)下限計(jì)算上限計(jì)算輸出下限上限S0000+10000*5/10=50000000+10000*10/10-1=999950009999W5000+5000*4/10=70005000+5000*6/10-1=7499700004999I0000+5000*2/10=10000000+5000*4/10-1=1999100009999S0000+10000*5/10=50000000+10000*10/10-1=999950009999S5000+5000*5/10=75005000+5000*10/10-1=999975009999空格7500+2500*0/10=75007500+2500*2/10-1=7749750007499整數(shù)算術(shù)編碼示例3:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮,輸出為717533750符號(hào)下限計(jì)算上限計(jì)算輸出下限上限空格7500+2500*0/10=75007500+2500*2/10-1=7749750007499M5000+2500*1/10=52505000+2500*2/10-1=5499525004999I2500+2500*2/10=30002500+2500*4/10-1=3499300004999S0000+5000*5/10=25000000+5000*10/10-1=499925004999S2500+2500*5/10=37502500+2500*10/10-1=4999375037504999編碼結(jié)束時(shí),當(dāng)前下限應(yīng)當(dāng)輸出,即輸出3750或輸出4。整數(shù)算術(shù)編碼示例3:對(duì)輸入序列”SWISSMISS”進(jìn)行壓縮,輸出為717533750符號(hào)下限計(jì)算上限計(jì)算輸出下限上限S0000+10000*5/10=50000000+10000*10/10-1=999950009999W5000+5000*4/10=70005000+5000*6/10-1=7499700004999I0000+5000*2/10=10000000+5000*4/10-1=1999100009999S0000+10000*5/10=50000000+10000*10/10-1=999950009999S5000+5000*5/10=75005000+5000*10/10-1=999975009999空格7500+2500*0/10=75007500+2500*2/10-1=7749750007499M5000+2500*1/10=52505000+2500*2/10-1=5499525004999I2500+2500*2/10=30002500+2500*4/10-1=3499300004999S0000+5000*5/10=25000000+5000*10/10-1=499925004999S2500+2500*5/10=37502500+2500*10/10-1=4999375037504999整數(shù)算術(shù)編碼整數(shù)算術(shù)編碼的解碼過程如下:并截尾到最近的整數(shù)如果Low和High最左邊的數(shù)字相等,就把Low和High和Code左移一位。Low的右邊補(bǔ)0,High的右邊補(bǔ)9,Code的右邊補(bǔ)上壓縮碼流的下一位數(shù)字用Index和累積頻率表相比較,解出下一個(gè)符號(hào)。重復(fù)上述過程直到解碼結(jié)束。整數(shù)算術(shù)編碼示例3:對(duì)壓縮碼流717533750進(jìn)行解碼。計(jì)算輸出修正Index=((7175-0+1)*10-1)/(9999-0+1)=7.1759S7175Low=0+(9999-0+1)*5/10=50005000High=0+(9999-0+1)*10/10-1=99999999Index=((7175-5000+1)*10-1)/(9999-5000+1)=4.3518W1753Low=5000+(9999-5000+1)*4/10=70000000High=5000+(9999-5000+1)*5/10-1=74994999整數(shù)算術(shù)編碼示例3:對(duì)壓縮碼流717533750進(jìn)行解碼。計(jì)算輸出修正Index=((1753-0000+1)*10-1)/(4999-0000+1)=3.5078I7533Low=0000+(4999-0000+1)*2/10=10000000High=0000+(4999-0000+1)*4/10-1=19999999Index=((7533-0+1)*10-1)/(9999-0+1)=7.5339S7533Low=0+(9999-0+1)*5/10=50005000High=0+(9999-0+1)*10/10-1=99999999整數(shù)算術(shù)編碼示例3:對(duì)壓縮碼流717533750進(jìn)行解碼。計(jì)算輸出修正Index=((7533-5000+1)*10-1)/(9999-5000+1)=5.0678S7533Low=5000+(9999-5000+1)*5/10=75000000High=5000+(9999-5000+1)*10/10-1=99994999Index=((7533-7500+1)*10-1)/(9999-7500+1)=0.1356空格5337Low=7500+(9999-7500+1)*0/10=75005000High=7500+(9999-7500+1)*1/10-1=77497499整數(shù)算術(shù)編碼示例3:對(duì)壓縮碼流717533750進(jìn)行解碼。計(jì)算輸出修正Index=((5337-5000+1)*10-1)/(9999-5000+1)=1.3516M3375Low=5000+(9999-5000+1)*1/10=52502500High=5000+(9999-0+1)*2/10-1=54994999Index=((3375-2500+1)*10-1)/(4999-2500+1)=3.5063I3750Low=2500+(4999-2500+1)*2/10=30000000High=2500+(4999-2500+1)*4/10-1=34994999整數(shù)算術(shù)編碼示例3:對(duì)壓縮碼流717533750進(jìn)行解碼。計(jì)算輸出修正Index=((3750-0000+1)*10-1)/(4999-0000+1)=7.5018S3750Low=0000+(4999-0000+1)*5/10=25002500High=0000+(4999-0000+1)*10/10-1=49994999Index=((3750-2500+1)*10-1)/4999-2500+1)=5.0036S3375Low=2500+(4999-2500+1)*5/10=37502500High=2500+(4999-2500+1)*10/10-1=49994999解碼結(jié)果為SWISSMISS整數(shù)算術(shù)編碼問題2:當(dāng)LOW和HIGH計(jì)算出現(xiàn)3999和4000時(shí),區(qū)間長(zhǎng)度只有1,繼續(xù)編碼LOW和HIGH的值將一直保持3999和4000。在這種情況下,直到輸入碼流結(jié)束,編碼器都將不會(huì)產(chǎn)生輸出。如何避免這種情況?解答:在區(qū)間變短的時(shí)候就要提前進(jìn)行處理。比如在出現(xiàn)39xx和40xx的時(shí)候,就要對(duì)區(qū)間進(jìn)行比例放大。整數(shù)算術(shù)編碼解答:當(dāng)出現(xiàn)39xx和40xx的時(shí)候,將次高位9和0移出,LOW和HIGH變?yōu)?xx0和4xx9,使得區(qū)間放大。這個(gè)過程可能重復(fù)若干次,直到區(qū)間變的足夠大。以Scale記錄移出次高位的次數(shù),每當(dāng)次高位移出,變量Scale加1。繼續(xù)迭代,直到區(qū)間變?yōu)閇3xxx,3xxx)或[4xxx,4xxx)。輸出最高位。如果最高位為3,則輸出Scale個(gè)9;如果最高位為4,則輸出Scale個(gè)0。將Scale清0。整數(shù)算術(shù)編碼下限3999399039003000迭代3xxx上限4000400940994999迭代3xxxScale01230輸出無無無無無3999實(shí)際上是3999xxx,因?yàn)?99先被移出去了下限3999399039003000迭代4xxx上限4000400940994999迭代4xxxScale01230輸出無無無無無4000實(shí)際上是4000xxx,因?yàn)?00先被移出去了整數(shù)算術(shù)編碼問題3:LOW和HIGH需要使用多少位?用000表示0,用999表示1行不行?解答:High和Low都是整數(shù),要保證在每次迭代時(shí)每個(gè)符號(hào)的區(qū)間寬度大于0,無法進(jìn)行表示。TotalCumFreq等價(jià)于數(shù)據(jù)長(zhǎng)度,數(shù)據(jù)越長(zhǎng),LOW和HIGH需要的位數(shù)越多。二進(jìn)制算術(shù)編碼以m個(gè)0代表0,1個(gè)1和m-1個(gè)0代表0.5,m個(gè)1代表1。以表示符號(hào)i出現(xiàn)的次數(shù),定義編碼下限l和上限u可以用下式迭代:二進(jìn)制算術(shù)編碼如果l和u的最高位都是b,或者Scale條件成立如果l和u的最高位都是b將b輸出到碼流將l左移1位,最低位補(bǔ)0將u左移1位,最低位補(bǔ)1如果Scale>0,輸出b的補(bǔ),scale減1如果Scale條件成立將l左移1位,最低位補(bǔ)0將u左移1位,最低位補(bǔ)1l和u最高位取反,scale加1LOWHIGH0X0X輸出01X1X輸出10010正常區(qū)間0111正常區(qū)間0011正常區(qū)間0110Scale區(qū)間二進(jìn)制算術(shù)編碼假定對(duì)序列1,3,2,1進(jìn)行算術(shù)編碼,其統(tǒng)計(jì)參數(shù)XCount(X)CumCount(X)0001404021413950選用8位二進(jìn)制數(shù)計(jì)算,初始值Scale=0,Low=0=(00000000)2,High=255=(11111111)2二進(jìn)制算術(shù)編碼第一個(gè)符號(hào)是1XCount(X)CumCount(X)0001404021413950最高位不相等,無輸出二進(jìn)制算術(shù)編碼第二個(gè)符號(hào)是3XCount(X)CumCount(X)0001404021413950最高位相等,輸出最高位1。low和High左移1位,Low最低位補(bǔ)0,High最低位補(bǔ)1二進(jìn)制算術(shù)編碼現(xiàn)在Low=01xxxxxx,High=10xxxxxx,將區(qū)間比例放大。Low和High分別左移1位,最高位取反,右邊分別補(bǔ)0和1,標(biāo)志變量Scale加1。第二個(gè)符號(hào)的輸出為1二進(jìn)制算術(shù)編碼第三個(gè)符號(hào)是2XCount(X)CumCount(X)0001404021413950最高位相等,輸出最高位1。low和High左移1位,Low最低位補(bǔ)0,High最低位補(bǔ)1。因Scale=1,再輸出最高位的補(bǔ)碼,即1個(gè)0,將Scale減1變?yōu)?。二進(jìn)制算術(shù)編碼最高位仍然相等,輸出最高位0。low和High左移1位,Low最低位補(bǔ)0,High最低位補(bǔ)1最高位仍然相等,輸出最高位0。low和High左移1位,Low最低位補(bǔ)0,High最低位補(bǔ)1二進(jìn)制算術(shù)編碼最高位仍然相等,輸出最高位1。low和High左移1位,Low最低位補(bǔ)0,High最低位補(bǔ)1最高位仍然相等,輸出最高位0。low和High左移1位,Low最低位補(bǔ)0,High最低位補(bǔ)1。二進(jìn)制算術(shù)編碼現(xiàn)在Low=01xxxxxx,High=10xxxxxx,將區(qū)間比例放大。Low和High分別左移1位,最高位取反,右邊分別補(bǔ)0和1,標(biāo)志變量Scale加1。第三個(gè)符號(hào)的輸出為100010二進(jìn)制算術(shù)編碼第四個(gè)符號(hào)是1最高位不相等,無輸出。因碼流結(jié)束,應(yīng)輸出結(jié)束時(shí)的Low,即輸出8個(gè)0。又因Scale=1,在輸出第1個(gè)0之后應(yīng)插入1個(gè)1。因此第四個(gè)符號(hào)的輸出為010000000碼流1,3,2,1的輸出為1100010010000000二進(jìn)制算術(shù)編碼解碼過程剛好相反以Index解碼符號(hào)x初始化l和u。從壓縮碼流讀入m個(gè)比特作為t。二進(jìn)制算術(shù)編碼如果l和u的最高位都是b,或者Scale條件成立如果l和u的最高位都是b將t左移1位,最低位從壓縮碼流補(bǔ)1個(gè)比特將l左移1位,最低位補(bǔ)0將u左移1位,最低位補(bǔ)1如果Scale條件成立將t左移1位,最低位從壓縮碼流補(bǔ)1個(gè)比特將l左移1位,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論