Sei sulla pagina 1di 10

Algoritmo di Viterbi e codici a convoluzione

Walter Grossi

settembre 2018
Cosa sono i codici a convoluzione?
Una codifica a convoluzione un tipo di codifica in cui viene
codificato un flusso continuo di dati (quindi carattere per
carattere) in funzione dei dati codificati in precedenza. A
differenza della codifica a Blocchi quindi non processa singole
parole di lunghezza fissata ma parole di lunghezza arbitraria.
Come funzionano i codici a convoluzione? Generiamo una
trasmissione con un codice convoluzionale facendo scorrere la
sorgente attraverso un filtro lineare(Linear-Feedback Shift-register).
Questo filtro fa uso di un registro a scorrimento e di una funzione
lineare.Nel filtro riconosciamo un vettore di stato che parte
dell’input della funzione ,questo vettore si aggiorna allo scorrere del
registro.
Figure: Linear-Feedback Shift-register
Per convenzione si assume che il vettore di stato sia composto
inzialmente di soli zeri e il registro scorre aggiornandosi coi nuovi
simboli codificati. É possibile rappresentare tutte le codeword in un
reticolo
Il problema della decodifica: Dato per buono che la parola da
decodificare sia effettivamente una codeword la decodifica si
tradurrebbe in un semplice sistema lineare. Per verificare che la
parola data sia effettivamente una codeword basta verificare che
sia un cammino del reticolo associato alla funzione lineare scelta.
Se la parola dovesse risultare non essere un codeword allora
necessario per correggere gli errori e per fare questo cerchiamo la
codeword pi probabile. Quindi necessario massimizzare la seguente
sommatoria :

X
P(t|y )
t

Ovvero la probabilitá di prendere un determinato arco sapendo


quello preso precedentemente lungo cammino.
L’algoritmo di Viterbi: Per massimizzare tale probabilitá
adoperiamo l’algoritmo di Viterbi.Ad ogni arco associamo come
peso l’inverso della probabilitá di intraprendere quell’arco nel
nostro cammino. Cosı́ il problema diventa minimizzare la sequente
quantitá:

X 1
t
P(t|y )
Come funziona l’algoritmo? L’algoritmo molto semplice:
-Al passo base per ogni arco uscente dal nodo di partenza si scrive
il peso di tale arco sul nodo d’arrivo.
-Per ogni altro nodo si somma il valore riportato su di esso ad ogni
peso di arco uscente e se il nodo di arrivo ha gi un valore positivo
si trascrive il minore tra tale valore e la somma calcolate in
precedenza.
Figure: Esempio
Conclusione:l’algoritmo termina in tempo Lineare nel numero di
archi e si rivela un ottimo strumento per correggere eventuali errori
nella codifica a convoluzione e facilitarne la decodifica.