Sunteți pe pagina 1din 23

Detecia i corecia erorilor

Moraru Andrei-Lucian

Clbescu Ctlin

grupa 443A
1
Cuprins
Capitolul 1 Noiuni introductive despre informaie i erori (Moraru Andrei-Lucian).............3

Capitolul 2 Coduri polinomiale. Codul Reed-Solomon (Moraru Andrei-Lucian)................9

Capitolul 3 Utilizarea CRC n reelele de calculatoare (Clbescu Ctlin)...........................15

Capitolul 4 Concluzii (Clbescu Ctlin)..............................................................................20

Bibliografie ..............................................................................................................................22

2
Capitolul 1 Noiuni introductive despre informaie i
erori

n reelele de calculatoare, ca dealtfel n orice dispozitiv care transmite informaie,


apariia erorilor este inevitabil. Dei unele medii de transmisie precum fibra optic sunt
construite astfel nct apariia erorilor s fie minim, acest lucru nu este o regul. Conceptele
de detecie i corecie a erorilor se bazeaz amndou pe un concept simplu, anume acela de a
aduga o redundan n transmisie. Singura diferen este n cantitatea de redundan, care
este mai mic n cazul deteciei (unde putem doar s spunem c s-a produs o eroare i s
cerem retransmiterea datelor) i mai mare n cazul coreciei, unde utilizatorul poate s deduc
felul n care trebuiau s arate datele transmise. Asupra mecanismelor de detecie i corecie
vom reveni un pic mai trziu n lucrare. Pentru nceput, vom da cteva definiii importante
despre teoria informaiei, care ne vor ajuta s nelegem mai bine anumite concepte utilizate n
operaiile de detecie i corecie.

Teoria informaiei rspunde la dou ntrebri fundamentale n telecomunicaii. Prima


dintre ele se refer la cantitatea maxim de informaie ce poate fi transmis printr-un canal de
comunicaie. n anii 40, comunitatea tiinific a crezut c mrind cantitatea de informaie
transmis printr-un canal, crete i probabilitatea eronrii ei. Shannon a surprins ns lumea
tiinific, artnd c transmisia poate fi fcut corect, cu condiia ca rata de transmisie s nu
depeasc o mrime numit capacitatea canalului. Aceast mrime se poate calcula din
caracteristicile zgomotului existent n canal.

A doua problem se refer la capacitatea maxim de compresie a datelor. Shannon a


artat c datele reprezentnd procese aleatoare ca muzica sau vorbirea nu pot fi compresate
sub o anumit valoare limit pe care a numit-o entropie, un termen folosit deja n
termodinamic. Apoi a artat c dac entropia este mai mic dect capacitatea canalului,
atunci transmisia datelor se poate face fr erori.

n continuare, vom prezenta cteva definiii relevante legate de informaie. n primul


rnd, informaia este o mrime msurabil care se refer la un experiment care poate avea mai
multe rezultate. Informaia obinut prin obinerea unui rezultat anume este definit ca fiind:

3
i=

unde prin P am notat probabilitatea acelui rezultat. Dac un experiment poate avea N rezultate
posibile, atunci informaia devine:

i=

Un semnal este o manifestare fizic, capabil s se propage printr-un mediu dat. n


mod restrns, noiunea se refer numai la acele manifestri fizice care transmit informaie.
Sunt excluse acele semnale care duneaz transimisiei, denumite perturbaii.

O perturbaie este un semnal care modific n mod necontrolat semnalul aleator util
care transmie informaia.

Un mesaj este un semnal care corespunde unei realizri particulare printr-un ansamblu
de idei, imagini sau date. El poate mbrca o hain fizic diferit.

O surs este un mecanism prin care dintr-o mulime de mesaje posibile se alege n
mod imprevizibil un mesaj particular destinat a fi transmis unui corespondent.

Un corespondent, denumit i utilizator, este destinaia final la care trebuie s ajung


mesajul.

Canalul de transmisie reprezint totalitatea mijloacelor de transmisie destinate


transportului mesajului de la surs la destinaie. Prin canal se nelege att mediul ct i
aparatura prin care se face transmisia. Schema unui canal de transmisie este urmtoarea:

S CoS CoC CANAL DecC DecS U


m dm

S - surs de mesaje

CoS - Codor de surs (compresia datelor)

4
CoC - Codor de canal (protecie contra perturbaiilor)

M - modulator

CANAL - Canal de comunicaie

P - Perturbaii

DecC - Decodor de canal

DecS - Decodor de surs

U - Utilizator

n ceea ce privete unitatea de msur a informaiei, ea se obine din baza de


logaritmare. Cea mai des folosit este bit-ul, care corespunde bazei de logaritmare 2. Pe lnga
ea mai avem dit-ul i nit-ul, care corespund bazelor de logaritmare 10, respectiv e. Aceste
uniti de msur nu sunt independente ntre ele, existnd o dependen numeric ntre cele 3.
n cele ce urmeaz n aceast lucrare, vom folosi bit-ul ca unitate de msur a informaiei.
Teorema eantionrii este una din cele mai importante teoreme din teoria informaiei.
Ea spune c pentru transmisia unui semnal analogic nu este necesar transmisia sa pe ntreaga
durat a axei timpului, ci este suficient s se transmit eantioane ale acestui semnal la
intrevale de timp mai mici sau egale cu unde cu w am notat cea mai mare frecven din

spectrul semnalului.

Prin codare nelegem stabilirea unei corespondene ntre dou limbaje, aceast
coresponden asigurnd trecerea de la un limbaj A la un limbaj B. Decodarea este operaia
invers.

Entropia unei surse este informaia medie pe simbol. Medierea se face ponderat, iar
formula de calcul este urmtoarea :

Valoarea maxim a acestei entropii este:

unde n e numrul de simboluri ce pot fi produse de o surs.


5
Redundana unei surse este:

iar unitatea de msur pentru aceste 3 mrimi este bit/simbol.

Detecia i corecia erorilor sunt 2 etape foarte importante n transmiterea informaiei.


n teorie exist i aa numitele canale fr zgomot, n care aceste 2 etape nu se regsesc
ntruct nu exist factori perturbatori care s duc la apariia erorilor. Cum ns n practic
astfel de surse nu exist, apare posibilitatea de eroare n transmisie.

n cazul canalelor cu perturbaii, prin codare nu urmrim reducerea sau anularea


redundanei unei surse, ci introducem o redundan suplimentar controlat cu scopul de a
detecta i/sau corecta erorile introduse de zgomot n canal. Prin canal se transmit simboluri
binare iar pe lng aceste simboluri purttoare de informaie (numite simboluri utile sau
informaionale) se mai transmit alte simboluri redundante calculate prin anumite reguli.

Regulile de calcul sunt cunoscute i la recepie i prin verificarea lor se stabilete dac
s-au introdus erori i se i corecteaz daca sistemul permite acest lucru. Corecia nseamn
gsirea poziiei simbolurilor care s-au transformat din 0 n 1 sau din 1 n 0 i schimbarea
simbolului recepionat cu valoarea opus.

Utilizarea redundanei suplimentare duce i la utilizarea doar parial capacitii


canalului. De asemenea trebuie menionat c n cazul utilizrii coreciei erorilor este necesar
o redundan mrit, ceea ce duce la scderea i mai mult a informaiei transmise.

Detecia erorilor presupune introducerea n lanul de transmisie a unui canal de reacie.


Acest canal are rolul de a cere retransmiterea semnalul n cazul n care s-au detectat erori.

Corespondena dintre mesajul sursei i simbolurile de 1 i 0 poart numele de codare.


Codurile sunt de 2 tipuri :

1. coduri bloc: grup, ciclice (folosesc polinoame i sunt utilizate foarte mult n
detecia i corecia erorilor)
2. convoluionale

Cuvntul de cod reprezint vectorul format din simbolurile informaionale i cele de


control (aparinnd redundanei suplimentare).

6
Tipurile de erori care apar la transmisiunile de date sunt:

erorile simple, n cazul crora este alterat valoarea unui singur simbol;
erorile duble, pentru care se modific valorile a 2 simboluri;
erorile triple, caz n care sunt transformate 3 simboluri;
pachete de erori, care reprezint succesiuni de simboluri n care primul i
ultimul sunt eronate, iar celelalte simboluri pot fi eronate sau nu.

Mecanismul de detecie i corecie a erorilor const n trei etape. n prima din ele se
realizeaz detecia, celelalte dou fiind rezervate coreciei. Pentru detecie se aplic un
operator asupra vectorului , unde prin am definit vectorul eroare, n urma creia
se calculeaz un vector corector numit sindrom i notat . Valorile lui confirm sau infirm
transmisia corect a lui . Dac dorim s avem i corecie, trebuie aplicat un alt operator pe
vectorii corectori n urma cruia s rezulte vectorul transmis . Etapa de detecie este identic
pentru toate sistemele, ns cea de corecie este diferit de la un cod la altul.

Pentru detecia erorilor sunt folosite, pe lng codurile menionate mai sus, alte 2
metode:

Paritatea unidimensional.
Paritatea bidimensional.

In cazul paritii unidimensionale se adaug la mesaj un bit de paritate, care face ca


numrul de bii de 1 din mesaj s fie par sau impar.

Dac un singur bit se altereaz n timpul transmisiei acesta va schimba paritatea de la


par la impar sau invers. Emitorul genereaz bitul de paritate prin sumarea modulo 2, adic
prin aplicarea unui "sau exclusiv" tuturor biilor din mesaj. Dup aceea bitul de paritate sau
complementul lui se adaug la mesaj. Receptorul poate verifica mesajul prin sumarea modulo
2 a biilor i apoi comparnd rezultatul cu bitul de paritate. O operaie echivalent este
sumarea modulo 2 att a biilor din mesaj ct i a bitului de paritate i apoi se verific dac
rezultatul este 0(aceasta in cazul unei paritati pare).

7
Aceast tehnic detecteaz erorile simple(modificarea valorii unui singur bit). De fapt
detecteaz erorile n orice numr impar de bii, dar nu realizeaz i detectia unui numr de
erori pare.

Paritatea bidimensional este cunoscut sub numele de paritate


longitudinal/vertical. Informaia este dispus pe linii formnd o matrice. Acest tip de
paritate folosete att cte un bit de paritate pentru fiecare linie a matricei dar i un cuvnt de
paritate reprezentat de ultima linie a matricei, n care fiecare bit reprezint paritatea coloanei
corespunztoare. Bitul de paritate al fiecarei linii se gsete pe ultima coloan din matrice,
care poart denumirea de VRC(Vertical Redundancy Check), n timp ce biii de paritate
pentru fiecare coloan formeaz ultima linie a matricei, numit LRC(Longitudinal
Redundancy Check) sau cuvnt de paritate.

Acestea ar fi noiunile introductive cele mai importante. n cele ce urmeaz vom


prezenta cele mai importante coduri de tip polinomial, cu accent pe codul Reed-Solomon,
aplicaiile acestora, precum i cu o prezentare teoretic i aplicat a Controlului Redundant
Ciclic (CRC).

8
Capitolul 2 Coduri polinomiale. Codul Reed-
Solomon

Codurile polinomiale sunt un exemplu de coduri ciclice care trateaz irurile de bii de
1 i 0 n relaie cu coeficienii unui polinom, dup cum se va arta puin mai jos. Codurile
ciclice constituie un caz particular al codurilor grup. Denumirea de ciclic provine de la
faptul c orice permutare ciclic a unui cuvnt de cod valid produce tot un cuvnt de cod
valid. Permutarea cilic a unui cuvnt se obine lund primul element i punndu-l la sfritul
cuvntului.
Formaliznd, fie cuvntul de cod vn-1vn-2vn-3 . . .v3v2v1v0. Un cuvnt obinut printr-o
permutare ciclic din acesta este vn-2vn-3vn-4 . . .v2v1v0vn-1. Dup mai muli pai, prin pemutri
consecutive se poate obine cuvntul : v0vn-1vn-2 . . .v3v2v1.
De exemplu dac 10111 este un cuvnt de cod (conform unui cod cilcic), atunci i
01111 este un cuvnt de cod, de altfel ca i 11110, 11101, 11011.
Lungimea cuvntului de cod se noteaz cu n. Dintre cele n simboluri k sunt de
informaie, iar m = n k de control. Dac n cazul codurilor grup reprezentarea era sub form
de vectori, n cazul codurilor ciclice reprezentarea este sub form de polinom.
Polinomul de informaie i(x) are gradul k 1 i este de forma:
i(x) =
unde [ , , ... ] sunt simbolurile de informaie.
Cuvntul de cod este reprezentat printr-un polinom de grad n 1:
v(x) =

Similar cu matricea generatoare, G, de la coduri grup, aici se utilizeaz polinomul


generator, notat g(x). Gradul acestuia este m:
g(x) =
Pentru a fi un polinom generator al unui cod funcional, g(x) trebuie s fie polinom
primitiv. ntr-o simplificare a definiiei n care se ine cont i de faptul c coeficienii
polinomului pot fi doar 0 sau 1, un polinom este primitiv dac este:

9
ireductibil: acest lucru presupune c nu exist nici un polinom de grad nenul i mai
mic dect m care s fie divizor al lui g(x)
dac este o rdcin a lui g(x) (g() = 0) atunci cel mai mic ntreg T pentru care
i = i+T este T = 2m 1 = 2grad(g) 1.
De reinut este c polinoamele primitive sunt listate (cunoscute), iar de importan
practic este faptul c coeficienii de grad maxim (gm) i minim (g0) sunt nenuli: gm = 1,
g0 = 1.
Echivalent matricei de control de la coduri grup, n cazul codurilor ciclice, se definete
un polinom de control, h(x). Acesta are gradul k 1 i se afl n relaia urmtoare cu
polinomul generator:
g(x)h(x) = xn + 1
Dup cum am spus, codurile polinomiale leag un ir de bii de 1 i 0 de coeficienii
unui polinom. Se tie c pentru un numr reprezentat n binar, adic folosind bii de 1 i 0,
utilizeaz puterile lui 2 pentru a-i reprezenta valoarea numeric. Pentru un cuvnt de cod
binar, biii de 1 semnific puterile respective ale lui x care vor aprea n reprezentarea
polinomului. Pentru a ilustra acest concept, s dm un exemplu. Fie cuvntul de cod 110101.
Acesta are bii de 1 pe poziiile corespunztoare puterilor 5, 4, 2 i 0 ale lui 2, prin urmare
polinomul asociat acestui cod este:
p(x) = x5 + x4 + x2 +1
Aritmetica polinomial este de tip modulo 2. Nu exist transport la adunare i nici
mprumut la scdere (adunrile i scderile sunt identice cu SAU EXCLUSIV ) iar scderea
este realizat modulo 2.

n ceea ce privete practica, polinomul folosit n IEEE 802 este:

x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1

Codul Reed-Solomon

Codurile Reed-Solomon sunt tot un exemplu de coduri ciclice, cu deosebirea c nu


sutn coduri binare, ele nefolosind cmpul binar format din simbolurile 0 i 1. Pentru aceste
coduri se utilizeaz un cmp finit de ordin superior numit cmp Galois. Astfel, cuvintele de
cod de tip RS nu sunt succesiuni de bii, ci succesiuni de caractere. Dei aceste caractere pot fi

10
reprezentate cu ajutorul cmpului binar, din punct de vedere al codrii i decodrii RS sunt
indivizibile.

Cuvintele de cod RS au aceeai structur ca i codurile ciclice iar relaia de codare este
aceeai cu cea folosit n codurile ciclice:

v(x) = i(x)*xm + rest (i(x)*xm/g(x))


Prin aceast relaie de codare se obine polinomul ataat cuvntului de cod, polinom ai crui
coeficieni sunt tocmai caracterele ce alctuiesc cuvntul de cod. Relaia de codare indic, de asemenea, c
v(x) este un multiplu al lui g(x).
Codul RS, avnd parametrii n, k i m, este capabil s corecteze un numr ec de caractere eronate,
unde: 2*ec = m = n k. La decodare, spre deosebire de codurile ciclice, ntr-un cuvnt de cod RS
recepionat, n vederea coreciei, este necesar att localizarea erorii, ct i stabilirea valorii ei.
Conceptul original al codrii RS se referea la codarea mesajelor de k simboluri, considernd aceste
simboluri drept coeficienii unui polinom p(x) cu grad maxim k-1 pe un cmp finit de ordin N. Evaluarea
acestui polinom se face folosind un numr n, mai mare dect k, de puncte de intrare. Prin eantionarea unui
polinom de grad k-1 cu un numr de puncte mai mare dect k duce la un sistem supradeterminat i permite
refacerea codului la recepie prin utilizarea interpolrii Lagrange dac ni se dau oricare k din cele n puncte de
eantionare. Secvena de puncte este creat de un generator al multiplilor valorilor din cmpul finit i include
i valoarea 0, permind orice valoare a lui n (care poate ajunge i pn la N).
n practic, codurile RS nu sunt vzute ca coduri ciclice, ci sunt considerate coduri BCH. n acest
caz, simbolurile codate sunt considerate drept coeficienii unui polinom de ieire s(x) construit prin
multiplicarea polinomului mesaj p(x) de grad k-1 cu un polinom generator g(x) de gard t=N-k-1. Emitorul
transmite cei N-1 coeficieni ai lui s(x), iar receptorul utilizeaz mprirea polinomial prin g(x) a
polinomului recepionat pentru a determina dac s-au produs erori. Dac restul acestei mpriri este diferit
de 0, atunci au fost detectate erori. Dac notm cu r(x) acest rest, atunci receptorul va evalua acest rest
bazndu-se pe g(x) i va putea construi un sistem care determin care coeficieni au fost transmii eronat.
Dac ecuaiile acestui sistem pot fi rezolvate, receptorul tie cum s modifice r(x) n scopul obinerii
polinomului s(x) corect.
La prima vedere, aceste 2 definiii par complet diferite. n primul caz cuvintele de cod reprezint
valorile unui polinom pe cnd n al doilea caz sunt coeficienii unui polinom. n plus, codurile polinomiale
din primul caz trebuie s aib grad mic, pe cnd n al doilea caz aceste polinoame trebuie s aib anumite
rdcini. Echivalena celor dou definiii este demonstrat folosind transformarea Fourier discret, care
stabilete o legtur dual ntre coeficienii unui polinom i valorile unui polinom.

11
Proprietile codului RS
Codul Reed-Solomon este un cod bloc liniar de lungime n pe un cmp finit F cu dimensiune k i
distana Hamming minim n-k+1. Codul Reed-Solomon este optimal n sensul c distana minim are
valaorea maxim posibil pentru un cod liniar de dimensiune (n, k).
Abilitile de corecie a acestui cod sunt determinate de distana minim sau de mrimea n-k, care
reprezint redundana din bloc. Dac poziiile simbolurilor eronate nu sunt cunoscute, atunci un cod RS
poate corecta pn la (n-k)/2 simboluri eronate. Altfel spus, el poate corecta un numr de erori egal cu
jumtate din numrul de simboluri redundante adugate blocului. Uneori, poziiile eronate sunt cunoscute
dinainte, aceste poziii purtnd denumirea, n limba englez, de erasures. Un cod RS poate corecta de dou
ori mai multe erasures-uri dect erori iar mai general vorbind, orice combinaie de erasures i erori poate fi
corectat att timp ct se respect condiia 2*E+S n-k, unde cu E am notat numrul de erori iar cu S am
notat numrul de erasures din bloc.
n practic, pentru codurile RS se folosete un cmp finit cu 2m elemente. n acest caz fiecare simbol
poate fi reprezentat ca o valoare pe un numr m de bii. Emitorul transmite datele sub forma unor blocuri
codate iar numrul de elemente dintr-un bloc este n=2m-1. Un caz particular i des utilizat este cel pentru care
m=8. n ceea ce privete dimensiunea k, aceasta reprezint un parametru care d numrul de simboluri de
date dintr-un bloc. De obicei k se alege 223, astfel c ntr-un bloc de date vom avea 223 simboluri de date i
32 de simboluri de paritate, toate reprezentate pe 8 bii pentru cazul cnd m=8. Un astfel de cod este capabil
s corecteze pn la 16 erori de simbol per bloc.
Aceste proprieti ale codurilor RS le fac s se plieze excelent pe aplicaiile n care erorile pot aprea
sub forma unor burst-uri. Acest lucru se ntmpl deoarece pentru cod nu are importan ci bii sunt eronai.
Dac mai muli bii ai unui simbol sunt eronai, acest lucru va fi contabilizat drept o singur eroare. De
menionat este c dac avem de-a face cu iruri de date pentru care erorile sunt aleatoare sau nu conin
grupuri de mai muli bii, atunci codurile Reed-Solomon sunt o alegere proast n comparaie cu un cod
binar.
Codul Reed-Solomon, ca i un cod convoluional, este transparent. Acest lucru nseamn c chiar
dac simbolurile canalului au fost inversate la un moment dat n timpul transmisier, decodoarele continu s
funcioneze. Rezultatul va fi reprezentat de datele originale, dar inversate. Pe de alt parte, aceast
transparen dispare n cazul n care codul este scurtat. Biii lips trebuie completai cu valori de 0 sau 1 n
funcie de tipul datelor din punct de vedere al complementrii lor. Acest lucru trebuie stabilit nainte de a
ncepe decodarea.
Aplicaii i utilizri ale codurilor Reed-Solomon
Codurile Reed-Solomon au ajuns s aib o utilizare foarte variat de-a lungul timpului, de la
comunicaii n spaiu la electronice i electrocasnice. Ca i exemple, ele sunt intens folosite la realizarea CD-

12
urilor, DVD-urilor, Blu-Ray-urilor, n comunicaii de date precum DSL i WiMAX, n sisteme de broadcast
precum DVB i ATSC i n aplicaii de calculatoare cum ar fi sistemele RAID 6.
n continuare vom prezenta cteva aplicaii mai deosebite ale acestor coduri.
Prima dintre ele este cea de stocare a datelor. Codurile RS sunt utilizate aici pentru a corecta erorile
de burst asociate defectelor media. Codarea RS este una din prile cheie de realizare a compact disc-urilor.
A fost pentru prima dat cnd s-a folosit o tehnic de codare cu corecie a erorilor n produsele de larg
consum iar DVD-urile i DAT-urile folosesc acelai principiu. n cazul CD-ului, 2 straturi de coduri RS
separate de o suprafa de ntreesere convoluional cu 28 de direcii formeaz o schem numita Cross-
Interleaved Reed-Solomon Coding (CIRC). Primul element al acestei scheme este un cod RS interior de
dimensiune mic (32, 28), care este obinut prin micorarea unui cod de dimensiune (255,251) cu simboluri
pe 8 bii. Acest cod poate corecta pn la 2 bytes de erori pentru un bloc de 32 de bytes dimensiune. Pe lng
aceasta, marcheaz drept erasures toate blocurile care au mai mult de 2 bytes de erori n ele. Blocurile
decodate de 28 de bytes, cu indicatorii de erasures, sunt desfcute apoi de dispozitivul de dentreesere n
blocuri diferite ale codului exterior de dimensiune (28,24). Datorit dentreeserii, un bloc de dimensiune 28
bytes al codului interior se transform n 28 de blocuri de dimensiune 1 byte, unul fiecare din cele 28 de
blocuri ale codului exterior, fapt ce permite foarte uor corecia acestor blocuri. Rezultatul final este acela c
un CIRC poate corecta burst-uri de dimensiune de pn la 4000 de bii.
O a doua aplicaie este n codurile de bare bidimensionale (PDF-417, MaxiCode, Datamatrix, QR
Code, Aztec Code). Aceste coduri de bare folosesc coduri RS pentru a permite citirea corect n cazul n care
o poriune din cod este stricat. Cnd scanner-ul nu poate recunoate un simbol, l trateaz ca pe un erasure.
O a treia aplicaie este n transmisia de date. n acest caz se folosesc variante specializate de coduri
RS, cum ar fi Cauchy-RS i Vandermonde-RS, pentru a rezolva problema transmiterii datelor prin canale cu
erasure-uri. Procesul de codare folosete coduri RS de dimensiune (N, K), de unde rezult N cuvinte de cod
a cte N simboluri ce stocheaz K simboluri de date. Aceste cuvinte de cod sunt mai apoi transmise pe canal.
Orice combinaie de K cuvinte de cod recepionate este suficient pentru a reconstrui toate cele N cuvinte de
cod. Rata codului este setat la n cazul n care probabilitatea de apariie a unui erasure poate fi modelat i
se observ ca fiind mai mic. n concluzie, N este de obicei de forma 2K, ceea ce nseamn c este nevoie ca
mcar jumtate din toate cunvintele de cod transmise trebuie recepionate pentru a putea reconstrui toate
cuvintele de cod trimise.
A patra aplicaie i poate cea mai interesant este n comunicaiile satelitare. Codurile RS au fost
folosite pentru a coda fotografiile digitale trimise de ctre satelitul Voyager. n acest caz au fost introduse
codurile Reed-Solomon concatenate cu coduri convoluionale, o practic ce s-a rspndit de atunci foarte
mult n comunicaiile satelitare. Decodoarele Viterbi tind s cauzeze erori n cazul burst-urilor de durat
scurt. Corecia acesot burst-uri este realizat foarte simplu folosind coduri Reed-Solomon simplificate sau

13
scurtate. Versiunile moderne ale concatenrilor de tip Reed-Solomon/coduri convoluionale decodate prin
intermediul decodoarelor Viterbi au fost folosite n misiunile sateliilor Mars Pathfinder, Galileo, Mars
Exploration Rover i Cassini, unde funcioneaz la un nivel mai mic cu 1-1.5 dB dect limita maxim
impus de capacitatea Shannon. Aceste coduri concatenate au nceput ns s fie nlocuite de coduri turbo
mult mai puternice unde datele transmise nu trebuie decodate imediat.

14
Capitolul 3 - Utilizarea CRC n reelele de calculatoare
Primele ncercri de comunicaie ntre diferite calculatoare au avut la baz conectarea
direct a acestora folosind o linie serial, pe care se efectua apoi schimbul de date. Deoarece
linia era nesigur, s-au dezvoltat tehnici care s suplineasc acest neajuns. Astfel fiecare
entitate de date trimis avea un cmp de control cu informaii despre corectitudinea celorlalte
cmpuri.
De asemenea, orice comunicaie avea stabilite nite reguli care s fie aplicate n cazuri
deosebite. Astfel au aprut o serie de protocoale de comunicaie serial, care foloseau diferite
coduri. Informaiile schimbate ntre diferite sisteme sunt codificate, pentru a realiza adaptarea
statistic a sursei la canalul de comunicaie. Canalul de comunicaie poate fi afectat sau nu de
perturbaii.
Un canal neperturbat ar corespunde unei criptri sau compresii a informaiei, pe cnd
un canal perturbat transmisiei acesteia. Sistemele actuale care nglobeaz calculatoare i
echipamente automate necesit o transmisie ct mai corect a informaiei ; pentru aceasta
semnalul trimis este prelucrat nainte de a fi emis.
Prelucrarea semnalului se realizeaz foarte uor n cazul transmisiei de semnale
discrete, prin codificare. Receptorul va decodifica semnalul primit i va ncerca s estimeze
dac au aprut erori.
CRC (Control Redundant Ciclic) este o metod matematic folosit pentru a verifica
integritatea datelor. Este o form de sum de control, ce se bazeaz pe teoria polinoamelor de
lungime maxim. Chiar dac metoda CRC este mai sigur dect metoda bazat pe o simpl
sum de control, nu ofer o adevarat securitate criptografic. CRC este o tehnic folosit
pentru detecia erorilor de transmisie. Pentru detecia i corectarea erorilor, exist un registru
special n care se stocheaz suma de control a datelor transferate. Aceasta se compar cu suma
de control calculat i se elimin astfel posibilele erori. n acest caz, tehnica CRC este folosit
doar pentru a asigura integritatea datelor la transferurile pe magistral, nu i pentru a
mbunti integritatea datelor stocate pe discurile hard. Din punct de vedere al tipului de cod,
codurile CRC sunt tot coduri ciclice, deci utilizeaz polinoame. Polinomul acceptat ca
standard pentru CRC este cel dat exemplu si mai sus, mai exact standardul IEEE 802.

n ceea ce privete calculul acestui CRC, avem dou variante. Prima din ele este
varianta software. Pentru aceasta exist mai multe modaliti de implementare, ns trebuie
inut cont de mai muli factori, dintre care cei mai importani ar fi:

15
Ipotezele de la care se pornete calculul
Dimensiunea polinomului generator
Dimensiunea i structura mesajului pentru care se calculeaz CRC-ul
Timpul n care se genereaz CRC-ul
Dimensiunea spaiului de memorie alocat
Performanele procesorului de calcul

Metodele de implementare pot fi clasificate, dup vitez, n dou categorii:

Algoritmi de vitez redus


Algoritmi de mare vitez

n continuare, pentru implementarea propriu-zis a unui algoritm de calcul CRC,


trebuie s implementm regulile mpririi n binar, deoarece CRC-ul folosete aceast
aritmetic. Din nefericire nu putem utiliza instruciunea de mprire disponibil la un
calculator deoarece mprirea CRC nu este identic cu cea normal, un alt motiv fiind i
dimensiunea mesajului, care poate ajunge pn la civa MB iar procesoarele actuale au
registre de dimensiune mult mai mic. Astfel, pentru implementare vom avea nevoie de un
registru de deplasare, a crui dimensiune trebuie s fie egal cu gradul polinomului generator
i care s conin biii afereni mesajului, prelucrarea urmnd a se realiza bit cu bit.

O alt metod de implementare necesit exist unui tabel care s conin biii deplasai
ai polinomului CRC. n vederea micorrii timpului de execuie s-a trecut la procesarea n
paralel a biilor n grupuri de cte 4b, 8b, 16b sau 32b. Prelucrarea pe nibluri, adic pe 4b, este
ns de obicei evitat pe calculatoare, din simplul fapt c acestea opereaz cu octei, astfel c
pentru mrirea vitezei de lucru se folosesc de obicei prelucrri pe octei sau multipli de octei.

Pe lng implementarea software, exist i varianta implementrii hardware, care se


realizeaz prin intermediul unui sistem cu microcontroller. Un astfel de sistem prezint o serie
de avantaje:

Permite modificarea cu uurin a metodei de calcul


Permite o introducere i prelucrare simpl a datelor nainte de a fi supuse calculului
Permite comunicaia cu diferite periferice
Permite comunicaia cu calculatorul prin intermediul porturilor cum ar fi cel serial

16
Pentru a obine timpi foarte mici de execuie se folosete o implementare hardware ce
utilizeaz bistabili n varianta paralel.

Dup cum am menionat mai sus, CRC-ul reprezint o form de sum de control.
Suma de control la nivel de bloc reprezint un mecanism de detecie a erorilor de transmisie.
Modul n care lucreaz este urmtorul:

Mai nti, datele se mpart n blocuri ce se vor nsuma, iar suma obinut este
trunchiat, inversat i adugat la sfrit
La recepie, blocurile primite (care include i acea sum la sfrit), se adun pe msur
ce sunt recepionate
n cazul n care am obinut o sum diferit de 0, nseamn c datele nu au fost
transmise corect iar secvena trebuie retransmis. Corecia erorii nu este posibil
Pentru cazul n care folosim metoda CRC, suma de control este calculat prin
mprire aritmetic, secvena de bii fiind mprit cu un numr special ales
mprirea se face modulo 2, adic folosind operatorul logic SAU-EXCLUSIV (XOR),
restul mpririi reprezentnd semntura care va fi adugat la sfrit, dup biii utili
Divizorul se obine folosind algoritmii codurilor Hamming
La recepie se recalculeaz restul mpririi iar dac acesta nu coincide cu restul primit,
atunci secvena a fost transmis cu erori

Performantele astfel obinute sunt foarte bune, un CRC ce genereaz un rest de 16 bii
putnd detecta:

Toate erorile n burst (rafal) de maxim 16 bii


Toate numerele impare de bii din eroare
Aproape orice eroare, indiferent de lungimea ei

Metodele hardware ofer o uurin mrit de calcul pentru CRC i folosesc registre
de deplasare mpreun cu pori logice de tip XOR.

Controlul fluxului de date

Indiferent c vorbim de metode software sau hardware, acest control este necesar
pentru a se evita erorile de overflow, care apar de obicei cnd receptorul nu reuete s
prelucreze datele cnd acestea vin cu o vitez prea mare. Alterarea acestor date poate fi
detectat i cu ajutorul sumelor de control, care n Internet sunt calculate prin mprirea

17
datelor n blocuri de cte 16 bii. Programul care calculeaz aceste sume trateaz aceste
blocuri ca pe nite numere ntregi. Valorile n binar ale acestor blocuri sunt nsemnate, suma
de control urmnd a fi transmis mpreun cu datele aferente blocurilor. Sumele sunt calculate
la emitor i recalculate la receptor iar dac nu sunt egale, atunci nseamn c secvena nu s-a
transmis corect.

Cum CRC-urile necesit de obicei nite calcule mai complexe, se prefer


implementarea hardware a acestora.

n cazul reelelor de calculatoare, suma de control este un cod de dispersie pe 32 de


bii a datelor i reprezint un numr care rezult n urma unui calcul matematic ce este
efectuat folosind datele din pachetul de la calculatorul surs. Pachetele reprezint unitatea de
baz a comunicaiilor n reea. Atunci cnd pachetul ajunge la destinaie, calculul se reface iar
dac rezultatele sunt identice, nseamn c pachetul a rmas intact, n caz contrar nseamn c
datele au fost alterate pe parcursul transmisiei din cauza zgomotului de pe cablu. Acest lucru
trebuie semnalizat calculatorului surs pentru ca acesta s retransmit datele.

Algoritmul de calcul al CRC

Dup cum am mai spus, codurile polinomiale se bazeaz pe tratarea irurilor de bii ca
reprezentri de polinoame, folosind coeficieni de 0 i 1. Pentru calculul CRC se va folosi
aritmetica modulo 2, cea bazat pe adunri fr transport i scderi fr mprumut. Pe lng
acestea vom folosi i un polinom generator G(x) cu MSB-ul i LSB-ul egale cu 1. n
continuare dorim s adugam un numr de bii la sfritul unui cadru, descris de un polinom
M(x) ales astfel nct M(x) l divide pe G(x). Algoritmul pentru calculul sumei de control are
urmtorii pai:

1. Notnd cu r gradul lui G(x), vom aduga r bii de 0 la captul cel mai puin
semnificativ al polinomului M(x), obinnd un nou polinom notat M(x)
2. Se mparte irul de bii corespunztori lui G(x) ntr-un ir de bii corespunztor lui
M(x), prin mprire modulo 2
3. Se scade restul (de dimensiune dr bii) din irul de bii corespunztor lui M(x) prin
scdere modulo 2, rezultatul acestei scderi fiind cadrul cu suma de control ce va fi
transmis i care este divizibil modulo 2 cu G(x).

Pentru a ilustra acest concept, vom lua un exemplu numeric. Fie cadrul 1101011011 i
codul pentru generator 10011. Polinomul G(x) va fi x4 + x + 1, deci r=grad(G(x))=4, prin

18
urmare vom concatena 4 bii de 0 la captul nesemnificativ al cadrului. Mesajul devine
11010110110000. mprirea acestui mesaj la polinomul generator G(x) va produce
urmtoarele rezultate:

Cadru transmis: 11010110111110


Rest: 1110

De mentionat, n final, ar fi c un astfel de cod ca cel din exemplu este capabil s


detecteze erori n rafal (burst) de dimensiune de pn la r bii.

Aplicaie

n continuare, vom prezenta o aplicaie ce calculeaz CRC pentru un bloc de date,


realizat n limbajul C++.

char mxor(char a, char b)

if((a='0')&&(b='0'))

return '0';

if((a='1')&&(b='0'))

return '1';

if((a='0')&&(b='1'))

return '1';

if((a='1')&&(b='1'))

return '0';

};

char *crc(char *cod) //functia scade succesiv polinomul x^3+x+1 din secventa care trebuie codata

string str="1011";

char *g=new char[4]; //declararea polinomului x^3+x+1;

char* remainder = new char[16];

int i,j;

for(i=0;i<4;i++)

19
*(g+i)=str[i];

for(i=0;i<8;i++)

*(remainder+i)=*(cod+i);

for(i=8;i<16;i++)

*(remainder+i)='0';

for(i=0;i<8;i++)

if(*(remainder+i)=='1')

for(j=0;j<4;j++)

*(remainder+i+j)=mxor(*(remainder+i+j),*(g+j));

};

return remainder;

};

20
Capitolul 4 Concluzii
Detecia i corecia erorilor au reprezentat mereu unele din cele mai importante
provocri din domeniul transmisiunii informatiei, iar ntr-o er n care comunicaiile s-au
dezvoltat n attea forme, este lesne de neles de ce se dorete transmisiunea ct mai fidel a
informaiei.

Metodele de detecie i corecie sunt variate i se bazeaz pe o varietate de coduri, fie


ele ciclice, grup sau convoluionale. Codurile grup i cele convolutionale folosesc n general o
codare binar a informaiei, tratnd simbolurile prin intermediul reprezentrii lor cu bii de 0
i 1, n timp ce codurile ciclice asociaz cte un polinom fiecrui astfel de cod. Codurile
ciclice se folosesc cel mai des n calcularea sumei de control (checksum n englez), metod
foarte des folosit pentru detecia erorilor care, dei nu poate realiza i corectia, este destul de
uor de implementat i de utilizat.

Codurile Reed-Solomon au reprezentat un pas nainte n acest domeniu. Chiar dac


alfabetul lor i spatiul pe care sunt definite difer fa de codurile ciclice (i grup, pentru c
aceste coduri Reed-Solomon pot fi privite i ca coduri grup, existnd o echivalen ntre
relaiile lor de reprezentare ca i coduri ciclice, respectiv cele de reprezentare a lor ca i coduri
grup, aceasta din urm reprezentnd de fapt varianta clasic n care sunt privite codurile Reed-
Solomon), ele i-au gsit implementri n diverse domenii precum comunicaiile satelitare,
stocarea datelor, reele de calculatoare etc.

Metoda CRC (Control Redundant Ciclic sau Cyclic Redundancy Check n englez)
reprezint o alt metod extrem de des folosit n domeniul deteciei erorilor. Ea se bazeaz
pe calculul unei sume de control i pe compararea aritmetic a valorilor obinute cu nite
valori ce ar trebui obinute n cazul unei transmisii corecte a datelor. Dac aceste valori difer
ntre ele, atunci spunem c transmisia nu a fost realizat corect i anunm emitorul s
retransmit secvena n cauz. Aceast metod are un avantaj enorm, reprezentat de
posibilitatea detectrii erorilor n rafal, adic cele ntinse pe mai muli bii, ceea ce o face
foarte util n domenii precum comunicaiile, n special cele ntre calculatoare i cele pe
Internet, unde datele circul sub forma unor pachete i este foarte important s putem verifica
erorile pe mai muli bii mai degrab dect bit cu bit, stocarea datelor etc.

Aceste dou metode prezentate aici sunt doar dou exemple dintr-o gam larg de
posibiliti n acest domeniu, n care mereu se ncearc gsirea de modaliti noi, mai rapide i
21
mai eficiente de detecie i corectie a erorilor, ns CRC i codurile Reed-Solomon vor
rmne mereu dou puncte de reper foarte importante.

22
Bibliografie
1. http://www.scribd.com/doc/46827525/10/Codul-Reed-Solomon

2. Welch, L. R. (1997), The Original View of ReedSolomon Codes, Lecture Notes

3. http://www.scribd.com/doc/4532428/Retele-de-calculatoare

4.http://etti.poly.ro/cursuri/anul%20IV/cd/Cap%203%20Protectia%20datelor%20impotriva%
20erorilor.pdf

5. http://www.scritube.com/stiinta/informatica/Tipuri-de-erori-si-modalitatil31596.php

6. Andrew Tanenbaum - Computer Netwroks 5th edition

7. Radu Radescu - Arhitectura Sistemelor de Calcul

8. Hong, Jonathan; Vetterli, Martin (August 1995), "Simple Algorithms for BCH Decoding",
IEEE Transactions on Communications 43 (8): 23242333

9. MacWilliams, F. J.; Sloane, N. J. A. (1977), The Theory of Error-Correcting Codes, New


York, NY: North-Holland Publishing Company

10. Berlekamp, Elwyn R. (1984) [1968], Algebraic Coding Theory, Laguna Hills, CA:
Aegean Park Press

23