Documente Academic
Documente Profesional
Documente Cultură
1. Cuprins:
• Noţiuni de bază: incertitudine, entropie, informaţie. Surse discrete de
informaţie
• Canale discrete fără zgomot: coduri unic decodabile şi coduri fără prefix;
• Canale discrete fără memorie şi cu zgomot. Coduri corectoare de erori;
• Clase de coduri liniare: coduri Hamming, coduri liniare şi coduri duale, co-
duri Golay, coduri perfecte, coduri Reed-Muller, coduri MacDonald, coduri
Hadamard, coduri produs, coduri optimale.
• Coduri neliniare: coduri Preparata, coduri convoluţionale, decodificarea
secvenţială, algoritmul Viterbi de decodificare, supra-codificare şi turbo-
coduri.
• Aplicarea teoriei informaţiei şi teoriei codurilor ı̂n criptografie.
2. Bibliografie:
• R. A. Ash: Information Theory, John Wiley Sons, Inc., 1965;
• A. Atanasiu: Teoria codurilor corectoare de erori, Editura Universităţii
Bucureşti 2001;
• M. Borda: Fundamentals in Information Theory and Coding, Springer-
Verlag Berlin Heidelberg, 2011;
• D.J. C. MacKay: Information Theory, Inference, and Learning Algorithms;
Cambridge University Press, 2003;
• A.T. Murgan: Principiile teoriei informaţiei ı̂n ingineria informţiei şi a
comunicaţiilor, Editura Academiei Române, Bucureşti 1998;
3. Evaluare
• Activitate curs şi seminar: 20p
• Lucrări de verificare: 60p
• Examinare finală (colocviu): 20p
Pentru promovarea disciplinei, studentul trebuie să obţină cel puţin 50%
din punctajul total.
Date: 2022-2023.
1
2 INCERTITUDINE ŞI ENTROPIE
Incertitudinea este cu atât mai mare cu cât Ion formulează mai multe ı̂ntrebări.
Deci putem să măsurăm incertitudinea prin numărul de ı̂ntrebări necesare pentru
a descoperi numărul ales de Alex.
Metoda: Considerăm că mulţimea S are |S| = 2n (= m) elemente şi marcăm
variantele de răspuns cu 0 =NU şi cu 1 =DA.
Considerăm partiţia S = {1, 2, . . . , 2n } = {1, 2, . . . , 2n−1 } ∪ {2n−1 + 1, . . . , 2n }
• Întrebare: Numărul ales este mai mare decât 2n−1 ?
Presupunem că răspunsul este NU, deci marcăm cu 0 răspunsul. Prin urmare,
pentru a doua ı̂ntrebare, considerăm doar mulţimea {1, 2, . . . , 2n−1 } pe care o
partiţionăm ı̂n două submulţimi cu acelaşi cardinal
{1, 2, . . . , 2n−1 } = {1, 2, . . . , 2n−2 } ∪ {2n−2 + 1, . . . , 2n−1 }
• Întrebare: Numărul ales este mai mare decât 2n−2 ?
Presupunem că răspunsul este DA, deci marcăm cu 1 răspunsul şi, pentru a treia
ı̂ntrebare, considerăm mulţimea {2n−2 + 1, . . . , 2n−1 }.
Deci după n ı̂ntrebări, Ion află numărul ales de către Alex. Cum am presupus că
|S| = 2n , obţinem imediat n = log2 |S|.
Observaţie. • Dacă |S| = 2k + 1, atunci procedăm asemănător şi ı̂mpărţim
S = {1, 2, . . . , k} ∪ {k + 1, . . . , 2k + 1}.
• Dacă 2n ≤ |S| < 2n+1 , atunci n ≤ log2 |S| < n + 1 (fie avem nevoie de n
ı̂ntrebări, fie de n + 1 ı̂ntrebări).
• Dacă ı̂ntrebările admit k variante diferite de răspuns (k 6= 2), atunci
ı̂mpărţim mulţimea S ı̂n k submulţimi (preferabil cu m/k elemente fiecare).
Prin urmare, dacă |S| = k n , atunci avem nevoie de n = logk |S| ı̂ntrebări.
Mai mult:
logk |S| = logk 2 · log2 |S|
Definiţie 4.1. Considerăm S = {e1 , . . . , em } un sistem finit de evenimente (adică
avem un experiment ı̂n urma căruia apare una din cele m posibilităţi diferite). Se
numeşte cantitatea de incertitudine a sistemului S numărul
h(|S|) := log2 |S|.
Observaţie. Cantitatea de incertitudine h(|S|) este cel mult egală cu |S|.
Exemplu 4.2. Presupunem că vrem să aşezăm o piesă pe tabla de şah. Prin
urmare, sistemul finit de evenimente este S = {1, . . . , 64}, deoarece există 64 = 26
pătrate pe tabla de şah unde putem plasa piesa. Atunci cantitatea de incertitudine
este h(|S|) = log2 64 = 6.
INCERTITUDINE ŞI ENTROPIE 3
Observaţie. Unitatea de măsură a entropiei este bit-ul. Dacă alegem baza e, atunci
unitatea de măsură este nat (natural digit), iar dacă alegem baza 10 avem dit
(decimal digit). În plus, avem:
1 1
1nat = = 1.44bit, 1dit = = 3.32bit.
ln 2 log10 2
Exemplu 4.3. La un concurs de echitaţie participă opt concurenţi (S = {1, . . . , 8}),
iar probabilităţile de câştig sunt P = {1/2, 1/4, 1/8, 1/16, 1/64, 1/64, 1/64, 1/64}.
Atunci incertitudinea asupra acestui concurs este
1 1 1 1 1 1
H(P ) = − log2 − log2 − log2 −
2 2 4 4 8 8
1 1 1 1 1 1 1 1 1 1
− log2 − log2 − log2 − log2 − log2 ,
16 16 64 64 64 64 64 64 64 64
deci H(P ) = 2.
În schimb, dacă cei opt concurenţi aveau şanse egale de câştig, deci P = {pi =
1/8, pentru orice 1 ≤ i ≤ 8}, atunci incertitudinea era H(P ) = log2 8 = 3.
Teoremă 4.1. Pentru orice spaţiu probabilistic (S, P ), cu |S| = m, avem 0 ≤
H(P ) ≤ log2 m. Mai mult, max H(P ) = log2 m şi se obţine pentru distribuţia
P
uniformă ı̂n probabilitate.
Deci incertitudinea maximă apare când evenimentele sunt echiprobabile (sau nu
se cunosc probabilităţile acestora).
1 1
Demonstraţie: Demonstrăm că H(P ) ≤ H m ,..., m = log2 m. Avem nevoie de
următorul rezultat
Lema 4.2. Fie p1 , . . . , pm şi q1 , . . . , qm două sisteme de probabilităţi definite pe
aceeaşi mulţime de evenimente S. Atunci:
Xm Xm
pi log2 qi ≤ pi log2 pi ,
i=1 i=1
egalitatea se obţine dacă şi numai dacă pi = qi .
Demonstraţie lemă: Avem log2 x = log2 e · ln x şi folosim inegalitatea ln x ≤ x − 1,
cu egalitatea dacă şi numai dacă x = 1. Atunci ln pqii ≤ pqii − 1, deci
m m X m m
X qi X qi X
pi ln ≤ pi −1 = qi − pi = 1 − 1 = 0.
i=1
pi i=1
pi i=1 i=1
Dar
m m m m
X qi X X X
pi ln = pi (ln qi − ln pi ) = pi ln qi − pi ln pi ≤ 0
i=1
pi i=1 i=1 i=1
Atunci
m m m m
!
X X X X
pi log2 qi − pi log2 pi = log2 e pi ln qi − pi ln pi ≤ 0,
i=1 i=1 i=1 i=1
ceea ce ı̂ncheie demonstraţia lemei.
INCERTITUDINE ŞI ENTROPIE 5
1 1
Pentru a demonstra că H(P ) ≤ H m, . . . , m = log2 m, avem din lemă
m m
X 1 X
pi log2 ≤ pi log2 pi ,
i=1
m i=1
1
egalitatea se obţine dacă şi numai dacă pi = m. Atunci
m m
X X 1
H(P ) − log2 m = − pi log2 pi + pi log2 ≤ 0,
i=1 i=1
m
1
cu egalitate dacă şi numai dacă pi = m.
Dar
p1 log2 (p1 + p2 ) + p2 log2 (p1 + p2 ) − p1 log2 p1 − p2 log2 p2 =
= p1 (log2 (p1 + p2 ) − log2 p1 ) + p2 (log2 (p1 + p2 ) − log2 p2 ) =
p1 p2
= −p1 log2 − p2 log2 =
p1 + p2 p1 + p2
p1 p1 p2 p2
= (p1 + p2 ) − log2 − log2 =
p1 + p2 p1 + p2 p1 + p2 p1 + p2
p1 p2
= (p1 + p2 )H , ,
p1 + p2 p1 + p2
ceea ce ı̂ncheie demonstraţia.
Exemplu 4.6. Considerăm că avem de ales un număr din S = {1, . . . , 5}, iar
probabilităţile sunt P = {0.3, 0.2, 0.2, 0.15, 0.15}. Pentru a afla numărul ales se
pun ı̂ntrebări cu variantele de răspuns DA/NU, astfel:
Numărul de ı̂ntrebări necesar pentru a afla numărul selectat pune ı̂n evidenţă
o variabilă aleatoare Y . Valorile acestei variabile sunt 2 (două ı̂ntrebări necesare
pentru a afla x1 , x2 sau x3 ) şi 3 (trei ı̂ntrebări necesare pentru a afla x4 sau x5 ).
Deci
2 3
Y : ,
0.7 0.3
iar valoarea medie a acestei variabile este E(Y ) = 2 · 0.7 + 3 · 0.3 = 2.3.
Dacă X este variabila aleatoare asociată sistemului (S, P ), atunci entropia este:
H(X) = −0.3 log2 0.3 − 0.2 log2 0.2 − 0.2 log2 0.2−
f1 f2 ... fm P1
e1 p1,1 p1,2 ... p1,m p1
e2 p2,1 p2,2 ... p2,m p2
..
. ... ... ... ... ...
en pn,1 pn,2 ... pn,m pn
P2 q1 q2 ... qm
Considerăm variabilele aleatoare
e1 e2 . . . e n f1 f2 ... fm
X: şi Y :
p1 p2 . . . pn q1 q2 ... qm
asociate sistemelor probabilistice (S1 , P1 ), (S2 , P2 ), unde P1 = {p1 , . . . , pn }, P2 =
{q1 , . . . , qm } şi
m
X n
X
pX (ei ) = pi = pi,j , 1 ≤ i ≤ n, pY (fj ) = qj = pi,j , 1 ≤ j ≤ m.
j=1 i=1
4
X 1 1 1 1 1
p3 = P (X = e3 ) = p3,i = + + + =
i=1
16 16 16 16 4
4
X 1 1
p4 = P (X = e4 ) = p4,i = +0+0+0= .
i=1
4 4
Avem variabila aleatoare Y :
f1 f2 f3 f4 f1 f2 f3 f4
Y : ⇔Y : 1 1 1 1
q1 q2 q3 q4 2 4 8 8
unde:
4
X 1 1 1 1 1
q1 = P (Y = f1 ) = pj,1 = + + + =
j=1
8 16 16 4 2
4
X 1 1 1 1
q2 = P (Y = f2 ) = pj,2 = + + +0=
j=1
16 8 16 4
4
X 1 1 1 1
q3 = P (Y = f3 ) = pj,3 = + + +0=
j=1
32 32 16 8
4
X 1 1 1 1
q4 = P (Y = f4 ) = pj,4 = + + +0= .
j=1
32 32 16 8
Avem entropia lui X este:
1 1 1 1 1 1 1 1
H(X) = − log2 − log2 − log2 − log2 = 2 biţi
4 4 4 4 4 4 4 4
şi entropia lui Y este:
1 1 1 1 1 1 1 1 7
H(Y ) = − log2 − log2 − log2 − log2 = = 1.75 biţi
2 2 4 4 8 8 8 8 4
Entropia lui (X, Y ) este:
1 1 1 1 1 1 1 1
H(X, Y ) = − log2 − log2 − log2 − log2 −
8 8 16 16 32 32 32 32
1 1 1 1 1 1 1 1
− log2 − log2 − log2 − log2 −
16 16 8 8 32 32 32 32
1 1 1 1 1 1 1 1 1 1 23
− log2 − log2 − log2 − log2 − log2 = =
16 16 16 16 16 16 16 16 4 4 8
= 2.87 < 2 + 1.75
Teoremă 4.3. Pentru orice două variabile aleatoare X şi Y are loc:
H(X, Y ) ≤ H(X) + H(Y ),
cu egalitate dacă şi numai dacă X şi Y sunt independente.
Demonstraţie: Avem:
X X
H(X) + H(Y ) = − pX (x) log2 pX (x) − pY (y) log2 pY (y) =
x∈X y∈Y
!
X X X X
=− pX,Y (x, y) log2 pX (x) − pX,Y (x, y) log2 pY (y) =
x∈X y∈Y y∈Y x∈X
10 INCERTITUDINE ŞI ENTROPIE
XX
=− pX,Y (x, y)(log2 pX (x) + log2 pY (y))
x∈X y∈Y
Deci
XX
H(X) + H(Y ) = − pX,Y (x, y) log2 (pX (x)pY (y))
x∈X y∈Y
prin urmare:
XX
H(X) + H(Y ) = − pX,Y (x, y) log2 (pX (x)pY (y)) ≥
x∈X y∈Y
XX
− pX,Y (x, y) log2 pX,Y (x, y) = H(X, Y ).
x∈X y∈Y
În plus, egalitatea are loc dacă şi numai dacă pX (x)pY (y) = pX,Y (x, y), echivalent
cu X şi Y sunt variabile aleatoare independente.
Observaţie.
n
X
H(X/Y = y) = − p(xi /y) log2 p(xi /y)
i=1
Dacă X şi Y sunt independente, atunci pX/y (x, y) = pX (x), pentru orice x, y, iar
entropia condiţionată H(X/y) devine
X
H(X/y) = − pX/y (x, y) log2 pX/y (x, y) =
x∈X
X
=− pX (x) log2 pX (x) = H(X)
x∈X
Am
P obţinut că pentru realizarea Y = y, entropia lui X devine H(X/y) =
− pX/y (x, y) log2 pX/y (x, y). Prin urmare obţinem o variabilă aleatoare
x∈X
H(X/y1 ) H(X/y2 ) . . . H(X/ym )
.
pY (y1 ) pY (y2 ) ... pY (ym )
Definiţie 4.4. Entropia lui X condiţionată de Y este valoarea medie a entropiilor
H(X/y), y ∈ Y , deci:
X
H(X/Y ) = pY (y)H(X/y) = pY (y1 )H(X/y1 ) + . . . + pY (ym )H(X/ym )
y∈Y
H(X/Y = 0) = −pX/0 (0, 0) log2 pX/0 (0, 0) − pX/0 (1, 0) log2 pX/0 (1, 0)
Avem:
1
pX,Y (0, 0) 3 1
pX/0 (0, 0) = = 2 =
pY (0) 3
2
1
pX,Y (1, 0) 3 1
pX/0 (1, 0) = = 2 = ,
pY (0) 3
2
12 INCERTITUDINE ŞI ENTROPIE
deci
1 1 1 1
H(X/0) = − log2 − log2 = 1
2 2 2 2
Asemănător,
H(X/1) = −pX/1 (0, 1) log2 pX/1 (0, 1) − pX/1 (1, 1) log2 pX/1 (1, 1)
Avem:
1
pX,Y (0, 1)
pX/1 (0, 1) = = 31 = 1
pY (1) 3
pX,Y (1, 1) 0
pX/1 (1, 1) = = 2 = 0,
pY (1) 3
deci
H(X/1) = − log2 1 − 0 log2 0 = 0
Entropia lui X condiţionată de Y este
2 2 2
H(X/Y ) = pY (0)H(X/0) + pY (1)H(X/1) = · 1 + · 0 = .
3 3 3
De remarcat faptul că
H(X/1) ≤ H(X) ≤ H(X/0)
şi
H(X/Y ) ≤ H(X).
În plus, X şi Y nu sunt independente deoarece pX,Y (0, 0) 6= pX (0) · pY (0).
Teoremă 4.5. Pentru două variabile aleatoare X şi Y are loc:
H(X, Y ) = H(Y ) + H(X/Y ).
Demonstraţie: Avem:
X
H(X/Y ) = pY (y)H(X/y) =
y∈Y
!
X X
= pY (y) − pX/y (x, y) log2 pX/y (x, y) =
y∈Y x∈X
XX
=− pY (y)pX/y (x, y) log2 pX/y (x, y) =
x∈X y∈Y
XX pX,Y (x, y) pX,Y (x, y)
=− pY (y) log2 =
pY (y) pY (y)
x∈X y∈Y
XX
=− pX,Y (x, y)(log2 pX,Y (x, y) − log2 pY (y)) =
x∈X y∈Y
XX XX
=− pX,Y (x, y) log2 pX,Y (x, y) − pX,Y (x, y) log2 pY (y) =
x∈X y∈Y x∈X y∈Y
X X
= H(X, Y ) − ( pX,Y (x, y)) log2 pY (y) =
y∈Y x∈X
X
= H(X, Y ) − pY (y)) log2 pY (y) =
y∈Y
= H(X/Y ) − H(Y ).
INCERTITUDINE ŞI ENTROPIE 13
1 1
(A4) H n, . . . , n este monoton crescătoare, pentru orice n ≥ 1.
Teoremă 4.6. O funcţie H verifică axiomele (A1), . . . , (A4) dacă şi numai dacă
n
X
H(p1 , . . . , pn ) = − pi log2 pi
i=1
n
P
Demonstraţie: Am arătat că dacă H(p1 , . . . , pn ) = − pi log2 pi , atunci H verifică
i=1
cele patru proprietăţi (A1), . . . , (A4). Invers, presupunem că avem o funcţie ce
verifică cele patru axiome şi demonstrăm că trebuie să fie de forma H(p1 , . . . , pn ) =
n
P
− pi log2 pi . Facem menţiunea că putem să considerăm logaritmul ı̂n orice bază.
i=1
Lema 4.8 (2). Dacă (A1), (A3) şi (A4) au loc, atunci există o constantă c > 0
astfel ı̂ncât
h(n) = c · log2 n, ∀n ∈ N.
Demonstraţie: Considerăm n = m · l, n, m, l ∈ N şi aplicăm lema anterioară astfel:
ı̂mpărţim cele ml probabiltăţi ı̂n câte m grupuri:
l l
z }| { z }| {
1 1 1 1
h(n) = h(ml) = H
ml , . . . , ml , . . . , ml , . . . , ml =
l l
z }| { z }| {
1 1 1 1
=H
ml + . . . + ml , . . . , ml + . . . + ml +
l
z }| { 1 1
1 1 ml ml
+m ·
ml + . . . + H
1 1 ,..., 1 1 =
ml ml + ... + ml ml + ... + ml
16 INCERTITUDINE ŞI ENTROPIE
Obţinem astfel
l
z }| {
1 1 1 1 H 1 ,..., 1 =
h(ml) = H ,..., +m· + . . . +
l l ml ml m m
= h(m) + h(l).
Demonstrăm că unica soluţie a acestei ecuaţii este h(n) = c log2 n.
Pentru m, l ∈ N, alegem un număr N ∈ N şi determinăm n astfel ı̂ncât
ln ≤ mN < ln+1 .
Cum h este monoton crescătoare, din (A4), obţinem
h(ln ) ≤ h(mN ) < h(ln+1 ).
Remarcăm faptul că h(ml) = h(m) + h(l), deci h(ln ) = nh(l). Prin urmare:
nh(l) ≤ N h(m) < (n + 1)h(l).
n
Dacă l = 1, atunci h(l ) = h(l) = nh(l), deci h(l) = 0. Cum h este monoton
crescătoare, din (A1), obţinem că pentru l > 1 avem h(l) > 0. Deci presupunem că
l > 0 şi din
h(l)
nh(l) ≤ N h(m) < (n + 1)h(l) :
N
obţinem
n h(m) n+1
≤ < (1)
N h(l) N
Pe de altă parte, din
ln ≤ mN < ln+1 ,
obţinem log2 ln ≤ log2 mN < log2 ln+1 (din monotonia logaritmului), echivalent cu
log2 l
n log2 l ≤ N log2 m < (n + 1) log2 l :
N
n
deci N ≤ log 2m
log2 l < N
n+1
(2).
Din (1) şi (2) obţinem:
h(m) log2 m 1
− < .
h(l) log 2l N
Cum relaţia are loc pentru orice N , avem
h(m) log2 m
= .
h(l) log2 l
Mai mult, m, l sunt arbitrare, deci există c astfel ı̂ncât
h(m) h(l)
= = c.
log2 m log2 l
Prin urmare, h(m) = c log2 m, pentru m > 1. Pentru m = 1 obţinem h(1) = 0
şi c log2 1 = 0, deci h(m) = c log2 m, pentru orice m ≥ 1. Din (A4) obţinem că
c > 0.
INCERTITUDINE ŞI ENTROPIE 17
Lema 4.9. Dacă au loc (A1), (A3) şi (A4), atunci pentru probabilităţi numere
raţionale are loc:
n
X
H(p1 , . . . , pn ) = −c pi log2 pi .
i=1
qi
Demonstraţie: Presupunem că pi = astfel ı̂ncât q1 + . . . + qn = p. Aplicăm Lema
p
(1)
q1 qn
z }| { z }| {
1 1 1 1
h(p) = H p, . . . , p, . . . , p, . . . , p =
q1 qn
z }| { z }| {
1 1 1 1
=H
p + . . . + ,..., + ... + +
p p p
1 1
q1 p p
+ H ,..., +
1
p 1 1 p + . . . + p1
+ ... +
p p
| {z }
q1
1 1
!
qn p p
+... + H 1 1 ,..., 1 1 =
p p + ... + p p + ... + p
Obţinem
q1 1 1 qn 1 1
h(p) = H(p1 , . . . , pn ) + H ,..., + ... + H ,..., =
p q1 q1 p qn qn
q1 qn
= H(p1 , . . . , pn ) + h(q1 ) + . . . + h(qn ) =
p p
= H(p1 , . . . , pn ) + p1 c log2 q1 + . . . + pn c log2 qn
Prin urmare
H(p1 , . . . , pn ) = c log2 p − cp1 log2 q1 − . . . − cpn log2 qn .
Cum p1 + . . . + pn = 1, avem:
H(p1 , . . . , pn ) = c(p1 + . . . + pn ) log2 p − cp1 log2 q1 − . . . − cpn log2 qn =
Demonstraţie Teoremă. Ştim că au loc cele patru axiome şi demonstrăm că
n
X
H(p1 , . . . , pn ) = −c pi log2 pi .
i=1
Dacă probabilităţile nu sunt raţionale, atunci ele pot fi aproximate cu prob-
abiltăţi raţionale ce converg la pi . Cum H este continuă ı̂n fiecare variabilă şi
folosind lema (3), obţinem relaţia dorită.
INFORMAŢIA ŞI ENTROPIA
Date: 2022-2023.
1
2 INFORMAŢIA ŞI ENTROPIA
H(X|0) = −pX|0 (0, 0) log2 pX|0 (0, 0) − pX|0 (1, 0) log2 pX|0 (1, 0)
Avem:
pX,Y (0, 0) 1 pX,Y (1, 0) 1
pX|0 (0, 0) = = , pX|0 (1, 0) = = ,
pY (0) 2 pY (0) 2
deci
1 1 1 1
H(X|0) = − log2 − log2 = 1
2 2 2 2
Asemănător,
H(X|1) = −pX|1 (0, 1) log2 pX|1 (0, 1) − pX|1 (1, 1) log2 pX|1 (1, 1)
Avem:
pX,Y (0, 1) pX,Y (1, 1)
pX|1 (0, 1) = = 1, pX|1 (1, 1) = = 0,
pY (1) pY (1)
deci
H(X|1) = − log2 1 − 0 log2 0 = 0
Entropia lui X condiţionată de Y este
2 2 2
H(X|Y ) = pY (0)H(X|0) + pY (1)H(X|1) = · 1 + · 0 = .
3 3 3
INFORMAŢIA ŞI ENTROPIA 7
X X
= H(X) pY (y) − pY (y)H(X|y) =
y∈Y y∈Y
= H(X) − H(X|Y )
Definiţia 1. Informaţia mutuală dintre X şi Y este I(X|Y ) = H(X) − H(X|Y )
şi reprezintă valoarea medie a cantităţii de informaţie obţinută despre X, prin
observarea Y .
Reamintim că H(X|Y ) ≤ H(X), cu egalitatea dacă X şi Y sunt independente.
Prin urmare, obţinem următoarea proprietate:
Propoziţia 1. Informaţia mutuală dintre X şi Y este pozitivă, şi I(X|Y ) = 0 dacă
şi numai dacă X şi Y sunt independente.
Propoziţia 2. Informaţia mutuală dintre X şi Y este egală cu informaţia mutuală
dintre Y şi X, adică I(X|Y ) = I(Y |X).
Demonstraţie: Ştim că
H(X, Y ) = H(X) + H(Y |X) = H(Y ) + H(X|Y ),
deci
H(X) − H(X|Y ) = H(Y ) − H(Y |X) ⇔ I(X|Y ) = I(Y |X).
8 INFORMAŢIA ŞI ENTROPIA
Exemplul 11. Presupunem că avem jocul LOTO 6/49, deci sunt
6 49!
C49 = = 13983816
6! · 43!
posibilităţi, prin urmare gradul de surpindere pentru s(câştig) = log2 13983816 =
23.737254771. Fie X variabila aleatoare ce ia valorile 0 :câştig, 1 : nu câştig. Atunci:
1 1
pX (0) = , pX (1) = 1 − ,
13983816 13983816
deci entropia variabilei X este
1 1
H(X) = − log2 −
13983816 13983816
1 1
− 1− log2 1 − ≈ 0.0000018
13983816 13983816
Prin urmare, incertitudinea asupra posibilităţii de câştig este foarte mică, deoarece
suntem aproape convinşi că nu vom câştiga.
Exemplul 12. Considerăm că ı̂n urma unui experiment apar evenimentele E sau
Ē cu probabilităţile p, respectiv 1 − p. Cantitatea de incertitudine este
H = −p log2 p − (1 − p) log2 (1 − p)
Incertitudinea este 0 dacă p = 0 sau p = 1 şi este maximală când p = 1/2. În
acest ultim caz avem şi cantitatea maximală de informaţie obţinută prin observarea
evenimentului E relativ la X (are sau nu are loc evenimentul E). Gradul de sur-
prindere este maximal (infinit) dacă p = 0 (deoarece nu ne aşteptăm să apară E)
şi este 0 dacă p = 1 (deoarece suntem convinşi că apare E, deci producerea acestui
eveniment nu surprinde.)
În concluzie, dacă X este o variabilă aleatoare, atunci entropia este:
H(X) = −pX (x1 ) log2 pX (x1 ) − . . . − pX (xn ) log2 pX (xn )
16 INFORMAŢIA ŞI ENTROPIA
deci este valoarea medie a gradelor de surprindere a unei valori X când s-a observat
o valoare Y .
Altfel spus, valoarea medie a cantităţii de informaţie obţinută din X prin obser-
varea Y este egală cu valoarea medie a gradelor de surprindere observând X, ştiind
că Y s-a observat.
CODAREA SURSELOR
Emiţătorul conţine:
• un codor de sursă care realizează codarea sursei transformând cuvintele
sursei ı̂n cuvinte de cod. Se folosesc:
– coduri de compactare a datelor, care oferă posibilitatea reprezentării
mai restrânse a datelor sursei; dispozitivul corespunzător este un codor
de compactare a datelor;
– coduri de compresie a datelor pentru scurtarea ı̂n medie a cuvintelor
furnizate de sursa de informaţie; sunt implementate ı̂ntr-un codor de
compresie a datelor;
• un codor de canal care realizează codarea canalului transformând o secvenţă
de simboluri ale unui cuvânt de cod al sursei ı̂ntr-o altă secvenţă numită
cuvânt de cod al canalului. Se folosesc:
– coduri de transmisiune a datelor sau coduri cu controlul erorilor pentru
a contracara efectul perturbaţiilor de pe canal
– coduri de translaţie a datelor sau coduri pentru canale cu constrângeri
care prepară secvenţa de simboluri transmisă pentru a deveni compat-
ibilă cu constrângerile canalului
• un modulator care reprezintă fiecare simbol al cuvântului de cod al canalu-
lui prin simboluri analogice alese dintr-un set finit de simboluri analogice
posibile. Secvenţa de simboluri analogice se numeşte formă de undă şi
reprezintă semnalul transmis, propagat pe canal. Semnalul este, de ex-
emplu, o undă electromagnetică, sonoră, capabilă să se propage printr-un
mediu dat.
Receptorul conţine blocurile care realizează operaţiile inverse celor realizate de
emiţător:
Date: 2022-2023.
1
2 CODAREA SURSELOR
Definiţia 4. Cuvântul de cod z este prefix pentru cuvântul de cod z 0 dacă z este
ı̂nceputul cuvântului z 0 (dacă presupunem că z are n simboluri, atunci primele n
simboluri ale lui z 0 sunt cele din z.)
Observaţia. Orice cuvânt de cod z este prefix pentru z.
Definiţia 5. Un cod al unei surse discrete este fără prefix dacă nici un cuvânt de
cod nu este prefix pentru alt cuvânt de cod.
Altfel spus, un cod Z, cu mulţimea de cuvinte de cod νZ din alfabetul Z, este
fără prefix dacă şi numai dacă pentru orice z ∈ νZ şi pentru orice y ∈ Z ∗ , dacă zy
este un cuvânt de cod, atunci y = (este cuvântul de lungime zero).
Exemplul 3. Considerăm o sursă cu simbolurile νU = {a, b, c} şi codul Z definit
astfel:
a 7→ 0 b→
7 10 c 7→ 11.
Codul Z este fără prefix.
Exemplul 4. Considerăm o sursă cu simbolurile νU = {a, b, c} şi codul Z definit
astfel:
a 7→ 1 b 7→ 00 c 7→ 10.
Codul Z nu este fără prefix deoarece z1 = 1 este prefix pentru z3 = 10.
Propoziţia 1. Orice cod fără prefix este unic decodabil.
Observaţia. Reciproca nu este adevărată, deci există coduri unic decodabile care
nu sunt fără prefix.
Exemplul 5. Fie o sursă cu simbolurile νU = {a, b, c} şi considerăm codarea acestei
surse dată de:
a 7→ 1 b 7→ 00 c 7→ 10.
Acest cod este unic decodabil, dar nu este fără prefix, deoarece 1 este prefix pentru
10.
Definiţia 6. Un cod se numeşte instantaneu decodabil dacă şi numai dacă fiecare
cuvânt de cod poate fi decodat rapid, imediat ce este recepţionat.
Propoziţia 2. Un cod este instantaneu decodabil dacă şi numai dacă este fără
prefix.
4 CODAREA SURSELOR
Un cod fără prefix poate fi reprezentat sub forma unui graf arbore.
• Un arbore este un graf ce ı̂ncepe din ”nodul rădăcină”. Fiecare alt nod din
graf este fie nod interior, fie nod final (leaf).
• Nodurile interioare au una sau mai multe ramificaţii, iar numărul aces-
tor ramificaţii se numeşte aritatea nodului (vom numi nodurile interioare
”părinţi” pentru ramificaţii, iar nodurile ce corespund ramificaţiilor sunt
”copii”; astfel, nodurile finale sunt cele fără copii, deci cu aritate zero).
• Profunzimea unui nod este numărul de arce/muchii ce leagă nodul rădăcină
de acel nod. Prin convenţie, nodul rădăcină are profunzime zero.
• Profunzimea unui arbore este maximum profunzimilor nodurilor finale.
• Nodul n1 acoperă nodul n2 dacă drumul de la rădăcină la nodul n2 conţine
n1 . Nodul n1 acoperă pe n1 .
Definiţia 7. Un arbore n−ar, n ≥ 1, este un arbore ı̂n care fiecare nod interior
are aritate n sau 0 (deci fiecare nod interior are exact n ramificaţii sau nu are
ramificaţii).
Definiţia 8. Un arbore n−ar este complet dacă toate nodurile finale au aceeaşi
profunzime.
Propoziţia 3. Într-un arbore n−ar complet de profunzime d ≥ 0, fiecare nod cu
profunzimea δ, 0 ≤ δ ≤ d acoperă exact nd−δ noduri finale.
Propoziţia 4. Pentru fiecare cod n−ar fără prefix, există un arbore n−ar de codare
astfel ı̂ncât fiecare cuvânt de cod corespunde literelor de pe drumul ce leagă nodul
rădăcină de nodul final.
Invers, orice arbore de codare defineşte un cod fără prefix, cuvintele de cod fiind
definite de drumurile de la nodul rădăcină la nodul final din arborele de codare.
Facem convenţia ca nodurile finale dintr-un arbore de codare să fie notate cu
simbolurile sursei astfel ı̂ncât cuvântul de cod dat de literele drumului să core-
spundă semnalului sursei. Spunem că avem un cod complet dacă fiecare nod final
corespunde unui cuvânt de cod.
Exemplul 7. Considerăm sursa cu simbolurile {a, b, c} şi codul fără prefix
a 7→ 0, b 7→ 10, c 7→ 11.
Arborele corespunzător acestui cod este:
6 CODAREA SURSELOR
şi este un cod complet (toate nodurile finale corespund cuvintelor de cod)
Exemplul 8. Considerăm sursa cu simbolurile {a, b} şi codul binar fără prefix
a 7→ 0, b 7→ 100.
Arborele binar corespunzător acestui cod este:
şi nu este un cod complet (sunt noduri finale care ar conduce la cuvintele de cod
11, 101, inexistente ı̂n codul considerat.)
Teorema 1 (Teorema de existenţă a codurilor fără prefix: inegalitatea lui Kraft).
Există un cod D−ar fără prefix cu N cuvinte de cod de lungimi l1 , . . . , lN dacă şi
N
D−li ≤ 1, cu egalitate pentru codurile fără prefix complete.
P
numai dacă
i=1
Observaţia. Teorema afirmă că se poate construi un cod fără prefix dacă şi numai
dacă are loc inegalitatea, dar nu orice cod care verifică inegalitatea este fără prefix.
Exemplul 9. Considerăm codul binar complet fără prefix
CODAREA SURSELOR 7
Exemplul 10. Inegalitatea lui Kraft afirmă că se poate construi un cod ternar
(D = 3) fără prefix cu lungimile cuvintelor de cod l1 = 1, l2 = l3 = 2, l4 = 3
deoarece:
N
X 46
D−li = 3−1 + 3−2 + 3−2 + 3−3 = < 1,
i=1
81
deci codul nu este complet.
Un astfel de cod este:
deci
a 7→ 0, b 7→ 12, c 7→ 20, d 7→ 211.
Exemplul 11. Presupunem că vrem să construim un cod binar (D = 2) pentru
o sursă primară care emite N = 5 simboluri. Dacă alegem lungimile cuvintelor
l1 = 1, l2 = 2, l3 = 2, l4 = 3, l5 = 3, atunci
5
2−1 + 2−2 + 2−2 + 2−3 + 2−3 = > 1,
4
deci nu putem să construim un cod fără prefix cu aceste lungimi ale cuvintelor de
cod.
Nu orice cod care verifică inegalitatea lui Kraft este cod fără prefix.
Exemplul 12. Fie o sursă cu simbolurile νU = {a, b, c} şi considerăm codarea
acestei surse dată de:
a 7→ 1 b 7→ 00 c 7→ 10.
Acest cod nu este fără prefix, deoarece 1 este prefix pentru 10. Inegalitatea lui
Kraft devine:
X 3
D−li = 2−1 + 2−2 + 2−2 = 1,
i=1
prin urmare teorema afirmă că se poate construi un cod fără prefix cu aceste lungimi
ale cuvintelor.
8 CODAREA SURSELOR
Demonstraţie (inegalitatea lui Kraft): Presupunem că există un cod D−ar fără pre-
N
D−li ≤ 1.
P
fix ale cărui cuvinte de cod au lunigimile l1 , . . . , lN . Demonstrăm că
i=1
Notăm cu L = max li + 1 şi considerăm arborele D−ar complet de profunzime L.
i
Evident, arborele corespunzător codului fără prefix se obţine din arborele complet
astfel: nodurile ce corespund cuvintelor de cod nu se mai ramifică (fiind cod fără
prefix), deci ”ştergem” subgraful generat de fiecare astfel de nod.
Arborele ternar complet şi codul fără prefix
a 7→ 0, b 7→ 12, c 7→ 20, d 7→ 21.
Ne interesează codurile fără prefix pentru care E[L] este cât mai mică posibil.
10 CODAREA SURSELOR
D−li D−li
X X
= pi log2 ≤ pi −1 ,
i
pi i
pi
unde am folosit log2 x ≤ x − 1 (dacă x ≤ 1).
Obţinem
X D−li X X
H(U ) − E[L] log2 D ≤ pi −1 = D−li − pi ≤ 1 − 1 = 0,
i
pi i i
Definiţia 14. Un cod fără prefix D−ar este optimal dacă nu există alt cod D−ar
care să prezinte o lungime medie a cuvintelor de cod mai mică. Deci un cod este
optimal dacă
H(U ) H(U )
≤ E[L] < +1
log2 D log2 D
Definiţia 15. Dacă lungimea medie a cuvintelor de cod este
H(U )
E[L] = ,
log2 D
atunci codul este absolut optimal.
TEHNICI DE CODARE COMPACTĂ FĂRĂ PREFIX.
ALGORITMUL HUFFMAN
1. Reamintim:
Definiţie 1.1. Un cod este o funcţie f : νU → νZ , unde νU este alfabetul sursei
discrete fără memorie U .
• Numim cod nesingular codul ce are toate cuvintele de cod distincte (adică f
este injectivă).
• Un cod este unic decodabil dacă fiecărei succesiuni de cuvinte de cod ı̂i core-
spunde o singură succesiune de simboluri ale sursei.
• Un cod este fără prefix dacă nici un cuvânt cod nu poate fi obţinut din altul
prin adăugarea de simboluri din alfabetul codului.
Teoremă 1.1 (Teorema de existenţă a codurilor fără prefix: inegalitatea lui Kraft).
Există un cod D−ar fără prefix cu N cuvinte de cod de lungimi l1 , . . . , lN dacă şi
N
D−li ≤ 1, cu egalitate pentru codurile fără prefix complete.
P
numai dacă
i=1
Observaţie. Teorema afirmă că se poate construi un cod fără prefix dacă şi numai
dacă are loc inegalitatea, dar nu orice cod care verifică inegalitatea este fără prefix.
Teoremă 1.2. Pentru orice cod fără prefix D−ar folosit pentru codarea sursei dis-
crete de informaţie fără memorie U de entropie H(U ), lungimea medie a cuvintelor
de cod satisface inegalitatea
H(U )
E[L] ≥ .
log2 D
Egalitatea are loc când cele D simboluri apar ı̂ntr-un cuvânt de cod cu aceeaşi prob-
abilitate, p(ui ) = pi = D−li .
Teoremă 1.3 (Teorema de existenţă a unui cod fără prefix optimal). Pentru orice
sursă de entropie H(U ) există un cod fără prefix D−ar fără prefix astfel ı̂ncât
lungimea medie a cuvintelor de cod satisface inegalitatea:
H(U )
E[L] < +1
log2 D
Definiţie 1.2. Un cod fără prefix D−ar este optimal dacă nu există alt cod D−ar
fără prefix care să prezinte o lungime medie a cuvintelor de cod mai mică. Prin
urmare, o condiţie (necesară, dar nu suficientă) pentru ca un cod să fie optimal este
H(U ) H(U )
≤ E[L] < +1
log2 D log2 D
1
Definiţie 1.3. Dacă lungimea medie a cuvintelor de cod este
H(U )
E[L] =
log2 D
atunci codul este absolut optimal.
Condiţia are loc dacă p(ui ) = D−li . Într-adevăr,
X 1 X X
E[L] = pi li = − pi log2 pi = − pi logD pi ,
i
log 2 D i i
deci X
pi (li + logD pi ) = 0.
i
Obţinem logD pi = −li , deci pi = D−li , pentru orice i.
2
• Convenim să atribuim 0 fiecărui simbol din U0 şi 1 fiecărui simbol din U1 .
• Fiecare submulţime U0 şi U1 este ı̂mpărţită ı̂n două submulţimi: U00 , U01 ,
respectiv U10 , U11 astfel ı̂ncât
p(U00 ) = p(U01 ) = p(U10 ) = p(U11 ) = 2−2 .
Convenim să atribuim 0 fiecărui simbol din U00 , U10 şi 1 fiecărui simbol din
U01 , U11 . Deci cuvintele de cod vor fi de forma 00, 10, 01, 11.
• Se continuă până când fiecare submulţime este formată dintr-un singur sim-
bol uk , cu p(uk ) = 2−lk , lk este numărul de indici din mulţimea corespunzătoare
şi s-au epuizat toate simbolurile sursei. Cuvântul de cod corespunzător sim-
bolului uk se obţine prin concatenarea indicilor.
Concluzie:
Se obţine un cod absolut optimal
H(U )
E[L] = = H(U )
log2 D
deoarece
Q Q
X X
E[L] = p(ui )li = − p(ui ) log2 p(ui ) = H(U ).
i=1 i=1
Pentru coduri absolut optimale, inegalitatea lui Kraft este verificată la limită:
Q Q
X X
−li
2 = p(ui ) = 1.
i=1 i=1
În concluzie, orice cod absolut optimal este compact, reciproca nu este ı̂n general
valabilă.
Exemplu 2.1. Considerăm sursa cu distribuţia:
u1 u2 u3 u4 u5 u6 u7 u8 u9 u10
U :
−2 −2 −3 −3 −4 −4 −5 −5 −5 −5
2 2 2 2 2 2 2 2 2 2
pe care vrem să o codăm.
Pas 1: Considerăm submulţimile
U0 = {u1 , u2 }, U1 = {u3 , . . . , u10 }
astfel ı̂ncât p(U0 ) = p(U1 ) = 2−1 .
Pas 2: Considerăm
U00 = {u1 }, U01 = {u2 }
−2
cu p(U00 ) = p(U01 ) = 2 . Considerăm
U10 = {u3 , u4 }, U11 = {u5 , . . . , u10 }
cu p(U10 ) = p(U11 ) = 2−2 .
Pas 3: Considerăm
U100 = {u3 }, U101 = {u4 }
3
cu p(U100 ) = p(U101 ) = 2−3 şi
U110 = {u5 , u6 }, U111 = {u7 , u8 , u9 , u10 }
−3
p(U110 ) = p(U111 ) = 2
Pas 4: Considerăm
U1100 = {u5 }, U1101 = {u6 }, U1110 = {u7 , u8 }, U1111 = {u9 , u10 }
cu p(U1100 ) = p(U1101 ) = p(U1110 ) = p(U1111 ) = 2−4
Pas 5: Considerăm
U11100 = {u7 }, U11101 = {u8 }, U11110 = {u9 }, U11111 = {u10 }
cu
p(U11100 ) = p(U11101 ) = p(U11110 ) = p(U11111 ) = 2−5
Putem să reprezentăm algoritmul sub forma unui tabel
ui p(ui ) ci li
u1 1/4 0 0 00 2
u2 1/4 1 01 2
u3 1/8 1 0 0 100 3
u4 1/8 1 101 3
u5 1/16 1 0 0 1100 4
u6 1/16 1 1101 4
u7 1/32 1 0 0 11100 5
u8 1/32 1 11101 5
u9 1/32 1 0 11110 5
u10 1/32 1 11111 5
sau sub forma unui graf arbore, ı̂n care fiecărui nod i se ataşează probabilitatea
grupului asociat de simboluri. Unui nod final i se ataşează probabilitatea unui
simbol iniţial. Cuvântul de cod este alcătuit prin concatenarea literelor ce denumesc
muchiile grafului.
4
Pentru acest cod avem:
l1 = l2 = 2, l3 = l4 = 3, l5 = l6 = 4, l7 = l8 = l9 = l10 = 5
entropia sursei
10
X
H(U ) = − p(ui ) log2 p(ui ) = 2.18 bit/simbol,
i=1
lungimea medie a cuvintelor de cod este
10
X
E[L] = p(ui )li = 2.18 simbol.
i=1
Observaţie. Algoritmul poate fi aplicat şi ı̂n cazul ı̂n care p(ui ) 6= 2−li . În acest caz,
ı̂mpărţirea ı̂n submulţimi se face astfel ı̂ncât probabilitatea ca un simbol să aparţină
unei submulţimi să fie apropiată de probabilitatea să fie ı̂n altă mulţime. Pentru
lungimea cuvintelor de cod se doreşte a se verifica relaţia:
− log2 p(ui ) ≤ li < − log2 p(ui ) + 1.
Exemplu 2.2. Considerăm sursa cu distribuţia:
u1 u2 u3 u4
U :
0.45 0.3 0.15 0.1
Putem să reprezentăm algoritmul sub forma unui tabel
ui p(ui ) ci li − log2 p(ui )
u1 0.45 0 0 00 2 1.15
u4 0.1 0 1 0 0 0100 4 3.32
u2 0.3 1 1 11 2 1.73
u3 0.15 1 0 0 100 3 2.73
5
Pentru acest cod avem:
l1 = l2 = 2, l3 = 3, l4 = 4
entropia sursei este
4
X
H(U ) = − p(ui ) log2 p(ui ) = 1.77 bit/simbol.
i=1
Sau:
ui p(ui ) ci li − log2 p(ui )
u1 0.45 0 0 00 2 1.15
u2 0.3 0 1 01 2 1.73
u3 0.15 1 0 0 100 3 2.73
u4 0.1 1 0 1 0 1010 4 3.32
6
lungimea medie a cuvintelor de cod este
4
X
E[L] = p(ui )li = 2.35.
i=1
7
lungimea medie a cuvintelor de cod este
4
X
E[L] = p(ui )li = 1.8 simbol.
i=1
În concluzie, ı̂n cazul codurilor ı̂n care se pleacă de la simboluri cu p(ui ) 6= 2−li ,
algoritmul de codare binară Shannon-Fano nu asigură obţinerea codului de lungime
medie minimă.
3. Algoritmul Huffman
Algoritmul Huffman este singurul algoritm care conduce la un cod fără prefix ı̂n
care lungimea medie a cuvintelor de cod penru codarea este minimă.
Lema 3.1. Orice cod optimal fără prefix al unei surse cu simbolurile u1 , . . . , un şi
probabilităţile p(u1 ), p(u2 ), . . . , p(un ) are proprietatea că dacă p(ui ) > p(uj ), atunci
li ≤ lj .
Demonstraţie: Fie Z un cod optimal fără prefix şi considerăm codul Y obţinut din
codul Z prin interschimbarea a două cuvinte de cod zi şi zj : deci ı̂n Y avem yj = zi
şi yi = zj , iar yk = zk , pentru orice k 6= i, k 6= j. Atunci
X X
E[LY ] − E[LZ ] = p(us )ls − p(ut )lt = p(uj )li + p(ui )lj − (p(ui )li + p(uj )lj ) =
s t
8
Demonstraţie: Presupunem că dacă eliminăm ultimul simbol din toate cuvintele de
cod de aceeaşi lungime, atunci obţinem cuvinte de cod diferite. Atunci obţinem un
alt cod fără prefix ı̂n care lungimea medie a cuvintelor de cod este mai mică.
Corolar 3.1. Pentru un cod binar fără prefix optimal graful arbore nu conţine
noduri neutilizate. Deci un cod binar fără prefix este complet.
Demonstraţie: Presupunem că avem noduri finale neutilizate ı̂n graful arbore. Atunci,
pentru simbolul ui se poate renunţa la ultima cifră şi astfel se obţine un cod de
lungime medie mai mică.
Teoremă 3.4 (de construcţie a unui cod binar fără prefix optimal). Fie o sursă
U şi simbolurile uQ−1 , uQ având probabilităţile cele mai mici. Considerăm un cod
Z 0 ataşat sursei artificiale U 0 ı̂n care simbolurile uQ−1 şi uQ formează un singur
simbol notat uQ−1,Q cu probabilitatea p(uQ−1,Q ) = p(uQ−1 ) + p(uQ ). Fie un cod Z
pentru sursa U se construieşte din codul pentru sursa U 0 ı̂n care cuvintele de cod
corespunzătoare simbolurilor uQ−1 şi uQ din sursa primară U sunt
0 0
zQ−1 = zQ−1,Q 0, zQ = zQ−1,Q 1,
0
unde zQ−1,Q este cuvântul de cod corespunzător simbolului uQ−1,Q , iar celelalte cu-
vinte de cod fiind cele din Z 0 .
Atunci codul Z este cod optimal pentru sursa U dacă codul Z 0 este cod optimal
pentru sursa artificială U 0 .
Demonstraţie. Considerăm simbolurile uQ−1 , uQ din sursa primară U având proba-
bilităţile cele mai mici. Cum dorim să obţinem un cod optimal, lungimile cuvintelor
de cod corespunzătoare celor două simboluri sunt printre cele mai lungi şi cuvintele
de cod diferă numai prin ultima poziţie. Considerăm un cod optimal Z 0 pentru
sursa artificială U 0 . Notăm cu li0 lungimile cuvintelor de cod zi0 din Z 0 şi cu E[LZ 0 ]
9
lungimea medie a cuvintelor de cod. Construim codul Z ı̂n care:
0
l, i<Q−1
li = 0 i
li + 1 i ∈ {Q − 1, Q}
Atunci lungimea medie a cuvintelor din cod din Z este:
Q Q−2
X X
E[LZ ] = p(ui )li = p(ui )li + p(uQ−1 )lQ−1 + p(uQ )lQ
i=1 i=1
Q−2
X
= 0
p(ui )li0 + p(uQ−1 )(lQ−1 + 1) + p(uQ )(lQ + 1) =
i=1
Q
X
= p(ui )li0 + p(uQ−1 ) + p(uQ ) = E[LZ 0 ] + p(uQ−1 ) + p(uQ ).
i=1
Cum suma p(uQ−1 ) + p(uQ ) nu depinde de codul Z 0 , obţinem că E[LZ ] este minimă
dacă E[LZ 0 ] este minimă, deci codul Z este optimal dacă Z 0 este optimal.
10
Cuvintele de cod corespunzătoare simbolurilor sunt:
u1 11
u2 01
u3 101
u4 100
u5 001
u6 0001
u7 0000
Evident că putem să inversăm atribuirea cifrelor (0 pe ramura superioară şi 1 pe
ramura inferioară) şi obţinem codul având cuvintele
u1 00
u2 10
u3 010
u4 011
u5 110
u6 1110
u7 1111
Putem să facem convenţia să punem 0 pe ramura simbolului cu probabilitate mai
mică:
11
În acest caz, cuvintele de cod corespunzătoare simbolurilor sunt:
u1 10
u2 00
u3 111
u4 100
u5 010
u6 0111
u7 0110
Evident că putem să inversăm atribuirea cifrelor şi obţinem codul având cuvintele
u1 01
u2 11
u3 000
u4 011
u5 101
u6 100
u7 1001
Pentru codurile obţinute avem:
7
X
E[L] = p(ui )li = 2.7 simboluri,
i=1
7
X
H(U ) = − p(ui ) log2 p(ui ) = 2.66 bit/simbol
i=1
12
Mai mult,
H(U ) = 2.66 < E[L] = 2.7 < H(U ) + 1 = 3.66,
deci codul este optimal, dar nu este absolut optimal.
Dacă folosim un alfabet cu D cifre 0, 1, . . . , D − 1, atunci putem să obţinem un
cod Huffman astfel:
Pas 1: ordonăm descrescător simbolurile sursei primare.
Pas 2: grupăm ultimele D simboluri cu cele mai mici probabilităţi şi obţinem sim-
bolul artificial uQ−D+1,...,Q−1,Q . După prima restrângere obţinem o sursă artificială
cu Q − D + 1 simboluri.
Pas 3: Se repetă algoritmul. După n restrângeri obţinem o sursă cu Q − nD + n
simboluri. Pentru ca operaţia de codare să fie posibilă, trebuie ca ultima sursă să
furnizeze D simboluri, deci avem D = Q − nD + n, de unde obţinem numărul total
de restrângeri
Q−D
n=
D−1
Exemplu 3.2. Considerăm o sursă U cu simbolurile {u1 , . . . , u7 } şi probabilităţile
p1 = 0.25, p2 = 0.2, p3 = p4 = 0.15, p5 = p6 = 0.1, p7 = 0.05. Vrem un cod ternar.
13
Pentru codul obţinut avem:
7
X 7
X
E[L] = p(ui )li = 1.75 simboluri, H(U ) = − p(ui ) log2 p(ui ) = 2.66 bit/simbol
i=1 i=1
Mai mult,
H(U ) H(U )
= 1.68 < E[L] = 1.75 < 2.68 = + 1,
log2 D log2 D
deci codul este optimal, dar nu este absolut optimal.
Exemplu 3.3. Considerăm o sursă U cu simbolurile {u1 , . . . , u7 } şi probabilităţile
p1 = 0.25, p2 = 0.2, p3 = p4 = 0.15, p5 = p6 = 0.1, p7 = 0.05. Vrem un cod 4−ar
14
deci codul este optimal, dar nu este absolut optimal.
Exemplu 3.4. Să se folosească algoritmul de codare binară Huffman şi algoritmul
de codare binară Shannon-Fano pentru sursa ce emite simbolurile:
a b c d e f g
U:
0.01 0.24 0.05 0.2 0.47 0.01 0.02
15
Pentru codul obţinut avem:
X7
E[L] = p(ui )li = 2.53 simboluri, H(U ) = 1.85 bit/simbol
i=1
16
CANALE DISCRETE DE TRANSMISIE A INFORMAŢIEI
1. Canale de transmisie:
Definiţie 1.1. Un canal de comunicaţie reprezintă mediul fizic prin care se propagă
semnalele de la sursă la utilizator.
Orice canal este caracterizat de spaţiul de intrare, spaţiul de ieşire şi de legătura
probabilistică ı̂ntre cele două spaţii.
Clasificarea canalelor:
• după natura spaţiilor de intrare şi de ieşire:
– canale discrete: dacă ambele spaţii sunt discrete, formate deci din valori
discrete considerate la momente discrete de timp;
– canale continue: dacă ambele spaţii sunt continue din punctul de vedere
al valorilor conţinute. Mai mult, acestea pot fi discrete ı̂n timp (dacă se
transmite la momente discrete de timp) sau continue ı̂n timp (dacă se
transmite tot timpul);
– continuu-discrete sau discrete-continue dacă un spaţiu este continuu şi
celălalt este discret.
• după natura legăturii probabilistice intrare-ieşire:
– canal fără memorie dacă probabilităţile de tranziţie sunt independente
de succesiunea simbolurilor de intrare;
– canal cu memorie dacă probabilitatea oricărei ieşiri depinde de sim-
bolurile de intrare anterioare.
• după influenţa perturbaţiilor:
– canal cu perturbaţii
– canal fără perturbaţii.
Definiţie 1.2. Un canal discret fără memorie (DMC discrete memoryless channel)
este format din:
• un alfabet discret de intrare νX , elementele acestuia reprezentând posibilele
semnale emise pentru toate mesajele de intrare (sursa X);
• un alfabet discret de ieşire νY , elementele acestuia reprezentând posibilele
semnale primite;
• pentru fiecare x ∈ νX , probabilitatea condiţionată pY |X=x pe νY descrie
canalul prin faptul că pentru orice n ∈ N∗ avem:
P (Yn = yn |X1 = x1 , X2 = x2 , . . . , Xn = xn , Y1 = y1 , . . . , Yn−1 = yn−1 ) = P (Y = yn |X = xn )
1
Exemplu 1.1 (Canal binar simetric CBS). Cel mai simplu caz de DMC este canalul
binar simetric. Acesta este definit prin νX = νY = {0, 1} şi prin probabilităţile
condiţionate
pY |X=0 (1) = pY |X=1 (0) (”simetrie”).
Notăm cu p = pY |X=0 (1) = pY |X=1 (0), se numeşte rată de eroare, şi este singurul
parametru al unui canal binar simetric. Într-adevăr, avem
pY |X=0 (0) = pY |X=1 (1) = 1 − p.
Canalul binar simetric poate fi reprezentat sub forma unei diagrame, astfel:
Exemplu 1.2 (Prezenţa perturbaţiilor de-a lungul unui CBS). Vrem să transmitem
8 mesaje:
000, 001, 010, 011, 100, 101, 110, 111.
Presupunem că apar perturbaţii pe canal astfel ı̂ncât este schimbat un simbol din
zece, deci probabilitatea ca un simbol să fie transmis greşit (0 este recepţionat 1 şi
1 este recepţionat 0) este p = 0.1. Prin urmare, avem un canal binar simetric cu
parametrul (rata de eroare) p = 0.1.
Cum fiecare mesaj ce se doreşte a fi transmis este format din 3 simboluri, probabil-
itatea ca acesta să fie transmis corect este (1−p)3 = 0.93 = 0.719 (este probabilitatea
de a transmite corect cele trei simboluri ale mesajului). Prin urmare, probabilitatea
să recepţionăm un mesaj greşit este 1 − 0.719 = 0.281.
Definiţie 1.3. Un canal discret fără memorie este fără reacţie dacă
pXn |x1 ,x2 ,...,xn−1 ,y1 ,...,yn−1 = pXn |x1 ,x2 ,...,xn−1 ,
adică la alegerea unei succesiuni de simboluri de intrare nu intervine cunoaşterea
simbolurilor de ieşire anterioare y1 , . . . , yn−1 .
Teoremă 1.1. Pentru un canal discret fără memorie şi fără reacţie, pentru orice
n ∈ N avem:
n
X
H(Y1 , . . . , Yn |X1 , . . . , Xn ) = H(Yi |Xi ),
i=1
unde X1 , . . . , Xn este o secvenţă de intrare de lungime n şi Y1 , . . . , Yn corespunde
secvenţei de ieşire.
2
Demonstraţie: Din regula lanţului pentru probabilităţi, adică
n
Y
p(x1 , . . . , xn ) = p(xi |x1 , . . . xi−1 )
i=1
avem:
pX1 ,...,Xn ,Y1 ,...,Yn (x1 , . . . , xn , y1 , . . . , yn ) =
Yn
= pX1 (x1 )pY1 |x1 (y1 ) · pXi |x1 ,...,xi−1 ,y1 ,...,yi−1 (xi )pYi |x1 ,...,xi ,y1 ,...,yi−1 (yi ).
i=1
Deoarece canalul este fără reacţie, pentru orice 1 ≤ i ≤ n avem
pXi |x1 ,x2 ,...,xi−1 ,y1 ,...,yi−1 = pXi |x1 ,x2 ,...,xi−1 .
Obţinem:
pX1 ,...,Xn ,Y1 ,...,Yn (x1 , . . . , xn , y1 , . . . , yn ) =
n
Y
= pX1 (x1 )pY1 |x1 (y1 ) · pXi |x1 ,x2 ,...,xi−1 (xi )pYi |x1 ,...,xi ,y1 ,...,yi−1 (yi ) =
i=1
n
! n
!
Y Y
= pX1 (x1 ) pXi |x1 ,x2 ,...,xi−1 (xi ) · pY1 |x1 (y1 ) pYi |x1 ,...,xi ,y1 ,...,yi−1 (yi ) =
i=1 i=1
n
Y
= pX1 ,...,Xn (x1 , . . . , xn ) pY |Xi (yi ).
i=1
Rezultă că n
pX1 ,...,Xn ,Y1 ,...,Yn (x1 , . . . , xn , y1 , . . . , yn ) Y
= pY |Xi (yi ),
pX1 ,...,Xn (x1 , . . . , xn ) i=1
de unde obţinem
n
Y
pY1 ,...,Yn |x1 ,...,xn (y1 , . . . , yn ) = pY |Xi (yi ).
i=1
2. Capacitatea unui canal discret
Definiţie 2.1. Capacitatea unui canal discret fără memorie este cantitatea maximă
de informaţie pe care o poate transmite, deci
C = max I(X|Y ) = max I(Y |X)
pX pX
Avem
H(Y |X) = pX (0)H(Y |X = 0) + pX (1)H(Y |X = 1)
şi
H(Y |X = 0) = −pY |X=0 (0) log2 pY |X=0 (0) − pY |X=0 (1) log2 pY |X=0 (1) =
= −(1 − p) log2 (1 − p) − p log2 p
3
H(Y |X = 1) = −pY |X=1 (0) log2 pY |X=1 (0) − pY |X=1 (1) log2 pY |X=1 (1) =
= −p log2 p − (1 − p) log2 (1 − p)
Obţinem deci
H(Y |X) = pX (0)H(Y |X = 0) + pX (1)H(Y |X = 1) =
= pX (0)(−(1 − p) log2 (1 − p) − p log2 p) + pX (1)(−p log2 p − (1 − p) log2 (1 − p)) =
= (−(1 − p) log2 (1 − p) − p log2 p)(pX (0) + pX (1) = −(1 − p) log2 (1 − p) − p log2 p
Am obţinut deci
H(Y |X) = −(1 − p) log2 (1 − p) − p log2 p.
Notăm cu h̃(p) = (1 − p) log2 (1 − p) + p log2 p şi observăm că nu depinde de pX .
Prin urmare, capacitatea canalului binar simetric este:
C = max(H(Y ) − H(Y |X)) = max H(Y ) − h̃(p).
pX pX
Cum Y este o variabilă aleatoare binară, avem că H(Y ) ≤ log2 2 = 1, deci
H(Y ) ≤ 1. Dacă presupunem că X este uniform repartizată (pX (0) = pX (1) = 0.5),
atunci
pY (0) = pX (0)pY |X=0 (0) + pX (1)pY |X=1 (0) = pX (0)(1 − p) + pX (1)p =
= 0.5(1 − p) + 0.5p = 0.5
pY (1) = pX (0)pY |X=0 (1) + pX (1)pY |X=1 (1) = pX (0)(1 − p) + pX (1)p =
= 0.5(1 − p) + 0.5p = 0.5
deci Y este uniform repartizată, prin urmare H(Y ) = 1. Obţinem deci max H(Y ) =
pX
1 şi capacitatea canulului binar simetric este
C = 1 − h̃(p) = 1 − ((1 − p) log2 (1 − p) + p log2 p).
Observaţie. Dacă p = 0, atunci capacitatea canalului este C = 1 − h̃(0) = 0, deci
canalul nu are perturbaţii.
Dacă p = 21 , atunci canalul are capacitate zero, iar dacă p = 1, capacitatea este 1.
În acest ultim caz, se poate identifica corect simbolul de intrare deoarece obţinerea
lui y1 reprezintă emisia lui x2 şi obţinerea lui y2 reprezintă emisia lui x1 .
4
Exemplu 2.2 (Canal binar cu anulări CBA). Notăm cu p probabilitatea de anulare
a fiecărui simbol. CBA are matricea de tranziţie dată de
1−p 0 p
P (Y |X) = ,
0 1−p p
şi capacitatea este C = 1 − p.
5
deci
H(Y ) = −pX (x1 )(1−p) log2 (pX (x1 )(1−p))−pX (x2 )(1−p) log2 (pX (x2 )(1−p))−p log2 p =
= −pX (x1 )(1 − p) log2 pX (x1 ) − pX (x1 )(1 − p) log2 (1 − p)−
−pX (x2 )(1 − p) log2 pX (x2 ) − pX (x2 )(1 − p) log2 (1 − p) − p log2 p =
= (1 − p)(−pX (x1 ) log2 pX (x1 ) − pX (x2 ) log2 pX (x2 ))−
−pX (x1 )(1 − p) log2 (1 − p) − pX (x2 )(1 − p) log2 (1 − p) − p log2 p
Cum pX (x2 ) = 1 − pX (x1 ), avem:
H(Y ) = (1 − p)[−pX (x1 ) log2 pX (x1 ) − (1 − pX (x1 )) log2 (1 − pX (x1 ))]−
−pX (x1 )(1 − p) log2 (1 − p) − (1 − pX (x1 ))(1 − p) log2 (1 − p) − p log2 p =
= (1 − p)h̃(1 − pX (x1 )) + (1 − p) log2 (1 − p)(−pX (x1 ) − (1 − pX (x1 )) − p log2 p =
= (1 − p)h̃(1 − pX (x1 )) + h̃(p)
Am obţinut
max H(Y ) = max(1 − p)h̃(1 − pX (x1 )) + h̃(p)
pX pX
şi maximum este 1 şi se obţine pentru pX (x1 ) = 0.5, deci
max H(Y ) = max(1 − p)h̃(1 − pX (x1 )) − h̃(p) = 1 − p + h̃(p).
pX pX
Exemplu 2.3 (Canal binar cu erori şi anulări). Notăm cu q probabilitatea de anu-
lare a fiecărui simbol. CBEA are matricea de tranziţie dată de
1−p−q p q
P (Y |X) = ,
p 1−p−q q
şi capacitatea este C = 1 − q − (1 − q) log2 (1 − q) + p log2 p + (1 − p − q) log2 (1 − p − q)
şi se obţine pentru pX (x1 ) = pX (x2 ) = 0.5.
6
Canalul are capacitate maximă dacă p11 = p22 = 1, deci p12 = p21 = 0.
2.1. Canal simetric la intrare. Considerăm un canal discret fără memorie (DMC)
cu alfabetele de intrare şi ieşire finite, adică |νX | = K < ∞ şi |νY | = J < ∞.
Definiţie 2.1.1. Un DMC se numeşte simetric la intrare dacă toate probabilităţile
condiţionate sunt la fel pentru toate simbolurile de ieşire, adică {pY |xi (y) : y ∈ νY }
sunt independente de xi
Cu alte cuvinte, ı̂n diagramă, probabilităţile ce pleacă din fiecare simbol de la
intrare sunt egale (până la o permutare). Elementele de pe fiecare linie din P (Y |X)
sunt aceleaşi, eventual permutate.
Exemplu 2.1.1. Exemple de DMC simetric la intrare (stânga) şi care nu este
simetric la intrare (dreapta).
7
Propoziţie 2.1.1. Pentru un DMC simetric la intrare H(Y |X) este independentă
de distribuţia pX şi H(Y |X) = H(Y |xi ), pentru orice xi ∈ νX .
Demonstraţie: Din definiţia canalului simetric la intrare avem că pentru orice xi ∈
n
P
νX : H(Y |xi ) = − pj log2 pj , unde pj (y) = pY |xi (y), 1 ≤ j ≤ n şi sunt indepen-
j=1
dente de xi . Atunci:
X X
H(Y |X) = pX (x)H(Y |x) = H(Y |x) pX (x) = H(Y |x).
x∈νx x
Teoremă 2.1.1. Un canal discret fără memorie simetric la intrare are capacitatea
C = max H(Y ) − H0 ,
pX
8
Teoremă 2.2.1. Un canal discret fără memorie simetric la ieşire are proprietatea
că
max H(Y ) = log2 |νY |.
pX
9
Observaţie. Baza b se alege ca fiind aritatea codului. Mai mult, |νU | este numărul
tuturor cuvintelor de cod.
Exemplu 2.5. Considerăm că avem un canal cu perturbaţii şi vrem să folosim un
cod definit prin:
a 7→ aaa, b 7→ bbb, c 7→ ccc.
Indiferent de mesajul transmis, prin codare fiecare simbol al sursei este scris de trei
ori, deci mesajul va fi codat ı̂ntr-un mesaj de trei ori mai lung. Ne propunem să
calculăm rata de transmitere a codului prin canal. Avem D = 3 (aritatea codului),
toate cuvintele de cod au lungime fixată n = 3m, unde m este lungimea mesajului şi
numărul tuturor mesajelor de lungime m este |νU | = 3m . Atunci rata de transmitere
este:
log3 |νU | log3 3m m 1
R3 = = = =
n 3m 3m 3
10
deci
n
X n
X n
X
I(X1 , . . . , Xn |Y1 , . . . , Yn ) ≤ (H(Yi ) − H(Yi |Xi )) = I(Xi |Yi ) ≤ C = nC.
i=1 i=1 i=1
Fie U o variabilă aleatoare şi considerăm Û o variabilă aleatoare ce estimează pe
U (ambele variabile aleatoare iau valori din aceeaşi mulţimea νU ). Atunci o eroare
apare când Û 6= U şi probabilitatea de apariţie a unei erori este
Pe = P (Û 6= U ).
Lema 3.2 (Lema lui Fano). Fie U şi Û două variabile aleatoare cu aceleaşi valori
dintr-un alfabet D−ar şi Pe = P (Û 6= U ). Atunci:
h̃(Pe ) + Pe log2 (D − 1) ≥ H(U |Û ),
unde h̃(Pe ) = −Pe log2 Pe − (1 − Pe ) log2 (1 − Pe ).
Demonstraţie: Definim variabila aleatoare Z prin
0; Û = U
Z=
1; Û 6= U
care indică diferenţa dintre U şi Û . Deci Z este variabilă aleatoare
0 1
Z:
1 − Pe P e
de entropie
H(Z) = −Pe log2 Pe − (1 − Pe ) log2 (1 − Pe ) = h̃(Pe ).
Atunci
H(U, Z|Û ) = H(U |Û ) + H(Z|Û , U ) = H(U |Û )
deoarece H(Z|Û , U ) = 0 pentru că Z este ı̂n mod unic determinat de U şi Û . Atunci:
H(U |Û ) = H(U, Z|Û ) = H(Z|Û ) + H(U |Û , Z).
Cum H(Z|Û ) ≤ H(Z), obţinem
H(U |Û ) = H(U, Z|Û ) = H(Z|Û ) + H(U |Û , Z) ≤ H(Z) + H(U |Û , Z).
Mai mult, H(U |Û , Z = 0) = 0 deoarece, ı̂n acest caz, U este unic determinat. În
plus, H(U |Û , Z = 1) ≤ log2 (D − 1), deoarece, pentru orice valoare u ∈ Û există,
când Z = 1, cel mult D − 1 valori cu probabilităţi nenule pentru U (sunt cel mult
D − 1 valori pentru U când Z = 1):
∀u ∈ νU : H(U |Û , Z = 1) ≤ log2 (D − 1).
Atunci, prin ı̂nlocuire ı̂n definiţia entropiei condiţionate, avem:
H(U |Û , Z) = pZ (0)H(U |Û , Z = 0)+pZ (1)H(U |Û , Z = 1) = pZ (1)H(U |Û , Z = 1) ≤
≤ pZ (1) log2 (D − 1) = Pe log2 (D − 1).
11
Prin urmare, am obţinut:
H(U |Û ) ≤ H(Z) + H(U |Û , Z) ≤ h̃(Pe ) + Pe log2 (D − 1),
ceea ce ı̂ncheie demonstraţia.
Interpretare pentru lema lui Fano: Incertitudinea ı̂n determinarea lui U
când se cunoaşte Û , H(U |Û ), are două componente. Prima componentă este incer-
titudinea apariţiei unei erori, deci pentru a determina pe U se verifică dacă U = Û ,
situaţie ı̂n care sunt necesari h̃(Pe ) biţi (erorile apar cu probabilitatea Pe ). A doua
componentă a incertitudinii apare dacă U este diferit de Û , caz ı̂n care rămân doar
D − 1 posibilităţi pentru U . Dacă U 6= Û (se ı̂ntâmplă cu probabilitatea Pe ), atunci
sunt necesari ı̂ncă cel mult Pe log2 (D − 1) biţi. Egalitatea ı̂n lema lui Fano apare
când toate cele D − 1 valori false sunt echiprobabile.
Fie două procesoare legate ı̂n cascadă, ieşirea Z fiind legată de intrarea X prin
intermediul lui Y . Dacă X, Y, Z sunt variabile aleatoare care verifică condiţia:
p(Z|X, Y ) = p(Z|Y ),
atunci secvenţa X → Y → Z formează un lanţ Markov.
Observaţie. pZ|x,y (z) = pZ|y (z) pentru orice y cu pY (y) 6= 0 ı̂nseamnă că atunci când
y este dat, z nu mai este influenţat de x.
Lema 3.3 (Lema prelucrării datelor). Dacă X, Y, Z este un lanţ Markov, atunci:
I(X|Z) ≤ I(X|Y ), I(X|Z) ≤ I(Y |Z).
Demonstraţie: Cum X, Y, Z formează un lanţ Markov, avem că p(Z|X, Y ) = p(Z|Y ),
deci H(Z|X, Y ) = H(Z|Y ). Avem:
I(Y |Z) = H(Z) − H(Z|Y ) = H(Z) − H(Z|X, Y ) ≥ H(Z) − H(Z|X) = I(X|Z),
unde am folosit H(Z|X, Y ) ≤ H(Z|X) deoarece orice condiţionare suplimentară
micşorează incertitudinea.
Mai departe, demonstrăm că p(Z|X, Y ) = p(Z|Y ) implică p(X|Y, Z) = p(X|Y ),
adică
pX|y,z (x) = pX|y (z).
De fapt, demonstrăm că Z, Y, X este un lanţ Markov. Avem:
pX,Y,Z (x, y, z) pZ|x,y (z) · pX,Y (x, y)
pX|y,z (x) = = .
pY,Z (y, z) pY,Z (y, z)
12
Cum pZ|x,y (z) = pZ|y (z) pentru orice y cu pY (y) 6= 0, obţinem:
pZ|y (z) · pX,Y (x, y) pY,Z (y, z) pX,Y (x, y) pX,Y (x, y)
pX|y,z (x) = = · = = pX|y (x).
pY,Z (y, z) pY (y) pY,Z (y, z) pY (y)
Analog, din p(X|Z, Y ) = p(X|Y ) avem H(X|Z, Y ) = H(X|Y ). Atunci
I(X|Y ) = H(X) − H(X|Y ) = H(X) − H(X|Z, Y ) ≥ H(X) − H(X|Z) = I(X|Z).
Observaţie. Prin prelucrarea datelor nu se poate obţine mai multă informaţie su-
plimentară. Procesoarele doar pierd informaţia, informaţia transmisă de la intrarea
primului procesor până la ieşirea celui de-al doilea procesor fiind mai mică decât
informaţia transmisă prin fiecare procesor ı̂n parte. Dacă se consideră un lanţ for-
mat din codor, canal şi decodor, obţinem că atât codorul cât şi decodorul nu conduc
la nici un câştig de informaţie, ele fiind necesare doar pentru a transmite informaţia
prin canal.
Considerăm un canal discret fără memorie şi fără reacţie şi presupunem că informaţia
ce urmează a fi transmisă este dată de o sursă binară simetrică (BSS), adică de o
sursă binară, fără memorie, cu p(0) = p(1) = 0.5. Ne propunem să demonstrăm că
este imposibil să transmitem corect informaţia cu o rată de transmitere mai mare
decât capacitatea canalului.
Teoremă 3.4 (Reciproca teoremei de codare pe un canal cu perturbaţii). Dacă se
foloseşte o sursă binară simetrică (BSS) la o rată R pe un DMC fără reacţie de
capacitate C şi dacă R > C, atunci Pb , probabilitatea de eroare per bit la recepţia
mesajului, verifică inegalitatea
−1 C
Pb ≥ h̃ 1− ,
R
unde h̃−1 (x) = min{p : −p log2 p − (1 − p) log2 (1 − p) = x}.
Demonstraţie: Probabilitatea de eroare per bit la recepţionare este
m
1 X
Pb = P (Ûi 6= Ui ),
m i=1
unde m este lungimea mesajului de la intrare.
Aplicăm lema lui Fano pentru cazul binar (D = 2) şi obţinem:
h̃(P (Ûi 6= Ui )) ≥ H(Ui |Ûi ),
de unde obţinem
m
X m
X
h̃(P (Ûi 6= Ui )) ≥ H(Ui |Ûi ).
i=1 i=1
Remarcăm faptul că:
Xm m
X
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = H(U1 |Û1 )+ H(Ui |Û1 , . . . , Ûm , U1 , . . . , Ui−1 ) ≤ H(Ui |Ûi ),
i=2 i=1
13
deoarece condiţionările suplimentare micşorează incertitudinea.
Mai mult, ştim că funcţia h̃(x) este concavă (pentru 0 ≤ x ≤ 1), deci:
m m
!
1 X 1 X
h̃(P (Ûi 6= Ui )) ≤ h̃ P (Ûi 6= Ui ) = h̃(Pb ).
m i=1 m i=1
Până acum am obţinut:
m m
1 X 1 X 1
h̃(Pb ) ≥ h̃(P (Ûi 6= Ui )) ≥ H(Ui |Ûi ) ≥ H(U1 , . . . , Um |Û1 , . . . , Ûm ),
m i=1 m i=1 m
deci
1
h̃(Pb ) ≥ H(U1 , . . . , Um |Û1 , . . . , Ûm ).
m
Dar
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = H(U1 , . . . , Um ) − I(U1 , . . . , Um |Û1 , . . . , Ûm ).
Am presupus că sursa este binară şi simetrică (BSC), deci H(U1 , . . . , Um ) = log2 2m =
m, deci
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = m − I(U1 , . . . , Um |Û1 , . . . , Ûm ).
Pentru I(U1 , . . . , Um |Û1 , . . . , Ûm ) aplicăm lema lui Fano astfel: procesorul 1 este
codarea şi procesorul 2 este canalul. Dacă notăm cu zi codul pentru Ui , avem:
I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≤ I(z1 , . . . , zn |Û1 , . . . , Ûm ).
Aplicăm din nou lema lui Fano astfel: procesorul 1 este canalul şi procesorul 2 este
decodorul.
I(z1 , . . . , zn |Û1 , . . . , Ûm ) ≤ I(z1 , . . . , zn |ẑ1 , . . . , ẑn ).
Obţinem
I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≤ I(z1 , . . . , zn |ẑ1 , . . . , ẑn ).
În plus, avem
I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≤ nC.
Rezultă că
H(U1 , . . . , Um |Û1 , . . . , Ûm ) = m − I(U1 , . . . , Um |Û1 , . . . , Ûm ) ≥ m − nC
şi cum
1
h̃(Pb ) ≥ H(U1 , . . . , Um |Û1 , . . . , Ûm ),
m
14
obţinem
1 n
h̃(Pb ) ≥ (m − nC) = 1 − C.
m m
Din definiţia ratei de transmitere a codului R = m
n
, găsim că
C
h̃(Pb ) ≥ 1 − .
R
Teoremă 3.5 (Teorema de codare pe un canal cu perturbaţii). Fie un DMC fără
reacţie de capacitate C şi un mesaj ce se transmite la o rată R. Atunci pentru R < C
şi pentru orice ε > 0 există un cod (corector de erori) de rată R şi cu probabilitatea
de eroare per bit la ieşire Pb < ε.
Prin urmare, alegând o metodă adecvată de a coda informaţia printr-un canal, se
poate ajunge la probabilitate de eroare cât mai mică posibil.
15
CODURI CORECTOARE DE ERORI
CURS 6
1. Distanţa Hamming
Teorema de codare pe canale cu zgomot determină limite teoretice pentru a coda
un mesaj ce urmează a a fi transmis printr-un canal cu zgomot. Totuşi, această
teoremă nu furnizează indicaţii asupra modului ı̂n care, ı̂n practică, pot fi construitte
coduri corectoare de erori eficiente.
Când un cuvânt de cod zi este transmis printr-un canal cu zgomot şi se primeşte
ẑ, eroarea apărută este caracterizată de e = ẑ − zi , prin urmare este important să
definim o astfel de diferenţă.
Fie D un număr prim, n ∈ N∗ , şi considerăm
ZnD = {x = (x1 , . . . , xn ) : xi ∈ ZD , 1 ≤ i ≤ n}
şi pentru orice x = (x1 , . . . , xn ), y = (y1 , . . . , yn ) ∈ ZnD avem:
x + y = (x1 + y1 , . . . , xn + yn ).
De remarcat faptul că pentru orice x ∈ ZnD avem D · x = x + . . . + x = 0, unde
0 = (0, . . . , 0) ∈ ZnD .
Observaţie. Pentru simplitate, notăm x = (x1 . . . , xn ) cu x = x1 x2 . . . xn .
Definiţie 1.1. Un cod bloc D−ar de lungime n este o submulţime nevidă a spaţiului
vectorial ZnD .
Exemplu 1.1. Un cod bloc binar de lungime 4 este C = {1101, 0001, 1010}. În
schimb, C = {111, 0} nu este cod bloc deoarece cele două cuvinte de cod au lungimi
diferite.
Definiţie 1.2. Fie w = a1 a2 · · · an un cuvânt de lungime n. Se numeşte ponderea
lui w şi se notează cu wt(w) numărul de elemente nenule ai :
wt(w) = |{i : ai 6= 0}|,
Exemplu 1.2. Avem wt(w) = 1221002 = 5 şi wt(11101101) = 6.
Observaţie. În cazul ı̂n care w = a1 a2 · · · an este un cuvânt binar de lungime n,
atunci wt(w) este numărul de elemente ai ce au valoarea 1, deci
Xn
wt(w) = ai .
i=1
1
• wt(−w) = wt(w), unde −w este cuvântul ı̂n care fiecare simbol este opusul
simbolului corespunzător din w ;
• wt(v + w) ≤ wt(v) + wt(w).
Exemplu 1.3. Considerăm cuvintele binare v = 011011 şi w = 111001. Avem:
wt(v) = 4, wt(w) = 4. Obţinem
v + w = 011011 + 111001 = 100010
şi wt(v + w) = wt(100010) = 2 < wt(v) + wt(w).
Considerăm cuvintele ternare v = 01221021 şi w = 21002010. Avem: wt(v) = 6,
wt(w) = 4. Obţinem
v + w = 01221021 + 21002010 = 22220001
şi wt(v + w) = wt(22220001) = 5 < wt(v) + wt(w) = 10.
Dacă v = 01221021 este cuvânt ternar, atunci −v = 02112012 şi wt(v) = 6 =
wt(−v).
Observaţie. Proprietatea wt(−w) = wt(w) este trivială pentru cazul binar, deoarece
−w = w.
Demonstraţie: Demonstrăm ultima afirmaţie pentru cazul binar: notăm cu x =
v + w, x = x1 · · · xn , unde xi = ai + bi , pentru orice 1 ≤ i ≤ n. Remarcăm faptul
că xi = 1 dacă ai = 1 sau bi = 1, dar nu simultan. Deci:
{i : xi = 1} ⊂ {i : ai = 1} ∪ {i : bi = 1}
şi cum |A ∪ B| ≤ |A| + |B|, obţinem că wt(v + w) = wt(x) ≤ wt(v) + wt(w).
Definiţie 1.3. Fie zi , zj două cuvinte de cod de lungime n. Se numeşte distanţa
dintre cuvinte şi se notează cu d(v, w) numărul natural:
d(v, w) = wt(v − w).
Distanţa dintre v şi w reprezintă numărul de poziţii ı̂n care cele două cuvinte diferă
şi se mai numeşte distanţă Hamming.
Exemplu 1.4. Considerăm cuvintele binare v = 011011 şi w = 110001. Avem:
wt(v) = 4, w = 3.
Distanţa dintre cuvintele v şi w este:
d(v, w) = wt(v − w) = wt(101010) = 3.
Cele două cuvinte diferă pe poziţiile 1, 3, 5.
Considerăm cuvintele 4−are v = 0123 şi w = 2103. Avem: wt(v) = 3, wt(w) = 3.
Distanţa dintre cuvintele v şi w este:
d(v, w) = wt(v − w) = wt(0123 − 2103) = wt(2020) = 2.
Cele două cuvinte diferă pe poziţiile 1, 3.
Propoziţie 1.2. Distanţa Hamming este o distanţă pe ZnD × ZnD , adică verifică
relaţiile:
• d(v, w) ≥ 0 şi d(v, w) = 0 dacă şi numai dacă v = w;
2
• d(v, w) = d(w, v);
• d(v, w) ≤ d(v, u) + d(u, w), pentru orice v, u, w cuvinte.
Am văzut că eroarea care apare când se transmite zi şi se primeşte ẑ este carac-
terizată de e = ẑ − zi . Prin urmare, numărul erorilor care apar reprezintă wt(ẑ − zi ),
adică distanţa Hamming dintre ẑ şi zi , d(ẑ, zi ).
Definiţie 1.4 (decodare prin minimum distanţei). Fie C un cod. Dacă ẑ este
cuvântul primit, atunci a corecta (sau a decoda) cuvântul prin minimum distanţei
ı̂nseamnă a selecta cuvântul de cod z ∈ C astfel ı̂ncât:
d(z, ẑ) = min{d(z, ẑ) : z ∈ C}.
Prin urmare, decodorul D este definit de
D(ẑ) = Argminz∈C d(z, ẑ) = {z ∈ C : d(z 0 , ẑ) ≥ d(z, ẑ), ∀z 0 ∈ C}.
Deci decodăm ẑ prin cuvântul de cod aflat la distanţa Hamming cea mai mică
faţă de ẑ.
Exemplu 1.5. Considerăm codul bloc binar C = {111, 000} şi vrem să decodăm
ẑ = 010 prin minimum distanţei. Avem d(111, ẑ) = 2, d(000, ẑ) = 1, deci D(ẑ) =
000.
Observaţie. O altă metodă de a decoda este ”Maximum Likelihood Decoding” (MLD).
Dacă se primeşte ẑ, atunci un observator ideal va alege să decodeze ẑ prin cuvântul
de cod z cu proprietatea că P (X = z|Y = ẑ) este cea mai mare, deci D(ẑ) =
Argmaxz∈C P (X = z|Y = ẑ). Numim această metodă de decodare ”Maximum Like-
lihood Decoding” (MLD). Cum, ı̂n practică, P (X = zi ) nu sunt cunoscute, dacă
presupunem că toate cuvintele de cod sunt echiprobabile, avem:
P (Y = ẑ|X = z) · P (X = z)
Argmaxz∈C P (X = z|Y = ẑ) = Argmaxz∈C =
P (Y = ẑ)
= Argmaxz∈C P (Y = ẑ|X = z) · P (X = z) = Argmaxz∈C P (Y = ẑ|X = z).
Am folosit faptul că ẑ a fost recepţionat, deci P (Y = ẑ) = 1 şi, la ultima egalitate,
faptul că toate cuvintele de cod sunt echiprobabile.
Am obţinut
Argmaxz∈C P (X = z|Y = ẑ) = Argmaxz∈C P (Y = ẑ|X = z),
deci decodorul va decoda pe ẑ prin cel mai probabil cuvânt de cod, adică prin
cuvântul de cod z cu proprietatea că P (Y = ẑ|X = z) este cea mai mare.
Observaţie. Dacă considerăm un canal binar simetric CBS ı̂n care cele două sim-
boluri au aceeaşi probabilitate de eroare p, atunci
P (X = z|Y = ẑ) = pd(z,ẑ) (1 − p)n−d(z,ẑ)
deoarece sunt exact d(z, ẑ) simboluri care au fost transmise greşit şi exact n − d(z, ẑ)
simboluri transmise corect.
Cuvântul de cod z cu proprietatea că P (Y = ẑ|X = z) este cea mai mare este cel
pentru care d(z, ẑ) este cea mai mică. Prin urmare, pentru un CBS avem:
3
D(ẑ) = Argminz∈C d(z, ẑ) = Argmaxz∈C P (Y = ẑ|X = z),
deci metoda de decodare prin minimum distanţei coincide cu MLD.
2. Detectarea şi corectarea erorilor
Dat un cod bloc de lungime n, ne punem problema să decidem a priori câte
erori poate corecta codul, respectiv câte erori poate detecta. Pentru codurile bloc
răspunsurile sunt date ı̂n termeni de distanţa unui cod.
Definiţie 2.1. Se numeşte distanţă Hamming a codului C = {z1 , . . . , zM } ⊆ ZnD cea
mai mică distanţă Hamming dintre elementele codului:
dmin C = min d(zi , zj ).
i6=j
Exemplu 2.1. Distanţa codului C = {00000, 00111, 11100, 11011} este dmin C = 3
deoarece
d(00000, 00111) = 3, d(00000, 11100) = 3, d(00000, 11011) = 4,
d(00111, 11100) = 4, d(00111, 11011) = 3, d(11100, 11011) = 3.
Observaţie. Dacă se transmite un cuvânt z şi se recepţionează ẑ, atunci considerăm
ẑ = z + e, unde e = ẑ − z este eroarea de transmitere. Codul C este cod corector de t
erori dacă pentru orice cuvânt de cod z şi orice cuvânt e cu wt(e) ≤ t, atunci z este
singurul cuvânt de cod aflat la distanţă minimă de z + e. Deci dacă z este un cuvânt
de cod şi ẑ se obţine din z schimbând cel mult t intrări, atunci, prin decodarea prin
minimum distanţei, ẑ se va decoda prin z, deci D(ẑ) = z.
Teoremă 2.1 (Capacitatea de corectare şi detectare a erorilor). Fie C un cod bloc de
lungime n. Pentru orice numere ı̂ntregi t, s astfel ı̂ncât 0 ≤ t ≤ n şi 0 ≤ s ≤ n − t,
codul, folosind distanţa minimă, poate corecta toate tipurile de cel mult t erori şi
poate detecta toate tipurile de t+1, . . . , t+s erori dacă şi numai dacă dmin C > 2t+s.
Deci
C corectează t erori şi detectează t + s erori ⇔ dmin C > 2t + s.
Demonstraţie: Demonstrăm că C nu poate corecta toate tipurile de cel mult t erori
sau nu poate detecta toate tipurile de t + 1, . . . , t + s erori dacă şi numai dacă
dmin C ≤ 2t + s.
Dacă C nu poate corecta toate tipurile de cel mult t erori, atunci există un cuvânt
de cod zi şi o eroare e cu wt(e) ≤ t astfel ı̂ncât D(zi + e) 6= zi . Notăm cu zj cuvântul
de cod astfel ı̂ncât D(zi + e) = zj . Avem:
d(zi , zj ) ≤ d(zi , zi + e) + d(zi + e, zj ),
din inegalitatea triunghiului. Avem d(zi , zi + e) = wt((zi + e) − zi ) = wt(e) ≤ t.
În plus, pentru că decodorul foloseşte decodarea prin minimum distanţei, avem
d(zi + e, zj ) ≤ d(zi + e, zi ), deci d(zi + e, zj ) ≤ d(zi + e, zi ) = wt(e) ≤ t. Obţinem
deci:
d(zi , zj ) ≤ d(zi , zi + e) + d(zi + e, zj ) ≤ t + t ≤ 2t + s.
4
Rezultă că
dmin C ≤ d(zi , zj ) ≤ 2t + s.
Dacă C poate corecta cel mult t erori dar nu poate detecta t + 1, . . . , t + s erori,
atunci există un cuvânt de cod zi şi o eroare e cu t + 1 ≤ wt(e) ≤ t + s care nu este
detectată şi este decodată prin cuvântul de cod zj , adică D(zi +e) = zj . Considerăm
eroarea e0 = zj − (zi + e) şi avem D(zj + e0 ) = zj (adică e0 este o eroare corectată
când se aplică lui zj .) Cum
wt(e0 ) = d(zj + e0 , zj ) = d(zi + e, zj ) ≤ d(zi + e, zi ) = wt(e)
inegalitatea pentru că folosim decodarea prin minimum distanţei, avem
wt(e0 ) ≤ t + s şi D(zj + e0 ) = zj .
Atunci wt(e0 ) ≤ t, deci
d(zi , zj ) ≤ d(zi , zi + e) + d(zi + e, zj ) ≤ (t + s) + t = 2t + s,
deci dmin C ≤ 2t + s.
Prin urmare, dacă C nu poate corecta cel mult t erori şi nu poate detecta toate
cele t + 1, . . . , t + s erori, atunci am demonstrat că dmin C ≤ 2t + s.
Invers, presupunem că dmin C ≤ 2t + s. Atunci există două cuvinte de cod diferite
zi , zj astfel ı̂ncât d(zi , zj ) ≤ 2t + s, deci wt(zi − zj ) ≤ 2t + s.
Dar orice vector z cu wt(z) ≤ 2t + s poate fi fi scris ca suma dintre vectorii e şi
f astfel ı̂ncât wt(e) ≤ t şi wt(f ) ≤ t + s astfel: trecem primele t componente nenule
din z ı̂n e (sau toate cele t componente dacă wt(z) < t) şi restul componentelor,
completând cu zerouri, ı̂n f . De exemplu, dacă z = 01111011 şi considerăm t = 2 şi
s = 2, atunci e = 01100000 şi f = 00011011. Prin urmare, există erorile e şi e0 = −f
astfel ı̂ncât wt(e) ≤ t, wt(e0 ) ≤ t + s şi zi − zj = e − e0 , adică zi + e0 = zj + e. Acest
lucru ı̂nseamnă că două cuvinte de cod diferite şi două erori diferite vor fi decodate
la fel, deoarece zi + e0 = zj + e implică D(zi + e0 ) = D(zj + e). Prin urmare, fie
zi + e0 nu este corectat (D(zi + e0 ) 6= zi ), fie zj + e nu este detectat (D(zj + e) = zi ).
Obţinem deci că nu toate tipurile de cel puţin t erori pot fi corectate sau nu toate
tipurile de t + 1, . . . , t + s erori pot fi detectate.
Teoremă 2.2 (Capacitatea de detectare a erorilor). Un cod bloc C, cu decodarea
prin minimum distanţei, poate detecta cel mult dmin C − 1 erori.
Demonstraţie: Se alege t = 0 şi s = dmin C − 1 ı̂n Teorema [Capacitatea de corectare
şi detectare a erorilor].
Teoremă 2.3 (Capacitatea de corectare a erorilor). Un cod bloc C, cu decodarea
prin minimum distanţei, poate corecta cel mult dmin2C−1 erori, dar nu poate corecta
dmin C−1
2
+ 1 erori.
Demonstraţie: Se alege t = dmin2C−1 şi s = 0 ı̂n Teorema [Capacitatea de corectare
şi detectare a erorilor]. Nu se poate alege o valoare t mai mare deoarece dmin C ≤
dmin C−1
2· 1+ 2
.
Exemplu 2.2. Un cod bloc de distanţă minimă 8 poate:
5
• corecta cel mult o eroare şi poate detecta ı̂ntre 2 şi 6 erori (t = 1, s = 5);
• corecta cel mult 2 erori şi poate detecta ı̂ntre 3 şi 5 erori (t = 2, s = 3);
• corecta cel mult 3 erori şi poate detecta 4 erori (t = 3, s = 1);
• detecta cel mult 7 erori (t = 0, s = 7);
Un cod bloc de distanţă minimă 9 poate:
• corecta cel mult o eroare şi poate detecta ı̂ntre 2 şi 7 erori (t = 1, s = 6);
• corecta cel mult 2 erori şi poate detecta ı̂ntre 3 şi 6 erori (t = 2, s = 4);
• corecta cel mult 3 erori şi poate detecta 4 şi 5 erori (t = 3, s = 2);
• corecta cel mult 4 erori (t = 4, s = 0);
• detecta cel mult 8 erori (t = 0, s = 8);
3. Coduri liniare
Definiţie 3.1. Un (n, m)−cod liniar D−ar de lungime n este orice subspaţiu vecto-
rial C de dimensiune m al spaţiului vectorial ZnD peste ZD , 1 ≤ m ≤ n. Elementele
acestei submulţimi se numesc cuvinte de cod.
Exemplu 3.1. • Mulţimea C = {000, 010, 100, 110} este un (3, 2) cod liniar bi-
nar (subspaţiu vectorial de dimensiune m = 2, şi lungimea cuvintelor de cod
este n = 3), iar mulţimea C = {0000, 1000, 1100, 0100, 1101, 0001, 0101, 1001}
este un (4, 3) cod liniar binar (subspaţiu vectorial de dimensiune m = 3, şi
lungimea cuvintelor de cod este n = 4).
• Mulţimea C = {010, 100, 110} nu este cod liniar deoarece nu conţine cuvan̂tul
de cod 000 (orice subspaţiu vectorial conţine vectorul nul).
• Mulţimea C = {00, 01, 10} nu este cod liniar deoarece 01 + 10 = 11 şi 11 nu
este cuvânt de cod.
Propoziţie 3.1. Orice cod liniar conţine cuvântul de cod nul 0.
Propoziţie 3.2. Un (n, m) cod liniar D−ar conţine Dm cuvinte de cod diferite.
Demonstraţie: Un (n, m) cod liniar D−ar este un subspaţiu vectorial de dimensiune
m al lui ZnD , deci conţine o bază cu m vectori din ZnD . Prin urmare, orice cuvânt
de cod este o combinaţie liniară de cei m vectori cu coeficienţi din ZD . Cum sunt
exact Dm combinaţii, obţinem că sunt exact Dm cuvinte de cod distincte.
m
Propoziţie 3.3. Rata de transmitere a unui (n, m) cod liniar D−ar este R = n
.
Demonstraţie: Rata de transmitere a unui cod D−ar al unei surse cu M mesaje
diferite având cuvintele de cod de lungime n este R = logDn M . Cum avem Dm
cuvinte de cod, ı̂nseamnă că putem coda M = Dm mesaje diferite, deci
logD M logD Dm m
R= = = .
n n n
6
Propoziţie 3.4. Pentru orice cod liniar C avem:
dmin C = wtmin C,
unde wtmin C este ponderea minimă a codului, adică
wtmin C = min{wt(z) : z ∈ C, z 6= 0}.
Demonstraţie: Fie codul liniar C şi, prin definiţie, dmin C = min d(zi , zj ). Atunci
i6=j
Dar codul este liniar, deci pentru cuvintele de cod zi şi zj avem şi zi − zj cuvânt de
cod (mai mult, dacă i = j, atunci zi − zj = 0). Prin urmare:
dmin C = min wt(zi − zj ) ≥ wtmin C = min wt(z).
i6=j
Invers, pentru orice cuvânt de cod zi , avem d(zi , 0) = wt(zi ). Cum 0 ∈ C, pentru
orice cod liniar, obţinem:
dmin C = min d(zi , zj ) ≤ min d(zi , 0) = min wt(zi ) = wtmin C.
i6=j i i
Exemplu 3.2. Codul liniar C = {0000, 1000, 1100, 0100, 1101, 0001, 0101, 1001} are
wtmin C = 1, deci dmin C = 1 (poate corecta dmin2C−1 = 0 erori). Avem: wt(0000) = 0,
wt(1000) = 1, wt(1100) = 2, wt(0100) = 1, wt(1101) = 3, wt(0001) = 1, wt(0101) =
2, wt(1001) = 2.
Fie x1 , . . . , xn ∈ ZD simbolurile care apar ı̂n scrierea unui cuvânt cod.
Definiţie 3.2. Se consideră sistemul de ecuaţii liniare cu coeficienţi ı̂n ZD :
a11 x1 + a12 x2 + . . . + a1n xn = 0
a21 x1 + a22 x2 + . . . + a2n xn = 0
..
.
am1 x1 + am2 x2 + . . . + amn xn = 0
Mulţimea soluţiilor sistemului se numeşte cod grup.
Matricea A = (aij ) ∈ Mm,n (ZD ) se numeşte matrice de control. Presupunem că
rang(A) = t şi că j1 , . . . , jt sunt coloanele liniar independente. Atunci cele m =
n − t simboluri xi , i ∈ [n] \ {j1 , . . . , jt } sunt simboluri informaţionale. Simbolurile
xj1 , . . . , xjt se numesc simboluri de control. Un cod grup trebuie să conţină Dm
cuvinte de cod m = n − rang A. Fiecare cuvânt se obţine dând valori celor m
simboluri informaţionale.
Exemplu 3.3. Se consideră sistemul de ecuaţii liniare ı̂n Z2 :
x1 + x4 + x5 = 0
x2 + x3 + x4 + x6 = 0
x + x + x + x = 0
1 3 4 6
7
Atunci matricea de control:
1 0 0 1 1 0 1 0 0 1 1 0
A = 0 1 1 1 0 1 ∼ 0 1 1 1 0 1
1 0 1 1 0 1 0 0 1 0 1 1
are rangul t = rang(A) = 3, simbolurile de control sunt x1 , x2 , x3 , iar cele informaţionale
fiind cele m = n − t = 6 − 3 = 3 simboluri rămase (x4 , x5 , x6 ).
Rezolvăm sistemul:
x1 = x4 + x5
x2 + x3 = x4 + x6
x =x +x
3 5 6
deci soluţia generală este:
x1 x4 + x5 1 1 0
x2 x4 + x5 1 1 1
x3 x5 + x6 0 0 1
= = x4 + x5 + x6
x4 x4 1 0 0
x x 0 1 0
5 5
x6 x6 0 0 1
Cuvintele codului sunt toate soluţiile acestui sistem (23 = 8 cuvinte distincte),
deci:
w1 000000
w2 001001
w3 111010
w4 110011
w5 110100
w6 101101
w7 001110
w8 000111
8
TEORIA INFORMAŢIEI ŞI CODURI
CURS 7
Coduri liniare
Observaţie. Fie C un (n, m)−cod liniar D−ar. Fie z1 , . . . , zm o bază pentru acest
subspaţiu, zi ∈ ZnD , 1 ≤ i ≤ m. Orice cuvânt de cod z ∈ C se scrie unic sub forma
m
ui zi , ui ∈ ZD . Deci u = (u1 , . . . , um ) ∈ Zm
P
z= D determină ı̂n mod unic cuvântul
i=1
de cod z.
Definiţie 1.2. O matrice G ∈ Mm,n (ZD ),
z1
z2
G=
...
zm
se numeşte matrice generatoare a unui (n, m)−cod liniar C dacă şi numai dacă
{z1 . . . , zm } este o bază pentru C.
Mesajul u ∈ Zm D este codat prin z = u · G, deci cuvintele codului C sunt date de
C = {z = u · G|u ∈ Zm D}
1
Aceasta este matricea generatoare a (5, 2)−codului liniar binar ı̂n care cuvintele
de cod sunt obţinute astfel: ı̂nmulţim fiecare succesiune de simboluri u ∈ Z22 cu
matricea generatoare:
1 0 0 1 1
(u1 u2 ) · = (u1 u2 u2 u1 u1 + u2 ),
0 1 1 0 1
deci cuvintele de cod sunt
C = {00000, 01101, 10011, 11110}.
Funcţia de codificare este:
u1 u2 zi
0 0 00000
0 1 01101
1 0 10011
1 1 11110
Se observă că 10011 şi 01101 sunt liniar independenţi, deci formează o bază pentru
subspaţiul C (rangul matricei G este 2)
Observaţie. Deoarece baza unui subspaţiu nu este unică, matricea generatoare nu
este unică. Cuvintele de cod sunt unice, dar se modifică funcţia de codificare.
Exemplu 1.2. Matricea
1 1 1 1 0
G= ∈ M2,5 (Z2 )
1 0 0 1 1
este matricea generatoare a codului C = {00000, 01101, 10011, 11110}. În acest caz:
1 1 1 1 0
(u1 u2 ) · = (u1 + u2 u1 u2 u1 + u2 u2 ).
1 0 0 1 1
Funcţia de codificare este:
00 00000
01 01101
10 11110
11 10011
Exemplu 1.3. Fie (4, 2)−codul liniar binar C = {0000, 1101, 0110, 1011}. O bază
pentru subspaţiul C este formată din 1101, 0110 (se observă relaţia de dependenţă
1011 = 1101 + 0110). O matricea generatoare a codului este
1 1 0 1
G= ∈ M2,4 (Z2 ).
0 1 1 0
2
Funcţia de codificare este:
00 0000
10 1101
01 0110
11 1011
Definiţie 1.3. O matrice generatoare G ∈ Mm,n (ZD ) a unui (n, m)−cod liniar
D−ar este sub formă sistematică dacă
1 0 ... 0 p1,1 . . . p1,n−m
0 1 . . . 0 p2,1 . . . p2,n−m
G = [Im P ] =
... ... . . .
.. .. .. ,
. . ... .
0 0 . . . 1 pm,1 . . . pm,n−m
unde P = (pi,j ) ∈ Mm,n−m (ZD ). Matricea P se numeşte matrice de paritate (sau
de control a parităţii)-parity(-check) matrix.
Observaţie. Matricea generatoare sistematică a unui cod liniar este unică.
Definiţie 1.4. Un cod liniar a cărui matrice generatoare este sub formă sistematică
se numeşte cod liniar sistematic.
Exemplu 1.4. Fie matricea generatoare
1 1 0 0 1 0 0
0 1 0 1 0 0 1
G= 1 0 1
1 0 0 0
1 0 1 0 1 1 1
a unui (7, 4)−cod liniar binar. Prin transformări elementare avem:
1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 1 0 1
0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1
1 0 1 1 0 0 0 ∼ 0 1 1 1 1 0 0 ∼ 0 0 1
G= ∼
0 1 0 1
1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1 0
1 0 0 1 1 0 1 1 0 0 0 0 1 0
0 1 0 1 0 0 1 0 1 0 0 1 1 0
∼0 0 1 0 1 0 1 ∼ 0 0 1 0 1 0 1 = [I4
P ],
0 0 0 1 1 1 1 0 0 0 1 1 1 1
unde
0 1 0
1 1 0
P =
1
0 1
1 1 1
Observaţie. Dacă o matrice generatoare este sub formă sistematică, atunci primele
m simboluri din cele n ale unui cuvânt de cod sunt simbolurile mesajului codat:
0
z = u1 . . . um zm+1 · · · zn0 .
3
Prin urmare, codul sistematic trimite ı̂ntâi mesajul necodat (simbolurile de informaţie)
şi mai apoi cele n − m simboluri codate (simboluri de control) folosite pentru a de-
tecta/corecta erori.
Exemplu 1.5. Fie matricea generatoare sub formă sistematică
1 0 0 0 0 1 0
0 1 0 0 1 1 0
G= 0 0 1 0
1 0 1
0 0 0 1 1 1 1
a unui (7, 4)−cod liniar. Cuvintele codului sunt date de z = u · G, u ∈ Z42 , deci
1 0 0 0 0 1 0
0 1 0 0 1 1 0
z = (u1 u2 u3 u4 )·
0 0
= (u1 u2 u3 u4 u2 +u3 +u4 u1 +u2 +u3 u3 +u4 )
1 0 1 0 1
0 0 0 1 1 1 1
De exemplu, 1011 este codat prin z = 1011000.
Exemplu 1.6 (Bit de paritate). Pentru mesajele binare bit-ul de paritate core-
spunde parităţii unui mesaj, adică sumei binare a simbolurilor. De exemplu, bit-ul
de paritate pentru mesajul 11100101 este 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 = 1. A
coda mesajul u = (u1 . . . um ) folosind bit-ul de paritate ı̂nsemnă a asocia mesajului
cuvântul de cod z = (u1 , . . . , um , u1 + . . . + um ). Prin urmare, se foloseşte o matrice
generatoare de forma G = [Im 1m,1 ], adică matricea sistematică
1 0 ... 0 1
0 1 . . . 0 1
G= ... ... ... ... 1 .
0 0 ... 1 1
Un cod liniar binar C care are această matrice generatoare sub formă sistematică
are dmin (C) = wtmin (C) = 2. Într-adevăr, pentru orice cuvânt de cod nenul binar
avem
wt(z) = u1 + . . . + um + (u1 + . . . + um ) = 2(u1 + . . . + um ) ≥ 2 · 1 = 2
(ui ∈ {0, 1}). Cum dmin (C) = 2, codul poate detecta o singură eroare.
Definiţie 1.5. Două (n, m)−coduri liniare D−are C şi C 0 se numesc echivalente
dacă există o permutare astfel ı̂ncât
z = z1 . . . zn ∈ C ⇔ z 0 = zπ(1) . . . zπ(n) ∈ C 0
Exemplu 1.7. Codul liniar ternar cu matricea generatoare
1 1 0 0 0 0
G= 0 0 2 2 0 0
1 1 1 1 1 1
este echivalent cu codul liniar ternar cu matricea generatoare (sub formă sistematică)
4
1 0 0 1 0 0
G0 = 0 1 0 0 1 0
0 0 1 0 0 1
Într-adevăr, prin transformări liniare, avem:
1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0
L −L C ↔C 2L −L
G = 0 0 2 2 0 0 3∼ 1 0 0 2 2 0 0 4∼ 2 0 2 2 0 0 0 3∼ 2
1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0
C ↔C 2L2 ,2L3
∼ 0 2 2 0 0 0 5∼ 3 0 2 0 0 2 0 ∼ 0 1 0 0 1 0 = G0
0 0 0 0 2 2 0 0 2 0 0 2 0 0 1 0 0 1
Prin urmare, trebuie să permutam simbolurile 2 cu 4 şi 3 cu 5. De exemplu, mesajul
u = 011 este codat ı̂n z = u · G = 110011 cuvânt de cod al lui C. Dacă permu-
tam simbolurile 2 cu 4 şi 3 cu 5, avem z 0 = 101101 (este cuvântul de cod din C 0
corespunzător mesajului u0 = 101, z 0 = u0 · G0 ).
Teoremă 1.1. Orice cod liniar este echivalent cu un cod sistematic.
5
Demonstraţie: Pentru a demonstra că H = [−P T In−m ] este o matrice de control,
trebuie să arătăm echivalenţa
z · H T = 0 ⇔ z ∈ C.
”⇐” Pentru orice mesaj ui = (u1 , . . . , um ) ∈ Zm D notăm cu zi = ui · G = ui · [Im P ]
cuvântul de cod corespunzător, zi = (zi,1 , . . . , zi,n ). Atunci:
(zi,1 , . . . , zi,m ) = (u1 , . . . , um )
zi = (u1 . . . um ) · [Im P ] ⇔
(zi,m+1 , . . . , zi,n ) = (u1 , . . . , um ) · P
Obţinem
(zi,m+1 , . . . , zi,n ) = (u1 , . . . , um ) · P = (zi,1 , . . . , zi,m ) · P ⇔
−(zi,1 , . . . , zi,m ) · P + (zi,m+1 , . . . , zi,n ) = 0,
adică, matriceal,
−P
zi · = 0.
In−m
Am demonstrat că dacă zi ∈ C, atunci există matricea H = (−P T In−m ) astfel
ı̂ncât zi · H T = 0.
”⇒” Ştim că zi · H T = 0, adică zi · (−P T In−m )T = 0. Demonstrăm că există
ui ∈ Zm D astfel ı̂ncât zi = ui · G.
Avem zi · (−P T In−m )T = 0 implică (zi,m+1 , . . . , zi,n ) = (zi,1 , . . . , zi,m ) · P . Deci,
dacă notăm ui = (zi,1 , . . . , zi,m ), atunci (zi,m+1 , . . . , zi,n ) = ui · P . Obţinem
zi = ui · [Im P ] = ui · G
Observaţie. Pentru codurile binare matricea de control este H = [P T In−m ] deoarece
−P = P .
Exemplu 2.1. Fie matricea generatoare sub formă sistematică
1 0 0 0 0 1 0
0 1 0 0 1 1 0
G = [I4 P ] =
0 0 1 0 1 0 1
0 0 0 1 1 1 1
a unui (7, 4)−cod liniar. Atunci o matrice de control este
0 1 1 1 1 0 0
H = [P T I3 ] = 1 1 0 1 0 1 0 .
0 0 1 1 0 0 1
De exemplu, cuvântul de cod zi = 1011000 (corespunde mesajului ui = 1011) verifică
zi · H T = 0.
Teoremă 2.2. Fie C un cod liniar de lungime n. Atunci C este un cod grup, adică
există o matrice de control A astfel ı̂ncât cuvintele codului C sunt determinate de A.
6
Demonstraţie: Fie C = {z1 , . . . , zs } şi considerăm matricea M ∈ Ms,n (ZD ), liniile
z1
z2
fiind formate din simbolurile cuvintelor din cod, M = ... . Considerăm că ma-
zs
tricea M are rangul rang(M ) = m şi k = n − m. Atunci m este numărul maxim de
linii liniar independente ale lui M şi numărul maxim de coloane liniar independente
ale lui M .
Presupunem că primele m linii ale matricei M sunt liniar independente, deci
z1 , . . . , zm . Atunci orice alt cuvânt cod din C este o combinaţie liniară de z1 , . . . , zm
cu coeficienţi ı̂n ZD . Avem
C = {z = u1 z1 + . . . + um zm : ui ∈ ZD }.
Mai mult, obţinem că |C| = Dm deoarece fiecare cuvânt de cod este determinat de
ui = (u1 , . . . , um ) ∈ Zm D.
Mai departe, presupunem că primele m coloane din matricea M sunt liniar in-
dependente (deci coloanele 1, . . . , m). Atunci celelalte n−m coloane sunt combinaţii
liniare de coloanele liniar independente, deci simbolurile um+1 , . . . , un sunt combinaţii
liniare de u1 , . . . , um :
u1
A · ... = 0,
um
7
şi matricea
0 0 0 0 0 0
1 0 1 0 0 1
w1 1
1 0 0 1 0
w2
0 1 0 1 0 1
M =
... = ∈ M8,6 (Z2 )
0 1 1 0 1 1
1 1 1 1 0 0
w8
1 0 0 1 1 1
0 0 1 1 1 0
Calculăm rangul matricei M :
0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 1 1 0 1 0 0 1
1 1 0 0 1 0 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1
M = ∼
0 1 1 0 1 1 0 1 1 0 1 1
1 1 1 1 0 0
0 1 0 1 0 1
1 0 0 1 1 1 0 0 1 1 1 0
0 0 1 1 1 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1
0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 0 1 1 1 0 0 0 1 1 1 0
∼ ∼
0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 0 1
0 0 1 1 1 0
0 0 0 0 0 0
0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0
Am obţinut că rang M = 3, deci w2 , w3 , w4 sunt liniar independente. Fie
w2 1 0 1 0 0 1
G = w3 = 1 1 0 0 1 0 ∈ M3,6 (Z2 )
w4 0 1 0 1 0 1
Primele trei coloane din G sunt liniar independente, deci putem să exprimăm ul-
timele trei coloane ı̂n funcţie de celelalte:
0 1 0 1
[col 4] = 0 = a1 1 + a2 1 + a3 0 = [col 1] + [col 2] + [col 3]
1 0 1 0
0 1 0 1
[col 5] = 1 = a1 1 + a2 1 + a3 0 = [col 1] + [col 3]
0 0 1 0
8
1 1 0 1
[col 6] = 0 = a1 1 + a2 1 + a3 0 = [col 1] + [col 2]
1 0 1 0
Obţinem deci:
u4 = u1 + u2 + u3
u5 = u1 + u3
u6 = u1 + u2
deci matricea A este:
1 1 1 | 1 0 0
A = (−B|I3 ) = 1 1 0 | 0 1 0
1 0 1 | 0 0 1
A este matricea de control.
Observaţie. O matrice de control pentru un (n, m)−cod liniar poate fi construită
astfel: fie G matrice generatoare a codului cu liniile z1 , . . . , zm .
(1) Pentru fiecare m + 1 ≤ i ≤ n, alegem zi ∈ ZnD astfel ı̂ncât să fie liniar
independent cu z1 , . . . , zi−1 (de fapt, construim zi ortogonal pe z1 , . . . , zi−1 ).
(2) Considerăm M matricea cu liniile z1 , . . . , zn şi calculăm M −1 (folosim faptul
că ZnD = C ⊕ C ⊥ , {z1 , . . . , zm } este o bază pentru C şi {zm+1 , . . . , zn } este o
bază pentru subspaţiul ortogonal C ⊥ ).
(3) Considerăm matricea H T formată din ultimele n − m coloane ale matricei
M −1 .
Exemplu 2.3. Fie
1 0 1 0 0 1
G = 1 1 0 0 1 0 ∈ M3,6 (Z2 )
0 1 0 1 0 1
o matrice generatoare a (6, 3)−codului liniar binar
C = {000000, 101001, 110010, 010101, 011011, 111100, 100111, 001110}.
Deci z1 = 101001, z2 = 110010, z3 = 010101 (m = 3). Prin urmare, trebuie să
adăugăm trei vectori z4 , z5 , z6 astfel ı̂ncât:
• z4 să fie liniar independent cu z1 , z2 , z3 ;
• z5 să fie liniar independent cu z1 , z2 , z3 , z4 ;
• z6 să fie liniar independent cu z1 , z2 , z3 , z4 , z5 .
Alegem z4 = 100000, z5 = 010000, z6 = 001000.
Fie M matricea cu liniile z1 , . . . , z6 şi calculăm inversa acesteia:
1 0 1 0 0 1
1 1 0 0 1 0
0 1 0 1 0 1
M =
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
9
Obţinem imediat că
0 0 0 1 0 0
0 0 0 0 1 0
1 0 0 1 0 0
M −1 =
0 0 1 0 1 0
0 1 0 1 1 0
1 0 0 1 1 1
Prin urmare alegem ultimele n − m = 6 − 3 = 3 coloane şi rezultă
1 0 0
0 1 0
1 0 0
T
H =
0 1 0
1 1 0
1 1 1
Observaţie. Fie H ∈ Mn−m,n (ZD ) o matrice de control a unui (n, m)−cod liniar C,
deci ker H = C. Ştim că dim ker H + dim Im H = n, deci rank(H) = n − m. Prin
urmare, cele n − m linii ale lui H generează un subspaţiu vectorial de dimensiune
n − m al lui ZnD , astfel H poate fi considerată matricea generatoare a unui (n, n −
m)−cod liniar, numit codul dual al lui C.
Propoziţie 2.1. Dualul dualului unui cod liniar C este codul C.
Propoziţie 2.2. O matrice generatoare a unui cod liniar este o matrice de control
a codului dual şi reciproc.
3. Sindrom
Reamintim că dacă s-a transmis z şi s-a recepţionat ẑ, atunci ẑ = z + e, unde e
este eroarea apărută şi
ẑ · H T = (z + e) · H T = z · H T + e · H T = e · H T ,
unde H este o matrice de control.
Definiţie 3.1. Se numeşte sindrom al unui cuvânt recepţionat ẑ relativ la o matrice
de control H produsul ẑ · H T .
Propoziţie 3.1. Sindromul s = ẑ · H T al lui ẑ relativ la o matrice de control H
depinde doar de eroarea de transmisie e = ẑ − z şi nu depinde de z ∈ C.
Considerăm eroarea e = (e1 , . . . , en ), unde ek este o eroare ce acţionează asupra
unui singur simbol (eroare elementară). Atunci
Xn
s(ẑ) = ẑ · H T = e · H T = ei [col i din H].
i=1
Pentru a afla corectorul (opusul erorii) trebuie să cunoaştem corectorii pentru erorile
elementare ei , şi mai apoi le ı̂nsumăm.
10
Exemplu 3.1. Fie
1 1 1 0 0
H = 0 1 0 1 0
1 1 0 0 1
o matrice de control a unui cod liniar binar. Considerăm erorile simple e1 = 10000,
e2 = 01000, e3 = 00100, e4 = 00010, e5 = 00001. Fie ẑ cuvântul recepţionat şi
calculăm sindromul:
1 1 1 0 0
s(ẑ) = (e1 e2 e3 e4 e5 ) · 0 1 0 1
0 =
1 1 0 0 1
= (e1 + e2 + e3 e2 + e4 e1 + e2 + e5 ) =
X
= e1 (1 0 1) + e2 (1 1 1) + e3 (1 0 0) + e4 (0 1 0) + e5 (0 0 1) = ei [col i din H]T
11
1 0 1
1 1 1
e5 · H T = (0 0 0 0 1) · T
1 0 0
= 0 0 1 = [col 5 H]
0 1 0
0 0 1
Din coloanele matricei H putem considera următorii corectori:
sindrom corector
101 10000
111 01000
100 00100
010 00010
001 00001
deci am asociat fiecărei coloane din matricea H câte un corector.
De remarcat faptul că pentru 011 şi 110 nu am asociat corectori deoarece:
011 = 010 + 001 conduce la corectorul 00011 = 00010 + 00001
12
Din coloanele matricei H putem considera următorii corectori:
sindrom corector
101 10000
111 01000
100 00100
010 00010
001 00001
000 00000
110 ?
011 ?
Presupunem că s-a recepţionat ẑ = 00101 (deci s-a produs o eroare la primul simbol).
Calculăm sindromul:
1 0 1
1 1 1
T
s(ẑ) = ẑ · H = 0 0 1 0 1 · 1 0 0
= (1 0 1).
0 1 0
0 0 1
Corectorul sindromului 101 este 10000, deci e = 10000.
Corectăm z = ẑ + e = 00101 + 10000 = 10101 şi decodăm prin u = 10 (am
folosit un cod sistematic, deci primele două poziţii din cuvântul de cod corespund
mesajului transmis).
Teoremă 3.1. Dacă H este o matrice de control a unui (n, m)−cod liniar D−ar C,
atunci dmin (C) este numărul minim de coloane liniar dependente ale lui H.
Demonstraţie: Fie z un cuvânt de cod. Atunci z · H T este o combinaţie liniară de
wt(z) coloane ale lui H. Mai mult, din definiţia matricei de control, z ∈ C dacă şi
numai dacă z · H T = 0.
Prin urmare, z ∈ C dacă şi numai dacă wt(z) coloane ale lui H sunt liniar depen-
dente.
În concluzie, numărul minim de coloane liniar dependente este wtmin(C) , care,
pentru codurile liniare, coincide cu dmin (C).
Observaţie. Pentru codurile liniare binare obţinem:
• dacă H nu are nicio coloană nulă, atunci dmin (C) > 1
• dacă H nu are nicio coloană nulă şi nici două coloane egale, atunci dmin (C) >
2
Exemplu 3.4. Fie codul liniar binar cu matricea de control
1 1 1 0 0
H = 0 1 0 1 0 .
1 1 0 0 1
Matricea H nu are coloane nule sau coloane egale, deci dmin (C) > 2. Se observă că
există 3 coloane liniar dependente: coloanele 1, 3 şi 5, prin urmare dmin (C) = 3.
13
Propoziţie 3.2. Pentru un (n, m)−cod liniar C avem dmin (C) ≤ n − m + 1.
Demonstraţie: Ştim că numărul minim de coloane liniar dependente ale unei matrice
de control este dmin (C). Dar orice matrice de control are fiecare coloană cu n − m
elemente, deci orice combinaţie de n−m+1 coloane este liniar dependentă. Obţinem
deci că dmin (C) ≤ n − m + 1.
Exemplu 3.5. Fie o matrice de control
1 1 0 1 0 1 0 0 0
0 1 1 1 0 0 1 0 0
H= 1
0 0 1 1 0 0 1 0
0 0 1 1 1 0 0 0 1
a unui (9, 5)−cod liniar binar C. Atunci dmin (C) ≤ 9−5+1 = 5. Observăm coloanele
2, 4, 5 sunt liniar dependente (C2 + C4 + C5 = 0) şi dmin (C) > 2 (deoarece H nu
are coloane nule sau egale), deci dmin (C) = 3. Prin urmare, codul poate detecta
dmin − 1 = 2 erori şi poate corecta dmin2 −1 = 1 erori.
14
TEORIA INFORMAŢIEI ŞI CODURI
CURS 9
0 0 0 1 1 1 1 1 0 1 0 1 0 1
H3 = 0 1 1 0 0 1 1 ∼ 0 1 1 0 0 1 1
1 0 1 0 1 0 1 0 0 0 1 1 1 1
deci simbolurile x1 , x2 , x4 sunt de control şi x3 , x5 , x6 , x7 sunt simboluri de informaţie.
Vom avea 24 cuvinte de cod.
Obţinem:
x 1 = x 3 + x 5 + x 7
x2 = x3 + x6 + x7
x4 = x5 + x6 + x7
1
deci cuvintele codului sunt:
x3 x5 x6 x7 z x3 x5 x6 x7 z
0000 0000000 0110 1100110
1000 1100000 0101 0100101
0100 1001100 0011 1000011
0010 0101010 1110 0010110
0001 1101001 1101 1010101
1100 0111100 1011 1110011
1010 1011010 0111 0001111
1001 0011001 1111 1111111
Pentru a obţine matricea generatoare (sub formă sistematică), procedăm astfel:
0 0 0 1 1 1 1 0 0 0 1 1 1 1
H3 = 0 1 1 0 0 1 1 ∼ 0 1 1 0 0 1 1 ∼
1 0 1 0 1 0 1 1 0 1 1 0 1 0
0 1 1 1 1 0 0 0 1 1 1 1 0 0
∼ 0 1 1 0 0 1 1 ∼ 1 0 1 1 0 1 0 = (−P T |I3 ) = (P T |I3 ),
1 1 0 1 0 0 1 1 1 0 1 0 0 1
1 0 0 0 0 1 1
0 1 0 0 1 0 1
deci G = (I4 |P ) =
0 0 1 0 1
1 0
0 0 0 1 1 1 1
Propoziţie 1.1. Orice cod binar Hamming are distanţa 3.
Demonstraţie: Din modul de construcţie, orice două coloane din matricea de con-
trol sunt liniar independente (adică orice trei coloane sunt liniar dependente), deci
dmin C = 3 şi codul corectează o singură eroare dmin2 −1 = 1.
Observaţie. Codul Hamming nu poate corecta o eroare şi detecta o altă eroare simul-
tan deoarece d > 2t + s ⇔ 3 > 2 · 1 + 1, fals. Deci codul Hamming binar corectează
o singură eroare şi nu detectează altă eroare.
Algoritm: Fie ẑ cuvântul recepţionat.
• Se calculează sindromul s(ẑ) = ẑ · H T = e · H T şi se identifică cu coloana i
din H
• Eroarea este pe poziţia i, unde i este numărul ce are reprezentarea binară
s(ẑ). Atunci z = ẑ + ei , unde ei are 1 pe poziţia i şi 0 ı̂n rest.
Exemplu 1.2. Considerăm (7, 4) codul Hamming binar cu matricea de control
0 0 0 1 1 1 1
H3 = 0 1
1 0 0 1 1
1 0 1 0 1 0 1
2
şi presupunem că s-a recepţionat ẑ = 0011101. Ştim că s-a produs o singură eroare,
dar nu ştim pe ce poziţie. Calculăm sindromul:
T
1
s(ẑ) = ẑ · H T ⇔ s(ẑ) = 0 0 1 1 1 0 1 · H T = 0
1
Deci sindromul este coloana 5 din matricea de control, adică este scrierea binară
a lui 5. Corectăm cuvântul:
z = ẑ + (0, 0, 0, 0, 1, 0, 0)
şi obţinem z = 0011001.
Prin urmare, corectăm pe ẑ = 0011101 cu z = 0011001 (cuvânt de cod).
• Dacă un cod (n, m) liniar are distanţă minimă impară dmin , atunci codul
extins are distanţa minimă dmin + 1.
Într-adevăr, dacă z = z1 z2 . . . zn are wt(z) = d = dmin şi d este număr
Pn
impar, atunci zi = 1(mod 2), deci zn+1 = 1 şi wt(z1 z2 . . . zn zn+1 ) = d + 1.
i=1
Mai mult, nu se poate construi un alt cuvânt cod de pondere mai mică.
Definiţie 2.2. Fie C un cod (n, m) liniar. Atunci:
• Relaxarea lui C este codul C (n−1, m) liniar obţinut din codul C prin ştergerea
ultimului simbol.
• Completarea lui C este codul C ∗ liniar având cuvintele de cod C ∪ {z + 1 :
z ∈ C}, unde 1 = (1, 1, . . . , 1).
3
• Expurgarea codului C este codul
C 0 = {z ∈ C : wt(z) = 0(mod 2)}.
Observaţie. • Relaxarea este operaţia inversă extensiei.
• Prin completare şi expurgare se obţin coduri liniare doar ı̂n cazul binar.
Pentru cazul nebinar mulţimile rezultate nu sunt spaţii liniare.
Propoziţie 2.1. Prin completarea unui cod binar (n, m) liniar se obţine un cod
binar (n, m + 1) liniar cu un număr dublu de cuvinte cod.
Demonstraţie: Completarea codului binar C este codul C ∗ liniar având cuvintele de
cod C ∪ {z + 1 : z ∈ C}, unde 1 = (1, 1, . . . , 1). Prin această operaţie la toate
cuvintele de cod se modifică 1 ı̂n 0 şi invers, deci cele două mulţimi au acelaşi număr
de elemente. Atunci matrice generatoare a noului cod este:
G
Gcomp =
,
1 ... ... 1 1 1
unde G ∈ Mm,n (Z2 ) este matricea generatoare a codului iniţial. Cuvintele noului
cod au lungimea cuvintelor din codul C şi numărul simbolurilor de informaţie este
m + 1.
Propoziţie 2.2. Orice cod binar (n, m) liniar are fie toate cuvintele de cod de
pondere pară fie numărul cuvintelor de pondere pară este egal cu numărul cuvintelor
de pondere impară.
Corolar 2.1. Expurgarea unui cod binar (n, m) liniar este codul iniţial sau un cod
cu jumătate din numărul cuvintelor de cod ale codului iniţial.
Exemplu 2.1. Considerăm codul liniar cu mulţimea cuvintelor de cod
C = {0000, 0111, 1010, 1101}.
O matrice generatoare a codului este
1 0 1 0
G=
0 1 1 1
Extensia codului este codul
C = {00000, 01111, 10100, 11011}.
Relaxarea codului C = {0000, 0111, 1010, 1101} este codul
Crelax = {000, 011, 101, 110}
şi are o matrice generatoare
1 0 1
Grelax =
0 1 1
4
Codul completat se obţine din C∪{z+1 : z ∈ C}, unde C = {0000, 0111, 1010, 1101},
deci este codul
Ccomp = {0000, 0111, 1010, 1101, 1111, 1000, 0101, 0010}
şi are o matrice generatoare
1 0 1 0
Gcomp = 0 1 1 1
1 1 1 1
Codul expurgat se obţine astfel:
C 0 = {z ∈ C : wt(z) = 0(mod 2)},
unde C = {0000, 0111, 1010, 1101}. Obţinem Cexp = {0000, 1010} şi are o matrice
generatoare
Gexp = 1 0 1 0
5
Propoziţie 3.1. Un cod Hamming binar extins are dmin = 4.
Demonstraţie: Ştim că un cod binar Hamming are dmin (C) = 3 (impar). Prin ur-
mare, codul binar Hamming extins are dmin (C 0 ) = dmin (C) + 1 = 4.
Observaţie. Codurile binare Hamming extinse corectează o eroare şi detectează 2
erori simultan.
n+1
P
Ecuaţia corespunzătoare liniei 1 1 . . . 1 din matricea de control, zi = 0 se
i=1
numeşte ecuaţie de control a parităţii.
Algoritm:
• Dacă nu sunt verificate ecuaţia de control a parităţii şi cel puţin una din
primele n − m ecuaţii, atunci a apărut o eroare simplă care se corectează cu
algoritmul prezentat la codurile Hamming binare;
• Dacă ecuaţia de control a parităţii este verificată şi cel puţin una din primele
n − m ecuaţii nu se verifică, atunci s-a detectat o eroare dublă.
• În celelalte situaţii nu au apărut erori sau erorile sunt nedetectabile.
Exemplu 3.2. Considerăm codul binar Hamming extins cu matricea de control
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
H3∗ =
1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1
şi s-au recepţionat cuvintele ẑ1 = 00101011, ẑ2 = 00111011. Sistemul x · (H3∗ )T = 0
este echivalent cu:
x1 = x3 + x5 + x7
x2 = x3 + x6 + x7
x4 = x5 + x6 + x7
x + x + x + x + x + x + x + x = 0
1 2 3 4 5 6 7 8
Este verificată ecuaţia de verificare a parităţii, dar nu se verifică prima ecuaţie din
sistem, deci s-a detectat o eroare dublă.
T
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
s(ẑ1 ) = ẑ1 ·(H3∗ )T = 0 0 1 0 1 0 1 1 ·
= 0 0 1 0 .
1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1
Sindromul acestui cuvânt este diferit de toate coloanele matricei H3∗ , dar este suma
dintre coloanele 2 şi 3 sau 1, 8 sau 6, 7. Prin urmare, nu se poate corecta ẑ1 .
6
În schimb, pentru cuvântul ẑ2 = 00111011 avem:
x 1 = x 3 + x 5 + x 7
0=1+1+1
x2 = x3 + x6 + x7 0=1+0+1
⇔
x4 = x5 + x6 + x7
1=1+0+1
x + x + x + x + x + x + x + x = 0 1 + 1 + 1 + 1 + 1 = 0
1 2 3 4 5 6 7 8
Nu se verifică ecuaţia de control a parităţii şi nici cel puţin o altă ecuaţie din sistem,
deci cuvântul poate fi corectat cu primul algoritm, eroarea fiind simplă. Sindromul
este:
T
0 0 0 1 1 1 1 0
0 1 1 0 0 1 1 0
s(ẑ2 ) = ẑ2 ·(H3∗ )T = 0 0 1 1 1 0 1 1 ·
= 1 0 1 1 ,
1 0 1 0 1 0 1 0
1 1 1 1 1 1 1 1
deci este coloana 5 din matrice. Prin urmare, ẑ2 = 00111011 se corectează prin
00110011 (am modificat poziţia 5.)
7
Simbolurile de informaţie sunt x3 , x4 . Obţinem cuvintele de cod:
x3 x4 v
00 0000
01 1201
02 2002
10 2210
11 0111
12 1012
20 1120
21 2021
22 0222
Observaţie. • Matricea de control se alege astfel ı̂ncât pe coloane se trec toate
elementele din Zrq , iar primul element de sus ı̂n jos este 1.
• Codurile Hamming nebinare au dmin = 3, deci ele pot corecta o singură
eroare.
Codul Golay
Este un cod corector de cel mult 3 erori.
Codul Golay binar extins: a fost folosit de programul spaţial Voyager la
ı̂nceputul anilor 1980 pentru transmiterea fotografiilor planetelor Jupiter şi Saturn.
Considerăm matricea pătratică de ordin 12:
1 1 0 1 1 1 0 0 0 1 0 1
1 0 1 1 1 0 0 0 1 0 1 1
0 1 1 1 0 0 0 1 0 1 1 1
1 1 1 0 0 0 1 0 1 1 0 1
1 1 0 0 0 1 0 1 1 0 1 1
1 0 0 0 1 0 1 1 0 1 1 1
B=
0 0 0 1 0 1 1 0 1 1 1 1
0 0 1 0 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 1 1 0 0 1
1 0 1 1 0 1 1 1 0 0 0 1
0 1 1 0 1 1 1 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1 1 0
Definiţie 3.2. Fie matricea G = (I12 |B) ∈ M12,24 (Z2 ). Codul binar definit de
matricea generatoare G se numeşte cod Golay extins şi se notează cu C24 .
Observaţie. • Matricea B se poate obţine astfel: dacă eliminăm ultima linie şi
ultima coloană, atunci matricea rămasă B1 este o matrice circulară, generată
de cuvântul 11011100010, de la stânga la dreapta. Deci
B1 1t
B= ,
1 0
unde 1 = (1 . . . 1). Mai mult, B este matrice simetrică (B = B t ).
8
• Codul binar Golay extins C24 are n = 24, m = 12 şi 212 = 4096 cuvinte de
cod.
• Matrice de control pentru codul Golay binar extins este H = (B|I12 ).
Teoremă 3.1. Matrice de control pentru C24 este H = (I12 |B).
Corolar 3.1. Codul binar Golay extins admite ca matrice generatoare şi pe G =
(B|I12 ).
Teoremă 3.2. C24 are distanţă minimă d = 8.
Deoarece codul C24 are distanţă minimă d = 8, poate să corecteze orice 3 erori.
Notăm cu ẑ ∈ Z24 2 cuvântul recepţionat, cu z cuvântul cod cel mai apropiat şi cu e
eroarea (z = ẑ − e). Presupunem că wt(e) ≤ 3 deoarece codul corectează cel mult 3
erori.
Pentru orice cuvânt ẑ ∈ Z24 12
2 notăm ẑ = (z1 , z2 ), unde z1 , z2 ∈ Z2 . Prin urmare
e = (e1 , e2 ) cu wt(e1 ) ≤ 1 sau wt(e2 ) ≤ 1.
Definim două sindromuri pentru ẑ:
s1 (ẑ) = ẑ · (I12 |B)T = (e1 e2 ) · (I12 |B)T = e1 + e2 B
s2 (ẑ) = ẑ · (B|I12 )T = (e1 e2 ) · (B|I12 )T = e1 B + e2
Observaţie. Dacă wt(e2 ) ≤ 1, atunci s1 (ẑ) este un cuvânt de pondere cel mult 3 (dacă
wt(e2 ) = 0) sau o linie a lui B cu cel mult doi biţi schimbaţi (dacă wt(e2 ) = 1).
Analog, dacă wt(e1 ) ≤ 1, atunci s2 (ẑ) este un cuvânt de pondere cel mult 3 (dacă
wt(e1 ) = 0) sau o linie a lui B cu cel mult doi biţi schimbaţi (dacă wt(e1 ) = 1).
De remarcat faptul că
s2 (ẑ) = e1 B + e2 = (e1 + e2 B)B = s1 (ẑ)B
Algoritm 1:
• Se calculează sindromul s(ẑ) = ẑ · H T , unde H = (I12 |B);
• Dacă wt(s(ẑ)) ≤ 3, atunci e = (s(ẑ), 0) şi ne oprim;
• Dacă există o linie bi a lui B cu wt(s(ẑ) + bi ) ≤ 2, atunci e = (s(ẑ) + bi , fi )
şi ne oprim;
• Dacă wt(s(ẑ)B) ≤ 3, atunci e = (0, s(ẑ)B) şi ne oprim;
• Dacă există o linie bi a lui B cu wt(s(ẑ)B +bi ) ≤ 2, atunci e = (fi , s(ẑ)B +bi )
şi ne oprim;
• Dacă e nu a fost determinat ı̂ncă, se cere retransmiterea.
unde fi este un cuvânt de lungime 12 cu 1 pe poziţia i şi 0 ı̂n rest.
După determinarea erorii e, se corectează mesajul prin z = ẑ + e.
Exemplu 3.4. Se cere corectarea cuvântului ẑ = (101111101111, 010010010010).
Determinăm sindromul:
s(ẑ) = ẑ · H T = ẑ · (I12 |B)T = 101111101111 + (010010010010) · B =
= 101111101111 + 001111101110 = 100000000001
Cum wt(s(ẑ)) = 2 ≤ 3, atunci
e = (s(ẑ), 0) = (100000000001, 000000000000)
9
deci corectăm prin
z = ẑ + e = (101111101111, 010010010010) + (100000000001, 000000000000) =
= (0011111011110, 010010010010).
Exemplu 3.5. Se cere corectarea cuvântului ẑ = (001001001101, 101000101000).
Determinăm sindromul:
s(ẑ) = ẑ · H t = ẑ · (I12 |B)T = 001001001101 + (101000101000) · B =
= 001001001101 + 111000000100 = 110001001001
Cum wt(s(ẑ)) = 5, trecem la pasul 3 din algoritm, deci calculăm:
s(ẑ) + b1 = 000110001100 s(ẑ) + b2 = 011111000010
s(ẑ) + b3 = 101101011110 s(ẑ) + b4 = 001001100100
s(ẑ) + b5 = 000000010010, wt(s(ẑ) + b5 ) ≤ 2,
deci e = (s(ẑ) + b5 , f5 ) = (000000010010, 000010000000). Corectăm prin z = ẑ + e =
(000111000111, 011011010000)
Exemplu 3.6. Se cere corectarea cuvântului ẑ = (000111000111, 011011010000).
Determinăm sindromul:
s(ẑ) = ẑ · H T = ẑ · (I12 |B)T = 000111000111 + (011011010000) · B =
= 000111000111 + 101010101101 = 101101101010
Cum wt(s(ẑ)) = 7, trecem la pasul 3 din algoritm, şi obţinem pentru toate liniile
matricei B wt(s(ẑ) + bi ) ≥ 3. Prin urmare trecem la pasul 4. Al doilea sindrom este
s(ẑ)B = 111001111101 cu ponderea 8.
Avem:
s(ẑ)B + b1 = 001110111000
s(ẑ)B + b2 = 010111110110
s(ẑ)B + b3 = 100101101010
s(ẑ)B + b4 = 000001010000
Am obţinut wt(s(ẑ)B + b5 ) ≤ 2, deci eroarea este
e = (f4 , s(ẑ)B + b4 ) = (000100000000, 000001010000)
şi corectăm prin z = ẑ + e = (000011000111, 011010000000).
Codul Golay binar: relaxăm codul binar extins (eliminăm ultimul simbol din
fiecare cuvânt) şi obţinem codul Golay binar. Considerăm matricea B̂ ∈ M12,11 (Z2 )
obţinută prin eliminare ultimei coloane din B.
Definiţie 3.3. Codul binar ce are matricea generatoare G = (I12 |B̂) se numeşte cod
Golay binar şi se notează cu C23 .
Codul Golay binar are n = 23, m = 12 şi 212 = 4096 cuvinte de cod. Extensia lui
C23 este C24 .
10
Teoremă 3.3. Distanţa minimă a lui C23 este 7.
Obţinem că orice cod Golay binar va corecta cel mult 3 erori.
Observaţie. Orice cuvânt ẑ ∈ Z23 2 se află la distanţă cel mult 3 de un cuvânt cod.
Deci dacă se adaugă la sfârşit 0 sau 1, formând ẑ0 sau ẑ1 se obţin cuvinte de pondere
impară, care se află la distanţa de cel mult 3 faţă de un cuvânt cod din C24 .
Algoritm 2:
• Se formează cuvântul extins de pondere impară ẑ0 sau ẑ1.
• Se decodifică folosind Algoritmul 1 şi se obţine cuvântul de cod z ∈ C24 .
• Se elimină ultimul caracter din z.
Codul Golay ternar: definim matricea cu elemente ı̂n Z3 :
0 1 2 2 1
1 0 1 2 2
S5 =
2 1 0 1 2 .
2 2 1 0 1
1 2 2 1 0
Definiţie 3.4. Codul Golay ternar este codul ce are matricea generatoare:
11111
G = I6 .
S5
Acest cod are n = 11, m = 6, deci 36 cuvinte de cod.
Codul Golay ternar extins este un (12, 6) cod liniar cu matricea generatoare Ḡ:
1 0 0 0 0 0 1 1 1 1 1 0
0 1 0 0 0 0 0 1 2 2 1 2
0 0 1 0 0 0 1 0 1 2 2 2
Ḡ =
0 0 0 1 0 0 2 1 0 1 2 2
0 0 0 0 1 0 2 2 1 0 1 2
0 0 0 0 0 1 1 2 2 1 0 2
Teoremă 3.4. Codul Golay ternar extins are distanţa minimă d = 6, deci corectează
cel mult 2 erori.
Observaţie. Se poate arăta că orice cod liniar cu n = 11, d = 5 şi 36 cuvinte de cod
este cod Golay ternar.
11
Definiţie 3.5. Fie m ≥ 0 un număr natural. Codul Reed-Muller RM(r, m) de
lungime n = 2m şi ordin r, 0 ≤ r ≤ m se defineşte recursiv astfel:
2m 2m
z }| { z }| {
• RM(0, m) = {00 . . . 00, 11 . . . 11, RM(m, m) = Zn2 ;
• RM(p, m) = {[a, a + b] : a ∈ RM(p, m − 1), b ∈ RM(p − 1, m − 1)}, 0 <
p ≤ r.
Prin [a, b] notăm alăturarea a două cuvinte de lungimi egale 2m−1 , separate prin
virgulă pentru a obţine un cuvânt de lungime 2m .
Exemplu 3.7. Avem: RM(0, 0) = {0, 1}
RM(0, 1) = {00, 11}, RM(1, 1) = {00, 01, 10, 11} = Z22
RM(0, 2) = {0000, 1111}, RM(2, 2) = Z42
RM(1, 2) = {[a, a + b] : a ∈ RM(1, 1), b ∈ RM(0, 1)} =
= {0000, 0011, 0100, 0111, 1000, 1011, 1100, 1111}.
Definiţie 3.6. Definim matricea generatoare G(r, m) a codului Reed-Muller RM(r, m)
recursiv astfel:
• G(0, m) = (1 1 1 . . . 1 1) ∈ M1,2m ;
• pentru 0 < p ≤ r < m avem:
G(p, m − 1) G(p, m − 1)
G(p, m) =
0 G(p − 1, m − 1)
G(m − 1, m)
• G(m, m) =
000 . . . 01
Exemplu 3.8. Considerăm m = 2, deci lungimea cuvintelor este n = 2m = 4.
Pentru r = 1, 2 avem:
G(1, 1) G(1, 1) G(1, 2)
G(1, 2) = , G(2, 2) =
0 G(0, 1) 0 0 0 1
Avem
G(0, 1) 1 1
G(0, 1) = (1 1), G(1, 1) = =
0 1 0 1
Prin urmare:
1 1 1 1
G(1, 1) G(1, 1)
G(1, 2) = = 0 1 0 1
0 G(0, 1)
0 0 1 1
1 1 1 1
G(1, 2) 0 1 0 1
G(2, 2) = =
0 0 0 1 0 0 1 1
0 0 0 1
Teoremă 3.5. Codul RM(r, m) are distanţă d = 2m−r .
0 1 r
Teoremă 3.6. Codul RM(r, m) are k = Cm +Cm +. . .+Cm simboluri de informaţie.
12
Observaţie. Codul RM(m − 2, m) este codul Hamming binar extins de lungime 2m .
Decodificarea codurilor RM(1, m):
Definiţie 3.7. Se numeşte produsul Kronecker al matricelor Am,n , Bp,q şi se notează
cu A × B ∈ Mmp,nq , A × B = (aij B).
1 1 1 0
Exemplu 3.9. Fie H = , I2 = . Atunci produsul Kronecker este:
1 −1 0 1
1 0 1 0
1 · I2 1 · I2 0 1 0 1
H × I2 = =
1 · I2 −1 · I2 1 0 −1 0
0 1 0 −1
1 1 0 0
1·H 0·H 1 −1 0 0
I2 × H = =
0·H 1·H 0 0 1 1
0 0 1 −1
De remarcat faptul că produsul Kronecker nu este comutativ, dar este asociativ.
1 1
Plecând de la matricea Hadamard H = , construim şirul de matrici:
1 −1
i
Hm = I2m−i × H × I2i−1 , i ≥ 1
Exemplu 3.10. Pentru m = 2 avem:
H21 = I22−1 × H × I21−1 = I2 × H × I1 = I2 × H
H22 = I22−2 × H × I22−1 = I1 × H × I2 = H × I2 .
Pentru m = 3 avem:
H31 = I23−1 × H × I21−1 = I4 × H × I1 = I4 × H =
1·H 0·H 0·H 0·H
0 · H 1 · H 0 · H 0 · H
=
0 · H 0 · H 1 · H 0 · H
0·H 0·H 0·H 1·H
1 1 0 0 0 0 0 0
1 −1 0 0 0 0 0 0
0 0 1 1 0 0 0 0
0 0 1 −1 0 0 0 0
=
0 0 0 0 1 1 0 0
0 0
0 0 1 −1 0 0
0 0 0 0 0 0 1 1
0 0 0 0 0 0 1 −1
1 0 1 0
0 1 0 1
H32 = I23−2 × H × I22−1 = I2 × H × I2 = I2 ×
1 0 −1 0 =
0 1 0 −1
13
1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0
1 0 −1 0 0 0 0 0
0 1 0 −1 0 0 0 0
=
0 0 0 0 1 0 1 0
0 0 0 0 0 1 0 1
0 0 0 0 1 0 −1 0
0 0 0 0 0 1 0 −1
1 · I4 1 · I4
H33 = I23−3 × H × I23−1 = I1 × H × I4 = H × I4 = =
1 · I4 −1 · I4
1 0 0 0 0 1 0 0
0 1 0 0 1 0 0 0
0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1
=
1 0 0 0 −1 0 0 0
0
1 0 0 0 −1 0 0
0 0 1 0 0 0 −1 0
0 0 0 1 0 0 0 −1
m
Algoritm de decodificare a codurilor RM(1, m): Notăm cu ẑ ∈ Zn=2 2
cuvântul recepţionat şi cu G(1, m) matricea generatoare a codului.
• Înlocuim pe 0 cu −1 ı̂n ẑ. Notăm cu ẑ 0 noul cuvânt;
• Calculăm ẑ1 = ẑ 0 · Hm
1 i
, ẑi = ẑi−1 · Hm , 2 ≤ i ≤ m;
• Se determină poziţia j a celei mai mari componente (ı̂n valoare absolută) a
lui ẑm :
Fie v(j − 1) ∈ Zn2 reprezentarea binară a lui j − 1 pe m biţi Corectăm mesajul astfel:
• (1, v(j − 1)) dacă componenta j a lui ẑm este pozitivă;
• (0, v(j − 1)) dacă componenta j a lui ẑm este negativă;
Exemplu 3.11. Fie m = 3 şi G(1, 3) matricea generatoare a codului RM(1, 3).
Reamintim că
1 1 1 1
G(1, 2) G(1, 2) G(1, 1) G(1, 1)
G(1, 3) = şi G(1, 2) = = 0 1 0 1
0 G(0, 2) 0 G(0, 1)
0 0 1 1
şi G(0, 2) = (1 1 1 1).
Presupunem că s-a recepţionat cuvântul ẑ = 10101011.
Înlocuim 0 cu −1 ı̂n ẑ. Notăm cu ẑ 0 = 1, −1, 1, −1, 1, −1, 1, 1. Avem:
ẑ1 = ẑ 0 · H31 = (0, 2, 0, 2, 0, 2, 2, 0)
14
Cea mai mare componentă ı̂n valoare absolută este 6 şi se află pe poziţia 2. Cum
v(1) = 100 este reprezentarea binară a lui 1 şi 6 > 0, deci mesajul transmis este
(1, v(1)) = 1100 şi corespunde cuvântului de cod z = (1 1 0 0) · G = 11101010.
Exemplu 3.12. Fie m = 3 şi G(1, 3) matricea generatoare a codului RM(1, 3).
Presupunem că s-a recepţionat cuvântul ẑ = 10001111.
Înlocuim 0 cu −1 ı̂n ẑ. Notăm cu ẑ 0 = 1, −1, −1, −1, 1, 1, 1, 1. Avem:
ẑ1 = ẑ 0 · H31 = (0, 2, −2, 0, 2, 0, 2, 0)
ẑ2 = ẑ1 · H32 = (−2, 2, 2, 2, 4, 0, 0, 0)
ẑ3 = ẑ 0 · H33 = (2, 2, 2, 2, −6, 2, 2, 2)
Cea mai mare componentă ı̂n valoare absolută este −6 şi se află pe poziţia 5.
Cum v(4) = 001 este reprezentarea binară a lui 4 şi −6 < 0, mesajul transmis este
(0, v(4)) = 0001 şi cuvântul de cod este z = (0 0 0 1) · G.
Coduri MacDonald:
Fie C un (n, k)−cod liniar peste Z2 şi G matricea generatoare. Notăm cu Mk,2k −1
o matrice care conţine toate coloanele nenule posibile de k elemente care se pot
construi cu elemente din Z2 . Ordinea coloanelor este arbitrară, dar fixată. Coloana
i din matrice se numeşte coloana de tip i (admitem ca tipul de coloană i să fie
reprezentarea binară a numărului i). Atunci:
N = (n1 , n2 , . . . , n2k −1 )
este reprezentarea modulară a (n, k)−codului liniar, unde ni reprezintă numărul
coloanelor de tipul i care apar ı̂n matricea generatoare.
Exemplu 3.13. Considerăm n = 3, k = 2 şi matricea generatoare a codului
0 1 0
G= .
1 1 1
Considerăm matricea M ı̂n care trecem pe coloane reprezentarea binară a nu-
merelor 1, 2, 3:
0 1 1
M= .
1 0 1
În matricea G avem două coloane de tipul 1, 0 de tipul 2 şi o coloană de tipul 3,
deci reprezentarea modulară a codului generat de G este N = (2, 0, 1).
Fie matricea
K2k −1 = M t · G.
Această matrice are pe linii toate cuvintele nenule ale codului.
Fie matricea pătratică simetrică
C2k −1,2k −1 = M t · M.
15
Exemplu 3.14. Pentru exemplul anterior avem:
1 0 1
K = M t · G = 0 1 0
1 1 1
şi
1 1 1
C = M t · M = 0 1 0
1 0 1
Teoremă 3.7. O listă a ponderilor cuvintelor (n, k) codului liniar C se obţine prin
ı̂nmulţirea matricei de reprezentare modulară cu matricea C:
W2k −1 = N C
Demonstraţie: Considerăm matricea M = [v1 v2 . . . v2k −1 ], unde vi este matricea
coloană de tip i din matricea M . Matricea generatoare corespunzătoare reprezentării
modulare N = (n1 , . . . , n2k −1 ), n = n1 + . . . + n2k −1 , este:
n n n2k −1
z }|1 {z }|2 { z }| {
G = (v1 v1 . . . v1 v2 v2 . . . v2 . . . v2k −1 v2k −1 . . . v2k −1 )
Obţinem:
C = M t · M = [v1 v2 . . . v2k −1 ]t · [v1 v2 . . . v2k −1 ] =
v1 · v1 v1 · v2 . . . v1 · v2k −1
v2 · v1 v2 · v2 . . . v2 · v2k −1
= .
.. .
.. .. ,
.
v2k −1 · v1 v2k −1 · v2 . . . v2k −1 · v2k −1
unde produsele scalare sunt ı̂n Z2 .
Avem W = (wt1 , wt2 , . . . , wt2k −1 ) = (n1 , n2 , . . . , n2k −1 )C.
Prin identificare obţinem:
wti = n1 v1 vi + n2 v2 vi + . . . + n2k −1 v2k −1 vi .
Fiecare produs scalar vj vi este 0 sau 1 (deoarece toate calculele se fac ı̂n Z2 ), deci
wti este un număr natural. Afirmăm că wti este ponderea cuvântului de cod care
este pe linia i ı̂n matricea K2k −1 = M t · G. Într-adevăr,
K2k −1 = M t · G =
n n n2k −1
t }|1 }|2
= [v1 v2 . . . v2k −1 ] · (v1 v1 . . . v1 v2 v2 . . . v2 . . . v2k −1 v2k −1 . . . v2k −1 ) =
z {z { z }| {
v1 · v1 v1 · v1 . . . v1 · v2k −1
v2 · v1 v2 · v1 . . . v2 · v2k −1
= .
.. .
.. .. ,
.
v2k −1 · v1 v2k −1 · v1 . . . v2k −1 · v2k −1
16
prin urmare ponderea cuvântului de cod aflat pe linia i ı̂n matricea K este:
n1 v1 vi + n2 v2 vi + . . . + n2k −1 v2k −1 vi ,
ceea ce ı̂ncheie demonstraţia.
Observaţie. În cazul ı̂n care dorim să construim un cod ştiind ponderile cuvintelor
sale, deci cunoscând distanţa Hamming, obţinem: N = W · C −1 , dacă C este in-
versabilă.
Teoremă 3.8. Matricea C este nesingulară iar inversa ei se obţine ı̂nlocuind ı̂n
matricea C pe 0 cu −1 şi ı̂mpărţind toate elementele sale la 2k−1 .
Exemplu 3.15. Pentru k = 3, n = 5 avem:
1 0 1 0 1 0 1
0 1 1 0 0 1 1
0 0 0 1 1 1 1 1 1 0 0 1 1 0
t
M = 0 1 1 0 0 1 1 , C = M M = 0 0 0 1 1 1 1 ,
1 0 1 0 1 0 1 1
0 1 1 0 1 0
0 1 1 1 1 0 0
1 1 0 1 0 0 1
deci
1 −1 1 −1 1 −1 1
−1 1 1 −1 −1 1 1
1 1 −1 −1 1 1 −1
1
C −1 = −1 −1 −1 1 1 1 1 .
4 1 −1 1 1 −1 1 −1
−1 1 1 1 1 −1 −1
1 1 −1 1 −1 −1 1
Pentru codul ce are matricea generatoare
1 0 0 1 1
G = 0 1 0 1 0 ,
0 0 1 0 1
reprezentarea modulară este N = (1, 1, 0, 1, 1, 1, 0). Vectorul ponderilor este W =
N C = (2, 2, 4, 3, 3, 3, 3).
Cuvintele de cod sunt trecute pe linii ı̂n matricea K:
0 0 1 0 1
0 1 0 1 0
0 1 1 1 1
K = 1 0 0 1 1
1 0 1 1 0
1 1 0 0 1
1 1 1 0 0
17
Observaţie. În matricea C elementul 1 apare pe fiecare linie ı̂n 2k−1 poziţii, deci ı̂n
matricea C −1 o să apară 1 pe fiecare linie ı̂n 2k−1 poziţii. Atunci, dacă presupunem
că avem un cod ı̂n care toate cuvintele au ponderi egale, notate w, obţinem:
2k −1
−1
= (w . . . w)C −1 =
z }| {
N = WC
2k −1
z }| {
−(k−1) −(k−1) −(k−1)
= (w · 2 ,w · 2 ,...,w · 2 )
Această problemă are soluţie dacă 2k−1 | w şi obţinem reprezentarea modulară
2k −1
z }| {
N = (r, r, . . . , r), adică fiecare tip de coloană apare ı̂n matricea generatoare de r ori,
unde r = w · 2−(k−1) .
MacDonald a introdus o clasă de coduri pentru care reprezentarea modulară este
de forma 0i 1j astfel:
n d N
k k−1
2 −1 2 (1, 1, . . . , 1)
2k − 2 2k−1 − 1 (0, 1, . . . , 1)
2k − 3 2k−1 − 2 (0, 0, 1 . . . , 1)
..
.
2u −1 2k −2u
z }| { z }| {
2k − 1 − 2u 2k−1 − 2u (0, 0, . . . , 0, 1, 1, . . . , 1)
18
TEORIA INFORMAŢIEI ŞI CODURI
CURS 10
Coduri ciclice
1
Un cuvânt de cod zi = zi,1 . . . zi,n de lungime n poate fi reprezentat sub forma
unui polinom de grad n − 1, astfel:
zi (X) = zi,1 X n−1 + zi,2 X n−2 + · · · + zi,n−1 X + zi,n
deci simbolul zi,j din zi este coeficientul lui X n−j din polinomul zi (X).
Atunci
X · zi (X) = X · (zi,1 X n−1 + zi,2 X n−2 + · · · + zi,n−1 X + zi,n ) =
= zi,1 X n + zi,2 X n−1 + · · · + zi,n−1 X 2 + zi,n X =
= zi,1 (X n − 1) + zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1
Deci
X · zi (X) − (zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 ) = zi,n (X n − 1),
adică X n − 1 | X · zi (X) − (zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 ), deci
X · zi (X) ≡ (zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 )(mod X n − 1)
Dar polinomul zi,2 X n−1 + · · · + zi,n−1 X + zi,n X + zi,1 corespunde cuvântului de
cod zi,2 . . . zi,n zi,1 , obţinut din zi = zi,1 . . . zi,n printr-o permutare ciclică la stânga.
Prin urmare, multiplicarea cu X corespunde unei permutări ciclice.
Exemplu 1.2. Pentru codul binar ciclic
C = {z1 = 000, z2 = 101, z3 = 011, z4 = 110}
reprezentările polinomiale sunt:
z1 (X) = 0
z2 (X) = X 2 + 1
z3 (X) = X + 1
z4 (X) = X 2 + X
Avem X · z2 (X) = X 3 + X = X 3 − 1 + (X − 1), deci Xz2 (X) ≡ X + 1(mod X 3 − 1),
deci z3 este o permutare ciclică la stânga a lui z2 .
Propoziţie 1.1. Dacă z(X) este reprezentarea polinomială a cuvântului de cod
z de lungime n dintr-un cod ciclic, atunci pentru orice polinom p(X) avem p(X) ·
z(X)(mod X n −1) este reprezentarea polinomială a unui alt cuvânt de cod din codul
ciclic.
Demonstraţie: Deoarece codul este ciclic, pentru orice k ≥ 1 avem X k z(X) este
reprezentarea polinomială a unui cuvânt de cod (permutări ciclice la stânga ale lui
z). Cum codul ciclic este cod liniar, atunci orice combinaţie liniară a cuvintelor de
cod este un cuvânt de cod.
Teoremă 1.1. Pentru orice (n, k)−cod liniar C există un polinom gC (X) de grad
n − k astfel ı̂ncât:
C = {gC (X) · p(X) : deg p(X) < k}.
Prin urmare, codul ciclic este generat de gC (X).
Fie C un (n, k) cod ciclic. Pentru a obţine cuvintele de cod procedăm astfel:
2
• multiplicăm mesajul u(X), deg u(X) < k cu X n−k , unde n − k este gradul
polinomului generator al codului;
• aflăm restul r(X) ı̂mpărţirii polinomului X n−k u(X) la polinomul generator
g(X);
• codăm u(X) prin z(X) = X n−k u(X) − r(X). De remarcat faptul că g(X) |
z(X), deci z ∈ C
Exemplu 1.3. Considerăm (7, 4) codul binar ciclic
z1 = 0000000, z2 = 0001011, z3 = 0010110, z4 = 0101100
z5 = 1011000, z6 = 0110001, z7 = 1100010, z8 = 1000101
z9 = 1010011, z10 = 0100111, z11 = 1001110, z12 = 0011101
z13 = 0111010, z14 = 1110100, z15 = 1101001, z16 = 1111111
Codul admite polinomul generator z2 (X) = g(X) = X 3 + X + 1. Se verifică
imediat faptul că g(X) | zi (X), pentru orice 1 ≤ i ≤ 16. Într-adevăr, avem:
z1 (X) = 0 · g(X)
z3 (X) = X 4 + X 2 + X = X · g(x),
z4 (X) = X 5 + X 3 + X 2 = X 2 · g(X)
z5 (X) = X 6 + X 4 + X 3 = X 3 · g(x),
z6 (X) = X 5 + X 4 + 1 = (1 + X + X 2 ) · g(X)
z7 (X) = X 6 + X 5 + X = (X + X 2 + X 3 ) · g(x),
z8 (X) = X 6 + X 2 + 1 = (1 + X + X 3 ) · g(X)
z9 (X) = X 6 + X 4 + X + 1 = (1 + X 3 ) · g(x),
z10 (X) = X 5 + X 2 + X + 1 = (1 + X 2 ) · g(X)
z11 (X) = X 6 + X 3 + X 2 + X = (X + X 3 ) · g(x),
z12 (X) = X 4 + X 3 + X 2 + 1 = (1 + X) · g(X)
z13 (X) = X 5 + X 4 + X 3 + X = (X + X 2 ) · g(x),
z14 (X) = X 6 + X 5 + X 4 + X 2 = (X 2 + X 3 ) · g(X)
z15 (X) = X 6 + X 5 + X 3 + 1 = (1 + X + X 2 + X 3 ) · g(x),
z16 (X) = X 6 + X 5 + X 4 + X 3 + X 2 + X + 1 = (1 + X 2 + X 3 ) · g(X)
Presupunem că se transmite mesajul u = 1101, deci u(X) = X 3 + X 2 + 1. Multi-
plicăm u(X) cu X n−k = X 7−4 = X 3 şi obţinem X 3 u(X) = X 6 + X 5 + X 3 . Împărţim
polinomul X 3 u(x) la g(X) = X 3 + X + 1 şi obţinem:
X 3 u(X) = g(X)(X 3 + X 2 + X + 1) + 1,
deci r(X) = 1. Cuvântul de cod este z(X) = X 3 u(X) − r(X) = X 6 + X 5 + X 3 + 1 =
z15 (X), adică 1101001.
Teoremă 1.2. Generatorul unui cod ciclic de lungime n este un factor al lui X n −1.
3
Demonstraţie: Fie un cod ciclic de lungime n şi g(X) polinomul generator al codului,
deg g(X) = r. Atunci X n−r · g(X) este un polinom de grad n, deci are loc:
X n−r g(X) = (X n − 1) + r(X),
unde deg r(X) < n.
Mai mult, deoarece g(X) este reprezentarea polinomială a unui cuvânt de cod de
lungime n (dintr-un cod ciclic), avem r(X) ≡ X n−r g(X)(mod X n − 1), deci r(X)
este un cuvânt de cod. Prin urmare, există polinomul p(X) astfel ı̂ncât r(X) =
g(X) · p(X). Obţinem:
X n−r g(X) = (X n − 1) + r(X) = (X n − 1) + p(X)g(X),
deci
X n − 1 = (X n−r + p(X)) · g(X),
adică g(X) este un factor al lui X n − 1.
Teoremă 1.3. Orice factor al lui X n − 1 de grad r este polinom generator al unui
cod (n, n − r) ciclic.
Demonstraţie: Fie g(X) un factor al lui X n − 1 de grad r. Atunci polinoamele
g(X), Xg(X), . . . , X n−r−1 g(X) sunt n − r polinoame de grad mai mic decât n. Mai
mult, orice combinaţie liniară de cele n − r polinoame este polinom de grad cel
mult n − 1. Obţinem astfel că {g(X), Xg(X), . . . , X n−r−1 g(X)} este o muli̧me liniar
independentă cu n − r polinoame:
a0 g(X) + a1 Xg(X) + · · · + an−r−1 X n−r−1 g(X) = 0 ⇔
4
2. Coduri ciclice sistematice
Am văzut că pentru a defini un cod ciclic trebuie să precizăm polinomul generator,
adică orice factor al lui X n − 1. Fie g(X) = g0 + g1 X + . . . + gn−k X n−k , deg g(X) =
n − k. O matrice generatoare corespunzătoare codului ciclic este
g0 g1 . . . gn−k 0 0 ... 0
0 g0 g1 . . . gn−k−1 gn−k 0 . . . 0
G= .
.. .. ∈ Mk,n .
.
0 0 ... 0 g0 g1 . . . gn−k
Exemplu 2.1. Pentru codul ciclic binar de lungime 7 cu polinomul generator
g(X) = 1 + X 2 + X 3 , o matrice generatoare este:
1 0 1 1 0 0 0
0 1 0 1 1 0 0
G= 0 0 1 0 1 1 0
0 0 0 1 0 1 1
Exemplu 2.2. Considerăm ı̂n Z3 [X] polinomul X 6 − 1 = (X + 1)3 (X + 2)3 . Sunt
14 posibilităţi de alegere pentru polinomul generator al unui cod ciclic. Alegem
polinomul generator g(X) = (1 + X)(2 + X) = X 2 + 2 pentru codul ciclic ((n =
6, k = 6 − 2 = 4) codul liniar ternar), prin urmare o matrice generatoare este:
2 0 1 0 0 0
0 2 0 1 0 0
G= 0 0 2 0 1 0
0 0 0 2 0 1
Fie X n − 1 = g(X) · h(X), g(X) = g0 + g1 X + . . . + gn−k X n−k , deg g(X) = n − k
polinomul generator al unui cod ciclic şi h(X) = h0 +h1 X +. . .+hk X k , deg h(X) = k.
Fie z(X) reprezentarea polinomială a unui cuvânt de cod, deci z(X) = p(X)g(X),
cu deg p(X) < k. Atunci:
z(X)h(X) = p(X)g(X)h(X) = p(X)(X n − 1) = p(X)X n − p(X).
Deoarece deg p(X) < k, avem că X k , X k+1 , . . . , X n−1 nu apar ı̂n scrierea polinomului
p(X)X n − p(X). Atunci
k
X
hi zn−i−j = 0, ∀1 ≤ j ≤ n − k
i=0
Considerăm X k h(X −1 ) = h0 X k +h1 X k−1 +. . .+hk−1 X +hk şi se observă faptul că
X h(X −1 ) | X n −1, deci poate fi considerat polinom generator al unui (n, n−k)−cod
k
5
Matricea H este matrice de control a codului ciclic generat de g(X).
Exemplu 2.3. Avem X 7 − 1 = (1 + X)(1 + X + X 3 )(1 + X 2 + X 3 ), alegem g(X) =
1 + X 2 + X 3 polinom generator pentru codul (7, 4) ciclic binar, deci h(X) = (1 +
X)(1 + X + X 3 ) = X 4 + X 3 + X 2 + 1. Atunci o matrice generatoare este
1 0 1 1 0 0 0
0 1 0 1 1 0 0
G= 0 0 1 0 1 1 0
0 0 0 1 0 1 1
iar o matrice de control este
1 1 1 0 1 0 0
H = 0 1 1 1 0 1 0
0 0 1 1 1 0 1
De remarcat că matricea generatoare nu este sub formă sistematică. Pentru a
obţine forma sistematică trebuie să alegem o altă bază pentru subspaţiul vectorial.
Fie X n − 1 = g(X) · h(X), g(X) = g0 + g1 X + . . . + gn−k X n−k , deg g(X) = n − k
polinomul generator al unui cod ciclic. Observăm că pentru orice n − k ≤ i ≤ n − 1
putem scrie
X i = g(X)p(X) + ri (X),
unde deg ri (X) < n − k = deg g(X), deci g(X) | X i − ri (X). Prin urmare putem
alege bază pentru subspaţiul vectorial mulţimea {X i − ri (X) : n − k ≤ i ≤ n − 1}.
Exemplu 2.4. Avem X 7 − 1 = (1 + X)(1 + X + X 3 )(1 + X 2 + X 3 ), alegem g(X) =
1+X 2 +X 3 polinom generator pentru codul (7, 4) ciclic binar. Pentru 7−3 ≤ i ≤ 7−1
aplicăm teorema ı̂mpărţirii cu rest:
6
O matrice de control este H = (I3 | − P T ), deci
1 0 0 1 1 1 1
H= 0 1 0 0 1 1 0
0 0 1 1 1 0 1
Definiţie 2.1. Sindromul mesajului recepţionat ẑ relativ la o matrice de control H
este s = ẑ · H T .
În cazul ı̂n care sindromul este nenul, atunci ẑ nu este cuvânt de cod şi a apărut
o eroare. Sindromul cuvântului recepţionat ẑ(X) este restul ı̂mpărţirii lui ẑ(X) la
polinomul generator g(X). Într-adevăr, orice cuvânt de cod z(X) este un multiplu de
g(X), z(X) = g(X) · α(X). Notăm eroarea e(X) = g(X) · β(X) + s(X), deg s(X) <
deg g(X). Atunci:
z(X) + e(X) = (α(X) + β(X)) · g(X) + s(X)
Avem sindromul s(X) = 0 dacă şi numai dacă ẑ(X) este un cuvânt de cod (deci
g(X) | ẑ(X)).
Pentru a obţine corectorii corespunzători sindromurilor nenule facem ı̂mpărţirea
la g(X):
• pentru o singură eroare X i de grad i < n − k = deg g(X) sindromul este X i ;
• pentru eroarea X n−k sindromul este X n−k − g(X)
Algoritm de decodare:
• calculăm sindromul cuvântului recepţionat, sindrom ce depinde doar de eroare;
• deducem corectorul adică opusul erorii;
• aplicăm corectorul cuvântului recepţionat.
Exemplu 2.5. Considerăm (7, 4)− codul ciclic binar cu polinomul generator g(X) =
X 3 +X +1. Presupunem că s-a transmis mesajul u = 1101 ce corespunde cuvântului
de cod z = 1101001 şi cuvântul recepţionat este ẑ = 1001001, ce corespunde polino-
mului ẑ(X) = X 6 + X 3 + 1. Împărţim ẑ(X) la g(X) = X 3 + X + 1 şi obţinem:
ẑ(X) = g(X)(X 3 + X) + (X 2 + X + 1),
deci sindromul este s(X) = X 2 + X + 1.
Dar, pentru g(X) = X 3 + X + 1, avem tabelul:
corector (eroare) sindrom
1 1
X X
X2 X2
X3 X + 1 = X 3 − g(X)
X4 X + X 2 ( restul ı̂mpărţirii lui X 4 la g(X))
X5 1 + X + X 2 ( restul ı̂mpărţirii lui X 5 la g(X))
X6 1 + X 2 ( restul ı̂mpărţirii lui X 6 la g(X))
Prin urmare, pentru sindromul s(X) = X 2 + X + 1 corectorul este X 5 , deci z(X) =
ẑ(X) + X 5 = X 6 + X 5 + X 3 + 1, adică 1101001.
7
Observaţie. Dacă un cuvânt ẑ are sindromul s(x), atunci permutarea sa ciclică are
sindromul s0 (x), adică restul ı̂mpărţirii lui xs(x) la g(x)
Algoritm Meggitt pentru (n, k) codurile ciclice: Acest algoritm acţionează
asupra cuvântului recepţionat astfel: permută ciclic cuvântul, deci şi sindromul,
până când se obţine un sindrom ce corespunde erorii pe primul bit (en−1 (X) 6= 0).
Corectează eroarea şi repetă procesul până când toate erorile sunt corectate.
• se calculeză sindromurile corespunzătoare erorilor (simple) reprezentate prin
polinoame de grad n − 1;
• se determină restul ı̂mpărţirii lui ẑ(x) (cuvânt recepţionat) la g(x) (polinom
generator);
• dacă se obţine un polinom din lista de sindromuri, atunci se modifică poziţia
cea mai din stânga din cuvântul recepţionat;
• se permută ciclic cuvântul şi se reia algoritmul.
Exemplu 2.6. Considerăm (7, 4)− codul ciclic binar cu polinomul generator g(X) =
X 3 + X + 1 şi presupunem că s-a recepţionat ẑ = 1001101. Calculăm sindromul:
ẑ(X) = X 6 + X 3 + X 2 + 1 = g(X) · (X 3 + X) + (1 + X),
deci sindromul este 1+X echivalent cu 011. Conform algoritmului, eroarea pe primul
bit este X 6 , reprezentată printr-un polinom de grad n−1 = 6, şi are sindromul 1+X 2 .
Cum sindromul 1 + X e diferit de sindromul 1 + X 2 , deducem că prima poziţie a fost
recepţionată corect. Permutăm şi obţinem 0011011, adică ẑ1 (X) = X 4 +X 3 +X +1.
Calculăm restul ı̂mpărţirii noului polinom ẑ1 (X) la g(X) şi obţinem sindromul 110.
ẑ1 (X) = X 4 + X 3 + X + 1 = g(X)(X + 1) + X 2 + X
Nici acest sindrom nu se află ı̂n listă (X 2 + X 6= 1 + X 2 ), deci poziţia 2 a fost
recepţionată corect. Permutăm şi obţinem ẑ2 = 0110110. Avem
ẑ2 (X) = X 5 + X 4 + X 2 + X = g(X)(X 2 + X + 1) + X 2 + X + 1
Noul sindrom este X 2 + X + 1, adică 111. Poziţia 3 este corectă. Obţinem prin
permutare ẑ3 = 1101100 cu sindromul X 2 + 1, deci 101. Acest sindrom este ı̂n listă,
deci modificăm poziţia 4: ẑ3 = 1100100.
Permutăm şi obţinem ẑ4 = 1001001 iar sindromul este 1 (deci poziţia 5 este
corectă). Permutăm ẑ5 = 0010011 cu sindromul 010 (poziţia 6 este corectă)
Pentru ẑ6 = 0100110 sindromul este 100 (poziţia 7 este corectă).
Prin urmare, corectăm cuvântul iniţial prin modificarea poziţiei 4:
z = 1000101.
Presupunem că se trimite cuvântul z şi se recepţionează ẑ şi presupunem că erorile
au afectat j poziţii consecutive.
Propoziţie 2.1. Pentru un cod care corectează t erori independente şi corectează
j erori consecutive avem t ≤ j.
Propoziţie 2.2. Un (n, k)−cod ciclic detectează orice pachet de cel mult n − k
erori.
8
Algoritm de decodare: Considerăm C un (n, k) cod binar ciclic cu polino-
mul generator g(X), cod corector de cel mult j erori consecutive şi fie ẑ cuvântul
recepţionat.
• Se calculează sindromul s(X);
• pentru i ≥ 0 se calculează
si (X) = X i s(X)(mod g(X))
până obţinem deg(sp (X)) ≤ j, pentru un p ≥ 0. Atunci eroarea este e(X) =
X n−p sp (X)(mod X n − 1) şi se corectează ẑ(X) + e(X).
Exemplu 2.7. Considerăm n = 15, polinomul generator g(x) = 1+x4 +x6 +x7 +x8 .
Avem un cod (15, 7)− ciclic binar ce are dmin = 5 şi corectează cel mult t = 2 erori.
Recepţionăm cuvântul ẑ = 111100100011111, deci ẑ(X) = X 14 + X 13 + X 12 + X 11 +
X 8 + X 4 + X 3 + X 2 + X + 1.
• Calculăm sindromul: ẑ(X) = (X 6 +X 3 +X)g(X)+(X 6 +X 5 +X 4 +X 2 +1),
unde s(X) = X 6 + X 5 + X 4 + X 2 + 1.
• Avem s1 (X) = Xs(X)(mod g(X)) = X 7 + X 6 + X 5 + X 3 + X, şi s2 (X) =
X 2 s(X)(mod g(X)) = 1 + X 2 . Cum deg(s2 (X)) = 2 = t, obţinem eroarea
tip e = X 15−2 s2 (X) = X 15 + X 13 şi e = X 13 + 1(mod X 15 − 1), deci e =
0010000000001. Corectăm cuvântul prin
ẑ + e = 111100100011111 + 0010000000001 = 110100100011110.
9
TEORIA INFORMAŢIEI ŞI CODURI
CURS 11
1. Teorie Galois
Definiţie 1.1. Un corp finit cu p elemente se notează cu GF (p) şi se numeşte corp
q ori
z }| {
Galois. Un corp are caracteristică q dacă 1 + 1 + . . . + 1= 0 şi q este cel mai mic cu
această proprietate.
Exemplu 1.1. În GF (2) avem 1 + 1 = 0, deci GF (2) este corp de caracteristică 2.
Asemănător obţinem GF (3) are caracteristică 3. Precizăm operaţiile de adunare şi
de ı̂nmulţire:
+ 0 1 · 0 1
0 0 1 0 0 0
1 1 0 1 0 1
1
Exemplu 1.2. În GF (3) avem 11 = 1, deci ord(1) = 1, iar 22 = 1 (21 = 2), deci
ord(2) = 2.
Propoziţie 1.1. În GF (p) au loc:
• orice element nenul este de ordin finit;
• dacă ord(α) = n, atunci α, α2 , . . . , αn−1 sunt elemente distincte din GF (p);
• dacă αk = 1, atunci ord(α) | k.
Teoremă 1.2. Dacă α ∈ GF (p) este element nenul, atunci αp−1 = 1.
Teoremă 1.3. Dacă α ∈ GF (p) element nenul, atunci ord(α) | p − 1.
Demonstraţie: Presupunem că ord(α) - p − 1, deci p − 1 = k · ord(α) + r, cu 0 < r <
ord(α), din teorema ı̂mpărţirii cu rest. Atunci
αp−1 = αk·ord(α)+r = αk·ord(α) · αr .
Cum αp−1 = 1 şi αord(α) = 1, obţinem:
1 = 1k · αr ,
deci αr = 1, contradicţie cu minimalitatea ord(α). Presupunerea făcută este falsă,
deci ord(α) | p − 1.
Definiţie 1.3. Orice element α din GF (p) cu proprietatea că ord(α) = p − 1 se
numeşte element primitiv ı̂n GF (p).
Exemplu 1.3. În GF (3) avem ord(2) = 2 = 3 − 1, deci 2 este element primitiv.
Observaţie. În GF (p) dacă α este element primitiv (deci ord(α) = p − 1, adică
αp−1 = 1 şi p − 1 este cel mai mic cu această proprietate), atunci GF (p) =
{0, α, α2 , . . . , αp−1 }.
Definiţie 1.4. Fie f un polinom cu coeficienţi ı̂n corpul finit GF (p) ı̂n variabila X.
• Dacă β ∈ GF (p) are proprietatea că f (β) = 0, atunci β este rădăcină a lui
f şi X − β | f
• Spunem că f este ireductibil dacă singurii factori ai lui f sunt 1 şi f (deci
nu poate fi descompus ı̂n produs de polinoame de grade mai mici).
Propoziţie 1.2. Dacă α1 , . . . , αn ∈ GF (p) sunt rădăcinile distincte ale lui f ∈
GF (p)[X], atunci:
f (X) = (X − α1 ) · · · (X − αn ).
Exemplu 1.4. În GF (2)[X] polinomul f (X) = X 3 +1 are proprietatea că f (1) = 0,
deci X 3 − 1 = (X − 1)(X 2 + X + 1) şi X 2 + X + 1 este ireductibil.
Propoziţie 1.3. Dacă α ∈ GF (p) are ord(α) = n, atunci
X n − 1 = (X − α)(X − α2 ) · · · (X − αn )
Propoziţie 1.4. Orice polinom ireductibil de grad m cu coeficienţi ı̂n GF (p) divide
m
polinomul X p −1 − 1.
2
Exemplu 1.5. În GF (2) polinomul f (X) = X 2 + X + 1 este ireductibil de grad
m
m = 2, deci divide polinomul X p −1 − 1 = X 3 − 1.
Definiţie 1.5. Un polinom ireductibil f de grad m cu coeficienţi ı̂n GF (p) se
numeşte primitiv dacă cea mai mică valoare a lui n pentru care f | X n − 1 este
n = pm − 1.
Cu alte cuvinte, deşi toate polinoamele ireductibile divid pe X n − 1, unde n =
p − 1, sunt polinoame care divid pe X n − 1, cu n < pm − 1 şi acestea nu sunt
m
primitive.
4
Exemplu 1.6. Polinomul f (X) = 1 + X + X 4 este ireductibil, deci f (X) | X 2 −1 −
1 = X 15 − 1. Se poate demonstra că pentru orice n < 15, f - X n − 1, deci f este
primitiv.
Polinomul g(X) = 1 + X + X 2 + X 3 + X 4 este ireductibil, deci g | X 15 − 1. Dar
g | X 5 − 1, deci g nu este primitiv.
Teoremă 1.4. Orice polinom ireductibil de grad m ı̂n GF (p) are rădăcini ı̂n GF (pm )
de acelaşi ordin.
Deci dacă f (X) este un polinom de grad m ireductibil ı̂n GF (p) şi f (α1 ) =
f (α2 ) = 0 ı̂n GF (pm ), atunci ord(α1 ) = ord(α2 ).
Teoremă 1.5. Polinoamele primitive de grad m din GF (p) au rădăcini ı̂n GF (pm )
de ordin pm − 1. Prin urmare, dacă f este polinom primitiv ı̂n GF (p) şi f (α) = 0
ı̂n GF (pm ), atunci ord(α) = pm − 1.
m
Demonstraţie: Fie f | X p −1 − 1 şi α o rădăcină a lui f ı̂n GF (pm ). Atunci α este
m m m
o rădăcină pentru X p −1 − 1, deci αp −1 − 1 = 0, adică αp −1 = 1. Am obţinut
deci că ord(α) | pm − 1. Atunci toate rădăcinile lui X ord(α) − 1 sunt rădăcini pentru
m m
X p −1 − 1, deci X ord(α) − 1 | X p −1 − 1.
Mai mult, f este polinom primitiv, deci este ireductibil ı̂n GF (p). Atunci toate
rădăcinile sale au acelaşi ordin, deci
m −1
f | X ord(α) − 1 | X p − 1.
Cum f este primitiv, f | X n − 1, unde n = pm − 1 este cel mai mic posibil cu această
proprietate. Prin urmare, ord(α) = pm − 1. I
Dacă α este o rădăcină a lui f ı̂n GF (pm ) şi ord(α) = pm − 1, atunci GF (pm ) =
m
{0, α, α2 , . . . , αp −1 }.
Exemplu 1.7. Polinomul f (X) = X 2 + X + 1 este polinom primitiv ı̂n GF (2) de
grad m = 2. Prin urmare, rădăcinile sale ı̂n GF (4) au ordin pm − 1 = 22 − 1 = 3
(p = 2, m = 2). Fie α o rădăcină a lui f (X), deci f (α) = 0 adică 1 + α + α2 = 0.
Obţinem α2 = α + 1. Atunci:
α3 = α2 + α = α + 1 + α = 1.
Deci GF (22 ) = GF (4) = {0, 1, α, α2 = α + 1} = {0, α, α2 = α + 1, α3 }.
3
Exemplu 1.8. Polinomul f (X) = X 3 + X + 1 este polinom primitiv ı̂n GF (2) de
grad m = 3. Fie α o rădăcină a lui f (X), deci f (α) = 0 adică 1 + α + α3 = 0.
Obţinem α3 = α + 1. Atunci:
α4 = α2 + α
α5 = α3 + α2 = α + 1 + α2
α6 = α3 + α2 + α = α + 1 + α2 + α = α2 + 1
α7 = α3 + α = α + 1 + α = 1
Deci GF (23 ) = GF (8) = {0, 1, α, α2 , α3 = α + 1, α4 = α2 + α, α5 = α2 + α, α6 =
α2 + 1}. De remarcat că αx = αx(mod 7) , de exemplu α8 = α8(mod 7) = α. Într-adevăr
avem α8 = α6 α2 = α2 (α2 + 1) = α4 + α2 = α.
Definiţie 1.6. Fie α ∈ GF (pm ). Polinomul minimal al lui α relativ la GF (p) este
polinomul nenul de grad minim p(X) ∈ GF (p)[X] cu proprietatea că p(α) = 0 ı̂n
GF (pm ).
Propoziţie 1.5. Pentru orice α element din GF (pm ) există un unic polinom nenul
p(X) de grad minim ı̂n GF (p)[X] cu proprietăţile:
• p(α) = 0;
• gradul polinomului p(X) este cel mult egal cu m;
• dacă f (α) = 0, atunci p(X) | f (X);
• p(X) este ireductibil ı̂n GF (p)[X].
Pentru un element β ∈ GF (pm ), elementele conjugate relativ la GF (p) sunt
2 3
β, β p , β p , β p , . . .. Mulţimea formată dintr-un element β şi elementele conjugate
formează clasa de conjugare a lui β. Clasa de conjugare a lui β ∈ GF (pm ) relativ
d
la GF (p) conţine d elemente, unde β p = β este primul element din secvenţă care
d−1
se repetă şi d | m, deci {β, β p , . . . , β p } este clasa de conjugare a lui β.
Exemplu 1.9. Am văzut că
GF (23 ) = GF (8) = {0, 1, α, α2 , α3 = α + 1, α4 = α2 + α, α5 = α2 + α, α6 = α2 + 1}.
Fie β = α6 . Clasa de conjugare a lui β = α6 conţine β, β 2 , β 4 , β 8 , . . .
β 2 = α12 = α12(mod 7) = α5 ,
β 4 = α24 = α24(mod 7) = α3
β 8 = α48 = α48(mod 7) = α6 = β
3
Deci d = 3 (β 2 = β) şi clasa de conjugare a lui β = α6 este {β, β 2 , β 4 , β 8 } =
{α6 , α5 , α3 }. Se poate arăta că clasele de conjugare ale lui β = α5 şi β = α3 sunt
{α6 , α5 , α3 }, iar clasa de conjugare a lui β = α este {α, α2 , α4 }. În plus, clasa de
conjugare a lui β = 1 este {1}.
Propoziţie 1.6. Fie β ∈ GF (pm ) şi p(X) polinomul minimal relativ la GF (p).
Rădăcinile lui p(X) sunt elementele conjugate ale lui β relativ la GF (p).
4
Prin urmare, dacă p(X) este polinomul minimal de grad m relativ la GF (p) şi
β ∈ GF (pm ) este o rădăcină, atunci:
d−1
p(X) = (X − β)(X − β 2 ) · · · (X − β p )
Exemplu 1.10. Polinomul minimal al lui α, α2 , α4 ı̂n GF (8) relativ la GF (2) este:
p(X) = (X − α)(X − α2 )(X − α4 ) =
= X 3 − (α + α2 + α4 )X 2 + (α3 + α5 + α6 )X − α7 =
= X 3 + X + 1.
Observaţie. Polinomul X n − 1 are n rădăcini, β1 , . . . , βn cu proprietatea că ord(βi ) |
n. Mai exact, dacă n = pm − 1, atunci toate cele pm − 1 rădăcini au proprietatea
că ordinul fiecărei rădăcini divide pm − 1. Toate cele pm − 1 elemente nenule ale
lui GF (pm ) au proprietatea că ordinul fiecărui element divide pm − 1. Prin urmare,
toate rădăcinile lui X n − 1, unde n = pm − 1 sunt toate elementele nenule ale lui
GF (pm ). Cum fiecare element nenul din GF (pm ) are asociat un polinom primitiv,
m
atunci X p −1 − 1 poate fi scris ca produsul polinoamelor minimale ale lui GF (pm ).
Exemplu 1.11. Considerăm ı̂n GF (2) polinomul X 15 − 1, deci n = pm − 1, n = 15,
p = 2, m = 4, cu 15 rădăcini, fiecare având ordin ce divide pe 15. Toate elementele
nenule ale lui GF (16) au ordine ce divid pe 15. Prin urmare, X 15 − 1 poate fi scris
ca un produs de polinoamele minimale ale lui GF (16).
GF (16) este o extensie a lui GF (2). Un polinom primitiv pe care putem sa-l
folosim pentru a defini GF (16) este X 4 + X + 1. Atunci elementul primitiv α este
definit de α4 = α + 1. Avem:
α5 = α2 + α
α6 = α3 + α2
α7 = α4 + α3 = α3 + α + 1
α8 = α4 + α2 + α = α2 + 1
α9 = α3 + α
α10 = α4 + α2 = α2 + α + 1
α11 = α3 + α2 + α
α12 = α4 + α3 + α2 = α3 + α2 + α + 1
α13 = α4 + α3 + α2 + α = α3 + α2 + 1
α14 = α4 + α3 + α = α3 + 1
α15 = α4 + α = 1.
Listăm toate clasele de conjugare din GF (16) şi polinoamele minimale corespunzătoare:
clase de conjugare polinom minimal
{1} X +1
{α, α , α4 , α8 }
2 4
X +X +1
{α3 , α6 , α12 , α9 } X4 + X3 + X2 + X + 1
{α5 , α10 } X2 + X + 1
{α , α14 , α13 , α11 }
7
X4 + X3 + 1
5
Prin urmare:
X 15 − 1 = (X + 1)(X 4 + X + 1)(X 4 + X 3 + X 2 + X + 1)(X 2 + X + 1)(X 4 + X 3 + 1)
2. Coduri BCH(Bose–Chaudhuri–Hocquenheim)
6
consecutive: β, β 2 , β 3 , β 4 , deci dmin ≥ 4 + 1 = 5 dacă alegem g(X) polinomul min-
imal al lui β cu cele 11 rădăcini scrise. Obţinem astfel (23, 12) codul Golay cu
d ≥ 5.
7
Pas 3 se ı̂nlocuiesc f1 , . . . , ft ı̂n
f (x) = 0, f (x) = xt + f1 xt−1 + . . . + ft−1 x + ft . (2)
şi se determină rădăcinile Xi (deci poziţiile erorilor.)
Pas 4 se identifică coloanele matricei H unde au apărut erori (din valorile Xi ) şi se
corectează cuvântul.
Observaţie. La pasul 2, dacă matricea corespunzătaore sistemului
St+j + f1 St+j−1 + . . . + ft−1 Sj+1 + ft Sj = 0, 1 ≤ j ≤ t. (3)
este nesingulară (are determinantul nenul), atunci s-au produs t erori. Dacă matricea
este singulară, atunci s-au produs s < t erori.
Exemplu 2.2. Considerăm (15, 5) codul liniar cu polinomul generator
g(x) = (x4 + x + 1)(x4 + x3 + x2 + x + 1)(x2 + x + 1)
d = 7, dat de rădăcinile consecutive α, α2 , α3 , α4 , α5 , α6 , unde α ∈ GF (24 ) rădăcină
pentru x4 + x + 1 = 0. Reamintim polinoamele minimale:
clase de conjugare polinom minimal
{1} X +1
{α, α , α4 , α8 }
2 4
X +X +1
{α3 , α6 , α12 , α9 } X4 + X3 + X2 + X + 1
{α5 , α10 } X2 + X + 1
{α , α14 , α13 , α11 }
7
X4 + X3 + 1
Codul corectează t = 3 erori, dar presupunem că s-au produs doar două erori, mai
precis 001000010000000. Avem:
14
α α13 α12 α11 α10 α9 α8 α7 α6 α5 α4 α3 α2 α1 1
12
H= α α9 α6 α3 1 α12 α9 α6 α3 1 α12 α9 α6 α3 1
α10 α5 1 α10 α5 1 α10 α5 1 α10 α5 1 α10 α5 1
Am omis liniile din H care reprezintă alte linii ridicate la pătrat, fapt ce nu influenţează
ortogonalitatea lui H. Determinăm sindromurile S1 , S3 , S5 , iar S2 = S12 , S4 = S22 ,
S6 = S32 :
S1 = α12 + α7 = α2
S2 = S12 = α4
S3 = α6 + α6 = 0
S4 = S22 = α8
S5 = 1 + α5 = α10
S6 = S32 = 0
8
Am folosit puterile lui α, α4 = α + 1, listate ı̂n tabelul:
α3 α2 α 1
1 0 0 0 1
α 0 0 1 0
α2 0 1 0 0
α3 1 0 0 0
α4 0 0 1 1
α5 0 1 1 0
α6 1 1 0 0
α7 1 0 1 1
α8 0 1 0 1
α9 1 0 1 0
α10 0 1 1 1
α11 1 1 1 0
α12 1 1 1 1
α13 1 1 0 1
α14 1 0 0 1
Rezolvăm sistemul
S3+j + f1 S2+j + f2 Sj+1 + f3 Sj = 0, 1 ≤ j ≤ 3
echivalent cu
S3 f1 + S2 f2 + S1 f3 + S4 = 0
S4 f1 + S3 f2 + S2 f3 + S5 = 0
S f + S f + S f + S = 0
5 1 4 2 3 3 6
9
deci s-au produs 2 erori. Prin urmare:
S3 S1 0 α2
S4 S2 α8 α4 α10
f1 = = = 8 = α2
∆ ∆ α
S2 S3 α4 0
S3 S4 0 α8 α12
f2 = = = 8 = α4
∆ ∆ α
Se verifică şi ecuaţiile
S4 f1 + S3 f2 + S5 = 0, S5 f1 + S4 f2 + S6 = 0.
Determinăm rădăcinile X1 , X2 ale ecuaţiei x2 +f1 x+f2 = 0, adică x2 +α2 x+α4 =
0. Se observă că rădăcinile sunt X1 = α7 şi X2 = α12 , deci am obţinut poziţiile
erorilor. Prin urmare avem 001000010000000.
Observaţie. În cazul ı̂n care am fi presupus că s-a produs o singură eroare, atunci
trebuia să rezolvăm sistemul
S1+j + f1 Sj = 0, 1 ≤ j ≤ 5,
sistem ce conducea la f1 = α2 , dar care nu verifica toate ecuaţiile.
Decodificarea codurilor BCH nebinare
În acest caz se procedează asemn̆ător, de data aceasta sindromul devine
t
X
Si = Yk Xki , m0 ≤ i ≤ m0 + m − 1. (1),
k=1
unde Yk este valoarea celei de-a k erori, identificatorul erorii fiind Xk . Ca ı̂nainte,
valorile Xk se determină dintr-un sistem de ecuaţii liniare, unde Xk sunt rădăcinile
ecuaţiei f (x) = 0, unde
f (x) = Xkt + f1 Xkt−1 + . . . + ft−1 Xk + ft .
De data aceasta, ı̂nmulţim cu Yk Xkj şi ı̂nsumăm după 1 ≤ k ≤ t pentru a obţine
Sj+t + f1 Sj+t−1 + f2 Sj+t−2 + . . . + ft−1 Sj+1 + ft Sj = 0.
Se rezolvă sistemul, se determină f1 , . . . , ft , se ı̂nlocuiesc ı̂n f (x) = 0 şi se află
X1 , . . . , Xt . Cu aceste valori determinate şi cu Si cunoscute, ı̂nlocuim ı̂n
t
X
Si = Yk Xki , m0 ≤ i ≤ m0 + m − 1. (1)
k=1
10
• Se determină coeficienţii f1 , . . . , ft ai lui f (x), unde f (x) este polinomul
care are ca rădăcini Xk , ce identifică eroarea pe poziţia k, prin rezolvarea
sistemului
Sj+t + f1 Sj+t−1 + f2 Sj+t−2 + . . . + ft−1 Sj+1 + ft Sj = 0;
• Se determină rădăcinile X1 , . . . , Xt ale lui f (x). Dacă Xk = αki , atunci
eroarea este ı̂n poziţia (n − ki ) din cuvântul de cod, citind de la stânga.
t
Yk Xki scriind matricea sistemului şi calculând
P
• Se determină Yk din Si =
k=1
inversa.
Coduri Reed-Solomon
Definiţie 2.2. Un cod RS este un cod BCH de polinom generator
g(x) = (x − αm0 )(x − αm0 +1 ) · · · (x − αm0 +m−1 ) ∈ GF (q s )[x]
unde α ∈ GF (q s ) element primitiv.
Observaţie. La codurile BCH cuvintele de cod sunt vectori din Znq , iar la codurile
RS sunt vectori din GF (q s )n
Teoremă 2.2. Distanţa minimă a unui cod RS este d = n − k + 1, unde n = 2s − 1,
k = n − deg g(x).
Exemplu 2.3. Fie GF (23 ) generat de rădăcina α a polinomului 1 + x + x3 . Con-
siderăm codul RS definit de polinomul
g(x) = (x − 1)(x − α)(x − α2 )(x − α3 ) = x4 + α2 x3 + α5 x2 + α5 x + α6 .
Codul are lungimea n = 7 = 23 − 1, k = 3 = 7 − deg(g(x)) şi distanţa minimă
d = n − k + 1 = 5. Construim o matrice generatoare de forma:
1 0 0 α α3 α6 α6
G = 0 1 0 1 α 4 α 2 α
0 0 1 α2 α5 α5 α6
Pentru a obţine cuvintele de cod ı̂nmulţim toate cuvintele din GF (23 )3 cu G.
O matrice de control este
α 1 α2 1 0 0 0
α 3 α4 α5 0 1 0 0
H= α 6
α2 α5 0 0 1 0
α6 α α6 0 0 0 1
Observaţie. Putem să reprezentăm elementele din GF (23 ) sub forma unor triplete
(α2 α 1) astfel:
α3 = α + 1 (011)
4 2
α =α +α (110)
5 2
α =α +α+1 (111)
11
α6 = α2 + 1 (101)
deci putem să scriem cuvintele de cod astfel:
(1 α 0 0 α2 α4 1) = (001 010 000 000 100 110 001)
Presupunem că s-a recepţionat
(1 α α5 0 α6 α4 1) = (001 010 111 000 101 110 001),
deci s-au produs două erori. Calculăm sindromurile unde folosim matricea de control
sub forma (am presupus m0 = 0)
1 1 1 1 1 1 1
α6 α5 α4 α3 α2 α 1
H= α5 α3 α α6 α4 α2 1
α4 α α5 α2 α6 α3 1
Obţinem astfel:
S1 = 1 + α + α5 + α6 + α4 + 1 = α2 + α = α4
S2 = α 6 + α 6 + α 2 + 0 + α + α 5 + 1 = 0
S3 = α5 + α4 + α6 + 0 + α3 + α6 + 1 = α + 1 = α3
S4 = α 4 + α 2 + α 3 + 0 + α 5 + 1 + 1 = α 2 + α = α 4 .
Cum am presupus că s-au produs două erori, rezolvăm direct sistemul dat de
S3 = f1 S2 + f2 S1
S4 = f1 S3 + f2 S2
Avem ∆ = S22 − S1 S3 = 0 + α7 = 1, deci putem să determinăm f1 şi f2
S3 S1 0 α4
S4 S2 α4 04 α8
f1 = = = = α8 = α
∆ ∆ 1
S2 S3 0 α3
S3 S4 α3 α4 α6
f2 = = = = α6 = 1 + α2 .
∆ ∆ 1
Pentru a determina poziţiile erorilor rezolvăm f (x) = x2 + f1 x + f2 = 0, adică
x2 + αx + (α2 + 1) = 0. Soluţiile sunt X1 = α2 , X2 = α4 , deci erorile sunt localizate
pe poziţiile 7 − 4 = 3 şi 7 − 2 = 5 de la stânga. Aflăm valorile erorilor din:
S1 = Y1 + Y2
S2 = α4 Y1 + α2 Y2
Ştim că S2 = 0, deci Y2 = α2 Y1 . Înlocuim ı̂n prima ecuaţie, S1 = α4 , deci Y1 =
α4 4
1+α2
= αα6 = α5 . Am obţinut Y1 = α5 adică (111) şi Y2 = α7 = 1, adică (001). Deci
eroarea este (000 000 111 000 001 000 000). Corectăm (001 010 111 000 101 110 001)
cu eroarea şi obţinem
(001 010 000 000 100 110 001)
12