1 Kodowanie i dekodowanie
Transkrypt
1 Kodowanie i dekodowanie
1 Kodowanie i dekodowanie Teoria informacji zajmuje si¦ sposobami gromadzenia, przechowywania oraz przesyªania informacji. W tym celu, a tak»e dla ochrony danych informacje kodujemy. Rozmowa telefoniczna, czy SMS s¡ takimi informacjami. Historia pokazuje, »e przesªanie informacji nie jest ªatwym zadaniem. Do czasu wynalezienia telegrafu przez W. Siemensa w 1847, jedynym sposobem byªy znaki wizualne, ewentualnie akustyczne (generalnie, widzimy znaki z dalszej odlegªo±ci ni» sªyszymy). Spo±ród kodów wizualnych, najbardziej znanym jest przedstawiony ni»ej kod Morse'a, który zostaª zaadoptowany do przesyªania wiadomo±ci przez telegraf. A B C D E F G 1.1 ·− H −··· I − · −· J −·· K · L · · −· M −−· ···· ·· · − −− −·− · − ·· −− N O P Q R S T −· U ··− −−− V ···− · − −· W · − − − − ·− X − · ·− ·−· Y − · −− ··· Z − − ·· − Kod Morse'a Przyjrzyjmy sie bli»ej kodowi Morse'a. Alfabet kodowy skªada si¦ tu z trzech znaków: kropki, kreski i przerwy. Ostatni znak, cho¢ niewidoczny, speªnia istotn¡ rol¦ w rozumieniu wiadomo±ci. Np. Kod litery R to ·−·. Ten sam kod ma dwuznak AE, je±li pomin¡¢ przerw¦. Przerwa umieszczona jest zawsze na ko«cu kodu litery. Dzi¦ki temu kody R oraz AE wygl¡daj¡ nast¦puj¡co: · − · i · − ·. Zwró¢my jeszcze uwag¦ na to, »e litery, które wyst¦puj¡ najcz¦±ciej maj¡ najkrótsze kody. W rezultacie, przekaz trwa na tyle krótko, by nie blokowa¢ linii, a jednocze±nie na tyle dªugo by by¢ zrozumiaªym. 1.2 Idea kodowania Kolejnym krokiem milowym w rozwoju teorii kodowania byªo wynalezienie telefonu przez G. Bella w 1876 roku. Idea kodowania gªosu na impulsy elektromagnetyczne, a nast¦pnie rozkodowywania impulsów i generowania gªosu nie zmieniªa si¦ do dzi±. Zmieniª si¦ jednak sposób przesyªania kodu. Daªo to du»e pole dla rozwoju teorii kodowania. Kodowanie obecnie jest stosowane tak»e przy przesyªaniu sygnaªu multimedialnego: telewizja, radio, internet. Nie chodzi tu tylko o rozrywk¦, ale 1 tak»e o wiele dziedzin »ycia, gdzie wykorzystywane s¡ fale elektromagnetyczne. Teoria kodowania zajmuje si¦ wªa±nie sposobami zakodowania lub zaszyfrowania informacji. Aby zakodowa¢ dan¡ wiadomo±¢ stosujemy pewnego rodzaju alfabet kodowy. Najcz¦±ciej jest to zbiór dwuelementowy {0, 1}, czyli danej literze alfabetu przypisujemy pewien ci¡g zer i jedynek. Sªowa tworzymy poprzez poª¡czenie kodów liter wyst¦puj¡cych w tym sªowie. Chcemy, generalnie, dwóch rzeczy: 1) Aby zakodowana wiadomo±¢ byªa jak najkrótsza, wi¦c aby informacja byªa jak najbardziej skompresowana; 2) Aby zakodowana wiadomo±¢ byªa zabezpieczona przed znieksztaªceniami jakie mog¡ powsta¢ przy jej przesyªaniu. Zauwa»my, »e punkty 1) oraz 2) przecz¡ sobie im krótszy jest kod tym ªatwiej jest uczyni¢ go nierozszyfrowywalnym poprzez znieksztaªcenie paru znaków. Powstaje zatem problem pogodzenia powy»szych dwóch »ycze«. Na pocz¡tek zaªo»ymy, »e kody nie ulegaj¡ znieksztaªceniu, wi¦c ª¡cze, po którym przesyªamy wiadomo±¢ nie jest podatne na szumy. Przy tym zaªo»eniu spróbujemy maksymalnie skompresowa¢ informacje. Nast¦pnie otrzymany skompresowany kod uczynimy odpornym na szumy poprzez dodanie do niego kilku znaków. 1.3 Kod 2-z-5 Rozwa»my poni»szy kod: 0 3 6 00011 01100 00110 1 4 7 11000 10010 10001 2 5 8 9 10100 01010 01001 00101 W ka»dym sªowie powy»szego kodu wyst¦puj¡ dokªadnie dwie jedynki. Okazuje si¦, »e jest dokªadnie 10 mo»liwo±ci umieszczenia dwóch jedynek w bloku pi¦ciu znaków. Wyraz 173 kodujemy jako 110001000101100. Nie u»ywamy spacji, poniewa» mo»e ona by¢ traktowana jako litera. Zakodowan¡ powy»ej wiadomo±¢ 110001000101100 mo»emy rozkodowa¢ bior¡c zawsze blok pi¦ciu znaków i odczytuj¡c z tabelki co on oznacza. Innym sposobem rozkodowania jest u»ycie klucza 01247 jako wag odpowiedniego 2 symbolu w kodzie. Mno»ymy odpowiednie znaki sªowa kodowego przez cyfry klucza i dodajemy. Dokªadnie, 110001000101100 rozszyfrowujemy jako 1·0+1·1+0·2+0·4+0·7=1 1·0+0·1+0·2+0·4+1·7=7 0 · 0 + 1 · 1 + 1 · 2 + 0 · 4 + 0 · 7 = 3. Wyj¡tkiem jest tu liczba 0, która rozkodowuje si¦ w ten sposób jako 11 (zamiast 0). W dalszej cz¦±ci wykªadu, b¦dziemy u»ywa¢ sªowa bit jako okre±lenie dla zera lub jedynki. 1.4 Podstawowe poj¦cia Dowolny sko«czony zbiór nazywamy alfabetem, jego elementy literami lub symbolami, a sko«czone lub niesko«czone ci¡gi zªo»one z liter nazywamy wyrazami, sªowami lub wiadomo±ciami. Niech A oraz B oznaczaj¡ dwa sko«czone zbiory. Oznaczmy przez w(B) zbiór wszystkich sko«czonych sªów zapisanych za pomoc¡ alfabetu B . Dowolna funkcja f : A → w(B) nazywa si¦ kodowaniem. Jej obraz nazywamy kodem. Liczb¦ liter w sªowie f (x) nazywamy dªugo±ci¡ kodu dla litery x. Alfabet A nazywamy alfabetem ¹ródªowym, natomiast alfabet B nazywamy alfabetem kodowym. Je±li alfabet kodowy ma dokªadnie dwa elementy, to kodowanie nazywamy binarnym, dwójkowym lub zerojedynkowym. 1.5 Kod RGB Przez odpowiednie nasycenie trzech kolorów: czerwonego (R), zielonego (G) oraz niebieskiego (B) otrzymujemy palet¦ 16 777 216 barw. Nasycenie mierzymy w skali od 0 (brak koloru) do 255. U»ywamy przy tym znaków 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Daje to mo»liwo±¢ zapisania ka»dej liczby od 0 do 255 jako dwuznaku: 00 oznacza 0. FF oznacza 255, a 3D oznacza 3 · 16 + 13, czyli 61. 000000 to kod koloru czarnego (brak nasycenia), FFFFFF to kod koloru biaªego. FFFF00 oznacza kolor »óªty. 3 1.6 Dekodowanie jednoznaczne Dla alfabetów ¹ródªowego A oraz kodowego B , niech K : A → w(B) b¦dzie kodowaniem. Kodowaniem wiadomo±ci ¹ródªowej nazywamy funkcj¦ K ∗ : w(A) → w(B) okre±lon¡ wzorem K ∗ (a1 a2 . . . an ) = K(a1 )K(a2 ) . . . K(an ). Kodowanie K nazywamy jednoznacznie dekodowalnym, je±li funkcja K ∗ jest ró»nowarto±ciowa. Poni»szy kod nie jest jednoznacznie dekodowalny. 10110 mo»e tu by¢ rozkodowane jako cb lub te» jako bd. a b c 00 10 101 d 110 e 1001 Zauwa»my, »e funkcja K jest ró»nowarto±ciowa, a K ∗ ju» nie. 1.7 Kody blokowe i natychmiastowe Kodowanie, którego kod skªada si¦ z parami ró»nych wyrazów o jednakowej dªugo±ci n nazywamy kodem blokowym dªugo±ci n. Kodowanie nazywamy natychmiastowym, je»eli »adne sªowo kodowe nie jest pocz¡tkiem innego sªowa kodowego, tj. je±li element alfabetu ¹ródªowego ma kod b1 b2 . . . bn , to »aden inny element tego alfabetu nie ma kodu b1 b2 . . . bn bn+1 . . . bm . Kod 2z5 jest przykªadem kodu blokowego dªugo±ci 5. Kody blokowe s¡ ªatwo dekodowalne, ale staj¡ si¦ za dªugie i nieªadne je±li symbole ¹ródªowe pojawiaj¡ si¦ w wiadomo±ci zbyt cz¦sto. Warto wówczas zastosowa¢ kod natychmiastowy, w którym sªowa s¡ ró»nej dªugo±ci. Gdyby alfabet dwudziestu sze±ciu liter zakodowa¢ kodem blokowym trzyznakowym, to ka»dy blok miaªby trzy znaki. Kod stuliterowego tekstu miaªby zatem 300 znaków. Stuliterowy tekst zakodowany kodem Morse'a ma okoªo 140 znaków. Rozwa»my kod 0 1 0 01 2 3 011 111 Nigdy nie uda nam si¦ rozkodowa¢ zakodowanej wiadomo±ci je±li nie znamy caªego kodu. Dokªadnie, strumie« 011111 . . . mo»e by¢ 033 . . . lub 133 . . . lub te» 233 . . . Zatem kod ten nie jest natychmiastowy, pomimo tego, »e jest jednoznacznie dekodowalny. 4 1.8 Kod ASCII 128 symboli ¹ródªowych klawiatury komputera jest zakodowanych kodem ASCII (American Standard Code for Information Interchange). Jest to binarny kod blokowy dªugo±ci 8. Siedem pierwszych cyfr tego kodu nazywamy symbolami informacyjnymi, gdy» to one nios¡ informacj¦ jaki sygnaª z klawiatury zostaª nadany. Ostatni, ósmy bit jest bitem sprawdzaj¡cym parzysto±¢. jest on ustalony tak, aby ilo±¢ jedynek w kodzie byªa parzysta. Np. 0010100 jest wa»nym sªowem kodowym w ASCII. Oznacza to liter¦ a; 0100011 nie jest sªowem kodowym w ASCII. 1.9 Kod ISBN Ka»da ksi¡»ka ma swój kod ISBN (International Standard Book Number). Jest to kod blokowy dªugo±ci 10. Na przykªad ISBN-83-01-06891-4 oznacza, »e ksi¡»ka zostaªa wydana w kraju o kodzie 83 (Polska), wydawnictwie 01 (PWN) i jej numer w tym wydawnictwie to 06891. Ostatni symbol P10jest symbolem sprawdzaj¡cym wyznaczonym tak, »e 11 jest dzielnikiem i=1 iai , gdzie ai jest itym znakiem kodu. Alfabet kodowy ma tu 11 symboli i oprócz cyfr jest tam jeszcze symbol X . Dla podanego kodu powy»sza suma wynosi 209, co jest podzielne przez 11. Je»eli jedna cyfra kodu jest nieczytelna, to mo»na j¡ odtworzy¢ na podstawie pozostaªych cyfr. Krajowe Biuro ISBN poinformowaªo, »e z dniem 1 stycznia 2007 r. wchodzi w »ycie zaktualizowana mi¦dzynarodowa norma ISO 2108, zgodnie z któr¡ numery ISBN zmienia si¦ z 10-cyfrowych na 13-cyfrowe. Ksi¡»ki wydawane w 2006 r. byªy oznaczone numerami w dwóch formatach. Na ksi¡»kach wydanych po 1 stycznia 2007 roku mo»na drukowa¢ tylko numery maj¡ce 13 cyfr. Znaczenie ostatnich 10 cyfr pozostaje bez zmian, natomiast dodano trzy cyfry 978 na pocz¡tku. Zmienia si¦ te» zasada obliczania cyfry kontrolnej i znika symbol X . Wspomniany numer dziesi¦ciocyfrowy ma teraz posta¢ ISBN-978-83-01-06891-0. Cyfra kontrolna jest wyznaczona tak, »e suma wszystkich cyfr kodu plus podwojona suma cyfr parzystych jest podzielna przez 10. W naszym wypadku mamy: 9 + 7 + 8 + 8 + 3 + 0 + 1 + 0 + 6 + 8 + 9 + 1 + 0 + 2 · (7 + 8 + 0 + 0 + 8 + 1) = 110. Liczba 110 jest podzielna przez 10. Podobnie jak w przypadku kodu 10cyfrowego, w tym przypadku te» mo»na odtworzy¢ zatarty znak, je±li pozostaªe s¡ czytelne. 5 1.10 Kod IBAN Numer konta w banku (IBAN: International Bank Account Number) jest te» kodem: PL21 1140 2004 0000 3702 3209 3385 PL oznacza tu polsk¦ 1140 2004 jest numerem banku i oddziaªu. Pozostaªe cyfry oznaczaj¡ numer klienta i s¡ wyznaczane przez bank. Liczba 21 jest liczb¡ kontroln¡. Oblicza si¦ j¡ w nast¦puj¡cy sposób: 1. Literom PL przypisujemy symbol liczbowy wedªug zasady miejsce w alfabecie+9. A ma symbol 10, B 11, itd. PL ma wi¦c numer 2521. 2. liczb¦ 2521 umieszczamy na ko«cu numeru. 3. Odrzucamy dwie pierwsze cyfry numeru, na ko«cu dodajemy dwa zera i obliczamy reszt¦ z dzielenia otrzymanej liczby przez 97. W naszym wypadku mamy 114020040000370232093385252100 mod 97 = 77. 4. Poprzedni wynik odejmujemy od 98. W przypadku, gdy jest to liczba jednocyfrowa, dodajemy z przodu zero. U nas jest to 21. Nie ma dwóch numerów kont, które ró»niªyby si¦ tylko jedn¡ lub dwiema cyframi. Je±li przez omyªk¦ przy wykonywaniu przelewu pomylimy si¦ o jedn¡ lub dwie cyfry w numerze konta, to przelew zostanie odrzucony. 1.11 Konstruowanie kodów natychmiastowych Zajmiemy si¦ teraz konstrukcjami dwójkowych kodów natychmiastowych. W tym celu ustalmy alfabet A = {a1 , a2 , . . . , an }. Chcieliby±my, »eby kod miaª mo»liwie najkrótsze sªowa kodowe. B¦dziemy szukali te» zale»no±ci mi¦dzy dªugo±ciami sªów kodowych. Dla litery ai , dªugo±¢ jej kodu oznaczmy przez di . Zaªó»my, »e d1 ≤ d2 ≤ · · · ≤ dn . Nasza konstrukcja przebiega nast¦puj¡co: 1) Za K(a1 ) wybieramy jakiekolwiek sªowo dwójkowe dªugo±ci d1 . Jest to mo»liwe je±li d1 ≥ 1. Mamy wówczas mo»liwo±¢ wyboru spo±ród 2d1 sªów. Dodatkowo zachodzi nierówno±¢ 2d1 ≥ 1 równowa»na nierówno±ci 2−d1 ≥ 1. 6 2) W±ród wszystkich sªów, które nie zaczynaj¡ si¦ od K(a1 ), wybieramy sªowo K(a2 ) dªugo±ci d2 . Zauwa»my, »e wybór jest mo»liwy poniewa» mamy 2d2 wszystkich sªów dªugo±ci d2 i 2d2 −d1 sªów dªugo±ci d2 , których pocz¡tkiem jest K(a1 ). Je±li wi¦c 2d2 > 2d2 −d1 , to mamy przynajmniej jeden wybór na K(a2 ). Nierówno±¢ ta zachodzi, poniewa» d1 > 0. Dodatkowo mamy jeszcze 2−d1 + 2−d2 ≤ 1. 3) Podobnie jak w 2) spo±ród wszystkich sªów, które si¦ nie zaczynaj¡ od K(a1 ) ani od K(a2 ) wybieramy sªowo K(a3 ) dªugo±ci d3 . Aby wybór byª mo»liwy musi by¢ speªniona nierówno±¢ 2d3 > 2d3 −d1 + 2d3 −d2 , która jest równowa»na nierówno±ci 2−d1 + 2−d2 + 2−d3 ≤ 1. 4) Post¦pujemy jak w 3) wybieraj¡c kolejno K(a4 ), K(a5 ), . . . , K(an ). Aby wybór sªowa K(ai ) byª mo»liwy musi zachodzi¢ nierówno±¢ 2−d1 + 2−d2 + · · · + 2−di ≤ 1. Zatem aby mo»na byªo wybra¢ sªowa K(a1 ), K(a2 ), . . . , K(an ), ich dªugo±ci musz¡ speªnia¢ warunek 2−d1 + 2−d2 + · · · + 2−dn ≤ 1. 1.12 Twierdzenia Krafta i McMillana Otrzyman¡ nierówno±¢ nazywamy nierówno±ci¡ Krafta dla kodu dwójkowego. Prawdziwe jest nast¦puj¡ce ogólniejsze twierdzenie, którego dowód jest podobny do powy»szej konstrukcji. Twierdzenie (Kraft'a) n symboli. Binarny d1 , d2 , . . . , dn istnieje, je±li Zaªó»my, »e alfabet ¹ródªowy ma kod natychmiastowy o sªowach kodowych dªugo±ci zachodzi nierówno±¢ 2−d1 + 2−d2 + · · · + 2−dn ≤ 1. Je±li chcemy skonstruowa¢ kod binarny dla alfabetu {Q, W, E, R, T, Y, U } o zadanych dªugo±ciach sªów kodowych, to dobrze jest sprawdzi¢, czy warto 7 próbowa¢. Np. je»eli dªugo±ci maj¡ by¢, odpowiednio, 1, 2, 2, 3, 4, 5, 6, to nierówno±¢ Krafta nie jest speªniona: 2−1 + 2−2 + 2−2 + 2−3 + 2−4 + 2−5 + 2−6 > 1. Oznacza to, »e nie ma kodu natychmiastowego o kodach podanej dªugo±ci. Co wi¦cej, nast¦pne twierdzenie mówi, »e nie ma te» kodu jednoznacznie dekodowalnego, bo i dla niego musi by¢ speªniona nierówno±¢ Krafta. Twierdzenie (McMillan'a) Nierówno±¢ Krafta jest speªniona dla ka»dego kodu jednoznacznie dekodowalnego. Powy»sze twierdzenie mówi te», »e ka»dy kod jednoznacznie dekodowalny mo»na zast¡pi¢ kodem natychmiastowym, który ma sªowa kodowe takiej samej dªugo±ci co kod wyj±ciowy. 8