Sunteți pe pagina 1din 6

6.

CODURI CICLICE

6.1. DESCRIEREA CODURILOR CICLICE


Fie un vector n-dimensional v = (𝑣0 , 𝑣1 , ⋯ , 𝑣𝑛−1 ). În figura de mai jos, se arată schematic un
registru de deplasare recirculant cu n etaje în care sunt înscrise componentele lui v.
Recirculant înseamnă că ieşirea etajului n este legată la intrarea primului etaj, astfel încât
conţinutul registrului poate fi deplasat, la dreapta sau la stânga, cu ajutorul semnalului de tact.

𝑣0 𝑣1 𝑣2 ⋯ 𝑣𝑛−1

Dacă se deplasează ciclic la dreapta cu un loc componentele vectorului v, se obţine un alt


vector 𝐯 (1) = (𝑣𝑛−1 , 𝑣0 , 𝑣1 , ⋯ , 𝑣𝑛−2 ) care se numeşte o deplasare ciclică a lui v cu o poziţie la
dreapta. Dacă deplasăm v cu două poziţii la dreapta, obţinem
(2)
𝐯 = (𝑣𝑛−2 , 𝑣𝑛−1 , 𝑣0 , ⋯ , 𝑣𝑛−3 ). Acum, se vede uşor că, dacă deplasăm v cu i poziţii la
dreapta, obţinem

𝐯 (𝑖) = (𝑣𝑛−𝑖 , 𝑣𝑛−𝑖+1 , ⋯ , 𝑣𝑛−1 , 𝑣0 , 𝑣1 , ⋯ , 𝑣𝑛−𝑖−1 ).

Este clar că deplasarea ciclică a lui v cu i locuri la dreapta are acelaşi efect cu deplasarea
ciclică a lui v cu 𝑛 − 𝑖 locuri la stânga.

DEFINIŢIA 6.1: Un cod bloc liniar (n, k) notat cu C se numeşte cod ciclic dacă fiecare
deplasare ciclică a oricărui cuvânt de cod din C este tot un cuvânt de cod din C.

Este convenabil să considerăm componentele unui cuvânt de cod 𝐯 = (𝑣0 , 𝑣1 ⋯ , 𝑣𝑛−1 ) drept
coeficienţii unui polinom:

𝑣(𝑋) = 𝑣0 + 𝑣1 𝑋 + 𝑣2 𝑋 2 + ⋯ + 𝑣𝑛−1 𝑋 𝑛−1 .

Fiecare cuvânt de cod corespunde, deci, unui polinom de grad (𝑛 − 1) sau mai mic: dacă
𝑣𝑛−1 ≠ 0, gradul lui v(X) este (𝑛 − 1), iar dacă 𝑣𝑛−1 = 0, gradul lui v(X) este mai mic decât
(𝑛 − 1). Acest v(X) se numeşte polinomul de cod al lui v.

Polinomul de cod corespunzător lui 𝐯 (1) este

𝑣 (1) (𝑋) = 𝑣𝑛−1 + 𝑣0 𝑋 + 𝑣1 𝑋 2 + ⋯ + 𝑣𝑛−2 𝑋 𝑛−1 .

Dacă înmulţim v(X) cu X, obţinem:

𝑋𝑣(𝑋) = 𝑣0 𝑋 + 𝑣1 𝑋 2 + 𝑣2 𝑋 3 + ⋯ + 𝑣𝑛−1 𝑋 𝑛 .
De unde

𝑣 (1) (𝑋) + 𝑋𝑣(𝑋)


= 𝑣𝑛−1 + (𝑣0 + 𝑣0 )𝑋 + (𝑣1 + 𝑣1 )𝑋 2 + ⋯ + (𝑣𝑛−2 + 𝑣𝑛−2 )𝑋 𝑛−1 + 𝑣𝑛−1 𝑋 𝑛 .

Dar coeficienţii fac parte din corpul Galois de ordinul 2, CG(2), unde 0 + 0 = 0 şi 1 + 1 = 0.
De aceea, egalitatea de mai sus se scrie

𝑋𝑣(𝑋) = 𝑣𝑛−1 (1 + 𝑋 𝑛 ) + 𝑣 (1) (𝑋).

Vedem că 𝑣 (1) (𝑋) se obţine ca rest împărţind 𝑋𝑣(𝑋) la (1 + 𝑋 𝑛 ).

Polinomul de cod corespunzător lui 𝐯 (2) este

𝑣 (2) (𝑋) = 𝑣𝑛−2 + 𝑣𝑛−1 𝑋 + 𝑣0 𝑋 2 + ⋯ + 𝑣𝑛−3 𝑋 𝑛−1 .

Dacă înmulţim v(X) cu 𝑋 2 , obţinem:

𝑋 2 𝑣(𝑋) = 𝑣0 𝑋 2 + 𝑣1 𝑋 3 + 𝑣2 𝑋 4 + ⋯ + 𝑣𝑛−1 𝑋 𝑛+1 .

Procedând ca mai înainte, obţinem direct

𝑋 2 𝑣(𝑋) = (𝑣𝑛−2 + 𝑣𝑛−1 𝑋)(1 + 𝑋 𝑛 ) + 𝑣 (2) (𝑋).

Asemănător cu cazul tratat anterior, vedem că putem obţine 𝑣 (2) (𝑋) ca rest al împărţirii lui
𝑋 2 𝑣(𝑋) la (1 + 𝑋 𝑛 ).

Să trecem acum la cazul general: având un polinom de cod v(X), vrem să obţinem polinomul
de cod rotit ciclic cu i poziţii la dreapta, 𝑣 (𝑖) (𝑋). Acesta se scrie:

𝑣 (𝑖) (𝑋) = 𝑣𝑛−𝑖 + 𝑣𝑛−𝑖+1 𝑋 + ⋯ + 𝑣𝑛−1 𝑋 𝑖−1 + 𝑣0 𝑋 𝑖 + 𝑣1 𝑋 𝑖+1 + ⋯ + 𝑣𝑛−𝑖−1 𝑋 𝑛−1 .

Înmulţind v(X) cu 𝑋 𝑖 , obţinem:

𝑋 𝑖 𝑣(𝑋) = 𝑣0 𝑋 𝑖 + 𝑣1 𝑋 𝑖+1 + ⋯ + 𝑣𝑛−𝑖−1 𝑋 𝑛−1 + ⋯ + 𝑣𝑛−1 𝑋 𝑛+𝑖−1 .

Procedând exact ca mai înainte, obţinem:

𝑋 𝑖 𝑣(𝑋) = 𝑞𝑖 (𝑋)(1 + 𝑋 𝑛 ) + 𝑣 (𝑖) (𝑋)

unde am notat

𝑞𝑖 (𝑋) = 𝑣𝑛−𝑖 + 𝑣𝑛−𝑖+1 𝑋 + ⋯ + 𝑣𝑛−1 𝑋 𝑖−1 .

Este clar că polinomul de cod 𝑣 (𝑖) (𝑋) este restul împărţirii polinomului 𝑋 𝑖 𝑣(𝑋) la (𝑋 𝑛 + 1).

Să studiem acum consecinţele structurii ciclice a codului bloc.

TEOREMA 6.1: Polinomul de cod diferit de zero de grad minim dintr-un cod ciclic C este
unic.
DEMONSTRAŢIE

Vom demonstra acest lucru prin reducere la absurd.

Fie 𝑔(𝑋) = 𝑔0 + 𝑔1 𝑋 + ⋯ + 𝑔𝑟−1 𝑋 𝑟−1 + 𝑋 𝑟 un polinom de cod diferit de zero de grad


minim din C. În ipoteza că g(X) nu este unic, mai există un polinom de cod de grad r, să
spunem 𝑔′ (𝑋) = 𝑔0′ + 𝑔1′ 𝑋 + ⋯ + 𝑔𝑟−1

𝑋 𝑟−1 + 𝑋 𝑟 . Notăm cu  adunarea modulo 2. Întrucât
C este un cod bloc liniar, suma 𝑔(𝑋) + 𝑔′ (𝑋) = (𝑔0 𝑔0′ )𝑋 + (𝑔1 𝑔1′)𝑋 2 + ⋯ +
(𝑔𝑟−1 𝑔𝑟−1
′ )𝑋 𝑟−1
este tot un polinom de cod care are însă gradul mai mic decât r. Dacă
′ (𝑋)
𝑔(𝑋) + 𝑔 ≠ 0, el este un polinom de cod diferit de zero cu grad mai mic decât gradul
minim r. Dar acest lucru este imposibil. Prin urmare, 𝑔(𝑋) + 𝑔′ (𝑋) = 0, de unde rezultă că
𝑔′ (𝑋) = 𝑔(𝑋). Am demonstrat astfel că g(X) este unic.

TEOREMA 6.2: Fie 𝑔(𝑋) = 𝑔0 + 𝑔1 𝑋 + ⋯ + 𝑔𝑟−1 𝑋 𝑟−1 + 𝑋 𝑟 polinomul de cod diferit de


zero de grad minim dintr-un cod ciclic C. Termenul constant 𝑔0 trebuie să fie egal cu 1.

DEMONSTRAŢIE

În ipoteza că 𝑔0 =0, avem:

𝑔(𝑋) = 𝑔1 𝑋 + 𝑔2 𝑍 2 + ⋯ + 𝑔𝑟−1 𝑋 𝑟−1 + 𝑋 𝑟 = 𝑋(𝑔1 + 𝑔2 𝑋 + ⋯ + 𝑔𝑟−1 𝑋 𝑟−2 + 𝑋 𝑟−1 ).

Dacă deplasăm ciclic 𝑔(𝑋) cu un loc la stânga sau cu (𝑛 − 1) locuri la dreapta, obţinem un
polinom de cod diferit de zero, 𝑔1 + 𝑔2 𝑋 + ⋯ + 𝑔𝑟−1 𝑋 𝑟−2 + 𝑋 𝑟−1 , al cărui grad este mai mic
decât r. Aceasta, însă, contrazice afirmaţia din teoremă că 𝑔(𝑋) este polinomul de cod diferit
de zero de grad minim, încât trebuie să conchidem că 𝑔0 ≠ 0.

Din Teoremele 6.1 şi 6.2, rezultă că polinomul de cod diferit de zero de grad minim dintr-un
cod ciclic (n, k) este de forma următoare:

𝑔(𝑋) = 1 + 𝑔1 𝑋 + 𝑔2 𝑋 2 + ⋯ + 𝑔𝑟−1 𝑋 𝑟−1 + 𝑋 𝑟 .

TEOREMA 6.3: Un polinom binar de grad (𝑛 − 1) sau mai mic este polinom de cod dacă şi
numai dacă el este multiplu de 𝑔(𝑋).

DEMONSTRAŢIE

Să considerăm polinoamele 𝑋𝑔(𝑋), 𝑋 2 𝑔(𝑋), ⋯ , 𝑋 𝑛−𝑟−1 𝑔(𝑋) care au grade 𝑟 + 1, 𝑟 +


2, ⋯ , 𝑛 − 1 respectiv. Toate aceste polinoame având grad mai mic decât n, dacă le împărţim
la polinomul 𝑋 𝑛 + 1, câtul trebuie să fie identic cu zero astfel încât putem scrie:

𝑋𝑔(𝑋) = 𝑔(1) (𝑋)

𝑋 2 𝑔(𝑋) = 𝑔(2) (𝑋)

𝑋 𝑛−𝑟−1 𝑔(𝑋) = 𝑔(𝑛−𝑟−1) (𝑋).


Acestea sunt deplasări ciclice ale polinomului de cod 𝑔(𝑋) astfel încât ele sunt de asemenea
polinoame de cod. Din cauza liniarităţii codului, o combinaţie liniară a polinoamelor
𝑔(𝑋), 𝑋𝑔(𝑋), ⋯ , 𝑋 𝑛−𝑟−1 𝑔(𝑋) este tot un polinom de cod:

𝑣(𝑋) = 𝑢0 𝑔(𝑋) + 𝑢1 𝑋𝑔(𝑋) + ⋯ + 𝑢𝑛−𝑟−1 𝑋 𝑛−𝑟−1 𝑔(𝑋) =

= (𝑢0 + 𝑢1 𝑋 + ⋯ + 𝑢𝑛−𝑟−1 𝑋 𝑛−𝑟−1 )𝑔(𝑋).

Polinomul 𝑣(𝑋) are (𝑛 − 𝑟) coeficienţi binari, iar numărul seturilor posibile de coeficienţi
este egal cu 2𝑛−𝑟 . Deci, numărul polinoamelor binare de grad (𝑛 − 1) sau mai mic care sunt
multipli de 𝑔(𝑋) este 2𝑛−𝑟 . Dar acestea sunt toate polinoamele de cod, astfel încât 2𝑛−𝑟
trebuie să fie egal cu 2𝑘 . Rezultă că:

𝑟 = 𝑛 − 𝑘.

Prin urmare, polinomul de cod diferit de zero de grad minim dintr-un cod ciclic (n, k) este de
forma urătoare:

𝑔(𝑋) = 1 + 𝑔1 𝑋 + 𝑔2 𝑋 2 + ⋯ + 𝑔𝑛−𝑘−1 𝑋 𝑛−𝑘−1 + 𝑋 𝑛−𝑘 .

Orice polinom de cod 𝑣(𝑋) dintr-un cod ciclic (n, k) se poate exprima în forma următoare:

𝑣(𝑋) = 𝑢(𝑋)𝑔(𝑋) = (𝑢0 + 𝑢1 𝑋 + ⋯ 𝑢𝑘−1 𝑋 𝑘−1 )𝑔(𝑋).

Această ecuaţie este baza codării. Ea se realizează înmulţind mesajul 𝑢(𝑋) cu 𝑔(𝑋).
Polinomul 𝑔(𝑋) se numeşte polinomul generator al codului. Vedem deci cât de important este
acest polinom particular. Dar cum să-l găsim? Aceasta ne-o spune teorema următoare.

TEOREMA 6.4: Polinomul generator 𝑔(𝑋) al unui cod ciclic (n, k) este un factor al lui
𝑋 𝑛 + 1.

DEMONSTRAŢIE

Polinomul 𝑋𝑣(𝑋) are gradul n. Dacă îl împărţim la 𝑋 𝑛 + 1, câtul este egal cu 1 iar restul este
polinomul 𝑣(𝑋) rotit o dată la dreapta, 𝑣 (1) (𝑋).

𝑋𝑣(𝑋) = (𝑋 𝑛 + 1) + 𝑣 (1) (𝑋).

Dar atât 𝑣(𝑋) cât şi 𝑣 (1) (𝑋) sunt polinoame de cod, asa încât sunt multipli de polinomul
generator 𝑔(𝑋). Fie

𝑣(𝑋) = 𝑢(𝑋)𝑔(𝑋)

şi

𝑣 (1) (𝑋) = 𝑎(𝑋)𝑔(𝑋).

Avem deci

𝑋𝑢(𝑋)𝑔(𝑋) = (𝑋 𝑛 + 1) + 𝑎(𝑋)𝑔(𝑋).
Rearanjând termenii acestei ecuaţii, avem că

𝑋 𝑛 + 1 = [𝑋𝑢(𝑋) + 𝑎(𝑋)]𝑔(𝑋).

EXEMPLUL 6.1

Fie n = 7. Polinomul (𝑋 7 + 1) se descompune în factori primi astfel:

𝑋 7 + 1 = (1 + 𝑋)(1 + 𝑋 + 𝑋 3 )(1 + 𝑋 2 + 𝑋 3 ).

Ambele polinoame de gradul 3 generează coduri ciclice (7, 4).

6.2 POLINOMUL DE CONTROL ŞI CALCULUL SINDROMULUI

Am văzut că polinomul generator 𝑔(𝑋) este un divizor al polinomului (𝑋 𝑛 + 1). Putem deci
scrie:

𝑋 𝑛 + 1 = 𝑔(𝑋)ℎ(𝑋).

Polinomul ℎ(𝑋) se numeşte polinomul de control al codului ciclic. Să înmulţim ecuaţia de


mai sus cu un polinom de mesaj 𝑢(𝑋). Avem deci

𝑢(𝑋) + 𝑋 𝑛 𝑢(𝑋) = 𝑢(𝑋)𝑔(𝑋)ℎ(𝑋).

Dar 𝑢(𝑋)𝑔(𝑋) este polinom de cod, să spunem, 𝑣(𝑋). Deci

𝑢(𝑋) + 𝑋 𝑛 𝑢(𝑋) = 𝑣(𝑋)ℎ(𝑋).

Membrul stâng este un polinom de grad 𝑛 + 𝑘 − 1 în care coeficienţii lui 𝑋 𝑘 , 𝑋 𝑘+1 , ⋯ , 𝑋 𝑛−1
sunt egali cu 0. Aceşti coeficienţi trebuie să fie egali cu 0 şi în membrul drept, ceea ce ne dă
(𝑛 − 𝑘) relaţii de control pe care trebuie să le satisfacă coeficienţii unui polinom 𝑣(𝑋) pentru
a fi polinom de cod.

Fie polinomul de recepţie 𝑟(𝑋).

𝑟(𝑋) = 𝑟0 + 𝑟1 𝑋 + 𝑟2 𝑋 2 + ⋯ + 𝑟𝑛−1 𝑋 𝑛−1 .

Dacă împărţim 𝑟(𝑋) la polinomul generator 𝑔(𝑋), obţinem:

𝑟(𝑋) = 𝑢(𝑋)𝑔(𝑋) + 𝑠(𝑋).

Restul 𝑠(𝑋) este un polinom de grad (𝑛 − 𝑘 − 1) sau mai mic. Cei (𝑛 − 𝑘) coeficienţi ai lui
𝑠(𝑋) formează sindromul. El este identic cu zero dacă şi numai dacă polinomul recepţionat
este un polinom de cod.

EXEMPLUL 6.2

Fie un cod ciclic (7, 4) generat de polinomul 𝑔(𝑋) = 1 + 𝑋 + 𝑋 3 . Din Exemplul 6.1, ştim că
polinomul de control este ℎ(𝑋) = 1 + 𝑋 + 𝑋 2 + 𝑋 4 .
Fie polinomul de mesaj 𝑢(𝑋) = 𝑢0 + 𝑢1 𝑋 + 𝑢2 𝑋 2 + 𝑢3 𝑋 3 . Polinomul de cod corespunzător
este

𝑣(𝑋) = 𝑣0 + 𝑣1 𝑋 + 𝑣2 𝑋 2 + 𝑣3 𝑋 3 + 𝑣4 𝑋 4 + 𝑣5 𝑋 5 + 𝑣6 𝑋 6 =

(𝑢0 + 𝑢1 𝑋 + 𝑢2 𝑋 2 + 𝑢3 𝑋 3 )(1 + 𝑋 + 𝑋 3 ).

Efectuând înmulţirea din membrul al doilea şi identificând coeficienţii corespunzători din cei
doi membri, obţinem:

𝑣0 = 𝑢0

𝑣1 = 𝑢0 + 𝑢1

𝑣2 = 𝑢1 + 𝑢2

𝑣3 = 𝑢0 + 𝑢2 + 𝑢3

𝑣4 = 𝑢1 + 𝑢3

𝑣5 = 𝑢2

𝑣6 = 𝑢3 .

Probleme propuse

1. Pentru codul din Exemplul 6.2, scrieţi toate cuvintele de cod; a) găsiţi ponderea
Hamming a fiecărui cuvânt de cod b) Care este ponderea minimă a acestui cod? c) Ce
capacitate de corecţie a erorilor are codul? d) Pentru polinoamele de eroare cele mai
probabile (cu un singur coeficient egal cu 1), scrieţi sindromul corespunzător.
2. Fie codul ciclic cu polinom generator 𝑔(𝑋) = 1 + 𝑋 2 + 𝑋 3 . Care este polinomul de
control? Ce legături există între coeficienţii polinomului de cod şi cei ai polinomului
de mesaj? Restul punctelor ca la prima problemă.