Documente Academic
Documente Profesional
Documente Cultură
CURS 4 AC 2006/2007
1/8
Figura 1.27 Modificarea codurilor ASCII pentru caracterele A i I astfel nct s aib paritate impar Codul ASCII pentru A conine un numr par de bii 1 Bit de paritate 1 0 1 0 0 0 0 0 1 Cuvntul complet are un numr impar de bii 1 Codul ASCII pentru I conine un numr par de bii 1 Bit de paritate 0 0 1 0 0 1 0 0 1
Figura 1.28 Exemplu de cod corector de erori Simbol A B C D E F G H Cod 000000 001111 010011 011100 100110 101001 110101 111010
dintr-un mesaj recepionat dac nu cunoatem deja informaia coninut de mesaj. Totui, n figura 1.28 este prezentat un cod simplu care deine aceast proprietate de corecie a erorilor. Pentru a nelege modul n care funcioneaz acest cod, vom defini distana Hamming dintre dou cuvinte binare (denumit astfel n onoarea lui R.W. Hamming, care a nceput cercetarea codurilor corectoare de erori n urma dezamgirii fa de lipsa de fiabilitate a primelor maini de calcul bazate pe relee din anii 1940) ca fiind numrul de bii prin care difer cele dou cuvinte. De exemplu, distana Hamming dintre simbolurile A i B din codul prezentat n figura 1.28 este patru, iar distana dintre B i C este trei. Caracteristica important a codului prezentat este aceea c oricare dou cuvinte sunt separate de o distan Hamming de cel puin trei. Dac n urma defectrii unui dispozitiv este modificat un singur bit, eroare poate fi detectat prin faptul c rezultatul nu va fi un cuvnt de cod valid. (Trebuie s modificm cel puin trei bii din oricare cuvnt de cod nainte ca acesta s apar ca alt cuvnt de cod valid). Dac apare o singur eroare ntr-unul dintre cuvintele codului prezentat n figura 1.28, putem descoperi care era cuvntul de cod iniial. ntr-adevr, cuvntul modificat va fi o distan Hamming de numai un bit fa de cuvntul de cod iniial, dar la o distan de cel puin doi bii de orice alt cuvnt de cod valid. Pentru a decodifica un mesaj, comparm pur i simplu fiecare Figura 1.29 Decodificarea cuvntului 010100 utilizndu-se codul din figura 1.28 Caracter A B C D E F G H 2 4 3 1 (Distana cea mai mic) 3 5 2 4
ablon de bii recepionat cu cuvintele de cod, pn gsim unul care este situat la o distan de cel mult un bit fa de cuvntul verificat. Vom considera c acesta este simbolul corect pe care trebuie s-l decodificm. S presupunem de exemplu c recepionm 010100. Dac vom
CURS 4 AC 2006/2007 3/8
compara acest cuvnt binar cu cuvintele de cod, vom obine tabelul din figura 1.29. n consecin, vom putea s tragem concluzia c a fost transmis caracterul D, acesta fiind cel mai apropiat. Aa cum se poate observa, aplicnd aceast tehnic asupra codului din figura 1.28 putem de fapt s detectm apariia a pn la dou erori ntr-un cuvnt i s corectm una dintre ele. Dac am fi proiectat codul astfel nct fiecare cuvnt de cod s se afle la o distan Hamming de cel puin cinci bii fa de celelalte cuvinte de cod, am fi putut s detectm pn la patru erori pe cuvnt i s corectm pn la dou erori. Desigur, realizarea de coduri eficiente care s aib distane Hamming mari u este o tehnic simpl. De fapt, aceast activitate intr n preocuprile unei ramurii a matematici denumit teoria decodificrii algebrice.
CURS 4 AC 2006/2007
4/8
Fiind date oricare dou cuvinte de cod, s zicem 10001001 i 10110001, se poate determina ci bii corespondeni difer. n acest caz, difer 3 bii. Pentru a determina ci bii difer, se aplic la nivel de bit operaia boolean XOR pentru cele dou cuvinte de cod, i se numar biii 1 rezultai. Numul de poziii n care bii a dou cuvinte difer se numeste distana Hamming. Semnificaia sa este c dac doua coduri sunt la o distan d unul de altul, vor trebui considerate d erori singulare pentru a converti un cod n altul. De exemplu, codurile 11110001 i 00110000 sunt la distanta Hamming 3, deoarece trebuie considerate trei erori singulare pentru a converti un cod n altul. ntr-un cuvant de memorie pe n bii, toate cele 2n combinaii sunt permise, dar datorit modului n care se calculeaz biii de control, numai 2m din cele 2n cuvinte de cod sunt valide. Dac o citire a memoriei intoarce un cuvant de cod invalid, calculatorul tie c a avut loc o eroare de memorie. Dndu-se algoritmul pentru calcularea biilor de control, se poate construi o list cu toate cuvintele de cod permise, i din aceast list s gsim acele dou cuvinte de cod pentru care distana Hamming este minim. Aceast distan este distana Hamming a codului complet. Proprietile de detecie sau corecie de erori ale unui cod depind de distana Hamming. Pentru a detecta d erori singulare, trebuie o distan de d+1, deoarece cu un asemenea cod nu exist posibilitatea ca d erori singulare sa poat schimba un cuvnt de cod valid n alt cuvant de cod valid. n mod asemntor, pentru a corecta d erori singulare, tebuie un cod de distan 2d+1, deoarece astfel codurile permise sunt suficient de departe, nct i cu d modificri codul original este mai aproape dect cellalt cod, deci poate fi unic determinat. Ca un exemplu simplu de cod detector de eroare, considerai un cod cu un singur bit de paritate adugat la biii de date. Bitul de paritate este astfel ales nct numrul de bii 1 n cuvntul de cod s fie par (sau impar). Un asemenea cod are distana 1, deoarece orice eroare singular produce un cuvnt de cod cu paritate greit. Cu alte cuvinte, trebuiesc dou erori singulare pentru a trece de la un cuvnt de cod valid la alt cuvnt de cod valid. Se poate folosi pentru detectarea erorilor singulare. Oricnd un cuvnt coninnd paritate greit este citit din memorie, se semnaleaz o eroare. Programul nu poate continua, dar cel puin nu vor fi prelucrate rezultate incorecte. Ca un exemplu simplu de cod corector de eroare, fie codul cu numai 4 cuvinte de cod valide: 0000000000, 0000011111, 1111100000 i 1111111111. Acest cod are o distan de 5=2x2+1, ceea ce nseamn c poate corecta erori duble. Dac soeste cuvntul de cod 0000000111, receptorul tie c originalul trebuie s fi fost 0000011111 (dac nu este mai mult de o eroare dubla). Dac se ntmpl ca o eroare tripl s modifice 0000000000 n 0000000111, eroarea nu poate fi corectat. Imaginai-v c trebuie s proiectm un cod cu m bii i r bii de control, care va permite corectarea tuturor erorilor singulare. Fiecare din cele 2m cuvinte de memorie permise are n cuvinte de cod nepermise la distana 1. Acestea sunt generate prin inversarea sistematic a fiecaruia din cei n bii din cuvnt. Astfel, fiecare dintre cele 2m cuvinte de memorie permise are nevoie de modele de n+1 bii dedicate (pentru cele n erori posibile i modelul corect). Cum numrul total de modele de bii este 2n, trebuie ca: (n+1)2m 2n.
CURS 4 AC 2006/2007 5/8
Folosind n=m+r, aceast cerina devine: (m + r + 1) 2r. Fiind dat m, se stabilete o limit inferioar pentru numrul biilor de control necesari pentru corectarea erorilor singulare. n figura 1.30 se indic numrul bitilor de control necesari pentru diferite dimensiuni ale cuvntului de memorie. Figura 1.30 Numrul biilor de control care pot corecta o eroare singular. Dimensiunea cuvntului 8 16 32 64 128 256 512 Bii de control 4 5 6 7 8 9 10 Dimensiunea total 12 21 38 71 136 265 522 Procentul depirii 50 31 19 11 6 4 2
Aceast limit inferioar teoretic se poate obine printr-o metod datorat lui Richard Hamming. nainte de a analiza algoritmul lui Hamming, s privim o reprezentare grafic simpl, care ilustreaz clar ideea unui cod corector de eroare pentru un cuvnt pe 4 bii. Diagrama Venn din figura 1.31a conine 3 cercuri, A, B i C, care impreun formeaz 7 regiuni. de exemplu, s codificm cuvantul de memorie pe 4 bii 1100 n regiunile AB, ABC, AC i BC, cte un bit pentru fiecare regiune (n ordine alfabetic). Aceast codificare este prezentat n figura 1.31.
Eroare A 0 1 1 B 0 B C A 0 1 0 0 1 0 B 1 C A 0 1 0 1 1 0 1 C
Bii de paritate Figura 1.31 (a) Codificarea lui 1100. (b) Paritate par adugat. (c) Eroare n AC.
n continuare vom adauga cte un bit de paritate fiecrei regiuni goale, pentru a obine paritate par, ca n figura 1.31b. Prin definiie, suma biilor din fiecare cerc, A, B i C, este
CURS 4 AC 2006/2007 6/8
acum un numr par. n cercul A avem cele patru numere 0, 0, 1 i 1, a cror sum este 2, un numr par. n cercul B avem numerele 1, 1, 0 i 0, a cror sum este deasemenea 2. n sfrit, n C avem acelai lucru. n acest exemplu, cercurile se ntmpl s fie la fel, dar sunt posibile i sume de 0 sau 4. Acest exemplu corespunde unui cuvnt de cod cu 4 bii de date i 3 bii de paritate. S presupunem acum c bitul din regiunea AC se altereaz, schimbandu-se din 0 n 1, ca n figura 1.31c. Calculatorul poate s observe acum c cercurile A i C au paritate greit (impar). Unica modificare a unui singur bit care corecteaz aceasta este s l refac pe AC 0. Astfel calculatorul poate corecta erorile singulare ale memoriei. Acum s vedem cum se poate folosi algoritmul lui Hamming pentru a construi coduri corectoare de eroare pentru cuvinte de memorie de orice dimensiune. ntr-un cod Hamming, r bii de paritate sunt adugai unui cuvnt de m bii, formnd un nou cuvnt de m+r bii. Numerotarea biilor ncepe de la 1, nu de la 0, bitul 1 fiind bitul din stnga (cel mai semnificativ). Toi biii al cror numr este putere a lui 2 sunt bii de paritate, restul sunt folosii pentru date. De exemplu, la un cuvant de date de 16 bii, se adaug 5 bii de paritate. Biii 1, 2, 4, 8 i 16 sunt bii de paritate, iar restul sunt bii de date. n total, cuvntul de memorie are 21 bii. n acest exemplu vom folosi (arbitrar) paritatea par. Fiecare bit de paritate verific anumite poziii din cuvnt: bitul de paritate este ales astfel nct suma biilor 1 din zona verificat s fie un numr par. Poziiile biilor verificate de ctre biii de paritate sunt: Bitul 1 verific biii: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21. Bitul 2 verific biii: 2, 3, 6, 7, 10, 11, 14, 15, 18, 19. Bitul 4 verific biii: 4, 5, 6, 7, 12, 13, 14, 15, 20, 21 Bitul 8 verific biii: 8, 9, 10, 11, 12, 13, 14, 15. Bitul 16 verific biii: 16, 17, 18, 19, 20, 21. n general, bitul b este verificat de biii b1, b2, ... bj, astfel nct b1+b2+...+bj=b. De exemplu, bitul 5 este verificat de biii 1 i 4, deoarece 1+4=5. Bitul 6 este verificat de biii 2 i 4, deoarece 2+4=6, i tot aa. n figura 1.32 se arat construcia unui cod Hamming pentru cuvntul de memorie pe 16 bii 1111000010101110. Cuvntul de cod pe 21 bii este 001011100000101101110. Pentru a vedea cum funcioneaz corectarea erorilor, s vedem ce s-ar ntmpla dac bitul 5 ar fi inversat printr-o variaie a tensiunii de alimentare. Noul cuvnt de cod va fi 001001100000101101110, n loc de 001011100000101101110.
0 1
0 2
1 3
0 4
1 5
1 6
1 7
0 8
0 9
0 10
0 11
0 12
1 13
0 14
1 15
1 16
0 17
1 18
1 19
1 20
0 21
Bii de paritate Figura 1.32 Constructia codului Hamming pentru cuvntul de memorie 111000010101110 adugnd 5 bii de control celor 16 bii de date
CURS 4 AC 2006/2007 7/8
Cei 5 bii de paritate vor fi verificai, cu urmtoarele rezultate: Bitul de paritate 1 incorect (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 conine 5 bii 1). Bitul de paritate 2 corect (2, 3, 6, 7, 10, 11, 14, 15, 18, 19 conine 6 bii 1). Bitul de paritate 4 incorect (4, 5, 6, 7, 12, 13, 14, 15, 20, 21 conine 5 bii 1). Bitul de paritate 8 corect (8, 9, 10, 11, 12, 13, 14, 15 conine 2 bii 1). Bitul de paritate 16 corect (16, 17, 18, 19, 20, 21 conine 4 bii 1). Numrul de bii 1 din poziiile 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 i 21 ar trebui s fie par, deoarece se folosete paritatea par. Bitul incorect trebuie s fie unul din cei verificai de bitul de paritate 1, adic 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 sau 21. Bitul de paritate 4 este incorect, deci unul din biii 4, 5, 6, 7, 12, 13, 14, 15 sau 21 este incorect. Eroarea trebuie s fie ntr-unul din biii ambelor liste, adic 5, 7, 13, 15 sau 21. Totui bitul 2 este corect, eliminnd 7 i 15. Similar, bitul 8 este corect, eliminnd 13. n cele din urm, bitul 16 este corect, eliminnd 21. Singurul bit rmas este bitul 5, n care este singura eroare. n acest fel, erorile pot fi corectate. O metod simpl de a gsi bitul incorect este de a calcula biii de paritate. Dac toi sunt coreci, atunci nu este nici o eroare (sau sunt cel puin dou). Apoi se adun toi biii de paritate incoreci, numrnd 1 pentru bitul 1, 2 pentru bitul 2, 4 pentru bitul 4, i tot aa. Suma rezultat reprezint poziia bitului incorect. De exemplu, dac biii de paritate 1 i 4 sunt incoreci, dar 2, 8 i16 sunt coreci, atunci bitul 5 (4+1) a fost modificat.
CURS 4 AC 2006/2007
8/8