Turbo codici: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Corretto: "concatenate" |
|||
(49 versioni intermedie di 15 utenti non mostrate) | |||
Riga 1:
I '''turbo codici''' sono una classe di [[codifica di canale|codici di correzione degli errori]] ad alte prestazioni, che trovano impiego nelle [[Rete satellitare|comunicazioni satellitari]] nello spazio profondo ed in altre applicazioni in cui i progettisti puntano ad avere il massimo trasferimento di informazione su una [[Banda (informatica)|banda]] limitata in presenza di un [[Segnale elettrico|segnale]] ricevuto affetto da [[Rumore (elettronica)|rumore]].
I codici turbo sono stati teorizzati da [[Claude Berrou]], [[Alain Glavieux]] e [[Punya Thitimajshima]] presentati nel [[1993]] ad una conferenza dell'[[IEEE]]<ref>Berrou C., A. Glavieux e P. Thitmajshima; "''Near Shannon Limit Error-Correcting Coding and Decoding: Turbo Codes''", Proceeding of the IEEE International Conference on Communications, 1993, [[Ginevra]], [[Svizzera]]. [http://www-elec.enst-bretagne.fr/equipe/berrou/Near%20Shannon%20Limit%20Error.pdf]</ref>.
{{
{{
I codici turbo sono ancora ad oggi oggetto di ricerche in numerose università del mondo, allo scopo di raffinarli e di ottenere implementazioni più efficienti.
Nella [[teoria dell'informazione]], i
Il nome "turbo code" deriva dal
==Storia==
La prima domanda di brevetto per i turbo codici è stata depositata il 23 aprile 1991. La domanda di brevetto indica Claude Berrou come l'unico inventore dei codici turbo. La registrazione del brevetto ha portato a numerosi brevetti tra cui il brevetto US 5.446.747 [https://www.google.com/patents/US5446747 US Patent 5,446,747], che è scaduto il 29 agosto 2013.
Il primo documento pubblico sui turbo codici fu "''Near Shannon Limit Error-correcting Coding and Decoding: Turbo-codes''".<ref>{{
I
La prima classe di codice turbo era il [[codice convoluzionale concatenato parallelo]] (PCCC). Dopo l'introduzione del primo turbo codice parallelo nel 1993, sono state realizzate molte altre classi di turbo codici, incluse le versioni seriali dei codici convoluzionali seriali concatenati e dei codici ripetuti-accumulati
Oltre all'invenzione dei turbo codici, Claude Berrou ha anche sviluppato i [[codici ricorsivi sistematici convoluzionali]] (RSC), utilizzati nell'esempio di implementazione dei turbo codici descritti nel brevetto (i turbo codici che usano i codici RSC sembrano funzionare meglio di quelli che non li usano).
Prima dei codici turbo, le migliori implementazioni FEC erano costituite da codifiche seriali
In un saggio successivo, Berrou ha generosamente riconosciuto l'intuizione di "G. Battail, J. Hagenauer e P. Hoeher, che, alla fine degli anni '80, hanno acceso l'interesse per l'elaborazione probabilistica". Aggiungendo che " R. Gallager e M. Tanner avevano già immaginato tecniche di codifica e decodifica i cui principi generali erano strettamente correlati," anche se i calcoli necessari erano impraticabili a quel tempo.<ref>{{
==Un esempio di encoder==
Esistono molti casi diversi di turbo codici, che utilizzano diversi componenti di codificatori, rapporti di [[input/output]], interleaver e pattern di foratura. Questo esempio di implementazione dell'encoder descrive un classico codificatore turbo e mostra la progettazione generale dei turbo codici paralleli.
Questa implementazione dell'encoder invia tre sotto-blocchi di bit. Il primo sottoblocco è il blocco ''m''-bit dei dati del payload o carico utile che è spedito senza modifiche (codifica ''sistematica''). Il secondo sottoblocco è costituito da ''n/2'' [[bit di parità]] calcolati dai dati del payload utilizzando un codice convoluzionale sistematico ricorsivo (codice RSC). Il terzo sottoblocco è costituito da ''n/2'' bit di parità calcolati su una permutazione nota dei bit del payload, ancora utilizzando un codice RSC. Pertanto due sottogruppi ridondanti ma diversi di bit di controllo di parità sono inviati insieme al carico utile. Il blocco completo è composto da ''m + n'' bit di dati, con
La permutazione dei bit del payload tra le i due RSC in parallelo viene eseguito da un dispositivo chiamato interleaver. L'interleaver installato tra i due codificatori (e i decodificatori) è utilizzato per diffondere e sfumare i picchi di errore prodotti sull'output dal rumore che affligge il [[mezzo trasmissivo]].
Dal punto di vista dell'hardware, il codificatore complessivo consiste di due codificatori RSC in parallelo, ''C''<sub>1</sub> e ''C''<sub>2</sub>, come illustrato in figura, che sono collegati tra loro usando uno schema di concatenazione parallela:
Riga 38 ⟶ 37:
[[File:turbo encoder.svg]]
Nella figura, ''M'' è un registro di memoria. La linea di ritardo e l'interleaver portano i bit di input d<sub>k</sub> al secondo encoder ad apparire in sequenze diverse rispetto al primo encoder.
:<math>\begin{align}
Riga 46 ⟶ 45:
==Il decoder==
Il decodificatore è costruito in modo simile all'encoder. Due decodificatori elementari sono interconnessi tra loro ma in modo seriale non in parallelo. Il decodificatore <math>\scriptstyle DEC_1</math> funziona a bassa velocità (es. <math>\scriptstyle R_1</math>) quindi è riferito al codificatore <math>\scriptstyle C_1</math> e corrispondentemente <math>\scriptstyle DEC_2</math>
[[File:turbo decoder.svg]]
:<math>\begin{align}
Riga 59 ⟶ 58:
\end{align}</math>
dove <math>\scriptstyle a_k</math> e <math>\scriptstyle b_k</math> sono componenti di rumore indipendenti con la stessa varianza <math>\scriptstyle \sigma^2</math>. <math>\scriptstyle Y_k</math> è
Le informazioni ridondanti sono demultiplexate e inviate attraverso ''DI'' a <math>\scriptstyle DEC_1</math> (dove <math>\scriptstyle y_k \;=\; y_{1k}</math>) e a <math>\scriptstyle DEC_2</math> (dove <math>\scriptstyle y_k \;=\; y_{2k}</math>).
Riga 67 ⟶ 66:
:<math>\Lambda(d_k) = \log\frac{p(d_k = 1)}{p(d_k = 0)}</math>
e la consegna a <math>\scriptstyle DEC_2</math>. <math>\scriptstyle \Lambda(d_k)</math> è il
L'[[
Tuttavia, la struttura rappresentata non è ottimale, perché <math>\scriptstyle DEC_1</math> utilizza solo una parte delle informazioni ridondanti disponibili. Per migliorare la struttura, viene utilizzato un ciclo di feedback (linea tratteggiata
==Approccio alla decisione Soft==
Il front-end del decoder produce un numero intero per ogni bit nel flusso di dati. Questo numero intero è una misura di quanto è probabile che il bit sia uno 0 o 1 ed è anche chiamato ''soft'' bit. Il numero intero
* -127 significa "certamente 0"
Riga 83 ⟶ 82:
* ecc.
Questo introduce un aspetto probabilistico al flusso di dati dal front-end
Ad esempio, per ciascun bit, il front end di un ricevitore tradizionale deve decidere se una tensione analogica interna è al di sopra o al di sotto di un determinato livello di tensione di soglia. Per un decodificatore di turbo-codice, il front-end fornirebbe una misura di quanto è distante la tensione interna dalla soglia data.
Per decodificare il blocco di dati {{
==Risoluzione delle ipotesi per trovare i bit==
L'innovazione chiave dei turbo codici è il modo in cui utilizzano i dati di probabilità per riconciliare le differenze tra i due decodificatori. Ciascuno dei due decodificatori convoluzionali genera un'ipotesi di fiducia (con relativa probabilità) per la sequenza ricevuto degli ''m'' bit relativi al carico utile. Le due sequenze d'ipotesi sui bit vengono confrontate e se concordano il lavoro è finito, mentre se differiscono, i decodificatori si scambiano le probabilità che hanno per ciascun bit nell'ipotesi. Ciascun decodificatore incorpora le stime di probabilità derivate dall'altro decodificatore per generare una nuova ipotesi per i bit ''m'' del carico utile. Quindi confrontano queste nuove ipotesi. Questo processo iterativo continua fino a quando i due decodificatori giungono alla stessa ipotesi sulla sequenza 'm' di bit del payload, tipicamente i risultati convergono (o divergono) in 4 o 10 cicli.
Si può tracciare un'analogia tra questo processo e quello di risolvere enigmi a riferimenti incrociati come i cruciverba o
==Prestazioni==
Riga 101 ⟶ 100:
* I turbo codici sono ampiamente utilizzati in standard di telefonia mobile [[3G]] and [[4G]]; es., in [[High Speed Packet Access|HSPA]], [[EV-DO]] e [[3GPP Long Term Evolution|LTE]].
* [[MediaFLO]], sistema televisivo mobile terrestre da [[Qualcomm]].
* Nel canale di interazione dei sistemi di comunicazione satellitare, come [[DVB-RCS]]<ref>[http://www.etsi.org/deliver/etsi_en/301700_301799/301790/01.05.01_60/en_301790v010501p.pdf Digital Video Broadcasting (DVB); Interaction channel for Satellite Distribution Systems], ETSI EN 301 790, V1.5.1, May 2009.</ref> and [
* Nelle missioni [[NASA]] come [[Mars Reconnaissance Orbiter]] che ora usano turbo codici, in alternativa ai codici RS- Viterbi [[Viterbi decoder|Viterbi]].
* La turbo codifica, come la turbo codifica a blocchi e la turbo codifica convoluzionale, è utilizzata in [[IEEE 802.16]] ([[WiMAX]]), uno standard di rete metropolitana senza fili.
==Formulazione bayesiana==
Dal punto di vista dell'intelligenza artificiale
|autore2=David J. C. MacKay
|autore3=Jung-Fu Cheng
▲| title=Turbo decoding as an instance of Pearl's "belief propagation" algorithm
▲| journal=IEEE Journal on Selected Areas in Communications
|numero=2
▲| volume=16
|pp=140-152
▲| year=1998
| issn=0733-8716
| doi=10.1109/49.661103
Riga 121 ⟶ 119:
}}</ref>
==
<references />▼
* [[Soft-decision decoding]]▼
==
* [[Codice convoluzionale]]
* [[Algoritmo di Viterbi]]
* [[Interleaving]]
==
* [
* [http://www.csee.wvu.edu/~mvalenti/documents/valenti01.pdf "The UMTS Turbo Code and an Efficient Decoder Implementation Suitable for Software-Defined Radios"] {{Webarchive|url=https://web.archive.org/web/20161020193559/http://www.csee.wvu.edu/~mvalenti/documents/valenti01.pdf |date=20 ottobre 2016 }} (''International Journal of Wireless Information Networks'')
* {{
* [
* [http://www-turbo.enst-bretagne.fr/ International Symposium On Turbo Codes]
* [http://www.iterativesolutions.com/Matlab.htm Coded Modulation Library], an open source library for simulating turbo codes in matlab
* [http://www.ifp.uiuc.edu/~singer/journalpapers/tuchler_2002a.pdf "Turbo Equalization: Principles and New Results"] {{Webarchive|url=https://web.archive.org/web/20090227062216/http://www.ifp.uiuc.edu/~singer/journalpapers/tuchler_2002a.pdf |date=27 febbraio 2009 }}, an ''[[IEEE Transactions on Communications]]'' article about using convolutional codes jointly with channel equalization.
* [http://itpp.sourceforge.net IT++ Home Page] The [[IT++]] is a powerful C++ library which in particular supports turbo codes
* [http://www.inference.phy.cam.ac.uk/mackay/CodesTurbo.html Turbo codes publications by David MacKay]
* [https://aff3ct.github.io AFF3CT Home Page] ([[AFF3CT|A Fast Forward Error Correction Tool]]) for high speed turbo codes simulations
{{Controllo di autorità}}
▲<references/>
{{Portale|ingegneria}}
|