# Descodificador de Viterbi

Un descodificador de Viterbi utilitza l'algorisme de Viterbi per descodificar un flux de bits que s'ha codificat mitjançant un codi convolucional o un codi enreixat.
Hi ha altres algorismes per descodificar un flux codificat de forma convolucional (per exemple, l'algoritme de Fano). L'algoritme de Viterbi és el que consumeix més recursos, però fa la descodificació amb la màxima probabilitat. S'utilitza més sovint per descodificar codis convolucionals amb longituds de restricció k≤3, però a la pràctica s'utilitzen valors fins a k=15.
La descodificació de Viterbi va ser desenvolupada per Andrew J. Viterbi i publicada al documentViterbi, A. IEEE Transactions on Information Theory, 13, 2, 4-1967, pàg. 260–269. DOI: 10.1109/tit.1967.1054010. "Límits d'error per a codis convolucionals i un algorisme de descodificació asimptòticament òptim". Transaccions IEEE sobre teoria de la informació . 13 (2): 260–269. doi : 10.1109/tit.1967.1054010.
Hi ha implementacions de maquinari (en mòdems) i programari d'un descodificador de Viterbi.
La descodificació de Viterbi s'utilitza en l'algorisme de descodificació iteratiu de Viterbi.

## Implementació de maquinari

Un descodificador de maquinari de Viterbi per a codi bàsic (no perforat) normalment consta dels següents blocs principals:
* Unitat mètrica de branca (BMU)
* Unitat mètrica del camí (PMU)
* Unitat de seguiment (TBU)

### Unitat mètrica de branca (BMU)

La funció d'una unitat mètrica de branca és calcular les mètriques de branca, que són distàncies normades entre tots els símbols possibles de l'alfabet de codi i el símbol rebut.
Hi ha descodificadors Viterbi de decisió dura i de decisió suau. Un descodificador de Viterbi per decisió difícil rep un flux de bits simple a la seva entrada i s'utilitza una distància de Hamming com a mètrica. Un descodificador de Viterbi de decisió suau rep un flux de bits que conté informació sobre la fiabilitat de cada símbol rebut. Per exemple, en una codificació de 3 bits, aquesta informació de fiabilitat es pot codificar de la següent manera:
| valor | significat | significat |
| 000 | més fort | 0 |
| 001 | relativament fort | 0 |
| 010 | relativament feble | 0 |
| 011 | més feble | 0 |
| 100 | més feble | 1 |
| 101 | relativament feble | 1 |
| 110 | relativament fort | 1 |
| 111 | més fort | 1 |
Per descomptat, no és l'única manera de codificar dades de fiabilitat.
La distància euclidiana quadrada s'utilitza com a mètrica per als descodificadors de decisions suaus.

### Unitat mètrica del camí (PMU)

Una unitat de mètriques de camí resumeix les mètriques de branca per obtenir mètriques $2^{K-1}$ camins, on K és la longitud de la restricció del codi, un dels quals finalment es pot escollir com a òptim. Cada rellotge que fa $2^{K-1}$ decisions, deixant fora camins no òptims. Els resultats d'aquestes decisions s'escriuen a la memòria d'una unitat de seguiment.

## Unitat de seguiment (TBU)

La unitat de traça enrere restaura un camí (gairebé) de màxima probabilitat a partir de les decisions preses per PMU. Com que ho fa en sentit invers, un descodificador Viterbi consta d'un buffer FILO (primer en entrar-últim-sort) per reconstruir un ordre correcte.

## Implementació de programari

Una de les operacions que consumeixen més temps és una papallona ACS, que normalment s'implementa utilitzant un llenguatge ensamblador i extensions de conjunt d'instruccions adequades (com ara SSE2) per accelerar el temps de descodificació.

## Aplicacions

L'algorisme de descodificació de Viterbi s'utilitza àmpliament en les àrees següents:
* Comunicació per ràdio: TV digital (ATSC, QAM, DVB-T, etc.), relé de ràdio, comunicacions per satèl·lit, mode digital PSK31 per a ràdio amateur.
* Descodificació de la modulació codificada per enreixat (TCM), la tècnica utilitzada en mòdems de línia telefònica per extreure una alta eficiència espectral de 3 Línies telefòniques analògiques d'amplada de banda kHz.
* Dispositius d'emmagatzematge d'ordinadors com ara discs durs.
* Reconeixement automàtic de la veu.

## Referències

* ↑ «6.02 Lecture 7: Viterbi decoding | Introduction to EECS II: Digital Communication Systems | Electrical Engineering and Computer Science» (en anglès). [Consulta: 24 febrer 2024].
* ↑ «[https://www.ece.ucdavis.edu/~bbaas/281/notes/Handout.viterbi.pdf VITERBI DECODER PROCESSING]» (en anglès). [Consulta: 24 febrer 2024].
* ↑ «[https://web.mit.edu/6.02/www/s2012/handouts/8.pdf Viterbi Decoding of Convolutional Codes]» (en anglès). [Consulta: 24 febrer 2024].
* ↑ «[https://web.mit.edu/6.02/www/f2010/handouts/lectures/L9.pdf Viterbi Decoding of Convolutional Codes]» (en anglès). [Consulta: 24 febrer 2024].