TSBK04 Datakompression Övningsuppgifter Innehåll 1 Informationsteoretiska begrepp........................ 1 2 Källkodning................................... 4 Copyright c 2004 Bildkodningsgruppen, Linköpings Universitet
Problem 1 Informationsteoretiska begrepp 1.1 Den stokastiska variabeln X tar värden i alfabetet {1,2,3,4}. Sannolikhetsfunktionen är p X (x i ) = 1 4, x i. Beräkna H(X) 1.2 Den stokastiska variabeln Y tar värden i alfabetet {1,2,3,4}. Sannolikhetsfunktionen är p Y (1) = 1 2, p Y (2) = 1 4, p Y (3) = p Y (4) = 1 8. Beräkna H(Y) 1.3 Antag att X och Y i 1.1 och 1.2 är oberoende. Betrakta den stokastiska variabeln (X,Y ). a) Bestäm p XY (x i,y j ). b) Beräkna H((X,Y )) = H(X,Y ) c) Visa att H(X,Y ) = H(X) + H(Y ) då X och Y är oberoende. d) Generalisering: Visa att H(X 1,X 2,...,X n ) = H(X 1 ) +... + H(X n ) så länge alla variablerna är inbördes oberoende. 1.4 Z tar värden i {1, 2, 3, 4} a) Ge ett exempel på en sannolikhetsfunktion p Z som maximerar H(Z). Är p Z unik? b) Ge ett exempel på en sannolikhetsfunktion p Z som minimerar H(Z). Är p Z unik? 1.5 Låt den stokastiska variabeln U ta värden i det oändliga alfabetet {0,1,2,...}, med sannolikhetsfunktionen p U (u i ) = q i (1 q), 0 < q < 1. a) Kontrollera att p U (u i ) = 1. b) Beräkna H(U) i=0 c) Beräkna väntevärdet E {U } 1.6 Visa att, Ledning: Utnyttja olikheten ln x x 1. I(X,Y ) = H(X) H(X Y ) 0 1.7 En binär minnesfri källa där de två symbolerna har sannolikheterna {p,1 p} har entropin H. Uttryck entropierna för följande källor i H. a) En minnesfri källa med fyra symboler med sannolikheterna { p 2, p 2, 1 p 2, 1 p 2 } b) En minnesfri ternär källa med sannolikheterna { p 2, p,1 p} 2 c) En minnesfri källa med fyra symboler med sannolikheterna {p 2,p(1 p),(1 p)p,(1 p) 2 }. 1.8 Låt X vara en stokastisk variabel och f en godtycklig deterministisk funktion av alfabetet. Visa att a) H(f(X) X) = 0 b) H(X, f(x)) = H(X) c) H(f(X)) H(X) 1.9 Låt X och Y vara två oberoende stokastiska variabler. Visa att 1.10 Visa att H(X) H(X + Y ) H(X,Y ) H(X Z) H(X Y ) + H(Y Z) Ledning: Starta med H(X Y ) H(X Y Z) och utnyttja kedjeregeln 1.11 Visa att H(X 1,...,X n+1 ) = H(X 1,...,X n ) + H(X n+1 X 1,...X n ) 1.12 En likformigt fördelad stokastisk variabel tar värden ur alfabetet {0000, 0001, 0010,..., 1011} (talen 0 till 11 skrivna som fyrabitars binära tal). a) Vad är entropin för den minst signifikanta biten? b) Vad är entropin för den mest signifikanta biten? c) Vad är entropin för hela fyrabitarsordet? 1 2
1.13 En första ordningens markovkälla X i med alfabet {0,1,2} har övergångssannolikheter enligt figuren. Beräkna de stationära sannolikheterna för tillstånden. 1.14 Betrakta markovkällan i 1.13. a) Beräkna den minnesfria entropin. 0.1 0.8 0 0.5 0.1 0.5 1 2 0.5 0.5 b) Beräkna blockentropin H(X i,x i+1 ). Jämför med H(X i ) + H(X i+1 ) = 2H(X i ). c) Beräkna den betingade entropin H(X i X i 1 ) 1.15 En andra ordningens markovkälla X i med alfabet {a,b} har övergångssannolikheterna p Xi Xi 1X i 2 nedan: p(a aa) = 0.7, p(b aa) = 0.3, p(a ba) = 0.4, p(b ba) = 0.6 p(a ab) = 0.9, p(b ab) = 0.1, p(a bb) = 0.2, p(b bb) = 0.8 Beräkna entropierna H(X i ), H(X i X i 1 ), H(X i X i 1 X i 2 ), H(X i X i 1 ) och H(X i X i 1 X i 2 ). 2 Källkodning 2.1 En föreslagen kod för en källa med alfabet A = {1,...,8} har kodordslängderna l 1 = 2, l 2 = 2, l 3 = 3, l 4 = 4, l 5 = 4, l 6 = 5, l 7 = 5 och l 8 = 6. Kan man konstruera en prefixkod med dessa längder? 2.2 En källa har det oändliga alfabetet A = {1,2,3,..., } och symbolsannolikheter P = { 1 2, 1 4, 1 8,...}, dvs p(i) = 2 i, i A. Konstruera en optimal binär prefixkod för källan och beräkna den förväntade datatakten R i bitar/symbol. 2.3 Betrakta följande markovkälla av ordning 1, där p = 8 0.5: p a 1 p 1 p Konstruera huffmankoder för källan där vi kodar 2 respektive 3 symboler i taget. Beräkna datatakterna för de två koderna. Vilken kod är bäst? 2.4 Betrakta källan i problem 2.3. Den ger ifrån sig skurar av a och b. Istället för att koda symboler, kan man koda längden av varje skur. Vi skapar alltså en ny källa R som har ett oändligt alfabet av skurlängder B = {1, 2, 3,...}. a) Vad är sannolikheten för en skur av längd r? b) Vad är den förväntade skurlängden (i symboler/skur)? c) Vad är entropin för R (i bitar/skur)? d) Vad är entropitakten för källan (i bitar/symbol)? 2.5 Vi vill nu göra en enkel systematisk kod för skurlängderna från källan i 2.3. a) Konstruera en fyrabitars fixlängdskod för skurlängderna 1 till 14. Längre skurar kodas som 15 följt av kodordet för en skur av längd-15, dvs skurlängden 15 kodas som 15 0, skurlängden 17 kodas som 15 2, skurlängden 40 kodas som 15 15 10 och så vidare. Beräkna datatakten för koden i bitar/symbol. b) Ändra kordslängden till fem bitar och gör samma sak som ovan b p 3 4
2.6 Vi vill nu koda skurlängderna från källan i 2.3 med hjälp av golombkodning. a) Hur ska parametern m väljas så att vi får en optimal kod? b) Beräkna den resulterande datatakten. 2.7 Vi vill sända dokument med en faxmaskin. Faxen klarar av färgerna svart och vitt. Experiment har visat att textområden och bildområden av dokumenten har olika statistiska egenskaper. Dokumenten läses av och kodas radvis, enligt en tidsdiskret stationär process. De följande betingade sannolikheterna har skattats från en stor mängd testdata Färg på Sannolikhet för färg på nästa bildpunkt nuvarande Textområde Bildområde bildpunkt svart vit svart vit svart 0.5 0.5 0.7 0.3 vit 0.1 0.9 0.2 0.8 Sannolikheten att vi befinner oss i ett textområde är 4 5 och sannolikheten att vi befinner oss i ett bildområde är 1 5. Antag att de estimerade sannolikheterna är korrekta och besvara nedanstående frågor. a) Antag att vi kan försumma kostnaden för att koda vilka områden i dokumentet som är text och vilka områden som är bilder. Beräkna en övre gräns för den teoretiskt lägsta datatakten som vi kan koda dokument med, i bitar/bildpunkt. b) Konstruera en huffmankod för textområdena som har en datatakt på 0.65 bitar/bildpunkt eller mindre. 2.8 Betrakta följande markovkälla av ordning 1 0.1 A C 0.5 0.7 0.5 B D 0.8 0.2 0.9 0.3 a) Visa att det är möjligt att koda utsignalen från källan med en datatakt som är mindre än 0.6 bitar/symbol. b) Konstruera optimala trädkoder för enstaka symboler och för par av symboler från källan. Beräkna de resulterande datatakterna. 5 6
2.9 Man vill koda konturer av objekt i bilder effektivt. Konturer utgörs av en kedja konturelement. Ett konturelement är den en bildpunkt långa gränsen mellan två bildpunkter. Till höger visas en kontur bestående av 22 konturelement: Ett naturligt sätt att koda en kontur är att införa ett alfabet A = {V,R,H} där V står för sväng vänster, R för rakt fram och H för sväng höger. Märk att redan genom detta val av alfabet har man utnyttjat minne i konturkällan genom att man strykt möjligheten att konturen går bakåt in i sig själv. Man vill dock gå ett steg längre och koda betingat även på elementet två steg bakåt. Man har ur en stor mängd testdata mätt upp följande fördelning för de olika prinicipiella konturerna med 3 element (bortsett från rotationen): Kontur Frekvens 0.24 0.20 0.20 0.16 0.16 0.04 Man kan anta att det är lika stor sannolikhet att följa en kontur från ena hållet som det andra. T.ex. så genererar den andra typen av kontur symbolföljderna RH eller V R beroende på vilken ände man startar i. a) Konstruera en huffmankod (blocklängd 1) för konturkällan (med alfabet A). Vad blir datatalten (bit/konturelement) b) Sannolikheterna ovan definierar implicit en markovmodell. Hur bra kan man som bäst koda denna modell? (bit/konturelement). 2.10 En minnesfri källa har alfabet A = {a 1,a 2,a 3 } och sannolikheter P = {0.6,0.2,0.2}. Vi vill koda sekvensen a 3 a 1 a 1 a 2 med aritmetisk kodning. Ta fram kodordet. Anta att alla beräkningar kan göras med oändlig precision. 2.11 Gör samma sak som i uppgift 2.10, men låt alla sannolikheter och gränser lagras med sex bitars noggrannhet. Skifta ut kodordsbitar så snart som möjligt. 2.12 Antag samma källa som i uppgift 2.10 och uppgift 2.11. Låt alla sannolikheter och gränser lagras med sex bitars noggrannhet. Avkoda kodordet 1011101010000. Vi vet att kodordet motsvarar fem symboler. 2.13 Ett system för att överföra enkla färgbilder använder färgerna vitt, svart, rött, blått grönt och gult. Källan modelleras som en första ordningens markovkälla med följande övergångssannolikheter Tillstånd sannolikhet för nästa tillstånd vitt svart rött blått grönt gult vitt 0.94 0.02 0.01 0.01 0.01 0.01 svart 0.05 0.50 0.15 0.10 0.15 0.05 rött 0.03 0.02 0.90 0.01 0.01 0.03 blått 0.02 0.02 0.02 0.90 0.03 0.01 grönt 0.02 0.02 0.01 0.03 0.90 0.02 gult 0.03 0.01 0.03 0.01 0.03 0.89 Vi använder aritmetisk kodning för att koda sekvenser från källan. Kodaren utnyttjar de betingade sannolikheterna vid kodningen. a) En sekvens börjar med rött, vitt, vitt. Vilket intervall motsvaras detta av? Antag att den föregående bildpunkten var röd. b) Avkodaren väntar på en ny sekvens. Bitströmmen 110100111100001100 tas emot. Vilka är de två första färgerna i denna sekvens? Den sista pixeln i föregående sekvens var svart. 2.14 Man vill koda en stationär och binär minneskälla med alfabetet A = {a, b}. Följande blocksannolikheter p(x n,x n+1 ) har mätts upp och kan antas vara de sanna: p(aa) = 1/7 p(ab) = 1/7 p(ba) = 1/7 p(bb) = 4/7 Konstruera ett kodord för sekvensen bbab genom att använda aritmetisk kodning. Koden ska vara baserad på betingade sannolikheter. Anta att symbolen närmast innan sekvensen som ska kodas är b. 2.15 En källa har alfabtetet A = {a,b}. Koda sekvensen ababbaaababbbbaaabaaaaaababba... med LZ77. Historiebufferten har storlek 16 och maximal matchlängd är 15. Kontrollera din lösning genom att avkoda kodorden. 2.16 Koda sekvensen i uppgift 2.15 med LZ78. 2.17 Koda sekvensen i uppgift 2.15 med LZW. 7 8
Lösningar eftersom E { } P(X)P(Y ) P(X,Y ) = P(x,y) P(x)P(y) = 1. P(x,y) x,y 1.1 H(X) = 4 i=1 p X(x i ) log p X (x i ) = 4 1 4 log 1 4 = 2 1.2 H(Y ) = 4 i=1 p Y (x i ) log p Y (y i ) = 1 2 log 1 2 1 4 log 1 4 2 1 8 log 1 8 = 1.75 1.3 a) Oberoende ger direkt att p XY (x i,y j ) = p X (x i ) p Y (y j ). b) Eftersom X och Y är oberoende gäller att H(X,Y ) = H(X) + H(Y ) = 3.75 c) H(X,Y ) = p XY (x i,y j ) log p XY (x i,y j ) i j = p X (x i ) p Y (y j )(log p X (x i ) + log p Y (y j )) i j = p Y (y j ) p X (x i ) log p X (x i ) ( ) p X (x i ) p Y (y j ) log p Y (y j ) i j j i = H(X) + H(Y ) d) Betrakta (X 1,...,X n 1 ) som en stokastisk variabel och konstruera ett induktionsbevis. 1.4 a) p Z (z i ) = 1 4, z i ger maximal entropi. b) p Z (1) = 1, p Z (2) = p Z (3) = p Z (4) = 0 ger H(Z) = 0. Eftersom entropin alltid är icke-negativ är detta minimalt. Lösningen är inte unik. 1.5 a) Ledning: i=0 i=0 q i = 1, q < 1. 1 q b) H(U) = h(q) 1 q Ledning: i q i q = (1 q) 2, q < 1. c) E { U } = q 1 q ( ) 1.6 ln 2 I(X;Y ) = ln 2 H(X Y ) H(X) { = E ln P(X)P(Y ) } { P(X)P(Y ) E P(X,Y ) P(X,Y ) ( = ln 2 } 1 = 0 ) H(X,Y ) H(X) H(Y ) 1.7 a) H + 1 b) H + p c) 2H 1.8 a) H(f(X) X) = / Z = f(x) / = H(Z X) = = p XZ (a i,b j ) log p }{{} Z X(b j a i ) }{{} b j A Z a i A X =0,f(a i) b j = 0 b) H(X,f(X)) = / kedjeregeln / =1,f(a i)=b j = H(X) + H(f(X) X) }{{} =0 enligt a) c) H(X) H(f(X)) = / enligt b) / = H(X,f(X)) H(f(X)) = / kedjeregeln / = H(X f(x)) 0 1.9 Enligt 1.8 så har en funktion av en stokastisk variabel lika eller mindre entropi än variabeln själv, vilket leder till den högra olikheten. För den vänstra olikheten sätter vi Z = X + Y och visar att H(Z Y ) = = z y p ZY (z,y) log = x y p XY (x,y) log (1) = x y p X(x)p Y (y) log 1.10 Visa pzy (z,y) p Y (y) pxy (x,y) p Y (y) px(x)py (y) p Y (y) = ( y p Y (y)) ( y p X(x) log p X (x) = / / x=z y Vid (1) använde vi oberoendet. Vi kan nu skriva ) = H(X) H(X + Y ) H(X + Y Y ) = H(X) Se 1.6 för ett bevis på att betingning inte kan öka entropin. H(X Y ) + H(Y Z) (1) 9 10
H(X Y Z) + H(Y Z) = H(X Y Z) + H(Y Z) + H(Z) H(Z) }{{} kedjeregeln =H(XY Z) = H(XY Z) H(Z) (2) = H(X Z) + H(Y XZ) H(X Z) där vi vid (1) utnyttjade det faktum att betingning aldrig ökar entropin och vid (2) använde kedjeregeln: H(XY Z) = H(Z) + H(X Z) + H(Y XZ). 1.11 Kedjeregeln bevisas genom H(X,Y ) = E { log p XY (X,Y ) } = E { log p X Y (X Y )p Y (Y ) } = E { log p X Y (X Y ) } + E { log p Y (Y ) } = H(X Y ) + H(Y ) Låt nu X = X n+1 och Y = (X 1,...,X n ). 1.12 a) H = 1 b) H = h( 8 12 ) = 8 12 log 12 8 + 4 12 log 12 4 c) H = log 12 3.58 0.92 Notera att detta är mindre än summan av entropierna för de olika bitarna, eftersom de olika bitarna inte är oberoende av varandra. 1.13 Övergångsmatrisen P för källan är P = 0.8 0.1 0.1 0.5 0.5 0 0.5 0 0.5 Den stationära fördelningen w = (w 0, w 1, w 2 ) ges av ekvationssystemet w = w P. Ersätt någon av ekvationerna (vilken som helst) med ekvationen w 0 + w 1 + w 2 = 1 och lös systemet. Det ger oss lösningen w = 1 (5, 1, 1) (0.714, 0.143, 0.143) 7 1.14 a) H(X i ) = 5 7 log 5 7 2 1 7 log 1 7 1.15 [bit/sym]. b) Blocksannolikheterna ges av symbolpar sannolikhet 00 5/7 0.8 = 8/14 01 5/7 0.1 = 1/14 02 5/7 0.1 = 1/14 10 1/7 0.5 = 1/14 11 1/7 0.5 = 1/14 12 0 20 1/7 0.5 = 1/14 21 0 22 1/7 0.5 = 1/14 H(X i,x i+1 ) = 8 14 log 8 14 6 1 14 log 1 14 2.09 [bitar/par]. ( 1.05 [bitar/symbol]). Entropin för par är mindre än 2 gånger den minnesfria entropin. c) Enligt kedjeregeln är H(X i X i 1 ) = H(X i 1,X i ) H(X i 1 ) 0.94 1.15 Övergångsmatrisen P för källan är P = 0.7 0 0.3 0 0.9 0 0.1 0 0 0.4 0 0.6 0 0.2 0 0.8 Den stationära fördelningen w = (w aa, w ab, w ba,w bb ) ges av ekvationssystemet w = w P. Ersätt någon av ekvationerna (vilken som helst) med ekvationen w aa + w ab + w ba + w bb = 1 och lös systemet. Det ger oss lösningen w = 1 (3, 1, 1, 3) 8 Den stationära fördelningen är förstås också sannolikheterna för par av symboler, så vi kan beräkna H(X i X i 1 ) direkt H(X i X i 1 ) = 2 3 8 log 3 8 2 1 8 log 1 8 1.8113 Sannolikheterna för enstaka symboler fås ur marginalfördelningen p(a) = p(aa) + p(ab) = 0.5, p(b) = p(ba) + p(bb) = 0.5 H(X i ) = 1 Sannolikheterna för tre symboler fås ur p XiX i 1X i 2 = p Xi 1X i 2 p Xi X i 1X i 2 p(aaa) = 3 8 0.7 = 21 80, p(baa) = 3 8 0.3 = 9 80 p(aba) = 1 8 0.4 = 4 80, p(bba) = 1 8 0.6 = 6 80 11 12
Vilket ger oss p(aab) = 1 8 0.9 = 9 80, p(bab) = 1 8 0.1 = 1 80 p(abb) = 3 8 0.2 = 6 80, p(bbb) = 3 24 0.8 = 8 80 H(X i X i 1 X i 2 ) 2.5925 Nu kan vi beräkna de betingade entropierna med hjälp av kedjeregeln H(X i X i 1 ) = H(X i X i 1 ) H(X i 1 ) 0.8113 H(X i X i 1 X i 2 ) = H(X i X i 1 X i 2 ) H(X i 1 X i 2 ) 0.7812 2.1 Ja, eftersom Krafts olikhet är uppfylld. 2.2 1 2 3 4.. R = 2 [bit/sym]. 2.3 Sannolikheter för par av symboler: {0.4585,0.0415, 0.0415, 0.4585} Sannolikheter för tre symboler: {0.4205, 0.0381, 0.0034, 0.0381, 0.0381, 0.0034, 0.0381, 0.4205} 1 = (1 p) 1 p log(1 p) (1 p) p (1 p) 2 log p = h(p) 4.972 [bitar/skur] 1 p d) H(R) = h(p) 0.413 [bitar/symbol] r Samma svar fås naturligtvis om vi räknar ut entropitakten direkt från källan. 2.5 a) Om vi gör en direkt avbildning till den binära representationen får vi l = E {kodordslängd/skur } = 14 29 44 4 (1 p)p r 1 + 8 (1 p)p r 1 + 12 (1 p)p r 1 +... = 5 r=30 4 (1 p)p r 1 + 4p 14 (1 p)p r 1 + 4p 29 (1 p)p r 1 +... = 4 (1 p)p r 1 (1 + p 14 p 15i ) = 4(1 + p14 1 p15) 5.635 [bitar/skur] i=0 Från problem 2.3 vet vi att r 12.05 [symboler/skur], därför blir datatakten 0.468 [bitar/symbol]. l r b) På samma sätt som i a) får vi p l 30 = 5(1 + 1 p31) 5.399 [bitar/skur] och datatakten 0.448 [bitar/sym]. aa bb ab ba l 1.62 R 0.81 l 1.95 R 0.65 Det är bättre att koda tre symboler i taget. 2.4 a) p(r) = p r 1 (1 p) b) r = r (1 p) p r 1 = 1 1 p = 1 1 8 12.05 [symboler/skur] 0.5 c) H(R) = (1 p) p r 1 log((1 p) p r 1 ) = (1 p) log(1 p) p r 1 (1 p) log p (r 1) p r 1 2.6 a) Eftersom skurar av a respektive b har samma sannolikheter kan vi använda samma golombkod för båda typerna av skurar. Eftersom sannolikheten för en skur av längd r är p(r) = p r 1 (1 p) får vi en optimal kod om m väljs som m = 1 log p = 8 b) En golombkod med parameter m = 8 har 8 kodord av längd 4, 8 kodord av längd 5, 8 kodord av längd 6 et c. Kodordsmedellängden blir l = E {kodordslängd/skur } = 8 16 4 (1 p)p r 1 + 5 (1 p)p r 1 + 6 r=9 24 7 (1 p)p r 1 +... = 4 (1 p)p r 1 + p 8 (1 p)p r 1 + p 16 (1 p)p r 1 +... = 4 + p 8i = 4 + p8 1 p 8 = 5 [bitar/skur] i=1 13 14
Från problem 2.3 vet vi att r 12.05 [symboler/skur], därför blir datatakten 0.415 [bitar/symbol]. l r 2.7 a) Den teoretiskt lägsta gränsen ges av entropitakten för källan. Den bästa modell av källan vi kan göra, givet den information vi har, är en markovkälla av ordning 1. I textområdena ser den ut som 0.5 0.5 B W 0.9 0.1 De stationära sannolikheterna för denna källa är w B = 1 6 and w W = 5 6 och entropitakten för när vi befinner oss i ett textområde är därför H t = w B h(0.5) + w W h(0.9) 0.5575 För bildområden blir, på samma sätt, entropitakten H p 0.7857 Den totala entropitakten för källan är därför H = 4 5 H t + 1 5 H p 0.60313 Detta är det bästa estimat vi kan göra, den riktiga entropitakten för källan kan vara lägre, om minnet är längre än bara en bildpunkt tillbaka, som vi antog. b) Den önskade datatakten kan uppnås genom att koda block om 3 symboler. Sannolikheterna för de 8 olika blocken kan beräknas som De åtta sannolikheterna blir P(X 1 X 2 X 3 ) = P(X 1 )P(X 2 X 1 )P(X 3 X 2 ) P = 1 {1 5 5 5 5 9 9 81} 120 Konstruera koden med huffmanalgoritmen. Den resulterande datatakten blir 0.625 bitar/bildpunkt. 2.8 a) Det är möjligt att komma godtyckligt nära källans entropitakt. För den givna källan ges entropitakten av H(S n+1 S n ) = w A H(S n+1 S n = A) + w B H(S n+1 S n = B) + w C H(S n+1 S n = C) + w D H(S n+1 S n = D) 2.9 där w A et.c. betecknar de stationära sannolikheterna för tillstånden. Dessa beräknas ur följande ekvationssytem, plus det faktum att de ska summera till 1. 0 0 0.1 0 w A w A 0.5 0.2 0 0 0 0 0.9 0.7 0.5 0.8 0 0.3 (w A w B w C w D ) = 1 (56 35 560 80) 731 och entropitakten blir då w B w C w D = w B w C w D H(S n+1 S n ) = 1 731 (56 + 35h(0.2) + 560h(0.1) + 80h(0.3)) = 0.567 bitar/symbol. b) Optimala trädkoder kan konstrueras med hjälp av huffmans algoritm. När vi kodar enstaka symboler använder vi de stationära sannolikheterna. Till exempel kan vi få följande kod symbol sannolikhet kodord längd A 56/731 110 3 B 35/731 111 3 C 560/731 0 1 D 80/731 10 2 som ger en datatakt på 993 1.36 bitar/symbol 731 Sannolikheterna för par av symboler beräknas enkelt ur P(X 1 X 2 ) = P(X 1 )P(X 2 X 1 ). Vi får till exempel följande kod. symbol sannolikhet kodord längd AB 28/731 1010 4 AD 28/731 1110 4 BB 7/731 10110 5 BD 28/731 1111 4 CA 56/731 100 3 CC 504/731 0 1 DC 56/731 110 3 DD 24/731 10111 5 Den resulterande datatakten är 1 2 1331 731 0.910 bitar/symbol a) Sannolikheterna för de olika konturerna ger följande blocksannolikheter: RR 0.24 RH, HR, V R, RV 0.10 V H, HV 0.16 V V, HH 0.02 15 16
2.10 Vi vill koda en symbol i taget och behöver därför de (stationära) sannolikheterna för de enstaka symbolerna. Dessa kan beräknas exempelvis enligt: P(V ) = P(V V ) + P(V R) + P(V H) = 0.28 P(R) = P(RV ) + P(RR) + P(RH) = 0.44 P(H) = P(HV ) + P(HR) + P(HH) = 0.28 Huffmanträdet blir då R. V H Datatakten: R = l = 1 + 0.56 = 1.56 b) Gränsen för en markovkälla ges av den betingade entropin H(X 2 X 1 ). H(X 2 X 1 ) kan t ex beräknas med hjälp av kedjeregeln: H(X 2 X 1 ) = H(X 1,X 2 ) H(X 1 ) = 2.895 1.550 = 1.345 F(0) = 0, F(1) = 0.6, F(2) = 0.8, F(3) = 1 l (0) = 0 u (0) = 1 l (1) = 0 + (1 0) 0.8 = 0.8 u (1) = 0 + (1 0) 1 = 1 l (2) = 0.8 + (1 0.8) 0 = 0.8 u (2) = 0.8 + (1 0.8) 0.6 = 0.92 l (3) = 0.8 + (0.92 0.8) 0 = 0.8 u (3) = 0.8 + (0.92 0.8) 0.6 = 0.872 l (4) = 0.8 + (0.8 0.872) 0.6 = 0.8432 u (4) = 0.8 + (0.8 0.872) 0.8 = 0.8576 Intervallet som motsvarar sekvensen är alltså [0.8432, 0.8576). Storleken på intervallet är 0.0144, vilket, innebär att vi ska använda minst log 0.0144 = 7 bitar i kodordet. Alternativ 1: Det minsta tal med 7 bitar som ligger i intervallet är (0.1101100) 2 = 0.84375. Eftersom även (0.1101101) 2 = 0.8515625 ligger i intervallet räcker det med 7 bitar, och kodordet blir alltså 1101100. Alternativ 2: Mittpunkten på intervallet är 0.8504 = (0.110110011...) 2. Trunkera till 7+1=8 bitar, vilket ger oss kodordet 11011001. 2.11 Med sex bitar lagras alla värden som -delar. Fördelningen blir då F(0) = 0, F(1) = 38, F(2) = 51, F(3) = l (0) = 0 = (000000) 2 u (0) = 63 = (111111) 2 l (1) (63 0 + 1) 51 = 0 + = 51 = (110011) 2 u (1) (63 0 + 1) = 0 + 1 = 63 = (111111) 2 Skifta ut 1 till kodordet, skifta in 0 i l och 1 in u l (1) = (100110) 2 = 38 u (1) = (111111) 2 = 63 Skifta ut 1 till kodordet, skifta in 0 i l och 1 in u l (1) = (001100) 2 = 12 u (1) = (111111) 2 = 63 l (2) (63 12 + 1) 0 = 12 + = 12 = (001100) 2 u (2) (63 12 + 1) 38 = 12 + 1 = 41 = (101001) 2 l (3) (41 12 + 1) 0 = 12 + = 12 = (001100) 2 u (3) (41 12 + 1) 38 = 12 + 1 = 28 = (011100) 2 Skifta ut 0 till kodordet, skifta in 0 i l och 1 in u l (3) = (011000) 2 = 24 u (3) = (111001) 2 = 57 l (4) (57 24 + 1) 38 = 24 + = 44 = (101100) 2 u (4) (57 24 + 1) 51 = 24 + 1 = 50 = (110010) 2 Eftersom det inte kommer några fler symboler behöver vi inte göra fler skiftoperationer. Kodordet blir de bitar som skiftats ut tidigare plus hela l (4), dvs 110101100. 17 18
2.12 Med sex bitar lagras alla värden som -delar. Fördelningen blir då F(0) = 0, F(1) = 38, F(2) = 51, F(3) = Det innebär att intervallet 0-37 hör till symbol a 1, intervallet 38-50 till symbol a 2 och intervallet 51-63 till symbol a 3. l (0) = (000000) 2 = 0 u (0) = (111111) 2 = 63 t = (101110) 2 = 46 (46 0 + 1) 1 = 46 a 2 63 0 + 1 l (1) (63 0 + 1) 38 = 0 + = 38 = (100110) 2 u (1) (63 0 + 1) 51 = 0 + 1 = 50 = (110010) 2 Skifta ut 1, skifta in 0 i l, 1 in u och en ny bit från kodordet i t. l (1) = (001100) 2 = 12 u (1) = (100101) 2 = 37 t = (011101) 2 = 29 (29 12 + 1) 1 = 44 a 2 37 12 + 1 l (2) (37 12 + 1) 38 = 12 + = 27 = (011011) 2 u (2) (37 12 + 1) 51 = 12 + 1 = 31 = (011111) 2 De tre första bitarna är desamma i l och u. Skifta ut dem, skifta in nollor i l, ettor i u och tre nya bitar från kodordet i t. l (2) = (011000) 2 = 24 u (2) = (111111) 2 = 63 t = (101010) 2 = 42 (42 24 + 1) 1 = 30 a 1 63 24 + 1 l (3) (63 24 + 1) 0 = 24 + = 24 = (011000) 2 u (3) (63 24 + 1) 38 = 24 + 1 = 46 = (101110) 2 De två första bitarna i l är 01 och de två första i u är 10. Skifta l, u och t ett steg, invertera den nya mest signifikanta biten och skifta in 0 i l, 1 i l och en ny bit från kodordet i t l (3) = (010000) 2 = 16 u (3) = (111101) 2 = 61 t = (110100) 2 = 52 (52 16 + 1) 1 = 51 a 3 61 16 + 1 l (4) (61 16 + 1) 51 = 16 + = 52 = (110100) 2 u (4) (61 16 + 1) = 16 + 1 = 61 = (111101) 2 De två första bitarna är desamma i l och u. Skifta ut dem, skifta in nollor i l, ettor i u och två nya bitar från kodordet i t. l (4) = (010000) 2 = 16 u (4) = (110111) 2 = 55 t = (010000) 2 = 16 (16 16 + 1) 1 = 1 a 1 55 16 + 1 Eftersom vi nu har avkodat fem symboler behöver vi inte göra fler beräkningar. Den avkodade sekvensen blir alltså a 2 a 2 a 1 a 3 a 1 2.13 a) Under antagandet att vi har ordnat färgerna i samma ordning som i tabellen, med vitt närmast 0, så blir intervallet [0.05, 0.07538). Om du valde en annan symbolordning borde du i alla fall ha fått samma intervallängd. b) grönt, grönt 2.14 Sannolikheter för enskilda symboler p(x n ) fås ur marginalfördelningen, dvs p(a) = p(aa) + p(ab) = 2/7, p(b) = p(ba) + p(bb) = 5/7 De betingade sannolikheterna p(x n+1 x n ) blir p(a a) = p(aa) p(a) = 1/7 2/7 = 0.5 p(b a) = p(ab) p(a) = 1/7 2/7 = 0.5 19 20
p(a b) = p(ba) p(b) = 1/7 5/7 = 0.2 p(b b) = p(bb) p(b) = 4/7 5/7 = 0.8 Intervallet som motsvarar sekvensen är [0.424,0.488) Intervallstorleken är 0.0, vilket betyder att vi behöver minst log 0.0 = 4 bitar i vårt kodord. Alternativ 1: Det minsta tal med 4 bitar som ligger i intervallet är (0.0111) 2 = 0.4375. Eftersom (0.1000) 2 = 0.5 inte ligger i intervallet räcker det inte med 4 bitar, utan vi måste använda 5 bitar. Vi använder talet (0.01110) 2 = 0.4375 och kodordet blir alltså 01110. Alternativ 2: Mittpunkten på intervallet är 0.456 = (0.0111010...) 2 Trunkera till 4+1=5 bitar, vilket ger oss kodordet 01110. 2.15 Offset 0 är längst till höger i historiebufferten Kodord: (offset, längd, ny symbol) Binärt kodord (0,0,a) 0000 0000 0 (0,0,b) 0000 0000 1 (1,2,b) 0001 0010 1 (2,1,a) 0010 0001 0 (6,5,b) 0110 0101 1 (8,6,a) 1000 0110 0 (1,4,b) 0001 0100 1 (15,3,a) 1111 0011 0 2.16 Den kodade sekvensen av par <index, ny symbol> blir: < 0,a > < 0,b > < 1,b > < 2,a > < 1,a > < 4,b > < 2,b > < 4,a > < 3,a > < 5,a > < 5,b > < 3,b >... Om vi antar att ordboken har storleken 16 så går det åt 4+1 bitar för att koda varje par. Ordboken ser i detta läge ut som: index sekvens 0-1 a 2 b 3 ab 4 ba 5 aa 6 bab 7 bb 8 baa 9 aba 10 aaa 11 aab 12 abb 2.17 Den kodade sekvensen av <index> blir: < 0 > < 1 > < 2 > < 3 > < 0 > < 2 > < 4 > < 1 > < 5 > < 7 > < 6 > < 12 > < 3 > < 9 >... Om vi antar att ordboken har storleken 16 så går det åt 4 bitar för att koda varje index. Ordboken ser i detta läge ut som: index sekvens 0 a 1 b 2 ab 3 ba 4 abb 5 baa 6 aa 7 aba 8 abbb 9 bb 10 baaa 11 abaa 12 aaa 13 aaab 14 bab 15 bba 21 22