Sunteți pe pagina 1din 8

43

CODOR-DECODOR HAMMING CORECTOR DE O EROARE,


DETECTOR DE DOU ERORI

1. Introducere teoretic
1.1. Coduri liniare
n cazul codurilor liniare, cuvntul de cod se scrie uzual sub forma unei matrice linie:
| | | |
1 2 n
v a a a = (1)
Din cele n simboluri, k sunt de informaie, iar m sunt de control. Prin operaia de codare se
nelege calcularea simbolurilor de control n funcie de cele de informaie, astfel nct [v] s| fie
cuvnt de cod. n cazul codurilor liniare, simbolurile de control sunt combinaii liniare ale
simbolurilor de informaie. Ele se obin prin rezolvarea unui sistem liniar de m ecuaii cu m
necunoscute:
11 1 12 2 1
21 1 22 2 2
1 1 2 2
0
0
0
n n
n n
m m mn n
h a h a h a
h a h a h a
h a h a h a
=

(2)
Sistemul (2) se poate scrie sub forma:
| || | | |
1
0
T
m
H v

= (3)
n relaiile (2), (3), produsul este cel obinuit, iar suma este modulo doi.
Matricea:
| | { }
11 12 1
21 22 2
1 2
0,1
n
n
ij
m m mn
h h h
h h h
H h
h h h
(
(
(
=
(
(

(4)
reprezint| matricea de control a codului. A preciza un cod liniar implic| a preciza matricea de
control [H].
Reamintim c| propriet|ile de detecie sau corecie ale codului se stabilesc prin alegerea
matricei [H] n mod corespunz|tor. Relaia (3) reprezint| condiia de codare: se consider| cuvinte de
cod doar acele secvene binare de n simboluri, care verific| relaia (3).
Decodorul recepioneaz| cuvntul eronat | | | | | | v v = , unde:
| | | |
1 2 n
= (5)
reprezint| cuvntul eroare, definit prin:


44
| |
0, dac pe poziia nu s-a introdus eroare
1, dac pe poziia s-a introdus eroare
i
i
i

(6)
Operaia de decodare const| n calcularea corectorului:
| | | || |
T
Z H v = (7)
innd cont de leg|tura dintre [v'], [v] i [] i de relaia de codare (3) se poate scrie:
| | | | | | | | ( ) | || | | || | | || |
T T T T
Z H v H v H H = = = (8)
Dac| nu s-au introdus erori, []=[0], deci [Z]=[0].
Dac| s-a introdus cel puin o eroare, [][0] i deci [Z] [0]. n cazul codurilor corectoare de
erori, din structura corectorului se pot stabili num|rul i poziia erorilor. n cazul codurilor binare
corecia se efectueaz| prin negarea simbolului eronat (operaie care se execut| prin sumarea modulo
doi a lui 1 la simbolul eronat).

1.2. Codul Hamming corector de o eroare
Codul Hamming corector de o eroare este un cod liniar care are matricea [H] de forma:
| | | |
1 2
0 0 0 1
0 0 0 1
0 1 1 1
1 0 1 1
n
H h h h
(
(
(
( = =
(
(
(

(9)
unde fiecare coloan| h
i
reprezint| transcrierea n cod binar a num|rului de ordine al coloanei
utiliznd m bii.
Cuvntul de cod [v] are simbolurile de control plasate pe poziiile 2 ,
l
l , deci pe poziiile
1, 2, 4, 8, 16, ...:
| | | |
1 2 3 4 5 6 n
v c c i c i i i = (10)
unde prin
1 2 4
, , , c c c s-au notat simbolurile de control, iar prin
3 5 6
, , , ,
n
i i i i simbolurile
informaionale.
Datorit| acestei alegeri, fiecare relaie din sistemul (2) va conine un singur simbol de
control, permind astfel rezolvarea uoar| a sistemului de m ecuaii cu m necunoscute, dup| cum
urmeaz|:
1 3 5 7
2 3 6 7
4 5 6 7
0
0
0
c i i i
c i i i
c i i i
=

(11)
Recepionndu-se [v'], decodorul calculeaz| [Z]=[H][v']
T
=[H][]
T
.


45
n absena erorii, []=[0], deci [Z]=[0]. Dac| exist| o eroare pe poziia i, atunci:
| | | || | | | | | 0
T
i
Z H h = = (12)
n prezena erorii, corectorul [Z] reprezint| coloana din [H] corespunz|toare poziiei erorii,
adic| tocmai poziia erorii scris| n binar. Pe baza corectorului [Z] calculat din cuvntul recepionat,
se poate determina poziia erorii i apoi corecta aceasta.

1.3. Cod Hamming corector de o eroare, detector de dou erori
n scopul coreciei unei erori i detect|rii erorilor duble se mai adaug| un bit de control, notat
c
0
i calculat cu suma (modulo doi) a tuturor celorlalte simboluri:
0 1 2 3 4 5
c c c i c i = (13)
Notnd cu
1
H
v (

=[c
1
c
2
i
3
c
4
i
5
...] cuvntul de cod din cazul codului Hamming corector de o
eroare i cu
2
H
v (

=[c
0
c
1
c
2
i
3
c
4
i
5
...] cuvntul de cod din cazul codului Hamming corector de o
eroare, detector de erori duble, se poate observa uor leg|tura dintre acestea:
2 1
0 H H
v c v
( ( ( =

(14)
Matricea de control pentru noul cod provine din matricea [H
1
] de la codul corector de o
eroare prin ad|ugarea unei prime coloane de m zerouri (zero scris n binar cu m bii) i apoi a unei
ultime linii de n+1 unit|i:
| |
( )( )
1
2
1 1
0 0 0 0 1
0 0 0 0 0 1
0 0 0 1 1 1
1 1 1 0 1 0 1 1
1 1 1 1 1
m n
H
H
+ +
(
(
(
(
(
(
(
= =
(
(
(
(
(

(

(15)
La recepie se calculeaz|:
| |
1
2 2
2
0
T
H
H H
Z
Z H v
z
(
( ( = =
(


(16)
Dac| cuvntul recepionat este [v'] = [c'
0
c'
1
c'
2
i'
3
c'
4
i'
5
... i'
n
], din (16) rezult|:.
0 0 1 2 3 4 5 n
z c c c i c i i = (17)
Comparnd (13) cu (17) rezult|:
- dac| pe canal apare un num|r par de erori rezult| z
0
= 0
- dac| pe canal apare un num|r impar de erori rezult| z
0
= 1
Dac| pe canalul de transmisiuni pot s| apar| cel mult dou| erori, atunci cnd z
0
= 0 i
| |
1
0
H
Z (

, se decide c| n cuvntul recepionat sunt dou| erori, iar cnd z
0
= 1 se decide c| n



46
cuvntul recepionat este o eroare pe poziia rezultat| transcriind n zecimal componentele
corectorului
1
H
Z (

. Evident c| dac| z
0
= 0 i | |
1
0
H
Z ( =

se decide c| ceea ce s-a recepionat este
corect.

2. Dispozitivul de laborator
2.1. Algoritmul de lucru
Dispozitivul de laborator este construit pentru un cod Hamming corector de o eroare, detector
de dou| erori, cu k=4 simboluri de informaie i m=4 simboluri de control. Matricea de control este:
| |
2
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1
H
(
(
(
=
(
(


iar structura cuvntului de cod este: [v] = [c
0
c
1
c
2
i
3
c
4
i
5
i
6
i
7
]. Din relaia de codare [H] [v]
T
=[0],
rezult|:
4 5 6 7
2 3 6 7
1 3 5 7
0 1 2 3 4 5 6 7
0
0
0
0
c i i i
c i i i
c i i i
c c c i c i i i
=

deci
4 5 6 7
2 3 6 7
1 3 5 7
0 1 2 3 4 5 6 7
c i i i
c i i i
c i i i
c c c i c i i i
=


nlocuind c
1
, c
2
i c
4
n c
0
rezult|:
0 3 5 6
c i i i =
Se poate scrie deci:
4 5 6 7
2 3 6 7
1 3 5 7
0 3 5 6
c i i i
c i i i
c i i i
c i i i
=

(18)
La decodare se calculeaz|:
| | | || |
1
2
3
0
T
z
z
Z H v
z
z
(
(
(
= =
(
(

(19)
adic|:



47
1 4 5 6 7
2 2 3 6 7
3 1 3 5 7
0 0 1 2 3 4 5 6 7
z c i i i
z c i i i
z c i i i
z c c c i c i i i
=

(20)
Pe baza corectorului [Z] se determin| cuvntul eroare [], care sumat modulo 2 la [v'] permite
obinerea cuvntului corectat.

2.2. Schema de principiu
Schema bloc a dispozitivului de laborator (fig.1) asigur|:
- prescrierea simbolurilor de informaie;
- calcularea simbolurilor de control pe baza relaiilor (11);
- transmiterea serie a cuvntului de cod;
- simularea canalului perturbator, fiecare simbol putnd fi eronat;
- calcularea corectorului pe baza relaiilor (20);
- calcularea cuvntului eroare n cazul unei erori (z
0
=1);
- efectuarea coreciei simbolului eronat n cazul unei erori.
2.3. Schema electric

Figura 1


48
n fig.2 este prezentat| schema electric| a machetei de laborator. Prescrierea simbolurilor de
informaie se realizeaz| cu ajutorul comutatoarelor i
7
, i
6
, i
5
, i
3
. Aceste simboluri informaionale se aplic|
unui codor paralel, notat bloc calcul r
1
care calculeaz| simbolurile de control pe baza relaiilor (11) i
furnizeaz| tot paralel cuvntul de cod [v].
Deoarece ntr-o transmisie real| informaia este furnizat| serial, la ieirea codorului propriu-zis
s-a introdus un convertor paralel-serie. Primul simbol transmis este i
7
, iar ultimul este c
0
. n scopul
transmiterii serie se genereaz| semnalele de validare w
7
, w
6
,...,w
0
, de c|tre un registru de deplasare n
inel RD
1
. Acesta este un circuit cu autoamorsare. Indiferent de starea iniial|, dup| un num|r de tacte,
registrul ajunge ntr-o stare n care ntr-o celul| binar| se afl| 1 logic, iar n celelalte 0 logic. Din acest
moment, registrul lucreaz| corect: 1 logic se deplaseaz| printre bistabilele care formeaz| registrul (de la
celula 7 la celula 0), dup| care 1 logic reajunge n celula 7 i se repet| ciclul.
Realizarea registrului n acest mod are dou| avantaje importante:
1. Se elimin| iniializarea registrului;
2. n cazul n care funcionarea registrului este perturbat|, acesta reintr| singur, f|r| intervenie
exterioar|, n ciclul normal de funcionare.
Semnalele de validare w
7
, w
6
,...,w
0
permit att transmiterea serie a cuvntului de cod [v], ct i
generarea cuvntului eroare []. Acesta se poate prescrie din comutatoarele
7
,
6
,...,
0
. Cuvntul [] este
obinut paralel. Utiliznd un convertor paralel-serie (CPS) identic cu cel de la codare se obine
furnizarea serial| a cuvntului eroare. Simularea canalului de transmisiuni se realizeaz| cu ajutorul unui
sumator modulo doi, care permite obinerea serial| a cuvntului recepionat.
[v']=[v]r[]
Cuvntul recepionat [v'] se aplic| la intrarea decodorului care urmeaz| s| calculeze corectorul
[Z], pe baza relaiilor (20). Pentru simplitate, corectorul [Z] se calculeaz| cu un bloc de calcul
asem|n|tor cu cel utilizat la codare. Deoarece acesta lucreaz| paralel, se realizeaz| mai nti o conversie
serie-paralel cu ajutorul registrului de deplasare RD
1
. Timp de 8 tacte, cuvntul [v'] se aplic| la intrarea
registrului. Dup| 8 tacte, cuvntul [v'] este stocat n celulele registrului (i'
7
n celula 7, ..., c'
0
n celula 0).
Blocul de calcul notat r
2
furnizeaz| n acest moment corectorul [Z]. Pe baza componenetelor z
0
, z
1
, z
2
,
z
3
, descifratorul binar-zecimal realizat cu circuitul integrat CDB 442E furnizeaz| la ieirile sale negatul
cuvntului eroare.
Pentru corecie se sumeaz| cuvntul recepionat [v'] cu cuvntul eroare negat rezultnd cuvntul
corectat i inversat:
| | | | | | v v =
Cuvntul corectat i inversat este stocat n registrul de memorie RD
2
. Acesta comand|
vizualizarea cuvntului corectat [v], realiznd o inversare (dac| un bit din RD
2
este 0 logic, led-ul
corespunz|tor lumineaz| indicnd c| n [v] bitul era 1 logic; n caz contrar, led-ul este stins). Aceast|


49
"afiare cu inversare" are avantajul elimin|rii a 8 inversoare necesare obinerii cuvntului corectat [v] i,
n plus, permite comanda led-urilor direct de la ieirile TTL ale registrului RD
2
, eliminndu-se astfel
introducerea tranzistoarelor suplimentare de comand|.

3. Desfurarea lucrrii
3.1. Pentru codul H
2
(8:4) s| se scrie toate cuvintele de cod i apoi s| se calculeze distana
Hamming ntre ele.
3.2. S se codeze cu un cod Hamming corector de o eroare, detector de erori duble numerele
zecimale de la 0 la 7, prin transcrierea binar pe numrul minim de bii a numrului zecimal.
3.3. S se decodeze, dac este posibil, cuvintele recepionate | | | | 0 1 1 1 1 1 0 0 v = i
| | | | 0 1 0 0 0 1 0 0 v = .
3.4. Se introduc dou| erori. Se calculeaz| corectorul [Z]. Ce rezult dup decodor n acest caz?
3.5. Aplica ia MATLAB B BB B> Simulink:
Se lanseaz| programul Matlab i din meniul 'FileB>Open' se selecteaz| i se deschide modelul
lucr|rii de laborator. Se urm|rete funcionarea sistemului de codare/decodare astfel:
- Se identific| i se studiaz| blocurile de pe schem| (codorul/decodorul Hamming, convertorul
P/S i S/P). Discuii;
- Se aleg simbolurile informaionale dorite f|cnd dublu-click pe comutatoarele manuale -
"manual switch";
- Se prescriu poziiile erorilor introduse de canalul de transmisiuni (0, 1 sau 2 erori);
- Prin acionarea butonului 'Start' se pornete simularea, la terminarea ei obinndu-se n
blocurile "display" cuvntul corectat, precum i indicarea prezenei a dou| erori n cuvntul recepionat;
- F|cnd dublu-click pe blocurile de tip "scope" se observ| formele de und| din punctele
respective. Observaii.



50

Figura 2