Sunteți pe pagina 1din 9

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

Coduri convoluionale. Decodoare Viterbi


Codurile convoluionale difer de codurile bloc att prin faptul c exist memorie pentru codor, ct i prin dependena celor n ieiri, la fiecare unitate de timp, nu numai de cele k intrri, ci i de cele m blocuri anterioare de intrare. Un cod convoluional (n,k,m) poate fi implementat cu un circuit secvenial care are n ieiri liniare, k intrri i m intrri de memorie. Uzual, n i k sunt valori ntregi cu k < n , dar valoarea lui m trebuie s fie mai mare pentru a avea probabilitate de eroare mic. n cazul n care k=1, secvena de informaie nu mai este divizat n blocuri i poate fi procesat n mod continuu. Codurile convoluionale au fost introduse n 1955 de ctre Elias ca o alternativ a codurilor bloc. La scurt timp dup aceea, Wozencraft a propus decodarea secvenial ca fiind o metod eficient pentru codurile convoluionale. n 1963, Massey a propus o metod de decodare mai puin eficient, dar mai simplu de implementat , numit decodarea cu prag. Aceasta a dat natere numeroaselor aplicaii ale codurilor convoluionale n cadrul transmisiilor digitale prin cablu sau unde radio. n 1967, Viterbi a propus o metod de decodare de plauzibilitate maxim, uor de implementat pentru codurile cu memorie mic. Aceast schem, denumit decodorul Viterbi, mpreun cu versiunea mbuntit a decodrii secveniale, au lrgit i mai mult domeniul de aplicaie al codurilor convoluionale spre comunicaiile prin satelit, la nceputul anilor 1970.

Codarea codurilor convoluionale


Codorul pentru codul binar (2,1,3) este prezentat n figura 3.1. Se observ c acesta are un registru cu m=3 deplasri succesive, n=2 sumatoare modulo 2 i un multiplexor care serializeaz ieirile codorului. Cele dou sumatoare pot fi implementate n pori XOR. Deoarece adunarea modulo 2 este o operaie liniar, codorul este un registru de deplasare cu reacie pozitiv. Astfel, toate codoarele convoluionale pot fi implementate cu registre de acest tip.

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi


v (1)

v (2 )

Fig. 3.1. Codorul convoluional binar (2,1,3).

Secvena de informaie u = (u1 , u 2 , K) intr n codor pas cu pas, bit cu bit. Dac (1) codorul este un sistem linar, cele dou secvene de ieire v (1) = (v0(1) , v1(1) , v2 , K) i (2 ) (2 ) (2 ) (2 ) v = (v0 , v1 , v2 , K) pot fi obinute prin convoluia secvenei de intrare u i a celor dou rspunsuri la impuls ale codorului. Rspunsurile la impuls sunt obinute prin introducerea secvenei de informaie u=(100 ...) i prin observarea celor dou secvene de ieire. Rspunsurile la impuls ale codorului au pentru cele m registre de memorie cel mult m+1 uniti de deplasare, putnd fi scrise: (1) ); g (1) = (g 0(1) , g1(1) ,K, g m (2 ) (2 ) (2 ) (2 ) g = (g 0 , g 1 , K , g m ) . Pentru codorul din figura 3.1,
g (1) = (1011) , g ( 2 ) = (1111) .

Cele dou rspunsuri la impuls g (1) i g ( 2 ) se numesc secvene generatoare ale codului. Se pot scrie n acest mod ecuaiile de codare:
v (1) = u * g (1) , v (2 ) = u * g (2 ) ,

unde * indic convoluia discret i c toate operaiile sunt modulo 2. Operaia de convoluie presupune c pentru orice l 0 ,
( j) vl( j ) = ul i g i( j ) = ul g 0( j ) + ul 1 g1( j ) + L + ul m g m , j = 1,2 ,...
i =0 m

unde ul i = 0 pentru orice l < i. Astfel pentru codorul din figura 3.1,
vl(1) = ul + ul 2 + ul 3
2

Laborator 3 TIC

vl = ul + ul 1 + ul 2 + ul 3

(2 )

Coduri convolutionale. Decodoare Viterbi

pot fi uor verificate prin observarea direct a circuitului de codare. Dup codare cele dou secvene de ieire sunt multiplexate ntr-o singur secven, numit cuvnt de cod, pentru a fi transmis prin canal. Cuvntul de cod este exprimat prin: v = (v0(1) , v0( 2 ) , v1(1) , v1( 2 ) , K) . Un cod convoluional genereaz n bii de codare pentru fiecare k bii de informaie, raportul R=k/n numindu-se rata codului. Se observ ca pentru o secven de informaie de lungime finit kL, cuvntul de cod corespunztor are lungimea n(L+m), unde cele nm ieiri finale sunt generate dup ce ultimul bloc de informaie nenul a intrat n codor. Privind codul convoluional ca pe un cod bloc liniar cu matricea generatoare G, rata codului bloc este dat de kL/n(L+m), raportul numrului biilor de informaie i al lungimii cuvntului de cod. Dac L >> m, atunci L / (L + m ) 1, deci rata codului bloc i a codului convoluional sunt aproape egale. Acesta reprezint modul normal de lucru al codului convoluional i de acum nainte nu se mai face distincie ntre rata codului convoluional i rata acestui cod vzut ca un cod bloc. Dac L are o valoare mic, se va putea prezenta rata codului ca fiind un raport simplificat k / n kL / n(L + m ) m = , k /n L+m numit rata fracionar de pierderi. Pentru a avea rata fracionar de pierderi ct mai mic ( adic 0), L trebuie propus a fi mult mai mare dect m.

Decodarea codurilor convoluionale


Codurile convoluionale suport o multitudine de metode de decodare, printre care: decodarea cu prag, decodarea de plauzibilitate maxim, decodarea secvenial (algoritmii Stack i Fano), decodarea cu logic majoritar (feedback), decodarea pentru pachete de erori sau pentru combinaii de pachete de erori i erori aleatoare etc.

Aplicaie coduri convoluionale


Urmtoarea aplicaie utilizeaz codurile convoluionale.

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

Fig. 3.2

Simularea ncepe prin generarea unor mesaje binare aleatoare. Se codeaz mesajul printr-un cod convoluional, apoi se moduleaz utiliznd modulaia BPSK ( Binary Phase Shift Keying) i se adaug zgomot alb Gaussian pentru a simula un canal cu zgomot. Apoi se decodeaz codul convoluional ncercnd s se corecteze ct mai multe erori introduse de zgomot. n final se compar informaia decodat cu mesajul original pentru a prelucra i afia rata de eroare. Blocurile utilizate n model sunt: - Bernoulli Random Binary Generator - Convolutional Encoder - Unbuffer - BPSK Modulator Baseband - AWGN Channel - Complex to Real-Imag - Sampled Quantizer Encode - Buffer - Viterbi Decoder - Error Rate Calculation Blocul Bernoulli Random Binary Generator produce secvena de informaie care urmeaz s fie codat. Deoarece parametrul Sample time este 1 secund, blocul genereaz un numr binar n fiecare secund. Parametrul Probability of a zero este 0.5, nsemnnd c se genereaz biii astfel nct 0 i 1 au aceeai probabilitate de apariie.
4

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

Parametrul Initial seed iniializeaz generatorul de numere aleatoare. Dac se modific acest parametru va fi generat alt secven aleatoare. Deoarece parametrul Frame-based outputs este marcat nseamn c se introduc trenuri de impulsuri de semnal. Blocul Convolutional Encoder primete secvena de informaie de la blocul Bernoulli Random Binary Generator i o transform n cuvntul de cod. n timp ce secvena de informaie este un ir de bii, secvena de ieire este un vector binar de lungime doi. Codorul pentru codul (2,1,6) utilizat este reprezentat n fig. 3.3.
ieire 1

intrare

z 1

z 1

z 1

z 1

z 1

z 1

ieire 2 Fig. 3.3

Codorul are n=2 sumatoare modulo 2, un multiplexor i un registru de memorie cu m=6 deplasri succesive. Deoarece sunt 6 deplasri succesive, ieirea depinde de 7 valori de intrare (incluznd-o i pe cea curent). Rata codului este deoarece avem o intrare i dou ieiri. Legtura ntre registrul de memorie i sumatoare este dat de generatorul codului care n acest caz este dat de perechea [171 133] ( informaia de la prima ieire din codor este dat de urmtoarea secven [1111001] care este echivalent cu numrul 171, iar informaia de la a doua ieire este dat de secvena [1011011] care este echivalent cu numrul 133). Parametrul Trellis structure este n acest caz dat de structura poly2trellis(7, [171 133]). Ieirea codorului va fi o matrice 2x1 de numere binare. Primul element din matrice arat valoarea de la prima ieire iar al doilea element arat valoarea de la a doua ieire. n modelul din fig. 3.2 simularea se realizeaz pentru un interval de timp de la 0 la 3, generndu-se astfel 4 numere binare. Conform schemei de codare avem: - se genereaz 1 care este codat ca [11] deoarece nu mai avem alte numere memorate n registrul de memorie; - se genereaz 1 care se codeaz ca [01] deoarece: 1+1=0 (ieirea 1), 1+0=1 (ieirea 2); - se genereaz 1 care se codeaz ca [10] deoarece: 1+1+1=1 (ieirea 1), 1+0+1=0 (ieirea 2); - se genereaz 0 care se codeaz ca [10] deoarece: 0+1+1+1=1 (ieirea 1), 0+0+1+1=0 (ieirea 2).
5

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

Dac generm 5 numere al cincilea ar fi 1 care se codeaz [11] deoarece 1+0+1+1+0=1 (ieirea 1), 1+0+1+1+0=1 (ieirea 2). Dup ce codorul convoluional codeaz numerele, acestea sunt modulate. Deoarece cuvintele de cod sunt vectori bidimensionali se introduce blocul Unbuffer care transform vectorul bidimensional ntr-un semnal scalar. Intrarea blocului Unbuffer este un vector bidimensional generat la interval de o secund, iar ieirea este un scalar generat la jumtate de secund. Blocul BPSK Modulator Baseband moduleaz semnalul scalar de date avnd la ieire un semnal complex. Dup modulaie datele sunt pregtite de transmitere. Blocul AWGN Channel simuleaz un canal cu zgomot adugnd zgomot alb Gaussian la irul de date. Se utilizeaz o distribuie Gaussian determinat de parametrii: Es/No, care este - 1 decibel; Input signal power, care este 1 watt deoarece modulaia BPSK produce valori de -1 i 1; Symbol period, care este 0.5 secunde. Parametrul Initial seed este 123456 ( dac se modific se va genera alt secven de numere). Datele de la ieirea acestui bloc sunt numere complexe apropiate de -1 i 1. Ele trebuiesc transformate astfel nct s corespund cu semnalul de intrare de la decodorul Viterbi. Decodorul Viterbi este configurat s proceseze valori ntregi n intervalul [0,7]. Blocul Complex to Real-Imag transform datele de la intrare ntr-un semnal real nlturnd partea imaginar ( care este aproximativ egal cu zero). Blocul Sampled Quantizer Encode transform semnalul real ntr-un ntreg n intervalul [0,7], pentru a-l pregti pentru algoritmul cu decizii soft. Parametrul Quantization codebook este un vector de forma [76543210]. Parametrul Quantization partition este [-.75-.5-.250.25.5.75] deoarece intrarea n acest bloc este apropiat de valorile -1 i 1. Primul grup este format din numerele mai mici sau egale cu -0.75 ; al doilea grup este format din numerele ntre -0.75 i -0.5; al treilea grup este format din numerele ntre -0.5 i -0.25; i aa mai departe pn la al optlea grup care este format din numerele mai mari dect 0.75. O valoare de -1 de la intrare este transformat n 7 la ieire iar o intrare de 1 este transformat n 0 la ieire. Deoarece semnalul de la ieirea blocului este un scalar, acesta este introdus ntr-un bloc Buffer care s-l transforme ntr-un vector bidimensional. Astfel ieirea din acest bloc este corespunztoare ca intrare pentru blocul Viterbi Decoder. Ieirea blocului este bidimensional deoarece parametrul Output buffer size este 2. Blocul combin primele dou eantioane ntr-un singur vector bidimensional de ieire, apoi al treilea cu al patrulea eantion n al doilea vector de ieire, i aa mai departe. Perioada ieirilor blocului este de dou ori mai mare dect perioada intrrilor. La aceste bloc va apare o ntrziere de o secund. Blocul Viterbi Decoder poate acum decoda datele de la intrare. Parametrul Trellis structure definete decodorul i este identic cu cel de la codorul convoluional. Blocul utilizeaz decizia soft cu 23 valori de intrare diferite deoarece parametrul Decision type este Soft Decision iar parametrul Number of soft decision bits este 3. Blocul
6

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

interpreteaz 0 ca fiind decizie sigur c bitul de cod este 0 , iar 23 -1 ca fiind decizie sigur c bitul de cod este 1. Valorile dintre 0 i 7 sunt decizii mai puin sigure. Tabelul urmtor arat interpretarea celor opt valori de intrare.
Valoarea de decizie 0 1 2 3 4 5 6 7 Interpretare Decizie sigur 0 Decizie mai puin sigur 0 Decizie i mai puin sigur 0 Decizie nesigur 0 Decizie nesigur 1 Decizie i mai puin sigur 1 Decizie mai puin sigur 1 Decizie sigur 1 Fig. 3.4

n continuare voi arta modul de circulaie al unui bit ntre blocul Unbuffer i blocul Viterbi Decoder.
BPSK AWGN Transformri Interpretare 1 -1 aproape -1 4,5,6, sau 7 1 Secven Valori de Bit de cod simbol refcut decizie BPSK AWGN Transformri Interpretare 0 1 aproape 1 0,1,2, sau 3 0 Secven Valori de Bit de cod simbol refcut decizie

Parametru Traceback Depth reprezint ntrzierea de decodare. De obicei ntrzierea se alege de cinci sau ase ori mai mare dect lungimea irului, care este apte. Unele implementri hardware au opiune de 48 sau 92. Aleg 48 deoarece este mai aproape de 35 sau 42. Se observ c atunci cnd se genereaz 1(pasul 1) vom avea la ieirea din codor [11] iar la intrarea n decodor [00] deoarece apare o ntrziere de o secund dat de blocul Buffer; cnd se genereaz 1 (pasul 2) vom avea la ieirea din codor [01] iar la intrarea n decodor [57] care va fi interpretat ca [11] de ctre acesta i corespunde secvenei generate la pasul 1; cnd se genereaz 1 (pasul 3) vom avea la ieirea din codor [10] iar la intrarea n decodor [17] care va fi interpretat ca [01] de ctre acesta i corespunde secvenei generate la pasul 2; cnd se genereaz 0 (pasul 4) vom avea la ieirea din codor [10] iar la intrarea n decodor [61] care va fi interpretat ca [10] de ctre acesta i corespunde secvenei generate la pasul 3; .a.m.d. Blocul Error Rate Calculation compar secvena de informaie de la blocul Bernoulli Random Binary Generator cu secvena estimat de la blocul Viterbi Decoder i produce trei vectori care reprezint: rata de eroare; numrul total de erori;
7

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

numrul total de comparaii. Deoarece parametrul Output data este Port, blocul trimite datele de ieire la un Display. Parametrul Receive delay spune blocului cu ce element de la intrare s realizeze comparaia. n acest caz valoarea parametrului este 49, fiind cu unu mai mare dect valoarea parametrului Traceback depth care este 48 ( blocul Viterbi Decoder). ntrzierea de 1 este dat de blocul Buffer ( el colecteaz dou eantioane scalare pentru a scoate un vector bidimensional). Blocul Display primete date de la blocul Error Rate Calculation pe care le afieaz. Blocul Terminator este ataat porturilor de ieire ale cror semnale nu sunt utilizate. Stabilind timpul de simulare ca fiind de la 0 la 50 ( fig. 3.5) se observ c se realizeaz doar dou comparri deoarece au fost generate 51 de numere iar ntrzierea de comparare este de 49. Se observ c secvena de informaie generat la intrare este refcut la ieire ( acest lucru se observ cu ajutorul a dou afioare la care am conectat dou blocuri de ntrziere cu 49 respectiv 50).

Fig. 3.5

Dac vom stabili timpul de simulare n intervalul [0,100] vor fi generate 101 numere i vor fi comparate 52 de numere(fig. 3.6).

Laborator 3 TIC

Coduri convolutionale. Decodoare Viterbi

Fig. 3.6