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