Sunteți pe pagina 1din 10

SISTEM DE CODARE ŞI DECODARE PENTRU UN COD CICLIC

CORECTOR DE O EROARE

1. Introducere teoretică
Un cuvânt de cod ciclic se poate reprezenta ca un polinom:
v ( x ) = an −1 x n −1 ⊕ an− 2 x n −2 ⊕ … ⊕ a1 x ⊕ a0 (1)
în care cei n coeficienÛi ai ∈ {0,1} constituie simbolurile cuvântului de cod, k dintre simboluri sunt
de informaÛie Õi m=n-k sunt de control.
Un cod ciclic este definit prin polinomul s|u generator g ( x ) , de grad m. Cuvintele codului

ciclic generat de g ( x ) sunt polinoame de grad n-1 sau mai mic, multipli ai polinomului g ( x ) .

Altfel spus, orice cuvânt de cod ciclic v ( x ) este divizibil prin g ( x ) . Aceast| proprietate a
cuvintelor de cod ciclic este utilizat| în realizarea cod|rii Õi decod|rii: la codare, fiind date
simbolurile de informaÛie, trebuie determinate simbolurile de control, astfel încât s| rezulte un
cuvânt v ( x ) , care împ|rÛit prin g ( x ) s| dea restul nul; la recepÛie, decodorul verific| dac| restul

împ|rÛirii cuvântului recepÛionat v′ ( x ) ) prin g ( x ) este sau nu zero. Dac| restul este zero, cuvântul
recepÛionat este corect, iar în caz contrar cuvântul recepÛionat este eronat datorit| perturbaÛiilor de pe
canal. În acest ultim caz, dac| structura codului permite corecÛia erorii, se va determina cuvântul
eroare ε ( x ) , iar cuvântul corect va rezulta din relaÛia:

v ( x ) = v′ ( x ) ⊕ ε ( x ) (2)

unde cuvântul eroare ε ( x ) este un cuvânt de lungime n cu unit|Ûi plasate pe poziÛiile în care s-au
introdus erori Õi zerouri pe poziÛiile în care nu s-au introdus erori în cuvântul recepÛionat.
Pornindu-se de la polinomul informaÛional
i ( x ) = ak −1 x k −1 ⊕ ak − 2 x k − 2 ⊕ … ⊕ a1 x ⊕ a0 (3)
construit numai cu simbolurile de informaÛie, se pot construi coduri nesistematice sau sistematice, în
conformitate cu relaÛiile:
- cod nesistematic:
v ( x) = g ( x) ⋅i ( x) (4)
- cod sistematic:
v ( x ) = x mi ( x ) ⊕ rest { x mi ( x ) g ( x )} (4)

În cazul codului sistematic, simbolurile de informaÛie sunt plasate pe poziÛiile


corespunz|toare coeficienÛilor termenilor de grad n-1 pân| la n-k.

62
Determinarea posibilit|Ûilor de corecÛie sau detecÛie a codului se face prin alegerea adecvat|
a polinomului generator g ( x ) . În cazul corecÛiei unei erori, polinomul generator se alege primitiv de
grad m, determinat din relaÛia: 2m $ m + k + 1.

2. Codor ciclic corector de o eroare


În cele ce urmeaz| se va considera un cod ciclic sistematic în care n=7 Õi k=4. Din relaÛia
2m $m+4+1, rezult| m=3 Õi deci cuvintele de cod au structura: v ( x ) = a6 x 6 ⊕ a5 x 5 ⊕ … ⊕ a1 x ⊕ a0 ,

unde a6 , a5 , a4 , a3 sunt simbolurile de informaÛie, iar a2 , a1 , a0 de control. Cu ajutorul acestui cod se


pot transmite N # 2k = 16 mesaje Õi se poate corecta o eroare, indiferent de poziÛia în care apare.
Drept polinom generator se poate folosi fie g ( x ) = x 3 ⊕ x ⊕ 1 , fie g ( x ) = x3 ⊕ x 2 ⊕ 1 . (Liste de
polinoame primitive de diferite grade sunt indicate în literatura de specialitate).
Un circuit care poate realiza codarea cuvintelor de cod ciclic generate de g ( x ) este circuitul
divizor de polinoame realizat cu registru de deplasare cu reacÛie, dat în fig.1.

Figura 1

C2, C1, C0 sunt cele trei celule binare ale registrului de deplasare, gi sunt multiplicatoare cu
constanta gi ∈ {0,1}, iar ⊕ sunt sumatoare modulo doi. Pentru acest circuit se poate defini matricea
caracteristic| [T]:
0 1 0
[T ] =  0 0 1  (6)
 g 0 g1 g 2 

 stC 0 
care permite determinarea evoluÛiei stărilor registrului. Se noteaz| [S] =  stC1 o stare a registrului,
stC 2 

63
0 
stCk - starea celulei k Õi [U] =  0  specificând c| C0 Õi C1 sunt în "0" logic Õi C2 în "1" logic. Starea
 1

registrului la tactul "i" se determin| cu relaÛia:

[ Si ] = [T ] ⋅ [ Si −1 ] ⊕ an−i [U ] (7)
FuncÛionarea circuitului este urm|toarea: în primele patru tacte pe intrarea A se aplic|
simbolurile cunoscute, de informaÛie, a6 , a5 , a4 , a3 , iar în ultimele trei tacte comutatorul este trecut pe
poziÛia 2, pe intr|rile A Õi B ale sumatorului S3 aplicându-se aceleaÕi simboluri (intrarea A se uneÕte
astfel cu B), respectiv cele de la ieÕirea sumatorului S2. Din acest motiv starea final| a registrului este
nul|. Prin urmare, în punctul A, la ultimele trei tacte se obÛin simbolurile de control a2 , a1 , a0 ale
cuvântului de cod. În continuare, se vor determina relaÛiile dintre simbolurile de informaÛie Õi cele de
control, scriind cu ajutorul matricei caracteristice succesiunea de st|ri a registrului cu reacÛie.
Se alege polinomul generator g ( x ) = x3 ⊕ x ⊕ 1 , pentru care:

0 1 0 
[T ] = 0 0 1  (8)
1 1 0 

Utilizând relaÛia (7), se obÛine:


0
[ S1 ] = a6 [U ] =  0  (9)
 a6 

0
[ S2 ] = [T ] ⋅ [ S1 ] ⊕ a5 [U ] =  a6  = a6 [T ] ⋅ [U ] ⊕ a5 [U ] (10)
 a5 

 a6 
[ S3 ] = [T ] ⋅ [ S2 ] ⊕ a4 [U ] =  a5  = a6 [T ] [U ] ⊕ a5 [T ][U ] ⊕ a4 [U ]
2
(11)
 a6 ⊕ a5 

 a5 
[ S4 ] = [T ] ⋅ [ S3 ] ⊕ a3 [U ] =  a6 ⊕ a4  = a6 [T ] [U ] ⊕ a5 [T ] [U ] ⊕ a4 [T ][U ] ⊕ a3 [U ]
 3 2
(12)
 a6 ⊕ a5 ⊕ a3 

 a6 ⊕ a4 
[ S5 ] = [T ] ⋅ [ S 4 ] ⊕ a2 [U ] =  a6 ⊕ a5 ⊕ a3  =

 a6 ⊕ a5 ⊕ a4 ⊕ a2 

64
= a6 [T ] [U ] ⊕ a5 [T ] [U ] ⊕ a4 [T ] [U ] ⊕ a3 [T ][U ] ⊕ a2 [U ]
4 3 2
(13)

 a6 ⊕ a5 ⊕ a3 
[ S6 ] = [T ] ⋅ [ S5 ] ⊕ a1 [U ] =  a6 ⊕ a5 ⊕ a4 ⊕ a2  =
 a3 ⊕ a4 ⊕ a5 ⊕ a1 

= a6 [T ] [U ] ⊕ a5 [T ] [U ] ⊕ a4 [T ] [U ] ⊕ a3 [T ] [U ] ⊕ a2 [T ][U ] ⊕ a1 [U ]
5 4 3 2
(14)

 a6 ⊕ a5 ⊕ a4 ⊕ a2 
[ S7 ] = [T ] ⋅ [ S6 ] ⊕ a0 [U ] =  a3 ⊕ a4 ⊕ a5 ⊕ a1  =
 a2 ⊕ a3 ⊕ a4 ⊕ a0 

= a6 [T ] [U ] ⊕ a5 [T ] [U ] ⊕ a4 [T ] [U ] ⊕ a3 [T ] [U ] ⊕ a2 [T ] [U ] ⊕ a1 [T ][U ] ⊕ a0 [U ] (14)
6 5 4 3 2

Dac| se are în vedere c| starea dup| Õapte tacte a registrului este nul|, se pot obÛine relaÛiile
dintre simbolurile de informaÛie Õi cele de control:
0  a2 = a6 ⊕ a5 ⊕ a4

[S7] = 0  Õi deci  a1 = a3 ⊕ a4 ⊕ a5 (16)
0  a = a ⊕ a ⊕ a
 0 3 5 6

Se poate ar|ta c| expresia [S7] dat| de relaÛia (15) se poate pune sub forma:

[ S7 ] = [ H ][ v ]
T
(17)
unde:

[ H ] = [U ] [T ][U ] [T ] [U ] [T ] [U ] [T ] [U ] [T ] [U ] [T ] [U ]


2 3 4 5 6
(18)

este matricea de control a codului, iar cuvântul de cod [v] se reprezint| sub forma unei matrice linie:
[ v ] = [ a0 a1 a2 a3 a4 a5 a6 ] (19)
În figura 2 Õi tabelul 1 sunt prezentate circuitul de codare, respectiv st|rile intr|rii, ieÕirii Õi
st|rile celulelor registrului în cazul folosirii polinomului generator g ( x ) = x 3 ⊕ x ⊕ 1 . Dup| ce

utimul simbol informaÛional, a3 , a fost introdus în R.D.R., cheia K este trecut| pe poziÛia 2.
Începând cu tactul 8 se face codarea pentru al doilea cuvânt de cod.

Figura 2
65
Tabelul 1
Tact Cheia Intrare Stare registru IeÕire
K C2 C1 C0
1 a6 0 0 0 a6
2 a5 a6 0 0 a5
3 poz.1 a4 a5 a6 0 a4
4 a3 a6 r a4 a5 a6 a3
5 0 a6 r a5 r a3 a6 r a4 a5 a2 = a6 r a5 r a4
6 poz.2 0 0 a6 r a5 r a3 a6 r a4 a1 = a5 r a4 r a3
7 0 0 0 a6 r a5 r a3 a0 = a6 r a5 r a3
8 poz.1 a6 0 0 0 a6

3. Decodor ciclic corector de o eroare


În fig.3 este prezentat| principial schema unei unit|Ûi de decodare realizat| cu dou|
decodoare identice construite cu registre de deplasare cu reacÛie similare cu cele de la codare.

La decodare pe intrarea A se aplic| succesiv timp de Õapte tacte simbolurile a6′ , a5′ ,… , a1′ , a0′
ale cuvântului recepÛionat, starea registrului devenind conform relaÛiei (7):
 S ′  = a ′ [T ]6 [U ] ⊕ a ′ [T ]5 [U ] ⊕ … ⊕ a ′ [T ][U ] ⊕ a ′ [U ] (20)
 7 6 5 1 0

Úinând cont de (17), se poate scrie:


 S ′  = [ H ][ v′]T = [ Z ] (21)
 7
unde [ Z ] se numeÕte corectorul cuvântului recepÛionat.

Dac| simbolurile ak ′ sunt toate corecte,  S7′  = [ Z ] = [ 0] . Dac| unul din simbolurile ak ′ este
 

eronat,  S7′  = [ Z ] ≠ [ 0] . Fie eronat simbolul ai′ , adic|:


 

 ak ′ = ak pt k ≠ i cu k = 0,1,… , 6
 (22)
ak ′ = ak ⊕ 1 pt k = i
În acest caz, relaÛia (21) devine:

[ Z ] = a6 [T ] [U ] ⊕ a5 [T ] [U ] ⊕ … ⊕ a1 [T ][U ] ⊕ a0 [U ] ⊕ [T ] [U ] = [T ] [U ]
6 5 i i
(23)
Õi este clar c| pentru fiecare poziÛie eronat|, deci pentru fiecare cuvânt eroare, avem alt corector,
adic| acest cod are propriet|Ûi de corecÛie.

66
Figura 3

Pentru corecÛia erorii de pe poziÛia "i" registrul de deplasare cu reacÛie este l|sat s| evolueze
liber (la intrarea sa se aplic| "0" logic) în decursul urm|toarelor Õapte tacte. Succesiunea de st|ri a
registrului de deplasare cu reacÛie în evoluÛie liber| se poate determina cu relaÛiile:
  S ′  = [T ]  S ′  = [T ][T ]i [U ]
  8  7

  S ′  = [T ]  S ′  = [T ]2 [T ]i [U ]
  9  8
 ……………………… (24)

 1 
  S14−i −1′  = [T ] [T ] [U ] = [T ] [U ] = 0 
7 − i −1 i −1

  
 0 

deoarece [T ] = [ I ] , unde [ I ] este matricea unitate.


7

Deci, dac| este eronat simbolul ai , la tactul 14-i-1, adic| atunci când simbolul eronat ajunge

67
 1
în celula binar| 7 a lui RD1, registrul trece prin starea fix| 0  , caz în care la ieÕirea porÛii ÔI1 rezult|
0 

"1" logic care, sumat modulo 2 cu a'i recepÛionat eronat, îl corecteaz|.

4. Dispozitivul de laborator
Dispozitivul de laborator este construit pentru coduri ciclice 7:4 generate de
g ( x ) = x 3 ⊕ x 2 ⊕ 1 (caz a) sau g ( x ) = x3 ⊕ x ⊕ 1 (caz b). fig.4.

Figura 4

Cu ajutorul comutatoarelor de pe panoul frontal se poate selecta orice combinaÛie de 4


simboluri binare informaÛionale, iar prin intermediul comutatoarelor de la canalul de transmisiune se
poate erona oricare simbol al cuvântului de cod. Dispozitivul genereaz| periodic acelaÕi cuvânt de
cod.

5. Schema electrică a dispozitivului de laborator


Schema logic| a dispozitivului de laborator este prezentat| în fig.5.
Comutatorul K al codorului este implementat cu porÛile SAU2, SAU3, ÔI1. Registrul în inel
R1 are 7 celule Õi se iniÛializeaz| în cu un 1 Õi restul de 0. Atunci când celula 6 se afl| în starea 1, la
ieÕirea porÛii SAU1 se obÛine a6 (egal cu 1 sau cu 0, dup| cum comutatorul respectiv de la intrarea
corespunz|toare a porÛii SAU1 este închis pe ieÕirea 6 sau la mas|). La tactele urm|toare se obÛin în
mod similar a5 , a4 , a3 selectabile prin comutatoarele respective. În tot acest timp, poarta SAU2 are 0
la ieÕire, care blocheaz| poarta ÔI1. Se asigur| astfel aplicarea simbolurilor de informaÛie a6 − a3
prin SAU3 atât registrului de deplasare cu reacÛie (pe S3), cât Õi c|tre canalul de transmisiuni simulat
cu XOR1. Când unitatea se deplaseaz| prin celulele 2, 1 Õi 0 ale registrului R1, se obÛine 1 la ieÕirea

68
SAU2, care valideaz| poarta ÔI1. Simultan poarta SAU1 are 0 la ieÕire. Se obÛin simbolurile de
control care se aplic| prin ÔI1, SAU3 atât c|tre ieÕire (XOR1), cât Õi pe a doua intrare a lui S3. Prin
comutatoarele de la intrarea porÛii SAU4 se prescriu simbolurile cuvântului eroare. De exemplu,
dac| este "1" logic în celula 3, pe linie se transmite a3 ; în funcÛie de poziÛia comutatorului al treilea,
la ieÕirea porÛii SAU4 se obÛine ε 3 de valoare 0 sau 1; poarta XOR1 realizeaz| a3 ⊕ ε 3 . O dat| cu
revenirea unit|Ûii în celula 6 se începe transmiterea unui nou cuvânt de cod.
Decodorul este construit conform schemei de principiu, comutatorul C al decodorului fiind
realizat cu bistabilul CB care valideaz| când ÔI2, ÔI5, când ÔI3, ÔI4.
Pentru corecta sincronizare a codorului cu decodorul, tactul decodorului este întârziat prin
selectarea frontului opus faÛ| de tactul codorului.
La sfârÕitul fiec|rui cuvânt se d| tact pentru CB, iar la tactul urm|tor se d| tact pentru
registrele de afiÕare, care încarc| paralel cuvintele.

Figura 5
6. Desfăşurarea lucrării
1. Se întocmeÕte un tabel cu funcÛionarea codorului în cazul polinomului

69
g ( x ) = x3 ⊕ x 2 ⊕ 1 .

2. Se verific| faptul c| v ( x ) obÛinut la ieÕirea codorului este cuvânt de cod, divizibil prin

g ( x) .
3. Se scriu toate cuvintele de cod pentru ambele polinoame generatoare Õi se verific|:
- distanÛa Hamming între cuvinte;
- proprietatea de ciclicitate.
4. Să se găsească cuvintele de cod ciclice sistematice pentru transmiterea numerelor
zecimale de la 0 la 7. Numerele se transcriu în binar pe numărul minim de biŃi.
5. CalculaÛi resturile diviz|rii polinoamelor ε i ( x ) la g ( x ) , unde ε i ( x ) = xi Õi
i ∈ {0,1,2,...,6}. Concluzii.
6. Să se deseneze structura decodorului în cazul polinomului g ( x ) = x 3 ⊕ x 2 ⊕ 1 şi să
se afle cuvântele de cod rezultate în urma decodării, dacă s-au recepŃionat cuvintele
[ v1′ ] = [1 0 1 1 1 0 0] , [ v2′ ] = [1 0 0 0 0 1 0] , respectiv

[ v3′ ] = [1 0 0 1 1 0 0] . Cuvintele recepŃionate sunt date în forma

[ v′] = [ a0′ a1′ a2′ a3′ a4′ a5′ a6′ ] .


7. Ce se întâmpl| dac| se produc dou| erori ? Dar dac| se produc trei erori ?
8. Se analizeaz| funcÛionarea pe schema electric|.
9. AplicaÛÛia MATLAB B> Simulink:
Se lanseaz| programul Matlab Õi din meniul 'FileB>Open' se selecteaz| Õi se deschide
modelul lucr|rii de laborator ‘ciclic.mdl’. Se urm|reÕte funcÛionarea sistemului de codare/decodare
astfel:
- Se identific| Õi se studiaz| blocurile de pe schem|;
- Se alege polinomul generator g(x) dorit prin modificarea structurii codorului Õi decodorului
(blocurile "Codor" Õi "Decodor");
- Se prescrie rata erorilor introduse de canalul de transmisiuni (dublu-click pe blocul "B-
error" B> "error probability");
- Prin acÛionarea butonului 'Start' se porneÕte simularea, la terminarea ei obÛinându-se un
raport asupra ratei erorilor f|cute la decodare (recepÛie);
- F|când dublu-click pe blocurile de tip "scope" se observ| formele de und| din punctele
respective. ObservaÛii.
Se deschide apoi modelul lucr|rii de laborator ‘ciclic_1cuvant_de_cod.mdl’. Se urm|reÕte
funcÛionarea schemei, astfel:
- Se prescriu cele 4 simboluri de informaŃie cu ajutorul comutatoarelor din intrare;
70
- Se prescrie poziŃia erorii din blocul „canal de comunicatie”;
- Se acŃionează butonul 'Start' şi se urmăresc formele de undă corespunzătoare secvenŃei de
date, cuvântului de cod, cuvântului recepŃionat şi cuvântului decodat din blocurile de tip "scope".

71

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