Sunteți pe pagina 1din 49

TEORIA INFORMAIEI I A CODRII

ndrumtor de lucrri la laborator

Horia BALTA

Maria KOVACI

2009

Cuprins
L1. Algoritmi pentru codarea sursei i compresie .......................................................................

1.1. Codarea binar a surselor de informaie .............................................................................

1.2. Algoritmul Huffman dinamic .............................................................................................

1.3. Algoritmi de compresie de tip LZ .....................................................................................

10

L2. Coduri simple corectoare de o eroare ....................................................................................

15

2.1 Codul Hamming ................................................................................................................

15

2.2 Codul ciclic ....................................................................................................................

20

L3. Coduri ciclice corectoare de erori multiple .......................................................................

28

3.1 Codul BCH .................................................................................................

28

3.2 Codul Reed-Solomon ..................................................................................

35

L4. Coduri convoluionale ..................................................................................................

41

Bibliografie ....................................................................................................................................

48

L1. Algoritmi pentru codarea sursei i compresie


1.1. Codarea binar a surselor de informaie
Lucrarea de fa i propune explicitarea algoritmilor de calcul pentru a coda binar surse de
informaie ntlnite n practic.
Codarea binar a surselor de informaie are dublu rol, de mrire a eficienei sursei de informaie
(i implicit de micorare a costului transmisiei prin scderea timpului transmisiei); de adaptare a sursei
de informaie la canalul transmisiune (canal binar, n majoritate).
Din punct de vedere al codrii, la o surs de informaie intereseaz numrul de simboluri N i
probabilitile lor de apariie pi , i 1, N . Doar pe utilizator l intereseaz ce reprezint fiecare mesaj n
parte (liter de alfabet, nivel al intensitii pixelilor dintr-o imagine, valori ale unor mrimi fizice ce
variaz arbitrar1).
Codarea este operaia prin care fiecrui simbol al sursei, si, i se aloc o succesiune binar unic:

si

ri1 , ri2 , ... rili

= ci

(1.1.1)

unde ci reprezint cuvntul de cod asociat simbolului (mesajului) sursei, iar rij , cu i 1, N , biii
componeni ai cuvntului de cod (pot lua valori binare 1 sau 0). Suportul fizic al valorilor binare
este, de asemenea, mai puin important pentru codare. Acest suport poate fi un semnal electric, optic,
acustic, etc.
n expresia (1.1.1) li reprezint lungimea cuvntului de cod ci (numr de simboluri binare).
Lungimea medie a cuvintelor de cod este dat de relaia:
N

li

(1.1.2)

i 1

Ieirea codorului, pentru canalul de transmisie, reprezint o surs de informaie numit


secundar. Aceast surs poate genera simbolurile 0 i 1. Entropia (informaia medie pe simbol),
entropia maxim, precum i eficiena sursei primare, sunt date de relaiile:
N

H(S)

log 2

i 1

H max (S)
S

1
pi

log 2 N ;

H(S)
H max (S)

;
(1.1.3)

Entropia sursei secundare este egal cu informaia medie pe un cuvnt raportat la lungimea
medie a cuvntului:
H(X)

H(S)
L

(1.1.4)

Atribuirea literelor de alfabet rij pentru a forma cuvntul de cod ci trebuie s conduc la
ndeplinirea condiiilor:
- codul s fie instantaneu (nici un cuvnt nu este prefixul altuia);

Dei, aparent, astfel de surse de informaie nu au un numr finit de simboluri, prin eantionare i cuantizare, orice
surs de informaie poate fi redus la una cu numr finit de simboluri.

- codarea s conduc la o eficien maxim posibil. Aceast condiie se realizeaz


folosind cuvinte de lungime variabil, mai mare pentru simboluri de probabilitate de emisie (a sursei
primare) mai mic. Codarea cu cuvinte de lungime variabil este mai complicat, dar conduce la o
surs secundar cu eficien mai bun i la o ieftinire a transmisiei, lungimea medie a cuvintelor de
cod fiind mai mic. Codarea cu cuvinte de lungime constant este mai simpl dar cuvintele avnd
aceeai lungime ofer maleabilitate la prelucrri ulterioare.
Codarea cu cuvinte de lungime constant se mai numete i codare cu cod bloc. Cuvintele
codului bloc sunt secvene binare diferite, de aceeai lungime L. tiind c numrul de secvene diferite
ce pot fi constituite cu L cifre binare este 2L, rezult c numrul simbolurilor sursei trebuie s fie mai
mic dect 2L, sau:
L u log 2 N

H max (S) > L 1

(1.1.5)

Inecuaia a doua din (1.1.5) se datoreaz criteriului de eficien minim posibil (sub restricia de
cod bloc).
Realizarea condiiilor mai sus precizate se face prin codare dup algoritmul Huffman (static).
Acesta presupune:
1. Ordonarea probabilitilor sursei (primare) n ordine descresctoare;
2. Simbolurile cu probabilitile cele mai mici (ultimele dou1 n ordonare) se reunesc
formnd un nou simbol cu probabilitatea sumei celor dou, dup care se reordoneaz probabilitile,
obinndu-se o surs cu N-1 simboluri;
3. Procesul continu pn cnd rmn 2 simboluri. Acestora li se atribuie valorile 0 i 1;
4. Mergnd pe cale invers, se disociaz simbolurile compuse n simboluri din care s-au
compus, atribuind arbitrar, la fiecare disociere, valorile 0 i 1 pentru a gsi cuvintele de cod pentru cei
doi componeni. De reinut c doar un singur simbol se disociaz la fiecare pas, lungimea
componenilor si crescnd cu 1, celelalte simboluri pstrndu-i lungimea i structura cuvntului de
cod.
Observaie: -atribuirea simbolurilor binare celor dou simboluri compuse este arbitrar, codurile
obinute vor fi diferite, dar de aceeai eficien. De asemenea, ordinea simbolurilor de egal
probabilitate poate fi aleas arbitrar, diferitele moduri de atribuire conducnd la coduri diferite, dar
de aceeai eficien. ns, n vederea posibilitii de a confrunta rezultatele, se vor respecta regulile: 0 se atribuie totdeauna simbolului de jos (ultimul n ordonare); -ordinea simbolurilor egal
probabile este ordinea n care s-au citit, cu simbolul compus totdeauna ultimul.
Programul pe calculator, asociat acestei lucrri, permite codarea surselor de informaie prin
algoritm Huffman static.
Precizarea sursei de informaie se poate face simplu, introducnd valorile probabilitilor sursei
i numrul lor. Probabilitile trebuie s ndeplineasc condiia:
N

1 ;

 i 1, N

0 e pi e 1 ;

(1.1.6)

i 1

Probabilitile pot fi introduse indirect, prin numere ntregi, pozitive ki, calculatorul urmnd s
fac transformarea:
pi

ki
N

(1.1.7)

k 1

Algoritmul se poate aplica i pentru obinerea codurilor nebinare (avnd un alfabet cu m simboluri). n acest caz se
grupeaz cte m simboluri.

ceea ce asigur ndeplinirea relaiei (1.1.6).


Sursa de informaie poate fi i un text scris (n caractere ASCII), cu cel puin 3 caractere diferite.
Calculatorul va nelege c simbolurile sursei (caracterele prezente n text) au probabiliti precizate
prin ponderea lor n text (numr de prezene ale caracterului respectiv raportat la ntregul numr de
caractere ale textului).
Programul permite i o a treia surs de informaie. Simbolurile acesteia reprezint intervale de
lungime egal, i n numr finit, de pe ax real. n acest caz datele vor consta n valorile eantioanelor
unui semnal discret ( Fig.1.1.1) , mrginit n timp cu suportul finit precizat ca dat de intrare M. Tot ca
dat de intrare calculatorul va cere i q-cuanta. Avnd aceste mrimi q (cuanta), M (numrul de
eantioane) i b(i) (valorile eantioanelor), pentru gsirea simbolurilor sursei i implicit a numrului lor
N, calculatorul va proceda astfel:
y va cuta eantioanele de valoare minim i maxim : min; max;
max  min
y va calcula N [
]  1 unde [ ] semnific partea ntreag;
2

b(2)=maxim
b(1)
b(3)

b(M)
Nq
q

b(4)=minim
Fig.1.1.1 Surs de informaie semnal discret

max  min
]  1 unde [ ] semnific partea ntreag;
q
y va atribui sursei de informaie primare simbolurile: [ min, min + q ); [min+q, min+2q); ...
;[min+(N-1)q,min+Nq)
y va calcula probabilitatea simbolurilor ca fiind egale cu fraciunea din numrul
eantioanelor M, ce au valori cuprinse n intervalele ce definesc simbolurile. Este posibil
desigur s rmn simboluri cu probabilitate 0.
n toate cele 3 cazuri se vor calcula i se vor putea vizualiza:
a) probabilitile sursei primare;
b) datele asociate sursei i codrii:
entropia sursei primare H(S);
entropia maxim a sursei primare Hmax(S);
eficiena sursei primare KS;
entropia sursei secundare (eficiena codrii) H(X);
lungimea medie a cuvintelor de cod L;
redundana sursei primare R(S)=Hmax(S)-H(S);
redundana relativ a sursei primare S =1-KS ;
redundana sursei secundare X =1-H(X).
c) cuvintele de cod;
d) graful codrii;
y

va calcula N

e) schema algoritmului Huffman (numai pentru cazul codrii cu cuvinte de lungime


variabil );
f) n cazul sursei semnal discret se pot vedea i graficul semnalului precum i
valorile eantioanelor.
Desfurarea lucrrii

a). Rulai programul cobsinf.exe selectnd opiunea Demonstraie. Selectai pe rnd cele trei feluri de
surse de informaie (tablou, text i semnal discret), i pentru fiecare surs solicitai o codare bloc i o
codare prin algoritmul Huffman static. Urmrii aplicarea algoritmului.
b). Alctuii surse de informaie de forma celor prezentate i codai-le bloc i prin algoritmul Huffman
static, calculnd n fiecare caz entropia sursei, eficiena sursei, lungimea medie a cuvintelor codului
obinut, precum i eficiena codrii. Pornii pentru nceput cu surse tablou mai simple, apoi mrii
numrul de simboluri. Utilizai ulterior i surse text sau semnal discret.
c) La sfritul lucrrii de laborator se va efectua test asupra cunotinelor acumulate. Durata acestuia
este aproximativ constant i independent de numrul de studeni ce efectueaz simultan testul
(calculatorul poate testa pn la 4 studeni simultan n sensul c afieaz pe rnd date pentru cei
n e 4 studeni i apoi ntreab pe rnd, n aceeai ordine studenii, timpii de afiare i de chestionare
rezervai fiecrui student sunt constani i nu influeneaz pe cei rezervai altuia). Rezultatul testului se
va concretiza printr-o not, calculat automat de calculator.
1.2. Algoritmul Huffman dinamic

Compresia este procesul de minimizare a spaiului ocupat sau a timpului necesar transmiterii
unei anumite cantiti de informaie.
Metodele de compresie pot fi mprite n:
y Metode de compresie cu pierdere;
y Metode de compresie fr pierdere.
Metodele de compresie cu pierdere de informaie sunt folosite n special n transmiterea
semnalului audio i video, unde pierderea de informaie are ca rezultat o scdere a calitii sunetului,
respectiv imaginii.
Compresia de date fr pierdere, prezent n programele de arhivare, n sistemele de
transmisiune a datelor, a evoluat de-a lungul timpului pornind de la algoritmi simpli (suprimarea
zerourilor, codarea pe iruri) i ajungnd la algoritmii compleci folosii n prezent.
Metodele de compresie fr pierderi au la baz ideea c n general cantitatea de informaie
prelucrat (transmis, depozitat) conine o anumit redundan ce se datoreaz:
y Distribuiei caracterelor (unele caractere au o frecven de apariie mult mai mare dect altele);
y Repetrii consecutive a unor caractere;
y Distribuiei grupurilor de caractere (unele grupuri sunt mult mai frecvente dect altele i n plus
exist grupuri care nu apar deloc);
y Distribuiei poziiei (unele caractere sau grupuri ocup poziii prefereniale, predictibile n anumite
blocuri de date).
Avnd n vedere toate aceste tipuri se poate nelege de ce o anumit tehnic de compresie
poate da un rezultat bun pentru un anumit tip de surse, pentru altele ns rezultatul fiind dezastruos. n
studiul compresiei se urmrete obinerea unui algoritm care s ofere o compresie ct mai bun pentru
tipuri de surse ct mai diferite.
Aprecierea cantitativ a compresiei realizate se face utiliznd factorul de compresie, definit ca:
Fc

nu
nc

(1.2.1)

unde nu este lungimea n bii a mesajului iniial i nc lungimea de compresie.


Algoritmul Huffman dinamic
Algoritmii de tip Huffman static au dezavantajul c necesit cunoaterea prealabil a statisticii
sursei. Acest dezavantaj poate fi nlturat utiliznd un algoritm dinamic.
Algoritmul Huffman dinamic este un algoritm de compresie. Mesajele au fost deja codate n
prealabil, dar neeficient, cu un cod bloc, de lungime n bii/cuvnt. Ideea de baz n aceast codare este
folosirea pentru codarea unui simbol si+1 din mesaj a unui graf de codare, ce este un arbore care crete,
dintr-un punct iniial (numit surs) i care este construit pe baza primilor i simboluri din mesaj. Dup
transmiterea simbolului si+1 se va revizui arborele de codare n vederea codrii simbolului si+2.
Codarea presupune la fiecare pas transmiterea codului aferent simbolului de intrare i
modificarea corespunztoare a grafului i a codului. Dac n mesajul transmis este un simbol nou,
adic un simbol care n-a mai aprut n mesaj, se transmite mai nti codul frunz goal i apoi cei n bii
afereni simbolului nou aprut. Frunza goal are semnificaia c urmeaz un nou simbol. Frunza goal
se codific ca un mesaj oarecare, dar ponderea sa ntodeauna va rmne nul.

Exemplu:
n continuare se prezint evoluia arborelui (grafului) asociat codului n timpul codrii mesajului Mi =
aaabccc:
Obs: Semnificaia notaiilor este:

-pentru nod:

- x: numr de ordine (crete de la stnga spre dreapta i de jos n sus pe linii);


- p: ponderea cumulat din nodurile aferente.
- pentru frunz (nod terminal):

- x: numr de ordine;
- p: pondere (numr de apariii ale respectivului simbol);
- y: simbolul.
Frunza goal, notat cu "0", este de pondere 0.
- pentru ramur: - spre stnga | codare cu zero;
- spre dreapta | codare (atribuire) cu unu.
1. Mi = a
3 1
0
1
1 0

2 1 a

Codurile sunt: 0 - 0
a-1
Mesajul transmis este: a

2. Mi = aa
3 2
0
1
1 0

2 2 a

Codurile sunt: 0 - 0
a-1
Mesajul transmis este: a1

3. Mi = aaa
3 3
0
1
1 0

2 3 a

Codurile sunt: 0 - 0
a-1
Mesajul transmis este: a11

4. Mi = aaab
5 4
0
1
3 1
4 3 a
0
1
1 0

Codurile sunt: 0 - 00
a-1
b - 01
Mesajul transmis este: a110b

2 1 b

5. Mi = aaabc
7 5
0
1
5 2
6 3 a
0
1

Codurile sunt: 0 - 000


a-1
b - 01
c - 001
Mesajul transmis este: a110b00c

3 1
4 1 b
0
1
1 0

2 1 c

6. Mi = aaabcc
7 6
0
1
5 3
6 3 a
0
1

Codurile sunt: 0 - 000


a-1
b - 01
c - 001
Mesajul transmis este: a110b00c001

3 2
4 1 b
0
1
1 0

2 2 c

Deoarece ponderea nodului c este mai mare dect ponderea nodului b se va face interschimbarea
ntre noduri, realizndu-se o rearanjare a arborelui:

7 6
0
1

Codurile sunt: 0 - 000


a-1
b - 001
c - 01
Mesajul transmis este: a110b00c001

5 3
6 3 a
0
1
3 1
4 2 c
0
1
1 0

2 1 b

7. Mi = aaabccc
7 7
0
1

Codurile sunt: 0 - 000


a-1
b - 001
c - 01
Mesajul transmis este: a110b00c00101

5 4
6 3 a
0
1
3 1
4 3 c
0
1
1 0

2 1 b

n urma rearanjrii arborelui se obine:


7 7
0
1

Codurile sunt: 0 - 100


a-0
b - 101
c - 11
Mesajul transmis este: a110b00c00101

5 3 a 6 4
0
1
3 1
4 3 c
0
1
1 0

2 1 b

Dac se presupune c simbolurile mesajului de la intrare au fost codate n prealabil cu un cod


bloc, cu n=8 bii/cuvnt vom avea lungimea mesajului iniial:
Considernd caracterele n mesajul iniial codate pe 8 bii, lungimea acestuia este:
nu =78=56 bii

(1.2.2)

Mesajul comprimat (a110b00c00101) are:


nc=83+10=34 bii
Rezult un factor de compresie:
F

nu
# 1, 7
nc

(1.2.3)

Desfurarea lucrrii:

a) Se lanseaz executabilul dHuffman.exe din directorul Huffman Dinamic, dup care se introduce
parola TTI. Rulai programul, selectnd opiunea Demonstraie, pentru codare i decodare.
b) Se verific, cu programul, exemplul luat n aceast lucrare, selectnd pe rnd compresia, respectiv
decompresia prezentate.
c) Pentru compresie i decompresie se alege cte un exemplu oarecare asemntor cu cel prezentat n
lucrare. Se realizeaz compresia/decompresia, dup care, cu programul, se verific rezultatele obinute.
d) La sfritul lucrrii de laborator se va efectua un test asupra cunotinelor acumulate. Rezultatul
testului se va concretiza printr-o not, calculat automat de calculator.
1.3. Algoritmi de compresie de tip LZ

Cu toate c algoritmii de compresie Huffman, static sau dinamic, sunt cei mai performani (din
punct de vedere al factorului de compresie) relativ la sursele fr memorie, aceast concluzie nu este
valabil i pentru sursele cu memorie, surse frecvent ntlnite n practic.
Algoritmii de compresie de tip LZ fac parte din categoria tehnicilor de dicionar adaptive. Ele
servesc (n special) la compresia fiierelor de tip text, fiiere ce se caracterizeaz prin repetarea
frecvent a unor subiruri.
Ideea de baz n algoritmii LZ este nlocuirea unor subiruri ale mesajului cu cuvinte de cod,
astfel nct, la o nou apariie a unui subir s se transmit doar codul asociat lui.
Algoritmul LZ 77
Mesajul de intrare este trecut printr-un buffer de lungime N. Bufferul este divizat n dou
blocuri distincte numite Lempel i Ziv, ca n Fig. 1.3.1.

Ziv

Lempel
Ieire
mesaj

Intrare
mesaj
1

NL

1 2

NZ

Fig. 1.3.1. Bufferfereastr utilizat n algoritmul LZ77


Mesajul de ieire const ntr-o succesiune de triplete de forma P, L, A. Compresia decurge
astfel:
-se ncarc primele NZ caractere din mesajul de intrare n blocul Ziv;
-se transmite la ieire tripletul 0, 0, x, unde x reprezint primul caracter (liter) din mesajul de
intrare (aflat pe poziia 1 n blocul Ziv);
se deplaseaz cu o poziie mesajul de intrare n blocul Ziv, astfel nct x ajunge acum n poziia
NL. Din acest moment:
-se caut n blocul Lempel un subir, S, care este identic cu cel mai lung subir, S, care ncepe
n poziia 1 a blocului Ziv i este coninut n ntregime n blocul Ziv. Subirul S trebuie neaprat s
nceap n blocul Lempel, dar poate s sew sfreasc n blocul Ziv. Dac un astfel de subir, S, exist,
atunci se va transmite tripletul P, L, A, unde P = poziia de la care ncepe subirul S; L = lungimea
subirurilor S i S; A = litera ce succede subirul S n mesajul de intrare.
Dac nu exist nici un subir S care s coincid cu cel mai scurt subir S, atunci se va
transmite tripletul 0, 0, x, unde x are aceeai semnificaie ca i mai sus;
-se deplaseaz mesajul de intrare pn cnd, dup caz, A sau x ajung pe poziia NL i procesul
de cutare se reia pn cnd tot mesajul a trecut prin blocul Ziv.

10

Decompresia presupune, n principal, aceleai etape. Utiliznd tripleii recepionai, se adaug


subiruri n blocul Ziv mesajului deja decomprimat, subiruri aflate deja n blocul Lempel urmnd ca,
mai apoi, toate s fie deplasate n blocul Lempel.
Observaie: este posibil s se renune la cel de-al doilea zero din tripletul 0, 0, x, el fiind redundant.
Cei trei componeni ai tripletului P, L, A sunt codai binar bloc, separat. Astfel, codul pentru
P are lungimea:

kP = log2 (NL +1)

(1.3.1)

(trebuie codat i 0 din situaia 0, 0, x sau 0,x), iar pentru L:


kL = log2 (NZ 1)

(1.3.2)

considernd doar varianta 0, x. Caracterele de tipul A pot fi codate, de exemplu, ASCII.


Din relaiile (1.3.1) i (1.3.2) rezult c, pentru o bun compresie, NL+1 i NZ1 trebuie s fie
puteri ntregi ale lui 2. n relaia (1.3.2) s-a luat NZ1 i nu doar NZ deoarece, n situaia extrem a
lungimii maxime pentru subirul S, NZ va fi egal cu lungimea subirului S plus unu; acest unu
rezerv literei A un loc n blocul Ziv.
Exemplu Fie parametrii NL =7 i NZ =4, iar mesajul de intrare aaababacacab. Aplicarea
algoritmului LZ 77 asupra acestui mesaj de intrare este ilustrat n Fig. 1.3.2 a).
Mesajul comprimat este, aadar: 0a72b63c73b, sau n binar:
000a11110b11011c11111b. Fig. 1.3.2. b) prezint un exemplu de decompresie.

4
a
a

5
a
b

a
a

a
b
c

1
a
a
a
a

2
a
a
b
c

3
a
b
a
a

4
b
a
c
b

P
0
7
6
7

P
0
7
3
4
3

2
3
3

A
a
b
c
b

a) compresia mesajului aaababacacab

a
b

a
a

a
a
a

a
b
c

a
a
b

a
a
a

a
b
c
c

1
a
a
a
b
a

a
a
a
c

a
c
c
b

b
c

3
2
2
3

A
a
b
c
c
c

b) decompresia mesajului 0aa73b32c42c33c


Fig. 1.3.2. Exemplu de aplicare a algoritmul LZ77

Algoritmul LZ78
Spre deosebire de varianta anterioar, la LZ78 blocul Lempel este un dicionar n continu
cretere. De asemenea, nu exist teoretic nici o limitare a blocului Ziv.
Algoritmul LZ78 este, n esen, urmtorul:
-se iniializeaz dicionarul (blocul Lempel) cu un ir nul;
-se ncarc mesajul de intrare n blocul Ziv;
-se transmite n clar primul caracter i se introduce i n dicionar la poziia 1. Cele dou poziii
ale dicionarului (notate cu 0 i 1) sunt, n acest moment codate prin 0 i 1. Din acest moment:
-se caut n dicionar un subir, S, identic cu cel mai lung subir, S, din blocul Ziv. Bineneles,
S ncepe din prima poziie a blocului Ziv. Dac exist un astfel de subir, S, atunci se transmite codul

11

aferent urmat de caracterul A ce urmeaz lui S n mesajul de intrare. n plus, dicionarul se mbogete
cu o poziie, poziie unde se trece subirul SA. Dac nici mcar primul caracter, x, din Ziv nu se
regsete n dicionar, atunci se transmite 0x, unde 0 semnific subirul din prima poziie, codat prin
cuvntul de cod 000.
Observaie: Atunci cnd dicionarul ajunge la un numr de elemente egal cu 2k, tuturor codurilor
elementelor anterioare li se adaug ca i prefix 0, iar ultimul subir va fi codat prin 100.
Exemplu: n Fig. 1.3.3 a) se prezint un exemplu de compresie utiliznd algoritmul LZ78. Mesajului
de intrare este cel din exemplul anterior, aaababacacab. Mesajul comprimat rezultat este
a1a0b1b1c6a3, sau n binar a1a0b01c110a011. n Fig. 1.3.3 b) se prezint un exemplu de
decompresie, utiliznd acelai algoritm. Mesajul comprimat (de intrare) este a1b3b5a3a. Rezultatul
decompresiei este aababcabcaaba.

Blocul Lempel
(dicionarul)
0
1
2
3
4
5
6
7
8

Blocul Ziv
a
aa
b
ab
c
ac
aca

a
a
b
a
a

a
a
a
b
c

a
b
b
a
a

b
a
a
c
c

a
b
c
a
a

b
a
a
c
b

a
c
c
a

c a c a b
a c a b
a b
b

Mesajul
de ieire
a
1a
0b
1b
1c

a c a b
b

6a
3

b) compresia mesajului aaababacacab;

Blocul Lempel
(dicionarul)
0
1
2
3
4
5
6
7

Mesaj decomprimat
a
b
ab
c
abc
abca

a
a a b

Mesaj
comprimat
a
1b

a a b a b c

3b

a a b a b c a b c a
a a b a b c a b c a a b a3a

5a

b) decompresia mesajului a1b3b5a3a


Fig. 1.3.3 Exemplu de aplicare a algoritmul LZ78.

Decompresia presupune urmtorul algoritm:


-se citete primul caracter (codul ASCII aferent); acest caracter se introduce n dicionar la poziia 1 i
se genereaz i la ieire; n continuare procedura este:
-se citeta codul poziiei la care se gsete subirul transmis. Acest cod conine:
k = sup(log2 n) bii

(1.3.3)

unde sup(x) reprezint aproximarea prin adaos a lui x, iar n dimensiunea momentan a dicionarului;
-se citete din dicionar subirul S aflat la poziia citit anterior i se genereaz la ieire;
12

-se citete din mesajul recepionat urmtorul caracter, A (n cod ASCII), i se genereaz i acesta la
ieire. Dac A este un nou caracter, atunci se introduce n dicionar la o nou poziie;
-se introduce n dicionar subirul SA la urmtoarea poziie;
Procesul se repet pn la epuizarea mesajului recepionat.
Algoritmul LZW (LempelZivWelch)
Modificarea esenial adus de algoritmul LZW este faptul c att compresorul ct i
decompresorul cunosc simbolurile (caracterele) componente ale mesajului. Cu alte cuvinte, nainte de
nceperea propriu-zis a compresiei (decompresiei) dicionarul este iniializat cu toate caracterele
posibil a fi emise.(n exemplul urmtor, ilustrat n Figura 3.4a, dicionarul este iniializat cu simbolurile
a00, b01, c10.) n acest fel nu se mai trimite informaie despre urmtorul caracter la fiecare pas. O
alt modificare o constituie existena unui prefix, P, care se memoreaz de la un pas la urmtorul.
Algoritmul compresiei este:
-se iniializeaz dicionarul (aa cum s-a descris anterior);
-se citete primul caracter i se memoreaz ca i prefix, P. Din acest moment:
-se citete urmtorul caracter, notat E. Se caut n dicionar subirul PE. Dac acest subir exist, atunci
se trece la pasul urmtor, fr a emite nimic i fr a aduga nimic n dicionar. Singura modificare este
c acum PE devine prefix pentru pasul urmtor. Dac subirul PE nu exist n dicionar, atunci se
execut urmtoarele operaii:
-se trimite la ieire codul aferent subirului P;
-se trece pe post de prefix caracterul E (EpP);
-se adaug n dicionar subirul PE la urmtoarea poziie liber.
Procesul continu n acest fel pn la epuizarea ntregului mesaj de intrare.
Observaie: La fel ca i la LZ-78, pe vreme ce dicionarul crete trebuie modificat corespunztor codul
binar loc asociat.

Algoritmul decompresiei este asemntor compresiei. Diferena este c simbolul E nu se citete direct
de la intrare (ca i la compresie) ci doar dup ce s-a decodat codul recepionat. Mesajul decomprimat se
poate citi fie de la E (exceptnd primul simbol, care se citete de la P), fie prin compunerea irului
decodat.
Exemplu: Fig. 1.3.4. prezint cte un exemplu de compresie i decompresie utiliznd algoritmul
LZW. Pentru compresie s-a ales ca mesaj de intrare: aaababacacab, acelai ca i n exemplele
anterioare.
Mesajul
comprimat
este:
031052081,
sau
n
binar
0011001000101010000010000001. Pentru decompresie s-a ales mesajul 013205, car n binar se
exprim: 0001011010000101. Mesajul decomprimat este: ababcaabc.
Desfurarea lucrrii:
a) Rulai programul pe calculator, utiliznd opiunea demonstrativ, urmrind aplicarea celor trei
algoritmi la compresie i decompresie. Aflai pentru fiecare exemplu i factorul de compresie.
b). Alctuii, utiliznd trei sau patru litere, mesaje de circa 10 litere lungime. Comprimai mesajele
independent de program i verificai rezultatele cu ajutorul programului. Pentru decompresie utilizai
mesajele comprimate de colegi, fr a cunoate originalul. Confruntai rezultatele decomprimrii cu
cele originale. Calculai n fiecare caz factorul de compresie, considernd c orice liter (caracter) se
scrie n binar pe 8 bii.
c) La sfritul lucrrii de laborator se va efectua test asupra cunotinelor acumulate, prin intermediul
programului pe calculator. Testul const din: 1o compresie i 2o decompresie, a unui mesaj ales
aleatoriu de ctre calculator printr-unul dintre cei trei algoritmi (de asemenea ales aleatoriu de
program) i 3 cinci ntrebri teoretice fiecare cu un rspuns corect din cinci propuse, avnd ca tem
algoritmii de compresie.

13

Prefix

Mesaj de
intrare

ir cutat
n dicionar

PE

a
a
aa
b
a
b
ba
c
a
c
ca
b

a
a
a
b
a
b
a
c
a
c
a
b

aa
aa
aab
ba
ab
ba
bac
ca
ac
ca
cab
b

ir
transmis

Cod
transmis

0=00

aa

3=11

aa
b
a

3=11
1=001
0=000

aab
ba
ab

4=100
5=101
6=110

ba
c
a

5=101
2=010
0=0000

bac
ca
ac

7=111
8=1000
9=1001

ca
b

8=1000
1=0001

cab

10=1010

Dicionarul
a 0=00
b 1=01
c 2=10
ir adugat
Cod
n dicionar
adugat
n dicionar

a) compresia mesajului aaababacacab;

Prefix

Mesaj de
intrare

ir cutat
n dicionar

PE

a
b
a
ab
c
a
a
ab

b
a
b
c
a
a
b
c

ab
ba
ab
abc
ca
aa
ab
abc

ir
recepionat
decodat

Cod
recepionat

a
b
ab

0
1
3

ab
ba

3=11
4=100

c
a
abc

2
0
5

abc
ca
aa

5=101
6=110
7=111

Dicionarul
a 0=00
b 1=01
c 2=10
ir adugat
Cod
n dicionar
adugat
n dicionar

b) decompresia mesajului 013205;


Fig. 1.3.4. Exemplu de aplicare a algoritmului LZW

14

L2. Coduri simple corectoare de o eroare


2.1. Codul Hamming
2.1.1. Cod Hamming corector de o eroare
Codurile Hamming constiruie prima clas de coduri bloc liniare corectoare de erori i au fost
propuse de R. Hamming n 1950.
Codul Hamming este un cod protector. Scopul codrii este acela de a adapta sursa de
informaie la canalul de transmisie. n cazul de fa sursa este deja codat i se face o codare pentru
protecia informaiei. Acest lucru se realizeaz prin mrirea redundanei (prin creterea suportului
binar; biilor de informaie adugnduse biii de control). Biii de control au ca scop de a crea legturi,
relaii ntre biii de informaie. Aceste relaii folosesc codorului pentru a calcula biii de control i
folosesc decodorului pentru a verifica corectitudinea transmisiei.
Codul Hamming este un cod nesistematic (simbolurile de control sunt intercalate printre
simbolurile informaionale, situndu-se pe poziii puteri ale lui 2).

2.1.1.1. Codarea codului Hamminmg corector de o eroare


Particularitatea codului liniar Hamming corector de o eroare const n forma matricii de
control, H, care are fiecare coloan structurat prin reprezentarea binar a numrului zecimal de ordine
al coloanei respective. Din acest motiv, corectorul Z, calculat cu relaia Z H V T , decodat din binar
n zecimal, indic numrul de ordine zecimal al bitului eronat din cuvntul recepionat.
Distana minim a acestui cod este:
d u 2ec  1 3 ,
unde ec reprezint numrul de erori corectabile.
Se consider codul cu parametrii:
y n=7, numrul de simboluri n cuvnt;
y m=3, numrul de simboluri de control n cuvnt;
y k=4, numrul de simboluri de informaie n cuvnt.
Secvena de informaie este:
i i3i5i 6i 7
i secvena de control:
C C1C2 C4
astfel nct cuvntul de cod rezultat va fi:
V C1C2i3C4i5i 6i 7
Codarea nseamn calculul simbolurilor de control C1, C2, i C4 cnd se dau simbolurile de informaie
i3, i5, i6, i7.
Relaia de codare:

H VT

C1
C
2
0
0
0
1
1
1
1

i3
0 1 1 0 0 1 1 C

4
1 0 1 0 1 0 1 i5

i6
i
7

unde H reprezint matricea de control, ce este de dimensiune mvn.

15

(2.1.1)

Sau n form explicit:


i3  i5  i 7
i3  i 6  i7
i5  i 6  i7

C1
C2
C4

(2.1.2)

Suma fcndu-se modulo doi.

Exemplul 1:
Pentru n=7, k=4, m=3 i secvena de informaie i=1010, gsii cuvntul V de cod.
Rezolvare:
Se observ c exist 4 simboluri de informaie: i3, i5, i6, i7. Cuvntul de cod,V, se poate scrie sub form
literar: V C1C2i3C4i5i6i 7 . Avem aadar 7 simboluri ce alctuiesc cuvntul de cod i 3 bii de control.
Rezult c matricea de control, H, va conine 3 linii i 7 coloane.
Din relaia de codare (2.1.1), rezult relaiile de calcul a biilor de control:
i3  i5  i 7 1  0  0 1
i3  i 6  i 7 1  1  0 0
i5  i6  i 7 0  1  0 1

C1
C2
C4
Rezult cuvntul de cod:

V=1011010

2.1.1.2. Decodarea codului Hamminmg corector de o eroare


Avnd cuvntul recepionat V ' , compus din 7 imboluri:
V'

C1' C'2i3' C'4i5' i '6i '7

se poate calcula corectorul codului Hamming cu relaia:

Matricea de control:

(2.1.3)

L hi L h n @

(2.1.4)

HV

> h1

H>m,n @

z4
z
2
z1

'T

unde, pentru acest caz se observ c m=3 i n=7. Coloana hi exprim n cod binar natural numrul de
ordine al coloanei respective, cu bitul cel mai puin semnificativ n linia m.
Din relaia (2.1.3) rezult:
z4

C'4  i5'  i '6  i '7

z2

C'2  i3'  i '6  i '7

z1

C1'  i3'  i5'  i '7

16

(2.1.5)

Decodarea zecimal a corectorului z, indic poziia erorii, dac este una singur, n cuvntul V ' . Va fi
eronat simbolul cu indicele r, dat de relaia:
4z 4  2z 2  z1

(2.1.6)

Cuvntul recepuionat se mai poate scrie ca fiind:


VH,

V'
unde H reprezint cuvntul eroare.
Relaia (2.1.3) va deveni:
T
z H V'

H V  H
unde poziia erorii se calculeaz cu relaia (2.1.6).

H HT

hr

Obs: n cazul n care exist dou erori, sunt cazuri n care nu numai c nu se corecteaz nici o eroare,
dar se mai eroneaz un al treilea simbol, rezultnd la recepie trei simboluri eronate.

Exemplul 2:
Decodai cuvntul recepionat V=1001001
Rezolvare:

Cuvntul de cod recepionat se poate scrie ca fiind:


V ' C1' C'2i3' C'4i5' i'6i'7
V = 1 0 0 1 0 0 1
Relaia (2.1.5) va deveni:
z4

C'4  i5'  i '6  i '7

1 0  0 1 0

z2

C i i i

0  0  0 1 1

z1

C1'  i3'  i5'  i '7

'
2

'
3

'
6

'
7

1 0  0 1 0

Aadar, poziia eronat este:


r
Rezult cuvntul eroare:

4z 4  2z 2  z1
H

Se poate scrie:
V

4 0  2 1  1 0 2

0100000

V '  H 1001001  0100000 1101001

Rezult secvena de informaie:


i i3i5i 6i 7

0001

2.1.2. Cod Hamming corector de o eroare i detector de dou erori


Condiia necesar i suficient pentru ca un cod s poat simultan corecta maxim t erori i a detecta
maxim e erori este ca distana minim a codului s fie:

d u t  e  1 1  2  1 4,

e>t

2.1.2.1. Codarea codului Hamminmg corector de o eroare i detector de dou erori


Pentru a nltura dezavantajul codului Hamming corector de o eroare (acela de a erona
suplimentar, la depirea capacitii de corecie a codului, t>1) i de al face mai util n aplicaii
17

practice, codul a fost modificat n sensul creterii distanei minime de la d=3 la d=4, ceea ce permite
detecia erorilor duble.
Creterea distanei de cod de la 3 la 4 s-a fcut prin adugarea unui simbol de control
suplimentar, numit simbol de control al paritii, C0, structura cuvntului de cod devenind:
V

C0 C1C2i3C4i5i 6i 7

Matricea de control se modific i are structura:

H'

0 H

1 1

0
0

0
0
1
1

0
1
0
1

0
1
1
1

1
0
0
1

1
0
1
1

1
1
0
1

1
1
1

Relaia de codare va fi:

H' VT

0
0

0 0 0 1 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 1 1 1 1

C0
C
1
1 C2

1 i3

1 C4

1 i5
i
6
i 7

(2.1.7)

Sau n form explicit:

C0

C1 i3  i5  i 7
C2 i3  i 6  i7
C4 i5  i 6  i7
C1  C2  i3  C4  i5  i6  i 7

(2.1.8)

Exemplul 3:
Fie secvena de informaie i=1010, gsii cuvntul V de cod.
Rezolvare:

Se observ c exist 4 simboluri de informaie: i3, i5, i6, i7. Cuvntul de cod, V, se poate scrie sub form
literar: V C0 C1C2i3C4i5i 6i 7 . Avem aadar 8 simboluri ce alctuiesc cuvntul de cod i 4 bii de
control. Rezult c matricea de control, H, va conine 4 linii i 8 coloane.
Din relaia de codare (2.1.8), rezult relaiile de calcul a biilor de control:

C0

C1 i3  i5  i 7 1  0  0 1
C2 i3  i 6  i 7 1  1  0 0
C4 i5  i6  i 7 0  1  0 1
C1  C2  i3  C4  i5  i 6  i 7 1  0  1  1  0  1  0 0

Rezult cuvntul de cod:


V=01011010
18

2.1.2.2. Decodarea codului Hamminmg corector de o eroare i detector de dou erori


Avnd cuvntul recepionat V ' , compus din 8 imboluri:

V'

C'0C1' C'2i3' C'4i5' i'6i'7

se poate calcula corectorul codului cu relaia:


T

H' V'

z
z
0

z4
z
2
z1

z 0

(2.1.9)

Unde:
y z, reprezint corectorul de la codul Hamming corector de o eroare;
y z0, reprezint simbolul binar, 0 sau 1, cu ajutorul cruia se pot detecta erori pare (z0=0).
Exist patru cazuri:
Cazul 1:
z 0

z 0 0
nu exist erori sau nu exist erori detectabile prin cod.

Cazul 2:
z { 1

z 0 0

se face detecia erorilor duble.


Cazul 3:
z 0

z 0 1

simbolul C0 este eronat.


Cazul 4:
z { 0

z 0 1

exist o eroare corectabil.


Va fi eronat simbolul cu indicele r-1, unde r este dat de relaia:
r

4z 4  2z 2  z1  z 0

Exemplul 4:
Decodai cuvntul recepionat V=01001010
Rezolvare:

Cuvntul de cod recepionat se poate scrie ca fiind:


V ' C'0C1' C'2i3' C'4i5' i'6i'7
V = 0 1 0 0 1 0 1 0
19

(2.1.10)

Relaia (2.1.5) va deveni:

z0

z4

C'4  i5'  i '6  i '7

1 0 1 0 0

z2

C i i i

'
7

0  0 1 0 1

z1

C i i i

'
7

1 0  0  0 1

'
2

'
1

'
3

'
3

'
6

'
5

C'0  C1'  C'2  i3'  C'4  i5'  i '6  i'7

0 1 0  0 1 0 1 0 1

Rezult c avem situaia cazului 4, cnd exist o eroare corectabil.


Aadar, rezult r:
r

4z 4  2z 2  z1  z 0

4 0  2 1  1 1  1 4

Deci va fi eronat simbolul cu indicele r-1, adic 4-1=3, i3.


Rezult cuvntul eroare:
H 00010000
Se poate scrie:
V V '  H 01001010  00010000 01011010
Rezult secvena de informaie:
i i3i5i 6i 7

1010

Desfurarea lucrrii:
a) Se lanseaz executabilul Hamming.exe din directorul Hamming, dup care se introduce parola TTI.
Rulai programul, selectnd opiunea Demonstraie, pentru toate cele patru variante prezentate.
b) Se verific, cu programul, toate exemplele luate n aceast lucrare, selectnd pe rnd codurile
prezentate.
c) Pentru fiecare cod n parte, se alege cte un exemplu de codare/decodare, asemntor cu cele
prezentate n lucrare, cu observaia ca secvena de informaie s conin 11 bii de informaie, la
codare, respectiv cuvntul recepionat s conin 15/16 bii, la decodare. Se realizeaz
codarea/decodare, dup care, cu programul, se verific rezultatele obinute.
d) La sfritul lucrrii de laborator se va efectua un test asupra cunotinelor acumulate. Rezultatul
testului se va concretiza printr-o not, calculat automat de calculator.
2.2. Codul ciclic

Codurile ciclice sunt utilizate pentru protejarea informaiei mpotriva perturbaiilor.


Codurile ciclice sunt coduri bloc (toate cuvintele au aceeai lungime, codarea i decodarea unui
bloc este independent de a celorlalte).
Denumirea de ciclice provine de la proprietatea pe care o au cuvintele de cod i anume dac
vi = 1001001 este cuvnt de cod atunci i vj = 0010011 i vk = 1100100 sunt cuvinte de cod . Adic
orice permutare ciclic a unui cuvnt de cod este un alt cuvnt de cod .
Parametrii codului sunt n (bii) lungimea cuvntului de cod, k numrul de bii de informaie per
cuvnt, m numrul de bii de control per cuvnt i polinomul generator g(x). Dei poate fi facut i o
codare nesistematic vom considera codul sistematic cei k bii de informaie fiind situai pe poziiile
cele mai semnificative, iar cei m bii de control pe poziiile mai puin semnificative.
Fiecrui cuvnt de cod i se poate ataa un polinom de grad maxim n-1:
v = vn-1vn-2vn-3......v1v0,

20

coeficienii vi fiind coeficieni binari (din cmpul binar {0,1}).


Polinomul asociat cuvntului va fi :
v(x) = vn-1xn-1 + vn-2xn-2 + vn-3xn-3 + .....+ v1x + v0

(2.2.1)

Ponderea unui cuvnt reprezint numrul de 1 din cadrul cuvntului.


Polinomul de informaie este :
i(x) = ik-1xk-1 + ik-2xk-2 + ik-3xk-3 + .....+ i1x + i0

(2.2.2)

de grad k-1.
Pentru orice cuvnt de cod este valabil relaia :

rest

v x
g x

(2.2.3)

Deci cuvintele de cod se aleg astfel nct s fie multiplii ai polinomului g(x) numit polinomul
generator al carui grad va fi deci m = n-k, (gm = 1):
g(x) = gmxm + gm-1xm-1 + gm-2xm-2 + .....+ g1x + g0

(2.2.4)

Operaiile se fac modulo (xn + 1) .


Dac, codul este corector de o singur eroare atunci:
n = 2m 1.

(2.2.5)

Codurile ciclice corectoare de o eroare, avnd distana de cod (distana Hamming minim ntre
cuvintele codului) dHmin = 3, sunt capabile s corecteze o eroare sau s detecteze dou.
Codarea codului ciclic corector de o eroare
Codarea va fi prezentat n dou moduri nesistematic sau sistematic.
Cu relaia v(x) = i(x)g(x) se poate face codarea nesistematic, dar pentru c nu este util n
practic nu va fi luat n considerare .
n continuare va fi deci prezentat codarea sistematic unde corespondena dintre i(x) i v(x)
este dat prin relaia:

i x x
v x i x x m  rest
g x
unde rest

(2.2.6)

i x x m
semnific restul mpririi polinomului i(x)xm la g(x).
g x

Operaia de adunare din ecuaia (2.2.6) este sum modulo 2 (SAU exclusiv), iar coeficienii
polinoamelor sunt din cmpul binar {0,1}.
Matematic codarea poate fi facut polinomial sau matricial.
a) Polinomial
Codarea va fi prezentat printr-un exemplu, putnd fi uor generalizat.

21

Fie g(x) = x3 + x + 1. Deci m = 3 i cu relaia 2m 1 = n rezult c n = 7 de unde k = n m = 4. Vom


avea ca atare 4 bii de informaie i = vn-1vn-2vn-3vn-4 cu polinomul asociat :
i(x) = vn-1x3 + vn-2x2 + vn-3x + vn-4

(2.2.7)

i deci i(x)xm = (vn-1x3 + vn-2x2 + vn-3x3 + vn-1x + vn-4) x3 = vn-1x6 + vn-2x5 + vn-3x4 + vn-4x3
Biii de control sunt coeficienii restului mpririi lui i(x)xm/g(x).
vn-1x6 + vn-2x5 + vn-3x4 + vn-4x3
vn-1x6
+ vn-1x4 + vn-1x3

x3 + x + 1
vn-1x3 + vn-2x2 + (vn-3 + vn-1)x + (vn-4 + vn-2 + vn-1)

/ vn-2x5 + (vn-3 + vn-1)x4 + (vn-4 + vn-1)x3


+ vn-2x3
+ vn-2x2
vn-2x5
/ (vn-3 + vn-1)x4 + (vn-4 + vn-2 + vn-1)x3 + vn-2x2
(vn-3 + vn-1)x4
+ (vn-3 + vn-1)x2 +(vn-3 + vn-1)x
/ (vn-4 + vn-2 + vn-1)x3 + (vn-3 + vn-2 + vn-1)x2 + (vn-3 + vn-1)x
(vn-4 + vn-2 + vn-1)x3
+ (vn-4 + vn-2 + vn-1)x + vn-4 + vn-2 + vn-1
(vn-3 + vn-2 + vn-1)x2 + (vn-4 + vn-3 + vn-2)x + vn-4 + vn-2 + vn-1
r(x) = (vn-3 + vn-2 + vn-1)x2 + (vn-4 + vn-3 + vn-2)x + vn-4 + vn-2 + vn-1,

(2.2.8)

unde r(x) este restul mpririi .


Conform relaiei (2.2.6) se obine :
v(x) = vn-1x6 + vn-2x5 + vn-3x4 + vn-4x3 + (vn-3 + vn-2 + vn-1)x2 + (vn-4 + vn-3 + vn-2)x + vn-4 + vn-2 + vn-1
Pentru c n = 7 i v(x) este de forma:

v(x) = v6x6 + v5x5 + v4x4 + v3x3 + v2x2 + v1x + v0

(2.2.9)

i innd cont de relaia (2.2.8) simbolurile de control vor fi date de:


v2 = v4 + v5 + v6
v1 = v3 + v4 + v5
v0 = v3 + v5 + v6

(2.2.10)

Aadar cuvntul de cod va fi v = v6v5v4v3v2v1v0 unde primii 4 sunt biii de informaie, iar ultimii 3 cei
de control.
b) Codor ciclic cu RDR (codarea matricial)
n Fig. 2.2.1 este prezentat un codor ciclic care implementeaz relaia de codare (2.2.6).
Secvena de informaie, i(x), intr n codor n primele k tacte, primul bit fiind cel mai semnificativ i,
de asemenea, este conectat i la ieire. Pentru aceasta, ntreruptorul 1, format din poarta AND-1 este
nchis iar ntreruptorul 2, format din poarta AND-2 este deschis (vezi semnalele de comand P1 i P2).
n urmtoarele m tacte ntreruptorul 1 este deschis iar ntreruptorul 2 este nchis, astfel c
secvena r, generat de RDR, este livrat la ieirea v.

22

Cm y
gm=1

Cm-1 y

gm-1

Cm-2

gm-2

C1

g1

..

g0=1

a) Codor ciclic
RDR ;

y P2

AND-2
y P1
v(x)

AND-1

i(x)

P1

b) Semnalele de validare
a porilor AND

y y y

y y

0 1 2 yyyyy

k=n-m y y y y

t/Tb

P2
t/Tb
y y y

y y

0 1 2 yyyyy

k=n-m y y y y

Fig. 2.2.1 Codor ciclic cu RDR i semnalele de comand

Obs. Se observ c, n ultimele k tacte, la intrrile sumatorului (care adun intrarea RDR-lui cu
reacia sa) se regsete acelai semnal, astfel c, n aceste k tacte, n celula Ck se va introduce o
secven nul care cur registrul pentru un nou cuvnt de cod.
Din funcionarea registrului de deplasare cu reacie rezult relaia:

Sj = TSj-1 + vn-jU

(2.2.11)

unde S reprezint starea registrului, U este o matrice coloan, iar T este matricea caracteristic a
registrului de deplasare cu reacie. Ele sunt de forma:

c1
c
2,
M

c m

0
0
,
M

1

0
0

0
g 0

innd cont de observaia fcut mai sus rezult c Sn = 0.


Considernd acela exemplu

23

M
0

M
0

L
L

g1

g2 L

0
0
M .

1
g m-1

(2.2.12)

Matricea caracteristic, T, este:


0 1 0
0 0 1

1 1 0

(2.2.13)

Utiliznd relaiile (2.2.11) i (2.2.13) pentru cazul n = 7 vom avea:


S7 = v6T6U + v5T5U + v4T4U + v3T3U + v2T2U + v1TU + v0U = 0
Efectund calculele rezult:
0
T U 1 , T 2 U
0

1
0 , T 3 U

1
1
5
T U 1 , T 6 U
0

0
1 , T 4 U

1
1
0

0

1
1 ,

(2.2.14)

(2.2.15)

Introducnd (2.2.15) n (2.2.14) i efectund calculele obinem:


v2 = v4 + v5 + v6
v1 = v3 + v4 + v5
v0 = v4 + v3 + v2 = v4 + v3 + v4 + v5 + v6 = v3 + v5 + v6
relaii identice cu relaiile (2.2.10) deci cele dou proceduri de calcul ne-au dus la aceleai rezultate .
Cuvntul de cod va fi v = v6v5v4v3v2v1v0.
Decodarea codului ciclic corector de o eroare
Decodarea codului ciclic cuprinde verificarea corectitudinii cuvntului recepionat:

w(x) = vn-1xn-1 + vn-2xn-2 + ... + v1x + v0,

(2.2.16)

corectarea sau detectarea erorilor, dup destinaia codului i apoi selecia biilor de informaie.
Verificarea presupune calculul restului mpririi lui w(x) la g(x). Dac restul este 0 se decide:
cuvnt corect recepionat. Dac nu, atunci se decide: cuvnt eronat.(Prima decizie poate fi fals, a doua
nu!) Pentru codurile detectoare decodarea ia sfrit aici. Pentru codurile corectoare analiza restului
permite determinarea poziiei erorilor. Acest lucru presupune existena unei corespondene biunivoce
ntre resturile posibile i cuvintele eroare corectabile de ctre codul dat.
Dac codul este corector de o eroare, atunci decodarea decurge astfel:
1r- se calculeaz corectorul zn cu formula:
z

n -1

n -1

v T U H T U
'
j

j 0

(2.2.17)

j 0

unde Hj reprezint coeficienii polinomului eroare:


H(x) = w(x) + v(x)

(2.2.18)

2r- dac z = 0 se decide c w(x) este corect w(x) = v(x)


- dac z { 0 atunci z = TrU, unde r este indicele coeficientului eronat. Comparm z cu TjU i gsim r.
Corecia presupune schimbarea valorii lui vr.
Dac codul ciclic corecteaz mai multe erori, atunci decodarea se poate face pe seama
corespondenei amintite anterior.

24

a) Decodarea polinomial
Metoda const n mprirea lui w(x) la g(x). Va rezulta un polinom rest, r(x). Dac acesta este
diferit de 0, cuvntul recepionat este eronat i prin identificarea restului r(x) cu valorile din tabelul
cuvinte eroare corectori (vezi Anexe) se determin poziia erorii i se realizeaz corecia.
Spre exemplu fie : w(x) = x6 + x5 + x3 + x2 + 1. Calculm rest> w(x) /g(x)@:
x6 + x5 + x3 + x2 + 1 x3 + x + 1
x6 + x4 + x3
x3 + x2 + x + 1
5
4
2
x +x +x +1
x5 + x3 + x2
x4 + x3 + 1
x4 + x2 + x
x3 + x2 + x + 1
x3 + x + 1
x2
deci conform tabelului din anex este eronat w2. Schimbnd valoarea bitului w2 rezult :
w(x) = x6 + x5 + x3 + 1.
b) Decodor ciclic cu RDR (decodarea matricial)
celula 0
w

celula n-1

n Tb

yy

AND
P1

0
Cm

IDENTIFICARE
0
Cm-1

STARE
0
y

1
C1

AND

P2

gm-1

gm-2

g1

AND
P2

0
Cm

y
gm-1

a)

schema;

IDENTIFICARE
0
Cm-1

STARE
0

gm-2

g1

25

1
C1

AND y
P1

P1
..
y
0

P2

y
n-1

y
2n

y
n

..
y
0

y
n-1

y
n

..

t / Tb

..

t / Tb

y
2n

b)Semnalele de validare a porilor AND ;


Fig. 2.2.2. Decodor ciclic corector de o eroare

n Fig. 2.2.2. este prezentat structura unui decodor ciclic corector de o eroare. Biii cuvntului
recepionat vor intra n schem unul dup altul n ordine, ncepnd cu bitul vn-1.
Schema de decodare conine un registru de deplasare (blocul nTb este un registru de
ntrziere cu n celule) cu rol de memorie, care pstreaz cuvntul recepionat care intr pas cu pas i
dou subscheme cu RDR pentru corecie care funcioneaz n contratimp. Procedura de decodare
dureaz 2n tacte. n primele n tacte n memorie intr cuvntul 1 care prin poarta P1 intr i n primul
decodor, ieirea acestuia fiind 0 pentru c P2 este nchis. n urmtoarele n tacte cuvntul 2 va intra prin
poarta P2 n al doilea decodor care are ieirea 0 deoarece P1 este nchis, n acest timp cuvntul 1
prsete memoria trecnd prin sumator i este corectat de primul decodor care identific starea 00.....1
i care are acces la sumator prin P2.
Dup n = 7 tacte starea registrului va fi:
S7 = v6T6U + v5T5U + v4T4U + v3T3U + v2T2U + v1TU + v0U

(2.2.19)

care nu va mai fi 0 dect n cazul n care nu avem eroare.


Dac eroarea afecteaz bitul vr starea registrului de deplasare cu reacie dup intrarea ntregului cuvnt
este:
S7 = v6T6U + v5T5U + .... + vrTrU + .... + v1TU + v0U

(2.2.20)

Deoarece la emisie S7 = 0 i vj = vj pentru j { r i vr = vr + 1 rezult:


S7 + S7 = S7 = TrU = z

(2.2.21)

Pe durata urmtoarelor n = 7 tacte RDR din prima subschem va evolua numai sub aciunea
semnalului de reacie i dup n-r-1 tacte se va ajunge n starea:

n-r-1

S7+n-r-1 = T

1
S7 = T U = 0
0
n-1

(2.2.22)

n acela timp printr-o deplasare cu n-r-1 tacte eroarea care se afla n celula r va ajunge n
celula n-1. Detectorul va sesiza starea S7+n-r-1 fix i prin poarta P2 care este nchis va emite semnalul
de corecie (blocul IDENTIFIC genereaz un 1L) care se nsumeaz cu bitul eronat aflat n celula n-1,
astfel la ieirea sumatorului final se va obine cuvntul corectat.

26

Desfurarea lucrrii:
a) Rulai programul de pe calculator alegnd butonul Demonstraie de la codul ciclic i se urmrete
o codare i o decodare.
b) Alegeiv un polinom generator i secvena de informaie i efectuai o codare, apoi alegnd
polinomul generator i biii recepionai o decodare. Verificai apoi rezultatul cu ajutorul calculatorului.
c) La sfritul lucrrii de laborator se efectueaz testul de verificare a cunotinelor acumulate prin
intermediul calculatorului. Testul const n a rspunde la 5 ntrebri teoretice, fiecare avnd un rspuns
corect din cele cinci propuse, i efectuarea unei codri i a unei decodri pornind de la polinomul
generator i secvena de informaie respectiv secvena recepionat generate aleator de calculator.

27

L3. Coduri ciclice corectoare de erori multiple


3.1 Codul BCH

Codurile BCH fac parte din categoria codurilor ciclice.


Cuvintele de cod BCH vor avea deci structura ca i cele de cod ciclic:
vj GF(2q, p(x)) j = 0 z n-1

v = vn-1 vn-2 ... v1 v0

(3.1.1)

unde coeficienii uj sunt coeficieni binari (fac parte din cmpul binar ^0, 1`).
Polinomul corespunztor acestui cuvnt fiind:
v(x) = vn-1xn-1 + vn-2xn-2 + ... + v1x + v0

(3.1.2)

adic un polinom de grad n - 1.


Polinomul de informaie este:
i(x) = ik-1xk-1 + ik-2xk-2 + ... + i1x + i0

(3.1.3)

care este un polinom de gradul k - 1.


Cuvintele de cod se aleg astfel nct s fie multiplii ai polinomului generator g(x) i deci acesta
va trebui sa fie un polinom de gradul m = n k:
g(x) = gmxm + gm-1xm-1 + ... + g1x + g0

(3.1.4)

Coeficienii polinomului g(x) sunt de asemenea coeficieni binari.


Deoarece polinomul trebuie s aib gradul m rezult c gm = 1, iar g0 trebuie s fie i el egal cu 1
pentru c altfel putem da factor pe x i gradul polinomului va fi mai mic dect k.
Polinomul g(x) este deci de forma:
g(x) = xm + gm-1xm-1 + ... + g1x + 1

(3.1.5)

Cuvintele de cod sunt elemente ale cmpului Galois GF(2q) generat de un polinom primitiv p(x) de
grad q (sunt clase de resturi modulo p(x)), cmp obinut aa cum este prezentat n Anexa.
Codarea BCH

Codarea codurilor BCH poate fi fcut n dou moduri:


a) Cu relaia
v(x) =i(x)g(x)

(3.1.6)

care conduce la obinerea unui cod nesistematic (relaie mai puin utilizat).
b) Pentru obinerea unei structuri sistematice, la care informaia s se gseasc nemodificat pe
poziiile cele mai semnificative se folosete relaia:
v(x) = i(x)xm + rest (i(x)xm/g(x))
Aceast relaie se mai poate scrie:

28

(3.1.7)

v(x) =q(x)g(x) = vn-1xn-1 + vn-2xn-2 + ... + v1x + v0

(3.1.8)

deci se obine un cuvnt de cod ciclic care este multiplu a lui g(x) i este format din simbolurile de
informaie aflate pe poziiile cele mai semnificative (primele k) i m simboluri de control determinate
de restul mpririi lui i(x)xm la g(x).
Relaia (3.1.8) poate fi adus sub forma HvT = 0.

h 0
0

h 1 ... h m-1
h 0 ... h m-2
0

...

hm
0 ...
h m-1 h m ...
0

h0

0 v n -1
0 M
v1

h m v0

0
0

... h m-1

(3.1.9)

Acesta este de forma HvT = 0 deci l putem determina pe H prin identificare ca fiind:

h 0
0

M
0

h 1 ... h m -1
h 0 ... h m - 2
0

...

hm
0
h m -1 h m

h0

...
...

0
0

... h m -1

0
0

hm

(3.1.10)

Pentru a corecta t erori independente g(x) trebuie s ndeplineasc anumite condiii. tiim c
v(x) trebuie s fie multiplu al lui g(x) i c g(x) trebuie s fie divizor a lui xn + 1 = 0.
Pentru aceasta alegem un numr de r rdcini ale lui xn + 1 = 0 pe care le notm cu Ei = Di GF(2q).
Aceste rdcini Ei sunt elemente primitive ale extensiei de ordinul q al cmpului Galois binar GF(2q).
Acest ordin poate fi determinat cu relaia:
n = 2q 1

(3.1.11)

de aici rezultnd q i extensia n care se lucreaz GF(2q).


Pe g(x) l vom determina ca cel mai mic multiplu comun al polinoamelor minimale a rdcinilor Ei.
(3.1.12)

g(x) = c.m.m.m.c.^m1(x),... mr(x)`


Iar dac toate aceste r polinoame sunt relativ prime ntre ele atunci:
g(x)

m i x

(3.1.13)

i 1

Expresia polinomului minimal care este definit ca polinomul mi(x) ireductibil de grad minim pentru
care mi(Ei) = 0 este:
m i x

x  E i x  E i2

... x  E i2 q -1

(3.1.14)

Dei n calculul lui mi(x) folosim coeficieni GF(2q) coeficienii lui mi(x) vor fi binari, fapt care
iese n eviden i din calculul acestor coeficieni n cazul exemplului 1 prezentat mai jos.
Pentru corecia unui numr de maxim t erori se impune alegerea unui numr de r = 2t rdcini Ei
GF(2q) ceea ce determin obinerea unui cuvnt de cod avnd distana minim d u 2t + 1.
n cazul codurilor ciclice binare, dac D este o rdcin i D2, D22, ... D2(q-1) sunt tot rdcini i
deci pentru a forma polinomul generator este suficient s lum rdcinile impare:
29

E1 = D, E3 = D3, ... , E2t-1 = D2t-1.


Structura matricii de control H n cazul codurilor BCH se determin deci impunnd ca v(x) s
aib rdcini pe E1 = D, E3 = D3, ... , E2t-1 = D2t-1.
Faptul c Ei este rdcin a cuvntului de cod v(x) se exprim prin v(Ei) = 0 sau mai explicit cu relaia:
v E i v n-1 E in-1  ... v1 E i1  v 0 E i0

0 cu i = 1, 3, ..., 2t-1

(3.1.15)

Pentru fiecare i putem interpreta aceast relaie ca pe un produs scalar al cuvntului format prin puterile
lui Di sau (Ei) i cuvntul de cod:

>D

i n -1

L D i 1

v n -1
M

v1

v0

D i 0 @

(3.1.16)

nlocuind cu valorile corespunztoare pentru i (i = 1, 3, ..., 2t-1) obinem:


D n -1
L D 1 D 0 v n -1 0

3 n -1
L D 3 D 0 M M
D
v1 0

M
2 t 1 n -1

2t -1
0
L D
D v 0 0
D

(3.1.17)

Deci matricea de control H n cazul codurilor BCH este de forma:

D n -1
L
D2
D1 D 0
D 3 n -1
L
D6
D3 D0

H
M

D 2t -1 n -1 L D 2t -1 2 D 2t -1 D 0

(3.1.18)

Aceast matrice este format din elementele GF(2q) i are t linii i n coloane. Fiecare element
poate fi exprimat printr-un cuvnt binar din q bii i deci vom putea scrie matricea H i sub forma
binar dispunnd vertical cuvintele binare care nlocuiesc puterile lui D. Forma binar a matricii H va
avea astfel qt linii i tot n coloane.
Exemplul 1:
Proiectarea unui cod BCH de lungime n = 15 i corectnd 2 erori cu determinarea polinomului
generator i a relaiilor de codare.

n = 2q 1 = 15 q = 4 extensia GF(24)
Elementele lui GF(2q) sunt clase de resturi modulo p(x) un polinom primitiv de gradul q = 4.
Un polinom p(x) este primitiv dac este ireductibil i binomul xn + 1 pe care p(x) l divide are cel
puin gradul n = 2q 1. Fie acest polinom primitiv p(x) = x4 + x + 1. Putem s constatm c x4 + x + 1
divide pe x15 + 1 (n = 2q 1 = 24 1 = 15), dar nu divide nici un xn + 1 cu 1 e n  15 deci este primitiv.
Se tie c pentru orice cmp Galois Dn = 1, deci la noi D15 = 1.
Cmpul GF(24) generat de p(x) = x4 + x + 1 obinut printr-o rdcin primitiv D a lui x4 + x + 1 cu
relaia D4 = D + 1 este cel dat n Anexa:
30

Pentru t = 2 se aleg rdcinile E1 = D si E3 = D3, suntem n cazul binar i alegem doar rdcinile
impare pn la ordinul 2t-1 = 4-1 = 3).
Polinoamele minimale vor fi conform relaiei (3.1.14):
m1(x) = (x + D)(x + D2)(x + D4)(x + D8) = x4 + x3(1 + D2 + D2 + 1 + D + D) + x2(1+ D
+ D2 + 1+ D + D2 + D3 + D2 + D3 +D + D3 + D3 + D + D2) + x(1 + D3 + D + D2 + D3 + 1 + D2 + D3 + 1 +
D + D3) + D15 = x4 + x + 1
m3(x) = (x + D3)(x + D6)(x + D12)(x + D24) = x4 + x3(D24 + D12 + D6 + D3) + x2(D36 +
D + D + D + D15 + D9) + x(D42 + D39 + D33 + D21) + D45 = x4 + x3 + x2 + x + 1
30

18

27

n aceste dou relaii puterile lui D mai mari dect 15 s-au exprimat n funcie de
D , iar suma s-a efectuat modulo doi.
Cele dou polinoame fiind prime ntre ele i folosind relaia (3.1.13), g(x ) se obine:
15

g(x) = m1(x)m3(x) = (x4 + x + 1)( x4 + x3 + x2 + x + 1) = x8 + x7 + x6 + x5 + x4 + x5 +


x + x + x + x + x4 + x3 + x2 + x + 1 = x8 + x7 + x6 + x4 + 1
m = 8 simboluri de control k = 15 - 8 = 7 simboluri de informaie, adic g = 111010001.
Cuvntul de cod va fi:
4

v = v14v13v12v11v10v9v8v7v6v5v4v3v2v1v0
unde primii 7 sunt biii de informaie i ultimii 8 cei de control.
Matricea de control H va avea 2 linii (t = 2) i 15 coloane (n = 15):

D 14 D 13 D 12 D 11 D 10 D 9 D 8 D 7 D 6 D 5 D 4 D
D 42 D 39 D 36 D 33 D 30 D 27 D 24 D 21 D 18 D 15 D 12 D

3
9

D
D

2
6

D 1 1
D 3 1

Lund puterile lui D modulo 15 i innd cont c D15 = 1 cu ajutorul tabelului cmpului GF(24) obinem
exprimarea binar a lui H:

1
0
0

1
H
1
1
1
1

1
1
0
1
1
0
1
0

1
1
1
1
1
1
0
0

1
1
1
0
1
0
0
0

0
1
1
1
0
0
0
1

1
0
1
0
1
1
1
1

0
1
0
1
1
0
1
0

1
0
1
1
1
1
0
0

1
1
0
0
1
0
0
0

0
1
1
0
0
0
0
1

0
0
1
1
1
1
1
1

1
0
0
0
1
0
1
0

0
1
0
0
1
1
0
0

0
0
1
0
1
0
0
0

0
0
0

1
0
0
0
1

adic qt = 42 = 8 linii i n = 15 coloane.


Folosind relaia (3.1.9) se pot obine relaiile de codare.
Pentru o secven informaional i = 0000001 cuvntul de cod sistematic se poate determina cu relaia
(3.1.7):
i(x) = 1
xmi(x) = x8
i(x)xm/g(x) = x8 / x8 + x7 + x6 + x4 + 1
rest(i(x)xm/g(x)) = x7 + x6 + x4 + 1
v(x) = x8 + x7 + x6 + x4 + 1
adic v = 000000111010001
31

Decodarea BCH

n cazul codurilor ciclice binare pentru a putea corecta erori este suficient s determinm
poziia acestora din expresia sindromului. Modul n care poziia erorilor poate fi gsit cu ajutorul
sindromului rezult din prezentarea urmtoare.
Un cod ciclic corector de t erori are cuvinte de cod care au un numr r = 2t de rdcini Ei GF(2q),
Ei=Di:
v(Ei)= v(Di) = 0

(3.1.19)

La recepie trebuie s verificm legea de codare dat de relaia (3.1.15). n cazul n care avem
erori de tip aditiv putem exprima aceast lege sub forma:
r(Ei) = u(Ei) + e(Ei) = e(Ei) = e(Di) = Si

(3.1.20)

unde e(Ei) este eroarea i Si este sindromul, iar i = 1, 3, ..., 2t-1 n cazul codurilor binare.
Pentru a vedea cum putem gsi poziia erorii cu ajutorul sindromului lum un mic exemplu:
Presupunem un cuvnt oarecare care are erori pe dou poziii de exemplu 1 i 4 deci e(x)=x4+x.
innd cont de relaia (3.1.20) vom avea sindromul:
Si = e(Di) = (Di)1 + (Di)4 = (D1)i + (D4)i = X 1i  X i2
Expresia care indic poziia erorii s-a notat cu Xk - locatorul erorii:
Xk = Dj , k = 1, ... t i j = 0, ... n-1

(3.1.21)

Deci avem atia locatori cte erori (n numr de t), iar erorile pot aprea pe orice poziie n
cadrul cuvntului (de la 0 la n-1).
Deci putem exprima sindromul Si sub forma:
Si

X ik

(3.1.22)

k 1

Aceast relaie ne indic un sistem de ecuaii neliniare care are ca necunoscute pe Xk (adic
locatorii).
Pentru realizarea decodrii va fi prezentat algoritmul Peterson cu cutare Chien care const n:
1r Calcularea sindromului erorii
t

i X ik

r D

Si

cu i 1 , 3, ... 2t -1

k 1

2r Cu ajutorul locatorilor putem forma un polinom al erorilor care are ca rdcini locatorii:

V x

xX k

x t V 1 x t -1  ... V

(3.1.23)

k 1

Dac punem condiia ca Xk s fie rdcin a lui V(x) obinem:


X kt  V 1 X kt -1  ... V

32

(3.1.24)

Dac nmulim (3.1.24) cu X ik i nsumm n funcie de k:


t

k 1

k 1

k 1

X kti V 1 X kti-1 ...V t X ik

(3.1.25)

innd cont de (3.1.22) relaia (3.1.25) devine:

S t i V 1 S t i-1  ... V t S i

(3.1.26)

Aceast ecuaie este un sistem liniar de t ecuaii cu t necunoscute care se poate rezolva aplicnd
regula lui Cramer.
Pentru codurile BCH folosind i relaia S 2k S 2k expresiile coeficienilor Vi n funcie de Si pentru un
numr de 1, 2 sau 3 erori sunt:
Tabelul 3.1.1
t
1
2

Vi
V1 = S1
V1 = S1

S 3  S 13

V2

S1
V1 = S1
S 12 S 3  S 5

3
V2

S 13  S 3

S 13  S 3  S 1 V

V3

3r Cutarea poziiei eronate.


Cunoscnd Vi putem determina poziia erorii.
Dac mprim relaia (3.1.24) cu X kt rezult relaia:
t

V i X -ki

(3.1.27)

i 1

i dndu-ne poziia eronat.


Numrul maxim de erori corectabile este t eroarea putndu-se gsi pe oricare din cele n poziii
ale cuvntului.
n cazul unei cutri Chien se ncepe cutarea simbolului eronat de la rn-1. Pentru o poziie
oarecare n-j innd cont de (3.1.21) vom avea Xk = Dn-j
t

i 1

i 1

V i D -i n - j 1 V i D
t

V i 1 D
n
D
i 1

- i n

i j

1
(3.1.28)

i j

Deoarece Dn = 1 obinem ecuaia de cutare Chien:

33

V iD

i j

1 cu j 1,...n

(3.1.29)

i 1

lui j = 1 corespunzndu-i simbolul rn-1, iar lui j = n simbolul r0.


Deci conform ecuaiei (3.1.29) eroarea apare cnd suma respectiv este egal cu 1.
Exemplul 2:

Presupunem c recepionm un cuvnt BCH cu n = 15 i k = 7 i c avem t = 2 erori.


r =110101011010011
r(x) = x14 + x13 + x11 + x9 + x7 + x6 + x4 + x1 + 1
Calculm sindromul. Pentru t = 2 avem de calculat pn la S3 inclusiv (2t-1 = 22-1 = 3):
S1 = r(D) = D14 + D13 + D11 + D9 + D7 + D6 + D4 + D + 1=
= 1 + D3 + 1 + D2 + D3 + D + D2 + D3 + D + D3 + 1 + D +
+ D3 + D2 + D3 + 1 + D + D + 1 = D2 + D + 1 = D10
S3 = r(D3) = D42 + D39 + D33 + D27 + D21 + D18 + D12 + D3
+ 1= D12 + D9 + D3 + D12 + D6 + D3 + D12 + D3 + 1 = D9 +
+ D6 + D12 +D3 +1 = D + D3 + D2 + D3 + 1 + D + D2 + D3 +
+ D3 + 1 = 0
Din tabelul 3.1.1 avem pentru t = 2:
V1 = S1 = D10
V2

S 3  S 13
S1

= D20 = D5

n calculele anterioare am utilizat valorile pentru puterile lui D din tabelul 1 i puterile care
depesc D15 le-am exprimat in funcie de aceasta innd cont c D15 = 1.
Folosim relaia de cutare (3.1.29) i avem:
j = 1 V1D11 + V2D21 = D10D + D5D2 = D + D2 + D3 + 1 + D + D3 = 1 + D2 = D8
j = 2 V1D12 + V2D22 = D10D2 + D5D4 = D8
j = 3 V1D13 + V2D23 = D10D3 + D5D6 = D4
j = 4 V1D14 + V2D24 = D10D4 + D5D8 = D2
j = 5 V1D15 + V2D25 = D10D5 + D5D10 = 0
j = 6 V1D16 + V2D26 = D10D6 + D5D12 = D5
j = 7 V1D17 + V2D27 = D10D7 + D5D14 = D10
j = 8 V1D18 + V2D28 = D10D8 + D5D16 = D2
j = 9 V1D19 + V2D29 = D10D9 + D5D18 = D5
j = 10 V1D110 + V2D210 = D10D10 + D5D20 = 1 deci este eronat simbolul n - j = 15 10 = 5 (r5)
j = 11 V1D111 + V2D211 = D10D11 + D5D22 = D4
j = 12 V1D112 + V2D212 = D10D12 + D5D24 = D
j = 13 V1D113 + V2D213 = D10D13 + D5D26 = D10
j = 14 V1D114 + V2D214 = D10D14 + D5D28 = D
j = 15 V1D115 + V2D215 = D10D15 + D5D30 = 1 deci este eronat simbolul n - j = 15 15 = 0 (r0)

34

Cuvntul decodat va fi deci 110101011110010 .


Secvena de informaie de la ieirea decodorului va fi i = 1101010.
Desfurarea lucrrii:
a) Rulai programul pe calculator, utiliznd opiunea demonstrativ att pentru algoritmul de codare ct
i pentru cel de decodare. Se urmrete pas cu pas algoritmul de codare existnd posibilitatea de a
alege un cod corector de t = 1, 2, sau 3 erori. Urmrii cu atenie la fiecare pas mesajele calculatorului
care va vor ghida n rularea corect a programului. De asemenea se urmrete pas cu pas algoritmul de
decodare.
b) Realizai o codare a unui cuvnt n cazul unui cod corector de t = 1, 2, sau 3 erori alegnd irul de
bii de informaie de lungimea corespunztoare. Pentru cazul t = 2 efectuai apoi decodarea unui
cuvntului de cod. Verificai apoi calculele cu ajutorul programului de pe calculator.
c) La sfritul lucrrii de laborator se va efectua cu ajutorul programului un test asupra cunotinelor
acumulate. Testul cuprinde 5 ntrebri teoretice fiecare cu un rspuns corect din cinci propuse, o codare
i o decodare a unui mesaj pe care calculatorul l genereaz n mod aleator.
3.2 Codul Reed-Solomon

Codurile Reed-Solomon (RS) fac parte din categoria codurilor ciclice, ns sunt coduri
nebinare. Spre deosebire de celelalte coduri ciclice, alfabetul codului RS nu este cmpul binar ^0, 1`,
ci un cmp finit de ordin superior, numit cmp Galois i care va fi descris n Anexa. n acest fel,
cuvintele codului RS nu sunt secvene (succesiuni) de bii, ci de caractere. Aceste caractere pot fi
reprezentate, la rndul lor, prin secvene binare, ns sunt indivizibile din punct de vedere al codrii i
decodrii Reed-Solomon.
Structural, cuvintele de cod RS au aceeai alctuire ca i cele de cod ciclic:
v = vn-1vn-2 ... v1v0

vj GF(2q, p(x)) j = 0zn-1

(3.2.1)

unde: v cuvntul de cod, format din n caractere;


vn-1vn-2 ... vk caracterele de informaie, n numr de k;
vk-1vk-2 ... v0 caracterele de control, n numr de m;
q ordinul cmpului;
p(x) polinomul generator al cmpului GF.
Relaia de codare are aceeai form ca i la codurile ciclice:
v(x) = i(x)xm + rest (i(x)xm/g(x))

(3.2.2)

unde g(x) este polinomul generator al codului, al crui construcie este prezentat mai jos, iar
i(x) = vn-1xk-1 + vn-2xk-2 + ... + vk+1x + vk

(3.2.3)

este polinomul de informaie.


Prin relaia de codare (3.2.2) se obine polinomul ataat cuvntului de cod, polinom ai crui
coeficieni sunt tocmai caracterele ce alctuiesc cuvntul de cod dat de (3.2.1). Relaia (3.2.2) indic,
deasemenea, c v(x) este un multiplu al lui g(x).
Codul RS, avnd parametrii n, k i m, construit dup relaia (3.2.2), este capabil s corecteze un
numr ec de caractere eronate, unde:
2ec = m = n-k

35

(3.2.4)

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.
Polinomul generator, g(x), al codului
Pentru a se corecta t erori dintr-un cuvnt este necesar a se preciza poziia fiecreia precum i
valoarea ei. Dac ne referim la un cuvnt de lungime n, unde:
n = 2q 1

(3.2.5)

atunci informaia necesar pentru a preciza un caracter eronat ntre cele n este:
ip1 = -log2(1/n)

(3.2.6)

Pentru a include i varianta cuvnt fr eroare, considerm c n acest caz se eroneaz un


al n+1lea caracter, fictiv, astfel nct informaia necesar pentru a preciza poziia unui caracter eronat
(dintre n+1 caractere) este:
ip1 = log2(n+1)

(3.2.7)

Aceast informaie poate fi coninut de un caracter din GF(2q). Deasemenea i valoarea erorii, H, poate
s fie orice caracter din GF(2q):
w=v+H

(3.2.8)

unde: w caracterul recepionat GF(2q);


v caracterul emis GF(2q);
H -valoarea erorii GF(2q)\{0}.
Incluznd i cazul eronare a caracterului fictiv, rezult c H poate lua orice valoare din GF(2q), adic
2q valori posibile. Informaia necesar pentru a preciza valoarea ei este identic cu cea dat de (3.2.7).
n concluzie, pentru fiecare eroare ce se dorete a fi corectat este necesar o informaie egal
cu 2q bii, adic dou caractere din GF(2q). La t erori sunt necesare 2t caractere (cantitate de
informaie).
Obs. n fapt condiia anterioar este una suficient, cea necesar implic mai puin informaie
deoarece nu se poate erona un caracter de dou ori. De exemplu n cazul a dou erori:
i p2

 log 2

1
C

2
n 1

log 2

(n  1) n
2

log 2 (n  1)  log 2 n  1

(3.2.9)

iar pentru n suficient de mare ip2 } 2ip1 1.

Cele 2t caractere de informaie necesare soluionrii problemei coreciei se afl din 2t ecuaii,
care nseamn tot attea legturi (proprieti) pentru cuvntul receptionat. Aceste 2t proprieti pentru
cuvintele de cod RS sunt generate prin relaia de codare (3.2.2). Prin aceast relaie v(x) devine
multiplul lui g(x), ceea ce nseamn c rdcinile lui g vor fi i rdcini pentru v. Rezult necesitatea ca
g s aib 2t rdcini. Aceste rdcini pot fi oricare dintre cele 2q elemente ale cmpului GF(2q). Vom
alege pentru g rdcinile D, D2, D3, ... D2t, datorit simplitii i simetriei:
g(x) = (x + D)(x + D2) ... (x + D2t) = xm + gm-1xm-1 + ... + g1x + g0

(3.2.10)

Aadar cuvntul de cod RS, v, rezultat prin codarea cu ajutorul relaiei (3.2.2), n care g este dat
de (3.2.10), are proprietatea c elementele D, D2, D3, ... D2t sunt rdcini pentru polinomul ataat, v(x).

36

Codarea codului Reed Solomon

Codarea se poate face utiliznd relaia (3.2.2).


Spre exemplu n cazul codului RS cu n = 7, k = 5, t = 1 avnd polinomul generator:
g(x) = (x + D)(x + D2) = x2 + D4x + D3 = x2 + 5x + 4

(3.2.11)

Ecuaia mpririi este:


i(x)x2 = (2x4 + 5x3 + x2 + x + 5)(x2 + 5x + 4) + x + 1

(3.2.12)

unde: -i(x)x2 este dempritul (i = [2 1 7 5 4] i(x) = 2x4 + x3 + 7x2 + 5x + 4);


-2x4 + 5x3 + x2 + x + 5 este ctul;
-g(x) = x2 + 5x + 4 este mpritorul, iar
- x + 1 este restul.
mprirea polinomului i(x)xm = i(x)x2 la g(x), cerut pentru codare de relaia (3.2.2), este prezentat
mai jos:
2x6 + x5 + 7x4 + 5x3 + 4x2
x2 + 5x + 4
2x6 + 6x5 + 5x4
2x4 + 5x3 + x2 + x + 5
5
4
3
2
/ 5x + 4x + 5x + 4x
5x5 + 2x4 + x3
/ 2x4 + 6x3 + 4x2
x4 + 5x3 + 4x2
/ x3
x3 + 5x2 + 4x
/ 5x2 + 4x
5x2 + 2x + 1
/
x+1
Cuvntul de cod, conform relaiei (3.2.2) rezult:
v(x) = i(x)x2 + x + 1 = 2x6 + x5 + 7x4 + 5x3 + 4x2 + x + 1

(3.2.13)

Decodarea codului Reed-Solomon

Decodarea codului RS poate fi fcut att n timp ct i n frecven


Decodarea codului RS-corector de erori multiple
Decodarea va fi sistematizat sub forma unor pai algoritmici. La fiecare pas se va prezenta
operaia necesar a fi executat, scopul urmrit ct i argumentrile necesare. Fie aadar codul RS
corector de t erori.
Pasul I

Conform relaiei (3.2.10) g(x) este un polinom de grad k = 2t > 2. Prin construcie, cuvintele de
cod RS au proprietatea c polinoamele ataate lor sunt divizibile cu g(x), adic elementele cmpului
GF(22) D, D2, , D2t sunt rdcini att pentru g(x) ct i pentru orice cuvnt de cod v(x):
g(Dj) = 0
v(Dj) = 0

(3.2.14)

j = 12t

37

Aceste proprieti constituie i punctul de plecare n decodare. Presupunnd c w este un cuvnt


recepionat:
w=v+H

w(x) = v(x) + H(x)

sau

(3.2.15)

vom calcula 2t coeficieni, numii coeficieni sindrom, Sj, n forma:


Sj = w(Dj) = v(Dj) + H(Dj) = H(Dj)

j=12t

(3.2.16)

Evident c dac nu exist erori Sj = 0. n acest caz se trece la pasul VI. Evident concluzia poate fi
eronat. Un exemplu n argumentarea acestei afirmaii este situaia: H = cuvnt de cod. Dar n acest caz
numrul erorilor depete puterea de corecie de t erori.
Pasul II
Dac exist erori n limitele corectabile (numrul erorilor este mai mic sau egal cu t) atunci exist
coeficieni sindrom diferii de zero. Fie cuvntul eroare n forma:
t

H x

ri

x ki

(3.2.17)

i 1

unde:

Dr

Yi

(3.2.18)

reprezint valoarea erorii ri {0, 1, 2, n-1}, iar:

Dk

Xi

(3.2.19)

reprezint locatorul erorii ki {0, 1, 2, , n-1}. Cu aceste notaii coeficienii sindrom au expresiile:

Yi D j

Sj

i 1

ki

Y X
i

j
i

j = 1z2t

(3.2.20)

i 1

Ecuaiile (3.2.20) reprezint un sistem de 2t ecuaii cu 2t necunoscute: t locatori ai erorilor Xi i


t valori pentru respectivele erori Yi.
Rezolvarea acestui sistem de ecuaii se va face n mai multe etape. La pasul prezent se vor
calcula coeficienii polinomului V(x) ai crui rdcini sunt locatorii erorilor:
t

V x

x  X
i

xt V

x t 1  ...  V t 1 x  V t

(3.2.21)

i 1

Pentru c Xi , 1e i e t este o rdcin a lui V(x) putem scrie:


X it  V 1 X it 1  ...  V t 1 X i  V t

0,

i = 1zt

(3.2.22)

nmulind ecuaiile (3.2.22) pe rnd cu XikYi i sumndu-le obinem ecuaia:


t

i 1

i 1

Yi X it k V 1 Yi X it k 1  ...  V t 1 Yi X ik 1 
i 1

 V t Yi X

k
i

i 1

38

(3.2.23)

sau, innd cont de (3.2.20) pentru k lund valorile 1, 2, ..., t:


St+k + V1St+k-1 ++ Vt-1Sk-1 + VtSk =0 , k = 1t

(3.2.24)

Ecuaiile (3.2.24) reprezint un sistem de t ecuaii cu t necunoscute (coeficienii


rezolvare constituie obiectivul acestui pas algoritmic. Ecuaiile (3.2.24) pot fi puse
compact:
AsV = Bs
unde:
S t 1 ... S1
St
V 1
S t 1
S

St
... S 2
V
A s t 1
; V 2 ; Bs t 2
...
...
...
... ... ...

S 2t 1 S 2t  2 ... S t
V t
S 2t

Vi) a crui
sub forma
(3.2.25)

(3.2.26)

Calculnd inversa matricii As gsim soluia sistemului (3.2.24) n forma:

A s-1 B s

(3.2.27)

Obs: Toate calculele trebuiesc fcute n cmpul GF(2), att coeficienii sindrom, Sj, ct i coeficienii
V fiind elemente ale respectivului cmp.

n rezolvarea ecuaiei (3.2.25) pot aprea trei situaii:


1 rangul matricii As este e < t i este egal cu al matricii [AsBs]. n acest caz numrul de erori este e i
din rezolvarea ec (3.2.25) rezult un numr e de coeficieni VI nenuli Rezolvarea ecuaiei (3.2.25)
presupune restrngerea sistemului (10.24) la un numr e < t de ecuaii cu e necunoscute,
rezolvabil.
2 rangul matricii As este t. n acest caz exist As-1 iar ecuaia (3.2.25) are soluie dat prin relaia
(3.2.27).Se vor gsi t erori n acest caz.
3 rangul matricii As este e` <t i este mai mic dect al matricii [AsBs]. O astfel de situaie este posibil
s apar dac numrul erorilor depete t. n acest caz se semnaleaz prezena erorilor n numr
necorectabil. Funcie de aplicaie se va abandona cuvntul n cauz sau se va cere retransmisia sa.
Pasul III
Ecuaia (3.2.22) se poate rescrie n forma:
t

X i j

(3.2.28)

j 1

tiind c Xi este de forma X i D k i unde ki indic rangul pe care l ocup eroarea (ex: ki = n-1 este
prima poziie) se vor putea afla locatorii erorilor printr-o operaie de cutare:
t

D k j

k = 1, 2, , n

(3.2.29)

j 1

Acei k pentru care (3.2.29) este o identitate, indic prezena erorii pe poziia:
r=n-k

(3.2.30)

Obs: nlocuind pe:

39

Xr= Dr

(3.2.31)

n (3.2.28) i utiliznd identitatea Dn =1 obinem:


t

V j D  jr
j 1

V j D n jD  jr
j 1

V j D (n  j)r
j 1

D k jr

j 1

Pasul IV
Dispunnd de poziiile erorilor dispunem implicit de numrul lor. Reinem c problema are
soluie doar dac e < t. Cunoscnd aadar e locatori ai erorilor n forma X i D k i , i = 1e, din sistemul
de ecuaii (3.2.20) se rein e ecuaii n vederea aflrii valorilor Yi pentru cele e erori. Acest sistem este
compatibil unic determinat. Rezolvarea sa conduce la aflarea celor e valori necesare Yi.
Pasul V

Cunoscnd att poziiile erorilor Xi = Di, i = 1e, ct i valorile lor Yi


corecia caracterelor eronate:
v ki

w k i  Yi ,

i =1e

D r , i=1e putem face


i

(3.2.32)

Pasul VI
Se face selecia caracterelor de informaie i livrarea lor la ieire.
Desfurarea lucrrii:
a) Rulai programul pe calculator, utiliznd opiunea demonstrativ att pentru algoritmul de codare ct
i pentru cel de decodare. Se urmrete pas cu pas algoritmul de codare existnd posibilitatea de a
alege un cod corector de t = 1, sau 2 erori. Urmrii cu atenie la fiecare pas mesajele calculatorului
care va vor ghida n rularea corect a programului. De asemenea se urmrete pas cu pas algoritmul de
decodare.
b) Realizai o codare a unui cuvnt n cazul unui cod corector de t = 1, sau 2 erori alegnd irul de
caractere de informaie de lungimea corespunztoare. Pentru cazul t = 1 i 2 efectuai apoi decodarea
unui cuvntului de cod. Verificai apoi calculele cu ajutorul programului de pe calculator.

40

L4. Coduri convoluionale


Codurile convoluionale au fost introduse n 1954 de P. Elias i reprezint o clas de coduri
corectoare avnd o mare aplicabilitate practic.
n cazul codurilor convoluionale, fiecare bloc de n simboluri binare de la ieirea codorului
depinde att de blocul de k simboluri binare prezent la intrarea sa, la momentul considerat, ct i de m
blocuri precedente. n consecin codurile convoluionale introduc un efect de memorie de ordinul m.
Cantitatea K=m+1 se numete lungimea de constrngere a codului.
Codorul este constituit dintr-un sistem de m registre de ntrziere, fiecare avnd o capacitate de
k bii, care memoreaz cele m blocuri de k simboluri de informaie, dintr-o mulime de funcii liniare,
ce genereaz blocurile de n simboluri de la ieire i dintr-un convertor paralel-serie. Mrimea R=k/n se
numete randamentul codului.
Un cod convoluional de randament R este o aplicaie de la mulimea matricilor (binare) cu un
numr de k linii i numr infinit de coloane ctre mulimea matricilor (binare) cu un numr de n linii i
numr infinit de coloane, unde n > k :
C : M k vg p M nvg

(4.1)

Astfel, prin transformarea C, fiecrei matrici I M k vg , de forma :

i01 i11 i21


i
02 i12 i22
L L L

i0 k i1k i2k

L
L
L
L

i j1 L
i j 2 L
,
L L

i jk L

i js ^0,1`  j

0, g, s 1, k

(4.2)

i se ataeaz o matrice V M nvg , de forma:

a 01
a
02
L

a 0 k
L

a0n

a11
a12
L
a1k

a 21 L a j1
a 22 L a j 2
L L L
a 2 k L a jk

L
a1n

L L L
a 2 n L a jn

L
L
L
,
L
L

a js ^0,1`  j

0, g, s 1, n

(4.3)

Matricea I conine practic biii de informaie, n ordinea i01 i02 K i 0k i11 K , iar matricea V
secvena codat : a 01 a 02 K a 0n a 11 K . Dac a js | i js pentru orice j pozitiv i pentru orice s 1 z k ,
atunci codul se numete sistematic. Fcnd apel la o reprezentare polinomial, matricile I i V se pot
scrie ca :
g
s
a s1D

g
s
sg0

s
i s1D

a
D

sg0

s 0 s2
s

I D s0i s 2 D , V D g M
(4.4)
s

M
a sk D
g

s 0

s
i sk D
g M

s 0

a Ds
s 0 sn
41

Cu aceste notaii, relaia de codare, poate fi scris astfel :


V D G D I D

(4.5)

unde G(D) se numete matricea generatoare a codului i are forma:


G D

g11 D g12 D L g1k D


L
L
L
L

g n1 D g n1 D L g nk D

(4.6)

n funcie de felul polinoamelor gebneratoare gjs(D), codurile convoluionale pot fi clasificate ca i:


a) Coduri sistematice sau nesistematice. Dac primele k linii din G(D) formeaz matricea
unitate de ordinul k, Ik, atunci codurile sunt sistematice. n acest caz biii din I se vor regsi printre biii
din V. Astfel, dac cele k simboluri de informaie, prezente sunt efectiv emise, adic se gsesc n mod
explicit n blocul de n simboluri de la ieirea codorului pe primele k poziii, codul se numete cod
sistematic. Pentru codurile nesistematice, biii din V sunt combinaii liniare ale biilor din I, neexistnd
bii de informaie i de control ca i n cazul precedent.
b) Coduri recursive sau nerecursive. Dac toate polinoamele generatoare care compun G(D)
sunt finite, atunci codul rezultat este nerecursiv. n caz contrar polinoamele generatoare gjs(D) pot fi
scrise sub forma:
g js ( D)

a js ( D)

(4.7)

b js ( D)

unde polinoamele ajs i bjs sunt finite. Deci, dac exist cel puin un polinom bjs(D)1, atunci codul este
recursiv.
Lungimea de constrngere este unul dintre parametri importani ai codurilor convoluionale. O
alt definiie a sa este dat n relaia de mai jos:
K

1  max grad ^a j , s D , b j , s D `

(4.8)

j ,s

Pentru a ilustra codurile convoluionale nerecursive i nesistematice, n Fig. 4.1. se


prezint un exemplu de codor convoluional de randament R=1/2 i de lungime de
constrngere K=(m+1)=3. Intrarea sa este constituit din blocurile de k=1 simbol i ieirea
sa de blocurile de n=2 simboluri.

ik

ik-1

ik-2

a1k

a k2

Fig. 4.1. Exemplu de codor convoluional nerecursiv, nesistematic ( R = 1/2, K = 3).

42

Relaiile de calcul ale secvenelor de la ieire sunt:


a1k

1
2
ik  j g j , a k

2
ik  j g j

j 0

(4.9)

j 0

Cele dou secvene generatoare sunt:

>g , g , g @ >1,0,1@
>g , g , g @ >1,1,1@

g1
g2

1
0

1
1

2
0

2
1

1
2

(4.10)

2
2

Observm c ieirile codorului fiind egale cu o combinaie liniar a simbolurilor de


informaie, codul este liniar. Codurile convoluionale sunt de asemenea definite pornind de
la polinoamele lor generatoare exprimate n funcie de variabila D (ntrziere) echivalent
cu variabila Z - 1 a transformatei Z. Considernd tot exemplul din Fig. 4.1, polinoamele
generatoare ale acestui cod au expresiile:
g 1 p G 1 ( D)

g 01  g11 D  g 12 D 2

g 2 p G 2 ( D)

g 02  g12 D  g 22 D 2

i:

(2.11)

G 1 D 1  D 2

(2.12)

G 2 D 1  D  D 2

rezultnd matricea generatoare G=[1+D 2 , 1+D+D 2 ].


n general polinoamele generatoare ale codorului se exprim n octal i astfel, pentru
cazul din Fig. 4.1, avem:
G1

[1,0,1] 5(n octal)

G2

[1,1,1] 7(n octal)

(2.13)

n Fig.4.2 a) se prezint schema general a unui codor recursiv sistematic, RSC (Recursive
Systematic Code), iar n figura Fig. 4.2 b) un caz particular al acesteia.

i
i

b1
+

a0

b2

bM-1

a1

bM

a2

aM-1

aM

c
a)
b)
Fig. 4.2. Cod convoluional recursiv sistematic: a) schema general, b) exemplu (R=1/2, K=3).

n exemplul considerat matricea generatoare este de forma:


G

1 D2
1,
2
1 D  D

43

(2.14)

n figura urmtoare sunt prezentate dou exemple de codoare sistematice i nerecursive, NRSC (NonRecursive Systematic Code), considerndu-se randamentul R=1/2 i lungimea de constrngere K=3:
i

i
D

i
D

a)
b)
Fig. 4.3 Coduri convoluionale sistematic i nerecursiv, R=1/2, K=3, G=1+ D + D 2 .

Diagrame de stri

Diagrama de stri este o reprezentare a funcionrii unui codor convoluional, n


care timpul nu apare n mod explicit.
n Fig.4.4 s-a reprezentat diagrama de stri asociat codorului convoluional din Fig.
4.1. Diagrama de stri permite evaluarea funciei de transfer a codorului, care va fi utilizat
pentru calculul performanelor codului.
00
11
10
10

00
01
00
11

11

a1k , a k2

01

ik=1

10

a1k , a k2
ik=0

01

Fig. 4.4: Diagrama de stri a codorului din Fig. 4.1.

Diagramele de stri corespunztoare codurilor convoluionale din Fig.4.2 b) i Fig.4.3 a) i b) sunt


prezentate n Fig.4.5.
00

00

00
11

10

00
11

11
10

01

10

01
11

00
11

01
01

01

10

10

00
01

00

10

00

01

10
00

11

01

11

01
11

10

11

10

a)

b)

c)

Fig. 4.5 Diagramele de stare pentru codoarele convoluionale: a) RSC; b) i c) NRSC.

44

Diagrama trellis

Fiecare bloc de n = 2 simboluri de la ieirea acestui codor depinde de blocul de k =


1 simbol prezent la intrarea sa dar i de m = 2 blocuri de k simboluri coninute n memoria
sa. Aceste mk = 2 simboluri definesc starea codorului. Se noteaz cu S 0 = (00), S 1 = (01),
S 2 = (10) i S 3 = (11), cele patru stri posibile ale codorului din Fig. 4.1. Oricare ar fi
starea iniial a codorului, dup m+1=3 ntrzieri la intrarea codorului, toate strile au fost
atinse.
Funcionarea codorului poate fi explicat innd seama doar de strile sale i de
tranziiile dintre acestea, numite ramuri (ramificaii, brae). Diagrama trellis astfel obinut
este reprezentat n Fig. 4.6, pentru codorul convoluional din Fig. 4.1, presupunnd
ipoteza c starea sa iniial era S 0 = (00).
00

00

00

00

00
11

11
11

11

11

01

11

00
01

01

10

t=1

a1k , a k2

10
10

t=2

ik=0

10

01

11
t=0

ik=1

01

10
10

a1k , a k2

00

01
t=3

t=4

Fig. 4.6. Trellis-ul codorului convoluional din Fig. 4.1.


Ramurile reprezentate prin linii punctate corespund prezenei unui simbol de
informaie egal cu 1, la intrarea codorului, i ramurile reprezentate prin linii pline, unui
simbol de informaie egal cu 0. Fiecrei ramuri i s-a asociat valoarea cuplului binar
disponibil la ieirea codorului.
Dup m+1 ntrzieri, oricare ar fi starea iniial a codorului, trellis -ul se repet. Din
fiecare nod pleac 2 k ramuri (n cazul de fa sunt dou ramuri) i n fiecare nod converg 2 k
ramuri.
Pornind de la starea S 0 =(00) n momentul t=0, de exemplu, vedem c exist patru ci
care permit atingerea strii S 0 =(00) n momentul t=4.
00
00
11
11

00
11
10
01

00
01
10
11

00
11
11
00

calea
calea
calea
calea

1
2
3
4

45

Codarea codului convoluional

Folosind o codare convoluional, se codeaz urmtoarea secven de informaie: i=100111,


considernd polinomul generator al codului: g(D)=1+D2.
n acest scop se folosete Fig. 4.7.

00

0/00

00

0/00

00

10

00

1/11

1/11

1/11

0/00

10

10

0/00
1/11

0/01

10

01

01

0/01

1/11
11

i:
v:

11

1
11

11

0
00

1/10

0
01

0/01

1/11
11

1/10

1/11
11

1
11

10

0/01

10

1/10

1
11

0/01

11

1/10

1
10

1/11
11

10

00

0/01

0/00
01

0/01

1/10

01

10
1/10

0/00

01

0/01

0/00

1/10

0/00

1/11

00

1/11

1/10

01

0/01

0/00
1/11

0/00

01

0/01

00

1/10

1/10

01

0/01

10

0/00
1/11

0/00

0/00
01

00

1/11

1/10
0/00

0/00

00

1/11
11

01

0/01

1/10

1/11
11

01

Fig. 4.7. Utilizarea diagramei trellis n cazul codrii secvenei de informaie i=100111, considernd diagrama de stri din
Fig. 4.5. c).

Cuvntul de cod obinut este v=11 00 01 11 11 10 01 01. Trellis-ul codorului convoluional se


nchide la zero, astfel, datorit acestui fapt au aprut dou grupe suplimentare de bii.
Calea pe trellis care ne genereaz cuvntul de cod, v, este cea marcat cu rou.
Decodarea codului convoluional, algoritmul Viterbi cu decizie hard

Pentru prezentarea acestui algoritm se consider un canal binar simetric (fr memorie), intrarea
decodorului fiind alctuit dintr-o secven de simboluri binare.
n fiecare moment dou ramuri, aparinnd la dou ci diferite, converg spre fiecare nod al trellislui (Fig.4.6). Din aceste dou ci una este mai probabil, altfel spus, se gsete la cea mai mic distan
Hamming fa de secvena recepionat, dect cealalt cale. Distana fiind o funcional aditiv, n
fiecare nod se pstreaz calea cea mai probabil numit cale supravieuitoare. Dac se obin dou ci
cu aceeai distan Hamming, doar o singur cale este pastrat, alegndu-se n mod arbitrar una din
cele dou ci posibile.
n figura urmtoare se prezint un exemplu de decodare pentru codorul reprezentat n Fig. 4.3.
b), cu diagrama de stri reprezentat n Fig. 4.5. c). Calea rezultant este marcat cu culoare roie.

46

w : 10

10

01

1
00

0/00

00

1
10

2
0/00

1/11

1/11

00

10

10

01

11

0/01

1/10

2
00
0

1/11

0/00

0/01

11

10

01

1/11

v v1/10

1/11

00

v 5

vv

1/10

0/00

11

1/10

1/11

11

1/10

v1/10 4
0/00

v 4

01

0/01

1/11

11

1/10

1/11

10

v1/10 6

5
0/00

0/00

5
0/01

01

0/01

1/11

11

10

1/10
0/00

1/10

7
01
(0)

00

0/01

6
10
1

00

5
11
1

10

v
0/01

4
0/00
1/11

0/01

4
0/01

v 6

01

4
11
1

00

4
3

1/11

10

01

6
0/00

0/01

01

1/11

1/10

3
01
0

01

5
0/00

00

0/01

0/00

Tact:0
v: 11
i: 1

10

10

4
0/00

0/01

01

11

11

00

v v1/10

1/11

11

3
0/00
1/11

0/00
01

11

01

4
1/11

11

8
01
(0)

Fig. 4.8. Utilizarea diagramei trellis n cazul decodrii secvenei w=A7E5H, considernd diagrama de stri din Fig. 4.5. c).

Desfurarea lucrrii:
a) Rulai programul pe calculator, utiliznd opiunea demonstrativ att pentru algoritmul de codare ct
i pentru cel de decodare.
b) Realizai o codare i o decodare, folosind algoritmul de decodare Viterbi. Verificai apoi calculele cu
ajutorul programului de pe calculator.

47

Bibliografie
[1] P. Elias, Error-free Coding, IRE Trans. Inform. Theory, vol IT-4, pp.29-37, 1954,
[2] Chien, R, Cyclic decoding procedures for Bose-Chaudhuri-Hocquenghem codes, IEEE
Transactions on Information Theory, Volume 10, Issue 4, Page(s): 357 - 363, Oct 1964,
[3] A. Glavieux, M. Joindot, Communications numriques. Introduction, Masson, Paris,
1996,
[4] M. E. Borda, Teoria transmiterii informaiei, Editura Dacia, Cluj-Napoca, 1999,
[5] G. Wade, Coding Techniques-An Introduction to Compresion and Error Control,
Creative Print and Design, Ebbw Vale, Geat Britain, 2000,
[6] J. Proakis, Digital Communications, 4th Ed., McGraw Hill, New York, 2000,
[7] H. Balt, M. Kovaci, A Comparasion Between Weight Spectrum of Different
Convolutional Code Types, conferin Oradea, 2004.

48

S-ar putea să vă placă și