You are on page 1of 6

1

DECODAREA CODURILOR CONVOLUTIONALE PRIN ALGORITMUL
VITERBI

1. Introducere
Cele mai cunoscute metode de decodare a codurilor convoluţionale sunt:
decodarea cu prag, decodarea secvenţială şi decodarea cu algoritmul Viterbi. În această
lucrare prezentăm algoritmul de decodare Viterbi, deoarece este un algoritm optimal,
complexitatea sa este redusă şi este foarte utilizat în practică.
Secvenţele codate se transmit pe canalul de comunicaţie după folosirea unei
tehnici de modulaţie digitală. În prezenta lucrare presupunem că modulaţia folosită este
modulaţia binară de fază (BPSK – Binary Phase Shift Keying). Cu acest tip de modulaţie
biţii 0, sunt translaţi în valorile -1, iar biţii 1 în valorile +1, prin relaţia 2 1
k k
x c = − , unde
k este momentul de timp al translaţiei. Dacă pe canal există un zgomot aditiv alb gaussian
(AWGN), atunci la fiecare valoare
k
x , se adună un eşantion de zgomot
k
n , rezultând
valoarea recepţionată:
k k k
r x n = + . (1)

2. Algoritmul de decodare Viterbi
Prin algoritmul de decodare Viterbi se alege calea
( ) i
x din trellis de maximă
plauzibilitate, astfel încât se maximizează probabilitatea
( )
( )
i
P r x , unde r este secvenţa
recepţionată, iar
( ) i
x secvenţa de biţi corespunzătoare căii din trellis care se considerǎ
secvenţa decodatǎ. Dacă secvenţa r se translează în domeniul valorilor 0, 1, prin
compararea cu pragul 0, adică unei valori negative îi corespunde 0, iar unei valori
pozitive îi corespunde 1, atunci rezultă o decodare hard. Când valorile din secvenţa r
sunt lăsate nemodificate sau cuantizate pe un număr de nivele mai mare ca 2 avem o
decodare cu decizie soft necuantizată, respectiv cuantizată.
În cazul unui zgomot aditiv alb gaussian şi folosind o decodare cu decizie soft,
valorile recepţionate pentru setul de ieşiri ale demodulatorului la momentul l sunt, în
cazul canalului AWGN:

( )
( ) 0
2 1 , 1,
r
jl jl j
r c n j n = − + = , (2)
unde
( ) r
jl
c este un simbol binar codat (0 sau 1), iar
j
n este un eşantion din zgomotul
gaussian de medie zero şi varianţă 2
0
N . Zgomotul fiind alb, rezultă că eşantioanele de
zgomot sunt independente şi atunci, probabilitatea de a recepţiona secvenţa
l
r , dacă s-a
transmis secvenţa codată
( ) r
l
c este:
2
( )
( )
( )
( )
( )
( )
2
0 0
0
2 1
1 1
0
1
r
jl jl
r c
n n
r r N
l l jl jl
j j
P r c P r c e
N π
 
− −
 
 

= =
= = ⋅
∏ ∏
. (3)
Logaritmând relaţia (3) se obţine:
( )
( )
( )
( ) ( )
( )
2
0 0
0
2
2 1
0
1 1
0 0
2 1
1
ln ln ln
r
jl jl
r c r
n n
jl jl
r N
l l
j j
r c
P r c e N
N N
π
π
 
− −
 
 

= =
¦ ¦
]
]
− −
¹ ¹
]
]
= ⋅ = − − =
´ `
]
¹ ¹
]
]
¹ )
∑ ∑

( )
( )
( )
0
2
0
1
0 0 0
2 2 1
1
ln
r
n
jl jl
jl
j
r c
r
N
N N N
π
=
 

 
= − − − +
 
 

. (4)
Atunci, eliminând constantele şi ţinând cont ( )
2
jl
r este aceeaşi pentru toate
ramurile din trellis, metrica corespunzătoare ramurii, la momentul l , este:
( )
( )
( )
( )
0
1
1
, 2 1
n
i i
l l jl jl l
j
V r c σ σ
+
=
= −

, (5)
metrică numită de corelaţie.
Calea aleasă este calea r , corespunzătoare la:
( )
( )
( )
1
1 1
0
max ,
L
i
L l l l
r
l
U V σ σ σ

− +
=
 
=
 
 

. (6)
unde L este lungimea secvenţei (primul moment este 0),
l
σ este starea în trellis la
momentul l , iar
( )
( )
1
,
i
l l l
V σ σ
+
este metrica ramurii dintre stările
l
σ şi
1 l
σ
+
.
În relaţia (5) indicile j semnifică poziţia din secvenţa de valori recepţionate sau
din secvenţa codată corespunzătoare ramurii din trellis, din cele
0
n valori câte sunt în
total la momentul l .
Prin algoritmul Viterbi se reţin doar
S
N căi la fiecare moment de timp, câte una
corespunzătoare fiecărei stări.
În general algoritmul Viterbi trebuie să conţină următorii paşi:
Pas 1: Se iniţializează codorul cu starea nulă. Se iniţializează starea nulă a decodorului la
momentul 0 l = cu metrica ( )
0 0
0 U S = . Celelalte stări nu interesează deoarece codorul s-
a iniţializat cu starea nulă.
Pas 2: Se incrementează variabila moment de timp 1 l l = + .
Pas 3: Se calculează metrica fiecărei căi ce intră în nodurile de pe nivelul l cu ajutorul
relaţiei (5).
3
Pas 4: Se calculează metricile căilor corespunzătoare fiecărei stări la momentul de timp l ,
cu relaţia ( ) ( ) ( )
1 1 1 1
,
l l l l l l l
U U V σ σ σ σ
− − − −
= + , presupunând că avem o tranziţie între
stările
1 l
σ

şi
l
σ .
Pas 5: Se reţine numai calea de intrare în fiecare stare care are metrica maximă numitǎ
cale supravieţuitoare.
Pas 6: Dacă 1 l L < − , se revine la pasul 2.
Pas 7: Se decide că s-a recepţionat secvenţa corespunzătoare căii ce intră în starea cu
metrică maximă.
Complexitatea algoritmului Viterbi este una liniarǎ în raport cu numǎrul de ramuri
dintr-o secţiune de trellis. Peformanţa codurilor convoluţinale este mai bunǎ cậnd
memoria acestora creşte, dar cu preţul unei complexitǎţi de decodare crescute.
Exemplu:
În continuare se dă un exemplu de folosire a algoritmului Viterbi pentru codul din
exemplul cu generatorii în octal
1
6 g = ,
2
3 g = . Pentru a calcula mai uşor metricile se
presupune că secvenţa recepţionată este formată din numere întregi. Acest caz poate fi
considerat un caz special de decodare cu decizie soft cuantizată. În tabelul 1 sunt date
secvenţa de biţi codată (considerată aceeaşi din calea îngroşată în trellis-ul din figura 4,
lucrarea anterioară), secvenţa recepţionată, metricile ramurilor pentru fiecare moment de
timp şi combinaţie de biţi codaţi.

Tabel nr. 1
Moment de timp 1 2 3 4 5
Secvenţa codată 10 11 11 01 10
Secvenţa recepţionată 2,-1 2,3 1,2 -3,0 2,-2
Metricile
ramurilor
00
01
10
11
-1
-3
3
1
-5
1
-1
5
-3
1
-1
3
3
3
-3
-3
0
-4
4
0

În cazul codului menţionat anterior avem
0
2 n = . La momentul 1 l = , secvenţa de
biţi codată transmisă este
11
1 c = ,
21
0 c = , iar secvenţa recepţionată se presupune
11
2 r = ,
21
1 r = − . Atunci metricile corespunzătoare fiecărei din cele 4 ramuri posibile, pentru
secventele codate 00, 01, 10 şi 11, sunt calculate cu ajutorul relaţiei (5), după cum
urmează:
- pentru ramura cu secvenţa codată 00:
( )
( )
( )
( ) 11 11 21 21
2 1 2 1
r r
r c r c − + − =
( ) ( ) ( ) 2 2 0 1 1 2 0 1 1 = ⋅ ⋅ − + − ⋅ ⋅ − = −
4
- pentru ramura cu secvenţa codată 01: ( ) ( ) ( ) 2 2 0 1 1 2 1 1 3 ⋅ ⋅ − + − ⋅ ⋅ − = −
- pentru ramura cu secvenţa codată 10: ( ) ( ) ( ) 2 2 1 1 1 2 0 1 3 ⋅ ⋅ − + − ⋅ ⋅ − =
- pentru ramura cu secvenţa codată 11: ( ) ( ) ( ) 2 2 1 1 1 2 1 1 1 ⋅ ⋅ − + − ⋅ ⋅ − =
Metricile ramurilor la momentele 2, 5 l = sunt calculate în mod similar.
În figura 1 este dat trellis-ul corespunzător codorului din exemplu, cu secvenţele
de ieşire din codor corespunzătoare fiecărei ramuri.














În continuare dăm aplicare algoritmului Viterbi pas cu pas pentru secvenţa
recepţionată dată în tabelul 1.
Pas 1: Se iniţializează starea nulă a decodorului la momentul 0 l = cu metrica
( )
0 0
0 U S = . Celelalte stări nu interesează deoarece codorul s-a iniţializat cu starea nulă.
Pas 2: Se trece momentul de timp următor 0 1 1 l = + = .
Pas 3: Metricile corespunzătoare ramurilor cu secvenţele de ieşire 00 şi 10 sunt
( )
0 0 0
, 1 V S S = − , respectiv ( )
0 0 2
, 3 V S S = , conform tabelului 1.
Pas 4: Avem metricile la momentul de timp 1 l = :
( ) ( ) ( )
1 0 0 0 0 0 0
, 0 1 1 U S U S V S S = + = − = − şi ( ) ( ) ( )
1 2 0 0 0 0 2
, 0 3 3 U S U S V S S = + = + = .
Acestea sunt trecute încadrate în trellis-ul din figura 2. Încadrate cu linie continuă sunt
metricele cele mai mari la fiecare moment de timp, iar cu linie întreruptă metricile
celorlalte căi supravieţuitoare.
Pas 5: La acest moment de timp se reţin cele două căi care pleacă din starea
0
S şi ajung
în stările
0
S , respectiv
2
S .
Pas 6: 1 l L < − (1 5 < ), deci se trece la pasul 2.
Pas 2: Se trece momentul de timp următor: 1 1 2 l = + = .
Fig. 1. Trellis-ul pentru codorul din exemplu
0
S
2
S
1
S
3
S
0 l = 1 l =
2 l =
3 l =
00 00 00
10 10
10
01
11
11
11
01 01
00
10
4 l =
00
10
01
11
11
01
00
10
5 l =
00
10
01
11
11
01
00
10
5
Pas 3: Metricile corespunzătoare ramurilor sunt, conform tabelului 1, ( )
1 0 0
, 5 V S S = − ,
( )
1 0 2
, 1 V S S = − , ( )
1 2 1
, 5 V S S = şi ( )
1 2 3
, 1 V S S = .
Pas 4: Metricile la momentul de timp 2 l = sunt următoarele:
( ) ( ) ( )
1 0 1 0 1 0 0
, 1 5 6 U S U S V S S = + = − − = − , ( ) ( ) ( )
2 2 1 0 1 0 2
, 1 1 2 U S U S V S S = + = − − = − ,
( ) ( ) ( )
2 1 1 2 1 2 1
, 3 5 8 U S U S V S S = + = + = , ( ) ( ) ( )
2 3 1 2 1 2 3
, 3 1 4 U S U S V S S = + = + = .
Pas 5: La momentul de timp 2 l = se reţin cele patru căi care pleacă din starea
0
S şi ajung
în stările
0
S ,
2
S ,
1
S , respectiv
3
S .
Pas 6: 1 l L < − ( 2 5 < ), se trece la pasul 2.
Pas 2: Se trece momentul de timp următor: 2 1 3 l = + = .
Pas 3: Pentru tranziţia între momentele de timp 2 l = şi 3 l = (şi la fel mai departe) avem
căte două ramuri care pleacă din fiecare stare. Astfel metricile corespunzătoare ramurilor
sunt, conform tabelului 1, ( )
2 0 0
, 3 V S S = − , ( )
2 1 0
, 1 V S S = , ( )
2 0 2
, 1 V S S = − , ( )
2 1 2
, 3 V S S = ,
( )
2 2 1
, 3 V S S = , ( )
2 3 1
, 1 V S S = − şi ( )
2 2 3
, 1 V S S = , ( )
2 3 3
, 3 V S S = − .
Pas 4: Avem câte două metrici pentru fiecare stare la momentul de timp 3 l = :
( ) ( ) ( )
3 0 2 0 2 0 0
, 6 3 9 U S U S V S S = + = − − = − sau ( ) ( ) ( )
3 0 2 2 2 2 0
, 8 1 9 U S U S V S S = + = + = ,
( ) ( ) ( )
3 2 2 0 2 0 2
, 6 1 7 U S U S V S S = + = − − = − sau ( ) ( ) ( )
3 2 2 1 2 1 2
, 8 3 11 U S U S V S S = + = + = ,
( ) ( ) ( )
3 1 2 2 2 2 1
, 2 3 1 U S U S V S S = + = − + = sau ( ) ( ) ( )
3 1 2 3 2 3 1
, 4 1 3 U S U S V S S = + = − = ,
( ) ( ) ( )
3 3 2 2 2 2 3
, 2 1 1 U S U S V S S = + = − + = − sau ( ) ( ) ( )
3 3 2 3 2 3 3
, 4 3 1 U S U S V S S = + = − = .
Pas 5: La acest pas se reţin numai căile care conduc la metrică maximă pentru fiecare
stare, adică cele trecând prin succesiunile de stări:
0 2 1 0
S S S S ,
0 2 1 2
S S S S ,
0 2 3 1
S S S S ,
0 2 3 3
S S S S , fiind eliminate ramurile desenate cu linie-punct.
Algoritmul continuă în mod similar până la momentul de timp 5 l = . Trellis-ul
corespunzător codorului din exemplu cu metricile căilor supravieţuitoare la fiecare
moment de timp, respectiv ale căilor eliminate este dat în figura 2. Îngroşată este calea cu
metrica maximă la fiecare moment de timp. Calea rezultată în decodare este cea
corespunzătoare succesiunii de stări
0 2 1 2 3 1
S S S S S S , adică secvenţei de biţi de informaţie
10110.
Algoritmul Viterbi descris mai sus realizează estimarea de maximă plauzibilitate
(ML – maximum likelihood) a secvenţei recepţionate (minimizând probabilitatea de
eroare a acesteia) şi are astfel nevoie de întreaga secvenţă pentru decodare optimă,
ducând la întârziere de decodare pentru L mare. Când această întârziere este prea mare
se foloseşte algoritmul Viterbi trunchiat, în care la momentul k se alege calea până la
momentul D k − ( D fiind adâncimea de trunchiere), reţinându-se metricile, respectiv
căile, numai pentru ultimele D momente de timp. Experimental s-a găsit că o adâncime
6
de trunchiere N D 5 ≥ ( N fiind lungimea de constrângere a codului) conduce la o
degradare neglijabilă a performanţei algoritmului.















5. Desfǎşurarea lucrǎrii
1. Se consideră secvenţa recepţionatǎ r={2,1,3,-2,-2,-3,-1,2,-2,1}. Pentru codul
(2,1,2) cu polinoamele generatoare în octal
1
2 g = ,
2
3 g = şi pentru codul (2,1,3) cu
polinoamele generatoare în octal
1
5 g = ,
2
7 g = , sǎ se decidǎ ce secvenţǎ decodatǎ
rezultǎ aplicând algoritmul Viterbi cu decizie soft.
2. Pentru aplicaţia Matlab se deschide modelul lucrǎrii de laborator. Se urmǎreşte
funcţionarea sistemului de transmisie folosind coduri convoluţionale astfel:
- Se identificǎ şi se studiazǎ blocurile de pe schemǎ (generatorul de secvenţe
binare, codorul convoluţional, modulatorul BPSK, canalul de transmisie, decodorul
Viterbi şi blocul de calcul a probabilitǎţii de eroare de bit)
- Prin acţionarea butonului ‚Start’ se porneşte simularea, la terminarea ei
obţinậndu-se probabilitatea de eroare de bit în blocul ‘Display’ în urma decodǎrii Viterbi
- Se schimbǎ valoarea raportului semnal-zgomot (SNR) din blocul corespunzǎtor
canalului AWGN şi se noteazǎ diferenţele în probabilitatea de eroare de bit rezultatǎ
- Se schimbă polinoamele generatoare în blocul corespunzător codorului şi
decodorului Viterbi. Se modifică corespunzător adâncimea de trunchiere şi se observă
rezultatele în urma simulării.
Fig. 2. Decodarea Viterbi cu metricile asociate
0
S
2
S
1
S
3
S
0 l = 1 l =
2 l =
3 l =
1 − 5 − 3 −
3 1 −
1 −
1
5
3
3
1 1
3 −
1 −
4 l =
3
3 −
3
3 −
3 −
3
3
3 −
5 l =
0
4
4 −
0
0
4 −
0
4
1 −
3

6 −
2 −

8
4
11
9
3
1
14
8
12
6
12
18
16
14

Pas 2: Se incrementează variabila moment de timp l = l + 1 .    (4) Atunci. σ l +1 ) = ∑ rjl ( 2c jl (i ) − 1) . la momentul l . Celelalte stări nu interesează deoarece codorul sa iniţializat cu starea nulă. câte una corespunzătoare fiecărei stări. metrica corespunzătoare ramurii. este: Vl (σ l . σ l +1 )  . din cele n0 valori câte sunt în total la momentul l . corespunzătoare la:  L −1 i  U (σ L−1 ) = max  ∑ Vl ( ) ( σ l .P rl cl ( r ) = ∏ P rjl c jl ( r ) = ∏ j =1 j =1 ( ) n0 ( ) n0 1 ⋅e π N0  r − 2 c ( r ) −1  jl  jl   − N0 ( ) 2 . Calea aleasă este calea r . σ l +1 ) este metrica ramurii dintre stările σ l şi σ l +1 . (3) Logaritmând relaţia (3) se obţine: ln P rl cl ( ( r) )  r − 2 c ( r ) −1   )  jl ( jl n0 −  1 N0 = ∑ ln  ⋅e j =1  π N0  n0 2 2    rjl − 2c jl ( r ) − 1   n0     =  =∑  − ln π N 0 −  N0  j =1      ( ) 2  ( rjl ) − 1 + 2rjl 2c jl (r ) − 1 = ∑  − ln π N 0 − N0 N0 N0 j =1   ( ) . eliminând constantele şi ţinând cont (i) (r ) este 2 jl aceeaşi pentru toate ramurile din trellis. Se iniţializează starea nulă a decodorului la momentul l = 0 cu metrica U 0 ( S0 ) = 0 . Prin algoritmul Viterbi se reţin doar N S căi la fiecare moment de timp. În general algoritmul Viterbi trebuie să conţină următorii paşi: Pas 1: Se iniţializează codorul cu starea nulă. σ l este starea în trellis la În relaţia (5) indicile j semnifică poziţia din secvenţa de valori recepţionate sau din secvenţa codată corespunzătoare ramurii din trellis. Pas 3: Se calculează metrica fiecărei căi ce intră în nodurile de pe nivelul l cu ajutorul relaţiei (5). (6) unde L este lungimea secvenţei (primul moment este 0). r  l =0  momentul l . 2 . iar Vl(i ) (σ l . n0 j =1 (5) metrică numită de corelaţie.

Tabel nr. pentru secventele codate 00. cu relaţia U l (σ l ) = U l −1 ( σ l −1 ) + Vl −1 ( σ l −1. σ l ) . după cum urmează: pentru ramura cu secvenţa codată 00: ( ( r11 2c11 ) − 1 + r21 2c21) − 1 = r r ( ) ( ) = 2 ⋅ ( 2 ⋅ 0 − 1) + ( −1) ⋅ ( 2 ⋅ 0 − 1) = −1 3 . secvenţa de biţi codată transmisă este c11 = 1 . Peformanţa codurilor convoluţinale este mai bunǎ c nd memoria acestora creşte. Pentru a calcula mai uşor metricile se presupune că secvenţa recepţionată este formată din numere întregi.3 -5 1 -1 5 3 11 1. La momentul l = 1 . presupunând că avem o tranziţie între stările σ l −1 şi σ l .Pas 4: Se calculează metricile căilor corespunzătoare fiecărei stări la momentul de timp l .0 3 3 -3 -3 5 10 2. Pas 7: Se decide că s-a recepţionat secvenţa corespunzătoare căii ce intră în starea cu metrică maximă. Complexitatea algoritmului Viterbi este una liniarǎ în raport cu numǎrul de ramuri dintr-o secţiune de trellis. 01. se revine la pasul 2.-2 0 -4 4 0 În cazul codului menţionat anterior avem n0 = 2 . iar secvenţa recepţionată se presupune r11 = 2 .2 -3 1 -1 3 4 01 -3. metricile ramurilor pentru fiecare moment de timp şi combinaţie de biţi codaţi. r21 = −1 . 1 Moment de timp Secvenţa codată Secvenţa recepţionată Metricile 00 ramurilor 01 10 11 1 10 2. Atunci metricile corespunzătoare fiecărei din cele 4 ramuri posibile. Pas 5: Se reţine numai calea de intrare în fiecare stare care are metrica maximă numitǎ cale supravieţuitoare. dar cu preţul unei complexitǎţi de decodare crescute. Pas 6: Dacă l < L − 1 . Acest caz poate fi considerat un caz special de decodare cu decizie soft cuantizată. sunt calculate cu ajutorul relaţiei (5). c21 = 0 . Exemplu: În continuare se dă un exemplu de folosire a algoritmului Viterbi pentru codul din exemplul cu generatorii în octal g1 = 6 . În tabelul 1 sunt date secvenţa de biţi codată (considerată aceeaşi din calea îngroşată în trellis-ul din figura 4. 10 şi 11. g 2 = 3 . lucrarea anterioară).-1 -1 -3 3 1 2 11 2. secvenţa recepţionată.

deci se trece la pasul 2. S2 ) = 0 + 3 = 3 . conform tabelului 1.pentru ramura cu secvenţa codată 01: 2 ⋅ ( 2 ⋅ 0 − 1) + ( −1) ⋅ ( 2 ⋅1 − 1) = −3 . Pas 6: l < L − 1 (1 < 5 ). respectiv S2 . respectiv V0 ( S0 . Pas 3: Metricile corespunzătoare ramurilor cu secvenţele de ieşire 00 şi 10 sunt V0 ( S0 . iar cu linie întreruptă metricile celorlalte căi supravieţuitoare. 4 .5 sunt calculate în mod similar. 1. În figura 1 este dat trellis-ul corespunzător codorului din exemplu. Trellis-ul pentru codorul din exemplu În continuare dăm aplicare algoritmului Viterbi pas cu pas pentru secvenţa recepţionată dată în tabelul 1. Celelalte stări nu interesează deoarece codorul s-a iniţializat cu starea nulă. Pas 4: Avem metricile la momentul de timp l = 1: U1 ( S0 ) = U 0 ( S0 ) + V0 ( S0 . S2 ) = 3 . S0 ) = −1 . Pas 5: La acest moment de timp se reţin cele două căi care pleacă din starea S0 şi ajung în stările S0 . Acestea sunt trecute încadrate în trellis-ul din figura 2.pentru ramura cu secvenţa codată 10: 2 ⋅ ( 2 ⋅1 − 1) + ( −1) ⋅ ( 2 ⋅ 0 − 1) = 3 . Încadrate cu linie continuă sunt metricele cele mai mari la fiecare moment de timp. Pas 2: Se trece momentul de timp următor l = 0 + 1 = 1 . S0 ) = 0 − 1 = −1 şi U1 ( S2 ) = U 0 ( S0 ) + V0 ( S0 . cu secvenţele de ieşire din codor corespunzătoare fiecărei ramuri.pentru ramura cu secvenţa codată 11: 2 ⋅ ( 2 ⋅1 − 1) + ( −1) ⋅ ( 2 ⋅1 − 1) = 1 Metricile ramurilor la momentele l = 2.. Pas 1: Se iniţializează starea nulă a decodorului la momentul l = 0 cu metrica U 0 ( S0 ) = 0 . Pas 2: Se trece momentul de timp următor: l = 1 + 1 = 2 . S0 00 10 00 10 11 11 00 10 01 11 11 00 10 01 11 11 00 10 01 S2 11 S1 01 10 00 01 10 00 01 10 00 01 S3 l=0 l =1 l=2 l =3 l=4 l =5 Fig.

U 3 ( S3 ) = U 2 ( S2 ) + V2 ( S2 . adică secvenţei de biţi de informaţie 10110. S 2 ) = 3 . respectiv căile. Pas 5: La momentul de timp l = 2 se reţin cele patru căi care pleacă din starea S0 şi ajung în stările S0 . S3 ) = −2 + 1 = −1 sau U 3 ( S3 ) = U 2 ( S3 ) + V2 ( S3 . V2 ( S3 . Pas 4: Avem câte două metrici pentru fiecare stare la momentul de timp l = 3: U 3 ( S0 ) = U 2 ( S0 ) + V2 ( S0 . S 2 ) = −1 . fiind eliminate ramurile desenate cu linie-punct. S0 S 2 S3 S1 . S0 S 2 S1S 2 . Astfel metricile corespunzătoare ramurilor sunt. Calea rezultată în decodare este cea corespunzătoare succesiunii de stări S0 S 2 S1S 2 S3 S1 . V1 ( S2 . S3 ) = 3 + 1 = 4 . adică cele trecând prin succesiunile de stări: S0 S 2 S1S0 . S0 ) = 1 . ducând la întârziere de decodare pentru L mare. în care la momentul k se alege calea până la momentul k − D ( D fiind adâncimea de trunchiere). S1 ) = −1 şi V2 ( S2 . U 2 ( S2 ) = U1 ( S0 ) + V1 ( S0 . S1 . S1 ) = 3 . Pas 6: l < L − 1 ( 2 < 5 ). S 2 ) = −1 . S0 ) = −1 − 5 = −6 . Pas 4: Metricile la momentul de timp l=2 sunt următoarele: U1 ( S0 ) = U1 ( S0 ) + V1 ( S0 . Trellis-ul corespunzător codorului din exemplu cu metricile căilor supravieţuitoare la fiecare moment de timp.Pas 3: Metricile corespunzătoare ramurilor sunt. U 2 ( S1 ) = U1 ( S2 ) + V1 ( S2 . Experimental s-a găsit că o adâncime 5 . S0 S 2 S3 S3 . Algoritmul Viterbi descris mai sus realizează estimarea de maximă plauzibilitate (ML – maximum likelihood) a secvenţei recepţionate (minimizând probabilitatea de eroare a acesteia) şi are astfel nevoie de întreaga secvenţă pentru decodare optimă. V2 ( S2 . S2 . respectiv S3 . Pas 2: Se trece momentul de timp următor: l = 2 + 1 = 3 . S2 ) = −6 − 1 = −7 sau U 3 ( S2 ) = U 2 ( S1 ) + V2 ( S1 . V1 ( S0 . V2 ( S0 . V2 ( S1 . V1 ( S 0 . S2 ) = −1 − 1 = −2 . Algoritmul continuă în mod similar până la momentul de timp l = 5 . S0 ) = 8 + 1 = 9 . V2 ( S1 . conform tabelului 1. S2 ) = 8 + 3 = 11 . S3 ) = −3 . respectiv ale căilor eliminate este dat în figura 2. S 0 ) = −5 . Pas 3: Pentru tranziţia între momentele de timp l = 2 şi l = 3 (şi la fel mai departe) avem căte două ramuri care pleacă din fiecare stare. reţinându-se metricile. S0 ) = −3 . S3 ) = 1 . S3 ) = 4 − 3 = 1 . Când această întârziere este prea mare se foloseşte algoritmul Viterbi trunchiat. U 3 ( S1 ) = U 2 ( S2 ) + V2 ( S2 . U 3 ( S2 ) = U 2 ( S0 ) + V2 ( S0 . V2 ( S3 . U 2 ( S3 ) = U1 ( S2 ) + V1 ( S2 . S1 ) = 3 + 5 = 8 . S1 ) = −2 + 3 = 1 sau U 3 ( S1 ) = U 2 ( S3 ) + V2 ( S3 . S0 ) = −6 − 3 = −9 sau U 3 ( S0 ) = U 2 ( S2 ) + V2 ( S2 . S1 ) = 5 şi V1 ( S2 . S3 ) = 1 . conform tabelului 1. se trece la pasul 2. S1 ) = 4 − 1 = 3 . numai pentru ultimele D momente de timp. V2 ( S0 . Îngroşată este calea cu metrica maximă la fiecare moment de timp. Pas 5: La acest pas se reţin numai căile care conduc la metrică maximă pentru fiecare stare.

1. −1 3 S2 3 5 8 1 S3 l=0 l =1 4 l=2 −1 −3 −1 S0 −5 −6 −3 9 1 11 −3 3 3 1 1 l =3 3 −3 12 3 6 0 −3 0 4 12 −4 16 0 18 −4 14 l =5 −1 −2 3 −1 S1 8 −3 3 3 4 14 0 l=4 Fig.Se schimbă polinoamele generatoare în blocul corespunzător codorului şi decodorului Viterbi. canalul de transmisie.1.2. Decodarea Viterbi cu metricile asociate 5.-2.-1.Se identificǎ şi se studiazǎ blocurile de pe schemǎ (generatorul de secvenţe binare. Se modifică corespunzător adâncimea de trunchiere şi se observă rezultatele în urma simulării.1. 2.Se schimbǎ valoarea raportului semnal-zgomot (SNR) din blocul corespunzǎtor canalului AWGN şi se noteazǎ diferenţele în probabilitatea de eroare de bit rezultatǎ .-2. Se urmǎreşte funcţionarea sistemului de transmisie folosind coduri convoluţionale astfel: .2) cu polinoamele generatoare în octal g1 = 2 . Pentru codul (2.-3. Pentru aplicaţia Matlab se deschide modelul lucrǎrii de laborator.-2.3) cu polinoamele generatoare în octal g1 = 5 . decodorul Viterbi şi blocul de calcul a probabilitǎţii de eroare de bit) .Prin acţionarea butonului ‚Start’ se porneşte simularea.de trunchiere D ≥ 5 N ( N fiind lungimea de constrângere a codului) conduce la o degradare neglijabilă a performanţei algoritmului. la terminarea ei obţin ndu-se probabilitatea de eroare de bit în blocul ‘Display’ în urma decodǎrii Viterbi . 6 .3. g 2 = 3 şi pentru codul (2. codorul convoluţional. g 2 = 7 . sǎ se decidǎ ce secvenţǎ decodatǎ rezultǎ aplicând algoritmul Viterbi cu decizie soft.1}. Desfǎşurarea lucrǎrii 1. Se consideră secvenţa recepţionatǎ r={2. modulatorul BPSK. 2.