Sunteți pe pagina 1din 20

Lucrarea 6

Coduri ciclice pentru detect, ia


s, i corect, ia erorilor

6.1 Obiectivul lucr rii


În cadrul acestei lucr ri vor  explicate particularit t, ile algebrice
ale codurilor ciclice s, i modul de implementare al operat, iilor de co-
dare s, i decodare. Finalul lucr rii abordeaz  tehnica de vericare a
redundant, ei ciclice, metod  ce are la baz  codurile ciclice, aplicat  în
prezent într-o gam  larg  de standarde de telecomunicat, ii.

6.2 Aspecte teoretice


6.2.1 Particularit tile codurilor ciclice
,

Codurile ciclice reprezint  un caz particular al codurilor bloc. În


plus fat,   de caracteristicile specice categoriei din care fac parte, co-
durile ciclice prezint  propriet t, i algebrice ce le fac adecvate pentru
detect, ia s, i corect, ia erorilor.

Particularitatea principal  a codurilor ciclice const  în fap-


tul c , dac  v = [a0 a1 · · · an−1 ] reprezint  un cuvânt de
cod, atunci ecare permutare circular  vi a acestei secvent, e,
vi = [ai ai+1 · · · an−1 a0 a1 · · · ai−1 ] va reprezenta la rândul ei un
cuvânt de cod, i = 1 · · · n − 1, ai ∈ {0, 1}. În consecint , implemen-
,

104
105

t rile hardware s, i software ale acestor coduri vor avea complexitate


mai redus  decât în cazul codurilor grup.

Lucrarea are ca scop studiul codurilor ciclice binare. Coecient, ii


acestui tip de coduri apart, in câmpului Galois de ordin 2 - GF (2), deci
ai ∈ {0, 1}. Ca urmare, toate operatiile aritmetice ce vor  mentionate
, ,

sunt modulo 2.

Fiecare cuvânt de cod de lungime n cont, ine m bit, i de control s, i k


bit, i de informat, ie (n = k + m). Bit, ii de control au ca scop detect, ia s, i
corect, ia posibilelor erori ap rute în urma transmiterii secvent, ei binare
printr-un canal cu perturbat, ii.

Codarea ciclic  se poate realiza atât în mod nesistematic (bit, ii de


control vor  intercalat, i cu cei de informat, ie), cât s, i în mod sistematic
(bit, ii de control vor  grupat, i înaintea bit, ilor de informat, ie).

6.2.2 Polinoamele asociate


Fiec rui cuvânt de cod v i se asociaz  un polinom v(x) ai c rui
coecient, i sunt reprezentat, i de bit, ii codului, ai . Gradul maxim al
polinomului este n − 1:

v(x) = a0 + a1 x + a2 x2 + · · · · · · an−1 xn−1 (6.1)

Mult, imea Cn a tuturor cuvintelor binare de dimensiune n cont, ine


N = 2n elemente, s, i reprezint  inelul claselor de resturi modulo p(x),
unde p(x) este un polinom de grad n cu coecient, i binari. Pentru
convenient,  , acest polinom se alege de forma:

p(x) = xn + 1 (6.2)

Mult, imea Vn a tuturor cuvintelor de cod ciclic (cuvintele cu sens


v) cont, ine 2k elemente, si reprezint  un ideal în
, inelul Cn . Cuvin-
tele de cod sunt generate pe baza unui element de grad m al inelului
Cn (m = n − k), reprezentat prin polinomul g(x), denumit polinom
generator:

g(x) = g0 + g1 x + g2 x2 + · · · · · · gm−1 xm−1 + xm (6.3)

Se observ  faptul c  polinomul g(x) este monic (coecientul elemen-


tului de grad maxim este 1). Acest polinom poate  generator pentru
106

codul ciclic dac  s, i numai dac  este divizor al polinomului p(x):

p(x)
rest =0
g(x)

Astfel, cuvintele cu sens sunt multiplii ai polinomului generator.


Prin urmare, daca v este un cuvânt de cod, polinomul asociat v(x)
este multiplu al polinomului generator g(x). Permutarea circular  cu
p pozitii a cuvântului este reprezentat  în clasa modulo p(x) prin poli-
,
p
nomul x v(x), care implicit este multiplu al lui g(x), deci permutarea
circular  reprezint  la rândul ei un cuvânt cu sens.

Celor k simboluri de informat, ie li se asociaz  polinomul:

i(x) = i0 + i1 x + i2 x2 + · · · · · · ik−1 xk−1 (6.4)

Polinomul simbolurilor de control se scrie sub forma:

c(x) = c0 + c1 x + c2 x2 + · · · · · · cm−1 xm−1 (6.5)

Raportul dintre polinomul p(x) s, i polinomul generator g(x) poart 


denumirea de polinom de control:

p(x)
h(x) = (6.6)
g(x)

Gradul polinomului de control este egal cu k:

h(x) = h0 + h1 x + · · · · · · hk xk (6.7)

Evident, produsul dintre polinomul generator s, i polinomul de con-


trol este nul în spat, iul modulo p(x).

6.2.3 Matricea generatoare si matricea de control ,

Polinomul v(x) asociat ec rui cuvânt de cod poate  exprimat ca


o combinat, ie liniar  a polinoamelor:

g(x), xg(x), x2 g(x), · · · · · · , xk−1 g(x)


107

Matricea generatoare G cont, ine pe ecare linie i coecient, ii poli-


nomului:
xi−1 g(x), i=1:k

ind format  din k linii s, i n coloane:


 
g0 g1 · · · gm−1 1 0 ··· 0 0
 0 g0 · · · gm−2 gm−1 1 ··· 0 0
G=
· · · · · · · · · · · ·
 (6.8)
··· ··· · · · · · · · · ·
0 0 ··· ··· ··· ··· · · · gm=1 1

Matricea de control este format  din m linii ce cont, in coecient, ii


polinomului de control dispus, i sub forma:
 
0 0 ··· 0 hk hk−1 · · · h1 0
0 0 · · · hk hk−1 · · · · · · h0 0 
H=
· · · · · ·
 (6.9)
··· ··· ··· ··· · · · · · · · · ·
hk hk−1 ··· ··· ··· ··· ··· 0 0

Cele dou  matrici sunt ortogonale:

HGT = 0

6.2.4 Codarea ciclic 


Codarea ciclic  nesistematic 
Polinomul asociat cuvântului de cod v(x) se obt, ine prin multipli-
carea polinomului de informat, ie i(x) cu polinomul generator g(x):
v(x) = i(x)g(x)
În cadrul cuvântului de cod, bit, ii de informat, ie vor  intercalat, i cu cei
de control. Relat, ia de codare se poate scrie s, i sub form  matriceal :

v = iG
unde v este un vector linie ce cont, ine bit, ii cuvântului de cod iar i este
vectorul linie format din coecientt, ii polinomului de informat, ie. Dato-
rit  ortogonalit t, ii dintre matricea generatoare s, i matricea de control,
relat, ia de codare devine echivalent  cu:

Hv T = 0
108

Codarea ciclic  sistematic 


Particularitatea cod rii sistematice const  în faptul c , în orice
cuvânt de cod v, bit, ii de control cj , j = 0 · · · m − 1 vor  grupat, i
înaintea bit, ilor de informat, ie ci , i = 0 · · · k − 1:

v = (c0 c1 · · · cm−1 i0 i1 · · · ik−1 )

Polinomul asociat cuvântului de cod, v(x) se poate obtine pe baza


,

polinoamelor simbolurilor de cod s, i de informat, ie, c(x) respectiv i(x),


cu ajutorul relat, iei:
v(x) = c(x) + xm i(x) (6.10)

T
, inând cont de faptul c  restul împ rt
, irii polinomului v(x) la po-
linomul de control g(x) este nul, polinomul asociat cuvintelor de cod
se poate calcula astfel:

xm i(x)
c(x) = rest (6.11)
g(x)

Polinomul cuvântului de cod sistematic poate  deci generat pe


baza polinomului simbolurilor de informat, ie i(x) s, i a polinomului ge-
nerator g(x) cu relat, ia:

xm i(x)
v(x) = rest + xm i(x) (6.12)
g(x)

În esent,   obt, inerea unui cod ciclic în form  sistematic  presupune


parcurgerea urm toarelor etape:

1. premultiplicarea polinomului mesajului prin xm ;

2. calculul polinomului simbolurilor de control c(x) (6.11);

3. formarea polinomului de cod - (6.12)

6.2.5 Decodarea codurilor ciclice


În cazul transmiterii unui cuvânt de cod ciclic v printr-un canal
binar afectat de perturbat, ii, secvent, a de bit, i recept, ionat  este afectat 
109

de contribut, ia erorii ap rute la propagarea prin canal. Acest lucru


poate  exprimat sub form  polinomial  astfel:

v 0 (x) = v(x) + (x)


unde (x) este un polinom de grad maxim n−1 având drept coecienti ,
0
bit, ii vectorului eroare, iar v (x) reprezint  polinomul asociat cuvântu-
lui recept, ionat. Operat, ia de decodare const  în estimarea polinomului
asociat erorii pe baza secvent, ei de cod recept, ionate s, i refacerea cuvân-
tului de cod init, ial prin sc derea contribut, iei estimate a erorii.

Atât în cazul codurilor nesistematice, cât s, i în cazul celor siste-


matice, decodarea se poate realiza pe baz  de sindrom. Forma po-
linomial  a sindromului, s(x), se obt, ine calculând restul împ rt, irii
polinomului cuvântului recept, ionat, v 0 (x) la polinomul generator g(x):
v 0 (x)
s(x) = rest
g(x)

Evident, gradul maxim al polinomului s(x) este m−1. T


, inând cont

de faptul c  restul împ rt, irii polinomului cuvântului de cod transmis


la polinomul generator este nul, relat, ia anterioar  poate  scris  sub
forma:
v 0 (x) + (x) (x)
s(x) = rest = rest (6.13)
g(x) g(x)
Prin urmare, dup  calculul sindromului, polinomul asociat ero-
rii se poate estima pe baza tabelului claselor de resturi modulo g(x).
Contribut, ia estimat  a erorii se va extrage apoi din polinomul simbo-
lurilor recept, ionate pentru a decoda cuvântul de la intrarea canalului
(lucrând cu coecient, i binari, extract, ia este echivalent  cu operat, ia de
adunare):
v (x) = v(x) +  (x)
unde  (x) reprezint  polinomul asociat erorii estimate, iar v (x) poli-
nomul asociat secvent, ei de simboluri estimate în urma procesului de
decodare -ideal v (x) = v(x). Sindromul poate  estimat direct sub
forma matriceal , folosind matricea de control H:
sT = Hv 0T (6.14)

unde v0 este un vector linie ce cont, ine bit, ii recept, ionat, i iar s este un
vector linie ce include coecient, ii sindromului.
110

6.3 Exemplicarea operat, iilor de codare s, i


decodare ciclic 
6.3.1 Codare nesistematic 
Exemplu 6.1. Fie codul ciclic C(6, 3) − n = 6, k = 3. S  se identi-
ce un polinom generator pentru acest cod s, i s  se realizeze codarea
nesistematic  a mesajului i = (1 0 1 ).
Polinomul generator g(x) are gradul m=3 (m=n-k) si este divizor
,

la polinomului p(x) = x6 + 1. Descompunerea polinomului p(x) în


câmpul GF (2) care contine cel putin un factor de grad 3 este:
, ,

p(x) = (1 + x3 )(1 + x3 )

prin urmare singura form  posibil  a polinomului generator este:

g(x) = 1 + x3

Polinomul asociat mesajului este:

i(x) = 1 + x2

Codarea nesistematic  se realizeaz  prin multiplicarea polinoamelor


g(x) s, i i(x):

v(x) = (1 + x3 )(1 + x2 ) = 1 + x2 + x3 + x5

deci cuvântul de cod este v = (1 0 1 1 0 1).

Exemplu 6.2. Fie un cod ciclic binar ce cont, ine k = 4 bit, i de


informat, ie per cuvânt de cod. S  se determine lungimea minim  n a
cuvintelor astfel încât codul s  e corector de o eroare. S  se identice
un polinom generator al codului s, i s  se codeze mesajul i = (1 0 1 0)
folosind matricea generatoare.

Pentru a putea corecta cel put, in o eroare, între num rul de bit, i


de control m si lungimea total  a cuvintelor de cod n trebuie s  existe
,

egalitatea:

n = 2m − 1
111

Exprimând lungimea total  a cuvintelor în funct, ie de parametrii


m s, i k (n = m + k , k = 4 în cazul de fat,  ) se obt, ine urm toarea
ecuat, ie:
2m = 5 + m
deci num rul de bit, i de control este m = 3, iar lungimea total  a
cuvintelor n = 7. Codul ciclic este deci de tipul C(7, 4). Polinomul
generator g(x) are gradul m = 3, si trebuie s  e divizor al polinomului
,

p(x) = 1 + x6 . Polinomul p(x) poate  descompus în câmpul GF (2)


astfel încât s  contin  factori de grad 3 astfel:
,

p(x) = (1 + x)(1 + x + x3 )(1 + x2 + x3 )

Exist  deci dou  forme posibile ale polinomului generator. Vom alege
varianta:
g(x) = 1 + x + x3
În acest caz, matricea generatoare este:
 
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G=
0

0 1 1 0 1 0
0 0 0 1 1 0 1

Cuvântul de cod v asociat mesajului i se obt, ine cu folosind relat, ia:

v = iG
 
1 1 0 1 0 0 0
0 1 1 0 1 0 0
v = (1001) 
0

0 1 1 0 1 0
0 0 0 1 1 0 1

Cuvântul de cod astfel rezultat este v = (1 1 1 0 0 1 0), bit, ii de


informat, ie ind intercalat, i cu bit, ii de control.

6.3.2 Codare sistematic 


Exemplu 6.3. Fie codul ciclic C(9, 6). S  se identice polinomul ge-
nerator al acestui cod s, i s  se realizeze codarea sistematic  a mesajului
i = (0 1 0 0 1 1).
112

Mesajele cont, in k =6 bit, i s, i sunt codate pe n=9 bit, i. Gradul


polinomului generator este m = n − k, m = 3. În plus, polinomul
deci
9
generator trebuie s  e divizor al polinomului p(x) = 1+x . Polinomul
p(x) trebuie descompus astfel încât s  contin  cel putin un factor de
, ,

grad 3:
p(x) = (1 + x3 )(1 + x3 + x6 )
Prin urmare exist  o singur  form  posibil  a polinomului generator:

g(x) = 1 + x3

Mesajul i are asociat polinomul:

i(x) = x + x4 + x5

Pentru a realiza codarea sistematic  a mesajului, trebuie determinat


3
restul împ rt, irii polinomului x i(x) la polinomul generator:

x4 + x7 + x8
c(x) = rest = x2
1 + x3
Cuvântul de cod care urmeaz  s  e transmis este:

v(x) = c(x) + x3 i(x) = x2 + x4 + x7 + x8

Forma vectorial  a cuvântului de cod este v = (0 0 1 0 1 0 0 1 1).


Se observ  faptul c  bit, ii de informat, ie din vectorul i sunt grupati la
,

sfârs, itul cuvântului, dup  bit, ii de control.

6.3.3 Identicarea erorilor. Decodarea


Exemplu 6.4. În Exemplul 6.2, am evidentiat codurile ciclice C(7, 4)
,

corectoare de o eroare. Cuvântul de cod obt, inut în cadrul acestei


aplicat, ii este v = (1 1 1 0 0 1 0).
Presupunem c  aceast  secvent,   este transmis  printr-un ca-
nal cu perturbat, ii, cuvântul recept, ionat la ies, irea canalului ind
0
v = (1 1 1 0 0 1 1). S
, tiind polinomul generator g(x) al codului,
s  se identice pe baza secvent, ei recept, ionate eroarea ap rut  în ca-
drul transmisiei. S  se decodeze cuvântul recept, ionat s, i s  se verice
dac  eroarea a fost corect identicat .
113

Polinomul generator al codului ciclic C(7, 4) a fost identicat sub


forma:
g(x) = 1 + x + x3

Polinomul asociat cuvântului recept, ionat este:

v 0 (x) = 1 + x + x2 + x5 + x6

Pentru identicarea erorii, polinomul asociat sindromului repre-


zint  restul împ rt, irii polinomului secvent, ei recept, ionate la polinomul
generator:

1 + x + x2 + x5 + x6
s(x) = rest = 1 + x2
1 + x + x3
Având în vedere c  acest tip de cod poate  aplicat pentru corect, ia
erorilor în cazul în care cel mult un bit al cuvântului a fost eronat
recept, ionat, polinomul asociat erorii va  de forma:

l (x) = xl , l =0:n−1

S-a ar tat faptul c  restul împ rt, irii polinomului eroare la poli-


nomul generator este egal cu sindromul. Se caut  deci valoarea ex-
ponentului l pentru care se va îndeplini aceast  condit, ie. Se obt, ine
urm toarea egalitate:

x6
1 + x2 = rest
1 + x + x3
Prin urmare, forma estimat  a polinomului eroare este:

 (x) = x6
ceea ce indic  faptul c  al 7-lea bit al cuvântului a fost eronat
recept, ionat.

Polinomul asociat cuvântului transmis se estimeaz  ca suma dintre


polinomul cuvântului recept, ionat s, i polinomul eroare, obt, inându-se
sub forma:
v (x) = 1 + x + x2 + x5
deci secvent, a decodat  este v = (1 1 1 0 0 1 0). Se observ  c  aceast 
secvent,   este identic  cu cea transmis , operat, ia de decodare generând
rezultatul anticipat.
114

6.4 Desf s, urarea lucr rii. Implementarea


cod rii s, i decod rii ciclice în Matlab
Operat, iile de codare s, i decodare se implementeaza folosind
funct, iile specice codurilor ciclie din Matlab (Anexa A). Exista po-
sibilitatea de a coda simultan mai multe mesaje, parametrii ce trebuie
specicat, i apriori sunt: lungimea mesajelor k, structura lor, s, i lungi-
mea cuvintelor de cod n.

Aplicatie 6.1. S  se genereze 100 de mesaje binare de lungime k = 4,


,

ce vor  stocate într-o matrice de dimensiuni (100, 4). Se dores, te


transmiterea mesajelor printr-un canal afectat de perturbat, ii. Pentru
aceasta, ecare mesaj va  codat ciclic pe n = 7 bit, i, realizându-se
astfel o codare de tip C(7, 4). Pentru a simula perturbat, iile aferente
canalului, se va modica câte un bit din ecare cuvânt de cod.

a) S  se decodeze mesajele rezultate la ies, irea canalului.

b) S  se calculeze cât ar trebui s  e rata teoretic  de eroare re-


zultat  în urma decod rii (considerând câte erori poate corecta
tipul de cod folosit) s, i s  se verice în Matlab rezultatul.

% definirea parametrilor
N = 100;
n = 7;
k = 4;

% generarea mesajului si codarea lui


msg = randi([0 1],[N k]);
code = encode(msg,n,k,'cyclic/binary');

% simularea transmisiei prin canal


err = randerr(100,n,1);
noisycode = rem(code+err,2);

% decodarea si calculul ratei de eroare


rmsg = decode(noisycode, n, k, 'cyclic');
[num, ratio] = biterr (rmsg, msg);

disp (['Number of different bits is ',num2str(num)]);


disp (['The bit error rate is ',num2str(ratio)]);
115

Aplicatie 6.2. S  se genereze un mesaj binar de lungime k = 4 biti si


, , ,

s  se realizeze codarea ciclic  a acestuia pe n=7 bit, i. S  se simuleze


transmiterea cuvântului de cod printr-un canal afectat de perturbat, ii,
prin modicarea unui bit al acestuia. Vectorii asociat, i mesajului s, i
erorii vor  generat, i aleatoriu, la fel ca în cadrul aplicat, iei precedente.

a) S  se genereze tabelul de decodare asociat codului C(7, 4) s, i pe


baza lui s  se identice eroarea introdus .

b) S  se extrag  eroarea din cuvântul de cod recept, ionat la ies, irea


canalului.

c) S  se compare rata de eroare dintre cuvântul de cod astfel rezul-


tat s, i cuvântul de cod transmis pentru a verica dac  eroarea a
fost corect identicat .

Pentru crearea tabelului de decodare se vor determina polinomul


generator s, i matricea de control a codului ciclic folosit. Se va calcula
apoi sindromul secvent, ei recept, ionate, sub form  vectorial , folosind
6.14. As, a cum s-a ment, ionat, eroarea asociat  sindromului se a 
pe linia r+1 a tabelului de decodare, unde r reprezint  valoarea
zecimal  a sindromului. Pentru conversia acestuia din form  binar  în
form  zecimal  se utilizeaz  instruct, iunea bi2de, ce trebuie s  aib  ca
argument de intrare s, i sintaxa left-msb, deoarece cel mai semnicativ
bit al sindromului se a  pe prima pozit, ie a vectorului asociat.

% definirea parametrilor
n = 7;
k = 4;

% generarea mesajului si codarea acestuia


msg = randi([0 1],[1 k]);
code = encode(msg,n,k,'cyclic/binary');

% simularea transmiterii mesajului prin canal


err = randerr(1,n,1);
noisycode = rem(code+err,2);

% polinomul generator, matricea de control si tabelul de


decodare
pol = cyclpoly(n,k);
H = cyclgen(n,pol);
DT = syndtable(H);
116

% sindromul
s = rem(H*noisycode',2);
s = s';

% cautarea vectorului corector in tabelul de decodare


s_d = bi2de(s,'left-msb');
cvect = DT(s_d+1,:);

% corectia erorilor si verificarea ratei dedecodare


corcode = rem(noisycode+cvect,2);
[num, ratio] = biterr (corcode, code);

disp (['The bit error rate is ',num2str(ratio)]);

6.5 Reducerea ratei de eroare folosind un


cod Hamming ciclic
Fie modelul Simulink din Fig. 6.1 ce include un canal AWGN
(Additive white Gaussian noise) cu modulat, ie BPSK(Binary Phase
Shift Keying) pentru simularea unor model cvasi real de canal de
comunicat, ie [29]. Acest model se poate construi bloc cu bloc in
Simulink sau se poate apela din Command Window prin sintaxa
doc_hamming.
Rularea modelului pentru divers, i parametrii ai generatorului binar
(Frames based output selectat s, i Samples per frame=21) sau ai zgo-
motului (AWGN block, Signal to noise ratio Es/N o = 7dB .) permite
calculul ratei de eroare s, i determinarea num rului total de erori [17].

Fig. 6.1: Model de canal de comunicatii descris de zgomot alb


,

aditiv si modulatie BPSK.


, ,

Sc derea ratei de eroare pe acest canal, pentru un nivel al zgo-


motului dat impune o codare de canal, algoritmul ales ind cel de
codare ciclica binar . Se includ astfel în model cele dou  blocuri co-
respunzatoare codorului s, i decodorului ciclic ce implementeaz  un cod
117

C(31,21), lungimea cuvântului de cod ind 31 si numarul simboluri de


informatie 21.

Fig. 6.2: Reducerea ratei de eroare a canalului prin utilizarea


unui cod ciclic C(31,21).
La ies, irea decodorului este as, at  rata de eroare, num rul de erori
detectate s, i numarul total de simboluri comparate. Pentru parame-
5
trii setat, i în cele dou  modele de canal au fost comparate 1.347 · 10
−4
simboluri, rata de eroare a scazut dup  codare de la 0.7427 · 10 la
−5
8.169 · 10 .

6.6 Control cu redundant  ciclic  - CRC ,

Controlul cu redundant,   ciclic  (cyclic redundancy check - CRC)


reprezint  un algoritm de detect, ie s, i corect, ie a erorilor des utilizat în
aplicat, ii precum sistemele de comunicat, ii digitale, ret, elele integrate
sau dispozitivele de stocare. Secvent, ele de date folosite sunt împ rt, ite
în blocuri, iar ec rui bloc i se va ad uga înaintea transmisiei o suc-
cesiune redundant  de bit, i (care nu adaug  informat, ie suplimentar ,
ind determinat  pe baza bit, ilor de date), denumit  secvent, a de con-
trol. Aceast  grupare de bit, i este determinat  folosind codarea ciclic 
sistematic , ind alipit  blocului de date. La recept, ie, se veric  dac 
secvent, a de control corespunde blocului de date asociat; în caz de
nepotrivire se poate cere retransmisia datelor.

Cea mai cunoscut  form  de implementare a controlului cu


redundant,   ciclic  const  în asocierea unui bit de paritate ec rei
secvent, e de date transmise, caz în care polinomul generator al codului
ciclic are gradul egal cu 1.

Performant, ele algoritmilor de control sunt puternic inuent, ate de


alegerea polinomului generator. Ideal, polinomul generator este selec-
tat astfel încât s  maximizeze capacitatea de detect, ie a erorilor s, i s 
minimizeze probabilitatea de coliziune (generarea aceleas, i secvent, e de
control pentru dou  structuri de date distincte).
118

Capacitatea de detect, ie a erorilor a sistemelor CRC este direct


legat  de o serie de propriet t, i ale polinoamelor generatoare folosite.
În primul rând, dac  termenul de grad zero al acestor polinoame este
egal cu 1 (coecientul termenului x0 este nenul), atunci algoritmul
CRC va detecta orice eroare singular  ap rut  în cadrul oric rui mesaj
de lungime arbitrar  k. În plus, dac  lungimea blocului de date este
egal  cu cea a blocului de control (m = k), atunci sistemul va detecta
orice combinat, ie posibil  de erori ce afecteaz  secvent, a transmis .

Dac  polinomul generator este ireductibil în câmpul GF(2), atunci


sistemul CRC are capabilitatea de a detecta erorile ce afecteaz  un
num r impar de bit, i. O clas  particular  a polinoamelor ireductibile
este reprezentat  de polinoamele primitive. Un polinom ireductibil
p(x) de grad m este primitiv dac  cel mai mic ordin e pentru care se
îndeplines, te relat, ia:
xe + 1
rest =0
p(x)
este egal cu:
e = 2m − 1
În cazul în care polinomul generator al sistemului CRC este primitiv,
va  posibil  detect, ia tuturor erorilor ce afecteaz  maxim doi bit, i ai
m
secvent, elor de date de lungime mai mic  sau egal  cu 2 − 1 (m
reprezentând num rul de bit, i ai blocului de control). În plus, dac 
polinomul generator este de forma:

g(x) = (1 + x)p(x)

unde p(x) este un polinom primitiv de grad m − 1, sistemul va putea


detecta atât erorile singulare dintr-un bloc de date de lungime arbi-
trar , cât s, i erorile duble s, i care afecteaz  un num r impar de bit, i
m−1
dintr-o secvent,   de lungime maxim  2 − 1.
Metodele de control cu redundant,   ciclic  sunt în prezent utilizate
în diverse standarde tehnice consacrate. Notat, ia uzual  a acestor algo-
ritmi este de forma CRC −m−standard, incluzând num rul m de biti ,

ai structurii de control s, i standardul în care sunt folosit, i. Lungimile


blocurilor de control sunt în general puteri ale lui 2.
Fiecare cod ciclic folosit într-un astfel de standard are un polinom
generator specic, ales astfel încât s  satisfac  anumite cerint, e. Prin-
tre cei mai utilizat, i algoritmi se reg sesc: algoritmul CRC −8−CCIT
119

CRC − 8 − W CDM A (folosit în retelele


(folosit în serviciile ISDN), ,

mobile), CRC − 16 − IBM (utilizat în cadrul porturilor USB),


CRC − 32 − IEEE (aplicat în tehnologiile Ethernet si în standar-
,

dele de codare MPEG-2 s, i PNG). Majoritatea polinoamelor genera-


toare ale algoritmilor CRC utilizat, i în standarde tehnice sunt primitive
(CRC − 8 − CCIT , CRC − 16 − IBM s, i CRC − 32 − IEEE ), sau
reprezint  produsul dintre un polinom primitiv s, i secvent, a 1+x -
CRC − 8 − W CDM A.

6.6.1 Implementarea CRC în Simulink


Un exemplu de implementare a algoritmului CRC în Simulink
poate  deschis din linia de comad  a programului Matlab folosind
instruct, iunea doc_crcgen. Modelul apelat (prezentat în Fig. 6.3)
implementeaza codarea ciclic  de tipul C(9, 6) cu polinomul generator
g(x) = x3 + x + 1.

Fig. 6.3: Implementarea CRC in Simulink.

Algoritmul de vericare a redundant, ei ciclice este implementat


în dou  moduri: folosind blocul General CRC generator s, i folo-
sind schema digital  de calcul a secvent, ei de control. Implementa-
rea digital  cont, ine registre de deplasare s, i port, i XOR - sau exclusiv,
distribut, ia lor ind adaptat  la forma polinomului generator: num rul
registrelor de deplasare este egal cu gradul polinomului (m = 3) iar
port, ile XOR sunt plasate în urma registrelor ce corespund termenilor
cu coecient, i nenuli (ultimele dou  registre). Blocul de implementare
120

a algoritmului CRC este succedat de un selector, care trimite spre blo-


cul de as, are doar ultimii trei bit, i ai cuvântului de cod (secvent, a de
control). Ambele c i de codare implementeaz  acelas, i algoritm, gene-
rând aceeas, i secvent,   de control pentru mesajul de la intrare. Bit, ii
mesajului de la intrare pot  modicat, i în câmpul signal din panoul
de propriet t, i ai blocului message bits.

6.7 Exercit, ii propuse


1. Fie un cod ciclic ce cont, ine k = 6 biti de informatie, având
, ,

polinomul generator de forma g(x) = 1 + x + x2 + x3 + x4 . S  se


identice lungimea total  a cuvintelor de cod. Câte erori poate
detecta s, i corecta acest tip de cod? S  se realizeze atât codarea
nesistematic  cât s, i cea sistematic  a mesajului i = (110100).

2. Modicat, i num rul maxim de bit, i din exercitiul anterior astfel


încât decodarea s  se poat  implementa cu succes. S  se realizeze
operat, ia de decodare a secvent, ei nou formate, s, i s  se compare
structura mesajului obt, inut cu cea a mesajului codat la ex.1.

3. Fie codul ciclic Hamming (15, 11) generat de polinomul


4
g(x) = 1 + x + x . Determinat, i:

a) Polinomul de control h(x) al acestui cod.

b) Matricea generatoare s, i matricea de control a acestui cod,


în form  sistematic .

4. Demonstrat, i c  polinomulg(x) = 1 + x2 + x4 + x6 + x7 + x1
este polinom generator pentru un cod ciclic (21, 11). Calculati ,
5 17
sindromul pentru polinomul receptionat r(x) = 1 + x + x .
,
Anexa A
Funct, ii Matlab folosite

A.1 Instruct, iuni specice cod rii


Programul Matlab cont, ine în pachetul de instruct, iuni Communi-
cations o serie de funct, ii predenite ce implementeaza toate operat, iile
aferente lant, ului de codare s, i decodare.

1. huffmandict(sim,p) genereaz  dict, ionarul pentru codarea


Human binar  a simbolurilor stocate în vectorul sim, ale c ror
probabilit t, i de aparit, ie sunt cont, inute de vectorul p. Evident,
dimensiunile celor doi vectori trebuie s  e egale. Sintaxa retur-
neaz  o celul  cu dou  coloane: prima coloan  red  simbolurile
din vectorul sym, iar în a doua coloan  sunt stocate secvent, ele
de cod binare asociate ec rui simbol. În plus, sintaxa poate
returna s, i lungimea medie a cuvintelor de cod;

2. huffmanenco(sgn,dict) realizeaz  codarea Human a sem-


nalului de intrare sgn, folosind dictionarul dict generat cu aju-
,

torul sintaxei huffmandict. Fiecare simbol din secventa de ,

intrare trebuie s  se reg seasc  în dict, ionarul codului. Uzual,


semnalul sgn este stocat sub forma unui vector.

3. huffmandeco(code,dict) realizeaz  decodarea Human a


secvent, ei stocate în vectorul code, folosind dict, ionarul dict
. Secvent, a de cod s, i dict, ionarul sunt generate cu sintaxele
huffmanenco, respectiv huffmandict. Dac  semnalul codat

121
122

este numeric, secvent, a decodat  va  returnat  sub forma unui


vector.

4. encode(msg,n,k,'type',poly) realizeaz  codarea mesaje-


lor prezente în structura msg. Argumentul 'type' ia valoarea
hamming în cazul cod rii grup, respectiv cyclic în cazul co-
d rii ciclice. Mesajele pot  stocate sub forma unui vector line
sau coloan  (în acest caz ecare bloc de k bit, i consecutivi va
 codat individual) sau sub forma unei matrice cu k coloane
(în acest caz ecare linie va  codat  separat). Sintaxa poate
primi ca argument de intrare s, i coecient, ii polinomului primi-
tiv asociat cod rii Hamming, respectiv coecient, ii polinomului
generator asociat cod rii ciclice. Coecient, ii polinoamelor sunt
stocat, i sub form  vectorial . Codurile generate vor  stocate
sub aceeas, i form  ca mesajele. Forma sub care vor  stocate
codurile generate este identic  cu forma în care au fost stocate
mesajele (vector linie, vector coloan  sau matrice cu n coloane)
Parametrii n s, i k indic  lungimea total  a cuvintelor de cod,
respectiv num rul de bit, i de informat, ie.

5. decode(code,n,k,'type',poly) decodeaz  mesajele pre-


zente în structura code. Parametrii n, k s, i t, ypet, rebuie s  aib 
aceleas, i valori cu cele folosite în cadrul operat, iei de codare. Sin-
taxa mai poate primi ca argumente de intrare coecient, ii po-
linomului primitiv, respectiv coecient, ii polinomului generator
(funct, ie de tipul codului), aces, tia ind stocat, i în vectorul poly.
În cazul codurilor ciclice se poate specica s, i tabelul de decodare,
stocat sub form  matriceal .

6. cyclpoly(n,k,opt) returneaz  un vector linie ce cont, ine


coecient, ii g ai unui polinom generator al codului ciclic de tip
C(n, k). Parametrul opt indic  criteriul de select, ie în cazul în
care exist  mai multe polinoame ce îndeplinesc condit, ia de poli-
nom generator al codului

7. cyclgen(n,g,opt) returneaz  matricea de control H s, i matri-


cea generatoare G a codului. Parametrii de intrare sunt lun-
gimea n a cuvintelor de cod, respectiv vectorul g alc tuit din
coecient, ii polinomului generator. Parametrul opt, ional opt in-
dic  tipul cod rii, el având valoarea system pentru codarea sis-
123

tematic  (valoarea implicit ), respectiv nonsys pentru codarea


nesistematic .

8. syndtable(H) genereaz  tabelul de decodare td pentru un cod


corector de erori C(n, k). Instruct, iunea primes, te ca argument de
intrare matricea de control H. Tabelul de decodare este stocat
sub forma unei matrice cu 2n−k linii s, i n coloane. Fiecare linie r
cont, ine coecient, ii vectorului eroare estimat pentru cuvântul de
cod al c rui sindrom are valoarea zecimal  r−1 (valoarea zeci-
mal  a sindromului se obt, ine prin conversia coecient, ilor binari
ai polinomului asociat)

A.2 Sintaxe adit, ionale


1. randi([imin imax],[m n]) returneaz  o matrice de dimen-
siuni m x n ce contine valori întregi distribuite uniform în inter-
,

valul [imin imax];

2. randerr(m,n,e1) genereaz  o matrice binar  cu m linii s, i n


coloane. Fiecare linie a matricei va cont, ine un num r de e1 ele-
mente egale cu 1, aleatoriu distribuite. Dac  în loc de valoarea
e1 sintaxa primeste ca argument de intrare matricea [e1 e2 ; p1 p2 ],
,

atunci liniile matricei vor contine e1 sau e2 elemente nenule,


,

distribut, ia celor dou  situat, ii ind indicat  de probabilit t, ile


p1 s, i p2 (p1 + p2 = 1).

3. rem(a,b) returneaz  restul împ rt, irii elementului a la elementul


b

4. biterr(A,B) compar  matricele binare A s, i B, returnând atât


num rul de pozit, ii în care elementele celor dou  matrice difer ,
cât s, i rata de eroare, calculat  ca raportul între num rul de bit, i
diferit, i s, i num rul total de bit, i ai unei matrice (dimensiunile
celor dou  matrice trebuie s  e egale).