Sei sulla pagina 1di 12

L’ALGORITMO DI VITERBI

Tesina di Ricerca Operativa

Alessandro De Pin
Indice

• Indice pag. 2
• Introduzione pag. 3
• Struttura di un sistema di trasmissione numerica pag. 3
• Modello matematico pag. 4
• L’algoritmo di Viterbi pag. 6
• Due esempi di applicazione pag. 7
• Cenni di ulteriori applicazioni pag. 10
• Conclusioni pag. 10
• Appendice: il criterio di massima verosimiglianza pag. 11
• Bibliografia pag. 12

2
Introduzione

Con questo lavoro si intende presentare ed analizzare l’algoritmo di Viterbi, usato


particolarmente nella trasmissione numerica. Oltre a possibili applicazioni, si vedrà come è stato
sviluppato e ricondotto ad un algoritmo di ricerca del cammino più corto su un grafo.

Struttura di un sistema di trasmissione numerica

Innanzitutto un sistema di trasmissione numerica si presenta come

Codifica di Codifica di Modulatore


SORGENTE
sorgente canale

Decodifica di Decodifica di Decisione


DESTINATARIO
sorgente canale

in cui
- la codifica di sorgente si occupa di togliere la ridondanza sul messaggio da trasmettere
- la codifica di canale aggiunge codice ridondante per proteggere il messaggio dal rumore sul
canale
(questi due blocchi operano, ovviamente, in termini di sequenze di bit)
- il modulatore associa ad ogni simbolo del messaggio una forma d’onda
- la decisione demodula la forma d’onda “rumorosa” ricevuta e con criteri di verosimiglianza
decide per quella più probabilmente ricevuta/trasmessa
e le successive decodifiche di canale e di sorgente compiono l’operazione inversa dei rispettivi
blocchi di codifica.

3
Modello matematico

L’algoritmo di Viterbi si basa sul concetto di processo di Markov che, come tale, è
caratterizzato dalla proprietà secondo cui la probabilità di essere in uno stato in un determinato
istante dipende solo dallo stato all’istante immediatamente precedente, ovvero

P(x i + 1 x0 ,..., xi ) = P( xi + 1 xi )

Si definisce un vettore di stati

X = ( x0 ,..., xi ,...)

che può essere finito o infinito, in cui x i indica lo stato all’istante i , ed un vettore di transizioni

x = (x 0 ,..., x i − 1 ,...)

in cui xi := (x i , x i + 1 ) è la singola transizione tra una coppia di stati.


Ovviamente, come si può notare c’è una precisa corrispondenza tra vettore degli stati e vettore delle
transizioni: corrispondenza che sarà utile per portare il concetto di probabilità in termini di distanze.

L’algoritmo di Viterbi viene effettuato, secondo la struttura del sistema di trasmissione precedente,
dal blocco di decisione insieme alla successiva decodifica di canale per assicurare al destinatario la
corretta ricezione del messaggio trasmesso:

x = (x 0 ,..., x i ,...) Y = ( y0 ,..., y i ,...)


SORGENTE DESTINATARIO

Infatti, in modo molto semplificato, il trasmettitore (sorgente) utilizza un alfabeto di simboli, noto
anche al ricevitore (destinatario), per inviare il messaggio che però arriverà al blocco di decisione
non privo di distorsioni dovute all’inevitabile presenza di rumore nel canale; in questo modo il
blocco di decisione in ricezione si trova una sequenza di simboli Y = ( y0 ,..., y i − 1 ,...) “rumorosi” da
cui deve poter risalire, per confronti di verosimiglianza, alla sequenza correttamente trasmessa.

Si assumerà che il canale sia senza memoria, cioè che ciascun yi dipenda solo dalla corrispondente
transizione al medesimo istante in modo che si abbia

N
P(Y X ) = P(Y x ) = ∏ P( y i x i ) (*)
i= 0

4
e l’obiettivo è quindi trovare la sequenza degli stati X per cui vale

max P(Y X ) o max P(Y x ) (**)

secondo il criterio di massima verosimiglianza (vedi Appendice).

Per una più comoda visualizzazione del funzionamento dell’algoritmo si utilizza una
rappresentazione detta a traliccio ovvero del tipo

Stati (simboli):

A …. ….

B …. ….

C …. ….

D …. ….
.
.

Istanti: 0 1 2 …. i ….

in cui ad ogni nodo corrisponde uno stato ad un preciso istante e le transizioni vengono indicate
con dei collegamenti tra i rispettivi nodi a cui si riferiscono, in base al diagramma a stati associato
al processo di Markov in considerazione.

E’ importante comunque notare che ad ogni possibile sequenza di stati X o di transizioni x


corrisponde una traiettoria unica sul traliccio e viceversa.

Ora, facendo il logaritmo della (*), la produttoria diventa una sommatoria, ovvero

N
ln P(Y x ) = ∑ ln P( y i xi )
i=0

e questa quantità può essere pensata come metrica, cioè

l (xi ) = ln P( y i xi )

viene vista come la lunghezza della transizione xi nel traliccio.


In questo modo la funzione obiettivo (**) corrisponde alla massimizzazione della lunghezza del
percorso totale

5
N
L= ∑ l(xi ) (***)
i= 0

Generalmente si ipotizza che il canale di trasmissione sia del tipo AWGN (Additive White Gaussian
Noise) . In questo caso la (*) risulta

1 1
N
( yi − xi ) 2

P(Y X ) = N0 ∑

e i =0

(pN 0 ) 2
N

da cui, prendendone il logaritmo naturale e facendone il max per la (**), si ottiene semplicemente la
funzione obiettivo seguente

N N

∑ ( y i − xi ) ∑ d (yi , xi )
2
min = min
i= 0 i=0

che è il percorso totale secondo la (***), in cui l (xi ) = ( y i − xi ) è la metrica di un singolo ramo.
2

Ci si è ricondotti quindi ad un problema di percorso minimo.

L’algoritmo di Viterbi

Da questa impostazione del problema nasce l’algoritmo di Viterbi, esso è del tipo ACS (Add
Compare and Select).
Innanzitutto si denota la lunghezza parziale di una traiettoria come

i− 1
Li = ∑ l (x k )
k =0

questa esigenza nasce dal fatto che per ciascun nodo ad un particolare istante i vi giungono, in
generale, diverse traiettorie (percorsi) ciascuna con lunghezza Li ; per ogni nodo si sceglie la
traiettoria che vi giunge con la minore metrica: essa è detta superstite e si denota con X ( xi ) e la sua
lunghezza è detta metrica accumulata ( Γ ( xi ) = min Li ).
Allora se vi sono S stati, per ogni istante i vi sono S superstiti, uno per ogni stato x i . In questo
modo, ad ogni istante i è necessario conoscere soltanto gli S superstiti X ( xi ) e le loro lunghezze
Γ ( xi ) .
All’istante i+1 si prolungano i superstiti di una unità temporale, si calcolano le nuove lunghezze
delle traiettorie aggiungendo a ciascun ramo la rispettiva metrica accumulata (Add) e per ogni nodo
xi +1 si sceglie la nuova traiettoria più corta (Compare and Select) che sarà la nuova superstite.
Procedendo in questo modo, all’istante finale N si sarà in grado di scegliere il superstite finale che
sarà la traiettoria con la minor lunghezza ovvero, in termini pratici, la decisione migliore presa dal
ricevitore per la sequenza trasmessa.

6
Due esempi di applicazione.

• Un possibile impiego dell’algoritmo di Viterbi si trova applicato dal blocco di decisione


(secondo lo schema precedente del sistema di trasmissione numerica) nel caso in cui, dal blocco
di modulazione, vengano associate ai vari simboli da trasmettere forme d’onda che introducano
correlazione (la motivazione principale per introdurre la correlazione è evitare interferenza
intersimbolica, cioè che la forma d’onda di un simbolo si sovrapponga in frequenza a quella di
un altro simbolo nell’istante di campionamento (= istante di decisione), creando quindi
ambiguità).
Ad esempio, caso molto frequente è l’impiego di un impulso duobinario associato come forma
d’onda ad ogni simbolo: questo fa corrispondere i valori ai simboli (o ai singoli bit) da
trasmettere secondo la seguente macchina a stati

ingresso 0
0
ingresso 1
-2 0 1 +2

Il rispettivo diagramma a traliccio diventa

+2
ingresso 0
1 ingresso 1
0

0
-2

Ora supponiamo di trasmettere la sequenza 01001011 e di aver ricevuto i seguenti valori

-1.97 0.12 0.25 -1.73 -0.3 0.2 1.1 1.7

Per risalire alla corretta sequenza trasmessa il ricevitore applica alla sequenza ricevuta
l’algoritmo di Viterbi, replicando per ciascun simbolo il diagramma a traliccio precedente e
valutando le distanze di ciascun valore ricevuto da ciascun valore atteso, ottenendo:

7
3.97 1.97 3.85 0.15 1.9 1.9 5.63 2.13 4.43 0.97 2.77 2.57 3.47 2.27 2.57 2.57
1

1.97 2.09 0.4 3.63 2.43 1.17 3.67 3.97

1.97 0.15 2.34 2.13 0.97 2.57 2.27 5.37

0
0.03 0.03 2.15 2.09 4.34 0.4 0.67 0.67 2.37 2.37 4.57 1.17 4.27 3.67 7.37 3.97

0 1 0 0 1 0 1

in cui in blu più sottile sono state evidenziate le traiettorie superstiti e le relative metriche
accumulate, mentre in blu più spesso la traiettoria finale: come si può notare, pian piano si
delinea la traiettoria corretta e le altre muoiono.

• L’algoritmo di Viterbi è nato e si applica soprattutto coi codici convoluzionali, usati dalla
codifica di canale per evitare il più possibile errori di decisione in ricezione.
Senza scendere troppo nel dettaglio, i codici convoluzionali sono rappresentati da un registro
avente in ingresso la parola (in termini di bit) da codificare ed in uscita la parola codificata; ad
esempio si consideri lo schema di seguito

P1

I I n I n− 1 I n− 2

P2

questo è un tipico codice convoluzionale tale per cui ad ogni singolo bit in ingresso ne
corrispondono due in uscita.La corrispondente macchina a stati risulta

8
10 ingresso 0
11 10 ingresso 1
01
00 00
00 01
11

01
11

10

che in un diagramma a traliccio si rappresenta come

00

00
11
11

10 01

10 00

11
10

01
01

Ora, se ad esempio si volesse trasmettere la sequenza di bit 101, il codificatore produrrà,


supponendo di partire dallo stato 00, la nuova sequenza 11 10 00.
Supponiamo che il rumore sul canale modifichi la sequenza in modo che al ricevitore giunga
la sequenza 10 10 00, allora la decodifica di canale applica l’algoritmo di Viterbi su questa
(da osservare che il concetto di distanza tra due simboli in un codice d(x,y), dove y è il
simbolo ricevuto, è data dal numero di bit che li differenziano)

9
d(00,10)=1 d(00,00)=0

1 2 min(2,3)=2 ingresso 0
00 ingresso 1

1 2 min(4,1)=1
10
3 min(3,4)=3
11
1 min(3,4)=3
01

d(11,10)=1

1 0 1

in cui sono indicate in blu sottile le traiettorie superstiti ed in blu spesso la traiettoria
risultante con la metrica minore.

Cenni di ulteriori applicazioni

Altre applicazioni dell’algoritmo si possono trovare nel riconoscimento ottico di testi


(OCR), molto utilizzato da software in dotazione con i dispositivi di acquisizione immagini
(scanner) oppure, sempre nelle trasmissioni digitali, nella così detta Continuous Phase Modulation
(CPM), tecnica di modulazione adottata per evitare brusche transizioni di fase.

Conclusioni

Come si può notare quindi l’algoritmo è lo stesso di Dijkstra, vastamente applicato nella
ricerca operativa su problemi di percorso minimo, e si differenzia da esso solo dal fatto che il grafo
è un traliccio: questo facilita la visualizzazione e schematizzazione di problemi legati alla
trasmissione numerica.
Si è visto inoltre che l’algoritmo di Viterbi è ottimo nel senso di massima verosimiglianza, però ha
il difetto di introdurre ritardo nella decisione; infatti per una ricezione ottima del messaggio
trasmesso bisogna aspettare che sia giunta l’intera sequenza di bit al ricevitore e non si può decidere

10
bit per bit. Si può scegliere altrimenti una versione troncata dell’algoritmo, fissando un intervallo di
ritardo ammesso che corrisponde al numero di simboli massimo prima di poter prendere la
decisione: questa è una versione sub-ottima poiché allo scadere del ritardo ammesso viene scelta e
consegnata la traiettoria avente metrica minima in quell’istante, che non è detto sia la stessa che si
avrebbe considerando l’intera sequenza. Questo comunque dipende dal tipo di servizio in cui si
impiega l’algoritmo: se è un servizio vocale un errore della “versione troncata” è tollerabile, mentre
per un servizio dati un errore implica la ritrasmissione dell’intero messaggio.
Altra considerazione importante riguarda la complessità; infatti maggiore è il numero di simboli
dell’alfabeto e maggiore sarà il numero degli stati, nonché delle traiettorie da prendere in
considerazione. Questo ha influenza diretta sul tempo di esecuzione che varia a seconda
dell’implementazione nonché del numero di simboli possibili e della lunghezza della sequenza.

APPENDICE: il criterio di massima verosimiglianza

Si considera un insieme di simboli S = (s1 ,..., s N ) ; la massima verosimiglianza è un criterio


per stabilire quale tra i simboli dell’insieme S è il più somigliante ad un simbolo ricevuto
r = s i + e per qualche i,in cui e è l’errore presente sul simbolo.
Se si suppone, ad esempio, che r corrisponda al simbolo ricevuto in modo errato sk (con k=1,…,N),
la probabilità di decidere correttamente è

Pc (r ) = f (r s k ) p(s k ) ,
cioè la probabilità di aver ricevuto r avendo trasmesso sk moltiplicata alla probabilità di sk stesso.
Parimenti la probabilità di errare è

Pe (r ) = ∑ f (r si )p( si ) .
i≠k

Quindi si ha che r assomiglia maggiormente a sk quando

f (r s k ) p( s k ) = max f (r s i ) p(s i )
i

che è un criterio conosciuto come MAP (Maximum A Posterior probability), di cui quello di
massima verosimiglianza ML (Maximum Likelyhood) è un sottocaso usato quando gli sk sono
equiprobabili: in questo modo si ha

1
p (s i ) =
N

ottenendo

f (r s k ) p(s k ) = max f (r s i ) .
i

11
Bibliografia

- Appunti del prof. Babich (Corso di trasmissione numerica)


- Forney – “The Viterbi algorithm” , Proceedings of the IEEE vol.61 1973
- Benedetto, Biglieri – “Principles of Digital Transmission with wireless applications”
- Proakis, Salehi – “Communication systems engineering”

12