Documente Academic
Documente Profesional
Documente Cultură
Coduri convoluţionale
În cazul codurilor prezentate până acum, la codificarea unui mesaj de informaţie se
obţine un cuvânt - cod de lungime n, ale cărui caractere nu depind decât de cele
k elemente de informaţie curente. Avem de-a face cu un proces de codificare fără
memorie, iar aceste coduri sunt numite şi coduri - bloc.
P. Elias a introdus ı̂n 1965 o clasă de coduri, remarcabile prin siguranţa sporită pe
care o asigură ı̂n transmiterea informaţiei: codurile convoluţionale. În cazul lor,
codificarea unui mesaj de lungime k se face ţinând cont şi de codificările mesajelor
de informaţie anterioare.
De remarcat că NASA şi Agenţia Spaţială Europeană folosesc o combinaţie ı̂ntre
aceste coduri şi codurile Reed - Solomon. Fiecare mesaj de informaţie este codificat
iniţial cu un cod RS, apoi cu un cod convoluţional.
O astfel de funcţie poate fi exprimată foarte simplu prin polinoame. Astfel, fie
a(X) = a0 + a1 X + a2 X 2 + . . . polinomul reprezentând mesajul sursă, şi u(X) =
u0 + u1 X + u2 X 2 + . . . mesajul codificat. Atunci un cod liniar este o aplicaţie C
definită C(a(X)) = u(X). O astfel de aplicaţie are următoarele proprietăţi:
181
182 PRELEGEREA 16. CODURI CONVOLUŢIONALE
• C este liniară:
C(a(X) + a0 (X)) = C(a(X)) + C(a0 (X));
C(ta(X)) = tC(a(X)).
• C este invariantă ı̂n timp: ı̂ntârzierea mesajului sursă cu k tacţi are ca efect
decalarea răspunsului cu n tacţi:
C(X k a(X)) = X n C(a(X)).
Definiţia 16.1 Fie q un număr prim. Prin (n, k) - cod convoluţional se ı̂nţelege o
aplicaţie liniară C : Zq [X] −→ Zq [X] cu proprietatea (de invarianţă de timp)
C(X k a(X)) = X n C(a(X)).
C(X i ) = X ni g0 (X), ∀i ≥ 1.
Deci, pentru orice polinom a(X) = a0 + a1 X + . . . + ap X p avem
C(a(X)) = a0 C(1)+a1 C(X)+a2 C(X 2 )+. . .+ap C(X p ) = a0 g0 (X)+a1 X n g0 (X)+
a2 X 2n g0 (X) + . . . + ap X np g0 (X) = a(X n )g0 (X).
Aceasta conduce la ideea că un (n, 1) - cod convoluţional este generat de polino-
mul g0 (X) conform regulii
a(X) 7→ a(X n )g0 (X).
Invers, orice polinom g0 (X) ∈ Zq [X] defineşte un (n, 1) - cod convoluţional.
Observaţie: Ideea de polinom generator este similară celei de la codurile ciclice,
unde codificarea mesajului de informaţie a(X) revenea la ı̂nmulţirea cu polinomul
generator. La codurile convoluţionale nu există ı̂nsă restricţie referitor la gradul lui
a(X) şi – ı̂n plus – la ı̂nmulţire se foloseşte a(X n ).
Există o modalitate simplă de construcţie a unui circuit liniar, generator al unui
astfel de cod. Vom descrie aceasta pentru cazul binar.
Polinomul g0 (X) se descompune ı̂n sume de n termeni consecutivi, fiecare sumă
descriind modul de conectare al elementelor de ı̂nmagazinare. Astfel, fie
g0 (X) = (b0 + b1 X + . . . + bn−1 X n−1 ) + (bn X n + bn+1 X n+1 + . . . + b2n−1 X 2n−1 ) +
. . . + (bmn X mn + bmn+1 X mn+1 + . . . + bmn+n−1 X mn+n−1 )
Numărul de m + 1 paranteze indică faptul că sunt necesare m elemente de
ı̂nmagazinare (prima paranteză se referă la intrare). A i - a secvenţă de termeni
descrie ieşirea celui de-al i - lea element de ı̂nmagazinare (bp = 1 semnifică o legătură
directă cu al p - lea element al ieşirii).
În plus, elementele de ı̂nmagazinare sunt legate ı̂ntre ele secvenţial.
º·
- + -
6 ¹¸ 6
6 -
?
s- -
-
º·
? 6
? - + -
¹¸
Exemplul 16.4 Fie (3, 1) - codul convoluţional (deci cu 3 biţi de ieşire) generat de
polinomul g0 (X) = 1 + X 2 + X 3 + X 5 + X 6 + X 7 + X 12 + X 13 + X 14 . Pentru a
construi circuitul liniar, rescriem acest polinom astfel: g0 (X) = (1 +0 + X 2 )+(X 3 +
0 + X 5 ) + (X 6 + X 7 + 0) + (X 12 + X 13 + X 14 ). Se obţine
184 º· PRELEGEREA
º· 16. CODURI
º· CONVOLUŢIONALE
6
- + - + - + -
6 ¹¸ ¹¸ ¹¸ ? -
6 6 6 ¶³
s- - s- - - + -
µ´ -
66
? -
º·
? º·
?
?- + - + -
¹¸ ¹¸
Similar codurilor ciclice, plecând de la polinomul generator, se poate construi ma-
tricea generatoare a codurilor (n, 1) - convoluţionale. Aceasta este
g0 (X)
X n g0 (X)
G=
X 2n g0 (X)
..
.
Numărul liniilor (şi deci şi al coloanelor) lui G nu este fixat, el depinzând de lungimea
mesajului sursă. Astfel, pentru un mesaj de lungime i, matricea G are i linii şi
1 + grad(g0 (X)) + (i − 1) · n coloane.
Exemplul 16.5 Fie (3, 1) - codul convoluţional binar de polinom generator g0 (X) =
1 + X + X 3 + X 4 + X 5 + X 8 . Pentru un mesaj sursă de lungime 3, matricea G va
avea dimensiunea 3 × 15:
1 1 0 1 1 1 0 0 1
G= 1 1 0 1 1 1 0 0 1
1 1 0 1 1 1 0 0 1
(spaţiile libere sunt completate cu 0). Astfel, codificarea mesajului 101 este
101 · G = 110001000110001.
Exemplul 16.6 Fie circuitele liniare a două (2, 1) - coduri convoluţionale, care au
ieşirea comună:
-
6
s- -
6
6
?
²¯ ?
²¯
?- + - + ²¯?
- ±° ±° -
+
±°²¯
- ? -
6 ±°+ -
6 6
? s- - -
?
²¯ ²¯?
?- + - + -
±° ±°
16.3. CODURI (N, K) - CONVOLUŢIONALE 185
La fiecare tact intrarea este formată din doi biţi care formează intrările ı̂n cele două
circuite liniare. O ı̂ntârziere cu doi tacţi la intrare generează o ı̂ntârziere de doi
tacţi la ieşire; deci, acesta este un (2, 2) - cod convoluţional.
Pentru intrarea 10 ieşirea este 110101 (funcţionează doar circuitul superior), iar
pentru 01 ieşirea este 010111 (numai pe baza circuitului inferior). Formal,
C(1) = 1 + X + X 3 + X 5 = g0 (X), C(X) = X + X 3 + X 4 + X 5 = g1 (X).
Folosind invarianţa ı̂n timp se pot determina şi alte ieşiri:
C(X 2i ) = X 2i g0 (X), C(X 2i+1 ) = X 2i g1 (X) ∀i ≥ 1.
k−1
X
n
k
Deci ieşirea la X a(X) prin această aplicaţie este X a(i) (X n )gi (X).
i=0
Să arătăm acum că un (n, k) - cod convoluţional definit de aplicaţia C este identic
k−1
X
0
cu cel dat de C (a(X)) = a(i) (X n )gi (X) unde gi (X) = C(X i ) sunt polinoamele
i=0
generatoare. Deoarece C şi C 0 sunt ambele liniare, este suficient să arătăm că
C(X r ) = C 0 (X r ) pentru orice r ≥X0; atunci vomX
avea
r
2
C(a0 + a1 X + a2 X + . . .) = ar C(X ) = ar C 0 (X r ) = C 0 (a0 + a1 X + . . .).
r≥0 r≥0
Deoarece ambele aplicaţii sunt (n, k) invariante ı̂n timp, ne putem restrânge la
0 ≤ r ≤ k − 1. Pentru a = 00 . . . 0100 . . . (cu 1 pe poziţia r), este evident că
a(r) = 100 . . . şi a(i) = 000 . . . pentru i 6= r. Deci C 0 (X r ) = gr (X) = C(X r ). 2
Analog codurilor (n, 1) - convoluţionale, şi ı̂n acest caz se poate defini ma-
tricea generatoare, care este o reprezentare matricială a relaţiei (1). Liniile ma-
tricii sunt g0 (X), g1 (X), . . . , gk−1 (X), X n g0 (X), X n g1 (X), . . ., considerate ca poli-
noame de grad infinit. Pentru mesajul a = a0 a1 . . . ar codificarea este aG =
186 PRELEGEREA 16. CODURI CONVOLUŢIONALE
a0 g0 (X) + . . . + ak−1 gk−1 (X) + X n [ak g0 (X) + . . . + a2k−1 gk−1 (X)] + X 2n [a2k g0 (X) +
. . .+a3k−1 gk−1 (X)]+. . . = (a0 +ak X n +a2k X 2n +. . .)g0 (X)+. . .+(ak−1 +a2k−1 X n +
k−1
X
. . .)gk−1 (X) = a(i) (X n )gi (X).
i=0
Exemplul 16.7 Matricea generatoare a (2, 2) - codului convoluţional descris ı̂n Ex-
emplul 16.6 este
1 1 0 1 0 1
0 1 0 1 1 1
1 1 0 1 0 1
0 1 0 1 1 1
G=
1 1 0 1 0 1 ...
0 1 0 1 1 1 ...
..
.
S-a prezentat anterior modul de construcţie al unui circuit liniar pentru (n, 1) -
coduri convoluţionale, plecând de la polinomul generator g(X). În mod similar se
determină circuitul liniar de codificare pentru un (n, k) - cod convoluţional:
2. Se foloseşte un buffer comun de ieşire (de n simboluri), ı̂n care ajung rezultatele
ı̂nsumate ale celor k circuite;
3. Secvenţa de intrare este segmentată ı̂n grupe de câte k simboluri, fiecare din
ele constituind intrarea ı̂n câte un circuit liniar.
Exemplul 16.8 Să construim circuitul liniar pentru (2, 2) - codul definit de poli-
noamele generatoare
g0 (X) = X + X 3 + X 4 + X 5 , g1 (X) = 1 + X + X 2 + X 4 + X 5 + X 6 + X 7 .
Scriem g0 (X) = (0 + X) + (0 + X 3 ) + (X 4 + X 5 ) deci circuitul său liniar are 2
elemente de ı̂nmagazinare. Pentru g1 (X) = (1+X)+(X 2 +0)+(X 4 +X 5 )+(X 6 +X 7 )
sunt necesare trei elemente de ı̂nmagazinare.
Reprezentarea sa grafică este:
16.4. CODURI CONVOLUŢIONALE SISTEMATICE 187
²¯ ²¯
- + - + -
6 ±° ±°
6 6
s - - - 6
6
? ²¯?
- ²¯ ²¯ - + -
- + - + -6 ±°²¯ ?
- 6 ±° ±° 6 + -
6 6 ±°
6
?
-s - - -
?
²¯ ²¯?
? - + - + -
±° ±°
se numesc generatori.
Fie λ un număr natural. Se defineşte operatorul
Dλ g∞ (i) = 0| .{z
. . 0} g∞ (i)
λn
care translatează g∞ (i) cu λn poziţii spre dreapta.
În sfârşit, fie
g∞ (1)
..
.
Q0 g∞ (k)
DQ0 Dg∞ (1)
G∞ =
D 2 Q0
=
.. =
.
..
Dg∞ (k)
.
D 2 g∞ (1)
.
..
Ik P0 Ok P1 Ok P2 . . . Ok PN −1 ...
Ik P0 Ok P1 . . . Ok PN −2 Ok PN −1 ...
=
Ik P0 . . . Ok PN −3 Ok PN −2 Ok PN −1
..
.
matricea generatoare a unui (n, k) - cod convoluţional sistematic.
Observaţie: Evident, un (n, k) - cod convoluţional sistematic este un (n, k) - cod
convoluţional. Invers, fiind dat un (n, k) - cod convoluţional, el se poate transforma
mn+n−1
X
ı̂n unul sistematic prin adunarea la fiecare polinom generator gi (X) = bi,p X i
p=0
m k−1
X X
a polinomului gi0 (X) = (k − bi,np+j )X np+j + bi X i (0 ≤ i ≤ k − 1).
p=0 j=0
Deşi are - teoretic - un număr infinit de linii şi coloane, fiind ı̂n formă canonică,
pentru această reprezentare se poate construi imediat matricea de control:
−P0T In−k ...
−P1T On−k −P0T In−k ...
−P2T On−k −P1T On−k −P0T In−k ...
..
.
H∞ = T
−PN
−1 On−k −PNT −2 On−k −PNT −3 On−k ...
−PNT −1 On−k −PNT −2 On−k ...
−PNT −1 On−k ...
..
.
a cărei transpusă este
−P0 −P1 −P2 . . . −PN −1 ...
In−k On−k On−k . . . On−k ...
T
H∞ =
−P0 −P1 . . . −PN −2 −PN −1 ...
In−k On−k . . . On−k On−k ...
..
.
16.4. CODURI CONVOLUŢIONALE SISTEMATICE 189
T
Se verifică imediat egalitatea G∞ H∞ = O∞ .
Să considerăm un mesaj de informaţie a, sub forma unei succesiuni (teoretic)
infinite. El va fi ”descompus” iniţial ı̂n blocuri de lungime k:
a = a0 (1) . . . a0 (k) a1 (1) . . . a1 (k) . . . ap (1) . . . ap (k) . . .
| {z }| {z } | {z }
a0 a1 ap
Mesajul codificat se obţine similar codurilor liniare, prin ı̂nmulţirea lui a cu matricea
generatoare: c = aG∞ ; textul rezultat va fi descompus ı̂n blocuri de lungime n:
c = aG∞ = c0 (1) . . . c0 (n) c1 (1) . . . c1 (n) . . . cp (1) . . . cp (n) . . .
| {z }| {z } | {z }
c0 c1 cp
0- 0
0- 0 -6
6 ? 1 - g0
0 - 0-
6 0 - g1
? 1 - g- 6
0
? 1 - g0 + g1
-
0 - g2
0 - g- 6
1
6 ? 1 - g0 + g2
? 1 - g-
0
0 - g1 + g2
? 1 - g0 + g1 -6
? 1 - g0 + g1 + g2
Operaţia de codificare poate fi privită atunci ca un proces ı̂n care este trasat un
drum particular ı̂n arbore, conform instrucţiunilor date de mesajul de informaţie.
Exemplul 16.11 Să considerăm (3, 1) - codul convoluţional binar cu N = 4, gene-
rat de g(1, 1) = 1011, g(1, 2) = 1101. Generatorul codului este
g(1) = 111 001 010 011, iar arborele de codificare
- 000
- 000 -6
? - 111
- 000 -6
6 - 001
? - 111 -6
? - 110
- 000 -
6 - 010
- 001 -6
6 ? - 101
? - 111 -
- 011
? - 110 -6
? - 100
-
- 011
- 010 -6
? - 100
- 001 -6
6 ? - 101 - - 010
6
? - 101
? - 111 -
- 001
- 011 -6
? - 110
? - 110 -6
- 000
? - 100 -6
? - 111
16.6 Exerciţii
16.1 Construiţi un codificator pentru (2, 1) - codul convoluţional binar de polinom
generator g0 (X) = 1 + X + X 3 + X 4 + X 6 + X 7 + X 9 . Cât este N ? Codificaţi
mesajele 110, 0110, 1010.
16.2 Construiţi o matrice generatoare pentru codul definit anterior.
16.3 Construiţi un codificator pentru (2, 1) - codul convoluţional ternar de polinom
generator g0 (X) = 1 + 2X + 2X 3 .
Să se determine o matrice generatoare.
Să se codifice mesajele 102, 200, 0120.
16.4 Construiţi un codificator pentru un (3, 2) - cod convoluţional binar cu N = 2.
16.5 Codificatorul din Exemplul 16.8 are 5 elemente de ı̂nmagazinare. Construiţi
un codificator pentru acelaşi cod, care utilizează doar 4 elemente de ı̂nmagazinare.
16.6 Construiţi polinoamele generatoare ale codului convoluţional dat mai jos:
²¯ ²¯
-+ -+ -
6 ±° ±°
6 6
s- - - -
-6 6
²¯ ²¯?
s- - -+ - + -
±° ±°
-
? 6 ? 6 ?-
²¯ ²¯ ²¯
?- + -+ -+ -
6 ±° ±° ±°
6 -
²¯ 6
-+ -
6 ±°
6
? s- - - -
?
²¯ ?
²¯ ?
²¯
?- + -+ -+ -
±° ±° ±°
16.7 Construiţi o matrice generatoare pentru codul din exerciţiul anterior.
Codificaţi mesajul 11001.
16.8 Construiţi un codificator pentru (4, 3) - codul binar, de polinoame generatoare
g0 (X) = 1 + X + X 3 + X 5 + X 6 , g1 (X) = X + X 2 + X 3 + X 4 , g2 (X) = 1 + X 2 +
X 3 + X 5 + X 6.
16.9 Să se construiască matricea generatoare şi de control pentru (3, 2) - codul
convoluţional sistematic ternar de subgeneratori g(1, 1) = 1200, g(2, 1) = 2011.
Să se codifice mesajele 11220, 1012, 2222.
16.10 Aceeaşi problemă pentru (4, 2) - codul binar cu
g(1, 1) = 001, g(1, 2) = 110, g(2, 1) = 101, g(2, 2) = 111.
Să se codifice mesajele 1100, 011, 001100.
Să se construiască reprezentarea arborescentă.
16.11 Să se demonstreze formulele (2).
Bibliografie
[2] M. Blaum - A (16, 9, 6, 5, 4) error correcting dc-free block code, IEEE Transac-
tions on Information Theory, vol. 34, 1988, pp. 38-141;
[4] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;
[6] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;
[8] A. M. Kerdok - A class of low-rate non linear codes, Information and control,
20 (1972), 182-187;
[10] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;
[11] W. E. Ryan - A Turbo Code Tutorial, IEEE Trans. Comm., pp. 1261- 1271,
Oct. 1996.
193