Diapositiva 1
Transcript
Diapositiva 1
Sistemi di Telecomunicazioni Corso di Laurea Specialistica in Ingegneria delle Telecomunicazioni (DM 270) A.A. 2013-2014 Pietro Guccione Contenuti Codici a blocchi Codici a blocchi lineari Codici di Hamming Calcolo delle prestazioni Codici di Reed-Muller P Guccione Basi sui codici I codici lineari possono essere classificati in due grandi categorie: codici a blocchi e codici convoluzionali. Nei codici a blocchi una sequenza di k bit di informazione è mappato in un blocco di n bit di messaggio, mediante un’opportuna codifica. Le tecniche di modulazione numerica sono relativamente semplici, come ad esempio 2-PAM, BPSK o al più QPSK o 2-FSK (regime a potenza limitata). Nei codici convoluzionali invece è presente una sorta di macchina a stati finiti e dati k bit di informazione, il messaggio è generato da questi ma anche dallo stato corrente della macchina. Dopo tale generazione anche lo stato della macchina cambia e quindi il sistema conserva memoria, in qualche modo, anche dei bit di informazione trasmessi in precedenza. I codici a blocchi sono meglio descritti in termini di algebra dei campi finiti, quelli convoluzionali in termini di grafi e diagrammi a traliccio. P Guccione Codici a blocchi I codici a blocchi binari sono codici che sfruttano proprietà algebriche per aumentare la codifica di guadagno. Essi sono sottoinsiemi dello spazio euclideo {0,1}n cioè dello spazio vettoriale del campo binario F={0,1}, dove n è il numero di bit per blocco. La loro efficienza spettrale si può calcolare come segue (Rc è il rate del codice, N=1 symb/blocco): 2 2k n Rc N log2 M nN log2 2 2 k bit / 2D Quindi si suppone di essere in un regime a potenza limitata (risultano convenienti le codifiche binarie). Si ha quindi che un codice binario a blocchi è un sottoinsieme C 0,1 , ma se supponiamo che tale sottoinsieme sia un sottospazio dello spazio n-dimensionale Fn, allora il codice è detto lineare. n La codifica di canale di riferimento è la 2-PAM (o 2-PSK). I bit {0,1} si mappano in: {α,α}. L’insieme delle parole di codice n-dimensionali di Fn si mappano nei vertici (non tutti) di un iper-cubo n-dimensionale di lato 2α. La restrizione a non occupare tutti i vertici ha lo scopo di aumentare la distanza tra le parole di codice (ridondanza per correzione o rilevazione errori). P Guccione Esempi Esempio 1: codice a parità: (n+1,n). Dati i bit di messaggio: [m0 , m1 ,...,mk 1 ] Il codice di parità aggiunge un solo bit in coda al blocco, pari a: ck m0 m1 ... mk 1 Esempio 2: si consideri il seguente codice a blocchi: C 000,011,110,101 Il rate di trasmissione è: 2 / 3 log2 4 4 / 3 [bit/2D]. Il codice si può rappresentare su uno spazio euclideo mediante l’insieme dei vertici di un tetraedro (su un cubo 3-dimensionale). Se il cubo ha lato 2α, la minima distanza euclidea è: 2 d min 8 2 000 110 2α 101 011 P Guccione Codici a blocchi lineari Un codice a blocchi mappa k bit di informazione su n bit di messaggio, dove n>k. Gli n bit dipendono soltanto dai k bit di informazione, quindi il codice è senza memoria. Se la relazione che lega gli n bit ai k bit è una combinazione lineare il codice è detto lineare. codificatore registro a scorrimento registro a scorrimento Se le prime k cifre del messaggio sono costituite dalle k cifre di informazione, il codice è detto sistematico. P Guccione Codici lineari sistematici In un codice a blocchi lineare e sistematico, le ultima n-k cifre vengono dette di parità. Le regole per determinare le parità sono differenti tra loro. Si definisce distanza di Hamming tra due n-ple, il numero di posizioni in cui queste differiscono. La distanza di Hamming si può anche ottenere come: n d H ai bi i 1 Proprietà. In un codice lineare la somma di due parole di codice è ancora una parola di codice. La parola di tutti zeri è sempre parola di codice. La distanza di Hamming tra due parole di codice è il numero di 1 della parola di codice somma (X-OR) delle due. L’insieme di tutte le possibili distanze (di Hamming) tra parole di codice diverse coincide con l’insieme del numero di elementi non nulli delle parole di codice non nulle. Su un canale di trasmissione binario, la capacità di rivelazione e correzione d’errore di un codice dipendono dalla distanza minima di Hamming. Se in particolare la distanza minima di Hamming è: d=2t+1, il codice è in grado di correggere sino a t errori, e di rivelarne sino a 2t, dato che tali errori non produrranno parole di codice. P Guccione Codici di Hamming 1 Sono codici in cui le n-k cifre di parità sono combinazione lineare delle prime k cifre di informazione. p0 h0,k i0 h1,k i1 ... hk 1,k ik 1 p nk 1 h0,n1i0 h1,n1i1 ... hk 1,n1ik 1 dove le quantità h0,k k n k : hk 1,k h0,n1 hk 1,n1 ... valgono 0 o 1 e “decidono” la presenza o l’assenza della cifra di informazione j-sima nella regola di parità i-sima (per il coefficiente in posizione hji). Se si usa la seguente notazione: i i0 , i1 ,...,ik 1 m m0 , m1 ,...,mn1 i0 , i1 ,...,ik 1 , p0 , p1 ,..., p nk 1 1 0 0 h0,k 0 1 0 h 1,k G 0 0 1 hk 1,k si può scrivere: P Guccione h0,n1 h1,n1 : k n I k | P hk 1,n1 m iG e G è detta matrice generatrice del codice. Codice di Hamming (7,4) Esempio: codice di Hamming (7,4). Le tre cifre di parità sono determinate con le seguenti regole: p0 i1 i2 i3 p1 i0 i2 i3 p i i i 0 1 3 2 e quindi si ha La matrice generatrice vale: 1 0 G 0 0 0 1 4 3 : 1 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 1 : 4 7 0 1 0 1 1 0 0 0 1 1 1 1 Le 16 possibili parole (su 27=128 possibili combinazioni) sono: La distanza di Hamming è: 3 (almeno 3 uno in ogni parola). Capacità di correzione: 1. P Guccione Codice di Hamming (7,4) Poiché C è uno spazio k-dimensionale dello spazio di n-dimensioni binario, il suo complemento binario, cioè l’insieme di vettori ortogonali ai vettori in C ha dim. (n-k). Il codice che si forma in questo modo, (n,n-k) è detto codice duale. La matrice generatrice del codice duale è di dimensione nx(n-k) ed è chiamata anche matrice di controllo di parità di C, denotata con H. Per ogni parola di codice m, si ha mH 0 , e quindi anche GH 0 . La matrice di controllo di parità H ha le prime k righe che rappresentano le regole di parità; le ultime n-k righe formano la matrice identità I. 0 1 1 H 1 1 0 0 P Guccione 1 1 0 1 1 0 P 1 1 : 7 3 I nk 0 0 1 0 0 1 Codici di Hamming 2 In un canale binario simmetrico, in cui il rumore si schematizza come un cross-over tra i simboli (in caso di decodifica hard), si ha in ricezione: y me con e vettore degli errori. Per la decodifica del codice viene calcolata la sindrome del codice: yH mH eH eH 0 La sindrome è un vettore di n-k (=3, nel caso di un codice di Hamming (7,4)) componenti che manifesta il risultato delle n-k regole di parità [se sono state rispettate (=0) oppure no (=1)] Essa può presentarsi in 2n-k modi (=8), mentre tutte le possibili configurazioni di errore sono pari a 2n-2k (=128-16) > 2n-k. 2n La stessa sindrome si riferisce quindi a ben nk 2 k 2 ( 16) configurazioni di errore possibile. Per questo motivo non è possibile correggere tutti i tipi di errore, dato che la corrispondenza è del tipo: molti errori ad una configurazione sindrome. Tra tutte le configurazioni d’errore si sceglie allora la più probabile, cioè quella con il minor numero di errori. P Guccione Codici di Hamming 3 Per un codice piccolo si possono anche pre-memorizzare tutte le possibili sindromi, e l’errore che più probabilmente ha dato luogo a quella sindrome: Come si può vedere, quelle sindromi sono state generate (tra gli altri) da errori singoli, ciascuno dei quali si ottiene mediante estrazione di una particolare riga di H. In questo modo è possibile correggere in modo affidabile soltanto gli errori singoli. Genericamente esistono infiniti codici di Hamming, in cui n e k sono legati da: n 2 nk 1 Questi codici hanno il vantaggio che: lim n n log 2 n 1 k lim 1 n n n cioè il rate tra bit di informazione e bit di messaggio (ridondanza) tende a 1, per n→ ∞, anche se il potere correttore è pari comunque a 1 (distanza di Hamming): dH 3 P Guccione Codici di Hamming 4 A parità di ridondanza, codici con blocco lungo e correttori di molti errori sono migliori di codici con blocco corto e correttori di pochi (o un solo) errori. Tuttavia la complessità del decodificatore aumenta all’aumentare del numero di errori correggibili. In ricezione basta effettuare il calcolo s yH e verificare che s=0 se il codice è solo rivelatore. Se invece è correttore, si deve ricavare la n-pla d’errore più probabile, per correggere la parola ricevuta. Al crescere di n-k la correzione diventa computazionalmente onerosa Una rappresentazione più potente dei codici lineari è quella fatta con l’algebra binaria. Alla parola di informazione, al messaggio e alla matrice generatrice, si sostituiscono i corrispondenti polinomi dell’algebra dei campi finiti: i( x) ik 1x k 1 ik 2 x k 2 ... i1x i0 m( x) mn 1x n 1 mn 2 x n 2 ... m1x m0 m( x) i( x) g ( x) g ( x) g n k x n k g n k 1x n k 1 ... g1x g0 Il polinomio generatore ha ordine n-k, e quindi n-k+1 coefficienti. Ha quindi una struttura più compatta della matrice G. m(x) è parola di codice se è divisibile per g(x). P Guccione Prestazioni dei codici di Hamming 1 Le prestazioni di un codice si valutano con il guadagno (effettivo) di codifica, cioè la quantità di potenza che può essere risparmiata nel trasmettere il simbolo, per ottenere la stessa probabilità d’errore di un sistema non codificato. Si presuppone che il sistema codificato e quello non codificato a confronto abbiano lo stesso rate di trasmissione, operino sullo stesso canale e con lo stesso rumore. Si ricordi che il guadagno effettivo di codifica dipende da Eb / N 0 ed è definito come: Eb / N 0 uncoded Eb / N 0 coded Supponiamo una codifica di canale binario antipodale, così che i valori in ingresso al decisore in assenza di rumore siano: E In un sistema codificato l’energia per simbolo è minore: Ec Rc Eb essendo Rc la ridondanza del codice (in termini di bit di informazione per bit di messaggio). [cioè: fissati i limiti di energia, l’energia disponibile per bit di messaggio diminuisce]. [Si ha : s (2c 1) E mj mj c d E , s, s '2 4 Ec d H (c, c' ) d E , min 2 4 Ec d H , min P Guccione Prestazioni dei codici di Hamming 2 La probabilità d’errore in termini di norma euclidea dE (e quindi per soft decoders) vale: d E ,min Pblock K Q 2 dato che: d E,min 2 Rc Ebd H ,min , 2 N0 / 2 E K Q 2 Rc d H , min b N0 (K è il numero medio di parole a distanza minima) 2 Eb Per un sistema binario antipodale non codificato si ha invece: Pbit Q N0 La probabilità d’errore per un blocco di k bit non codificati vale: 2 Eb Pbit k Q N0 Ignorando in prima approssimazione i coefficienti esterni della funzione Q(.), abbiamo un guadagno di codifica (asintotico) pari a: soft 2Rc d H ,min Eb / N0 2Eb / N0 Rc d H ,min Esempio 1: codice di parità (n,n-1): R (n 1) / n, d H . min 2 2(n 1) / n Esempio 2: codice di Hamming (7,4): R 4 / 7, d H . min 3 3 4 / 7 2.34dB P Guccione Prestazioni dei codici di Hamming 3 Per un hard decoder che decodifichi un codice a blocchi, prima si effettua la decisione su singolo bit, poi si effettua la decodifica (del codice) vera e propria. Quindi il canale può essere visto come un canale binario simmetrico, con il rumore che produce errore di tipo binario (scambia la cifra di arrivo). La probabilità di errore è quindi: Eb pb Q 2 R , (d H 1) N 0 L’introduzione di un codice (cioè il decrescere di R) peggiora (=aumenta) la probabilità d’errore su singolo bit. d H ,min 1 t Il codice tuttavia corregge fino a: errori. 2 La probabilità d’errore (sul blocco) vale: Pblock K d H ,min i t 1 d H ,min i d d i p (1 p) H ,min K H ,min p t 1 i t 1 (la sommatoria precedente si approssima usualmente al suo valore predominante, essendo p<<1) P Guccione Prestazioni dei codici di Hamming 4 x Usando l’approssimazione Q( x) e 2/2 per medi-alti valori di x (cioè di SNR), si ha: d Pblock K H ,min e R ( t 1) Eb / N0 t 1 Usando la stessa approssimazione per il caso non codificato (con un blocco di k bit): 2 Eb ke Eb / N0 Pblock K ' Q N0 Confrontando le due probabilità d’errore ottenute in caso di alto SNR, si ha un guadagno di codifica asintotico pari a: hard R(t 1) che risulta minore rispetto ai soft decoder. In situazioni reali tale la differenza è compresa tra 1.2 e 2dB. P Guccione Prestazioni dei codici di Hamming 5 Esempio: codice di Hamming (15,11). Il calcolo asintotico porta a: 11 1.66dB 15 11 3 3.42dB 15 hard R(t 1) 2 soft Rd H ,min Mentre il calcolo per una p 10 5 porta a: hard 1.2dB soft 2.6dB Esempio: codice di Hamming (31,26) Decodifica hard Decodifiche soft (MAP e ML) P Guccione Prestazioni dei codici di Hamming 6 Guadagno di codifica con decodifica soft per un codice… …(3,2) a parità singola Guadagno a 10-5: 0.89dB (asintotico: 1.25dB) P Guccione …(7,4) di Hamming Guadagno a 10-5: 1.86dB (asintotico: 2.34dB) Esempi di semplici codici I codici lineari sono usualmente indicati con (n,k), dove n è la lunghezza del codice, con C F n 0,1 e k rappresenta la dimensione dei bit di informazione. Cioè: n n è il numero di bit di ogni parola k è il numero di bit di informazione. Quindi il numero di parole di codice è M 2 k la distanza di Hamming del codice si può fare grande sino a dH=2n-k la ridondanza del codice (in termini di parole di codice inusate rispetto alle totali) è: 2n 2k 2n Codice universale: (n,n): è l’insieme di tutte le possibili n-ple di lunghezza n (dH=1). Esempio: n=3: C 000,001,010,011,100,101,110,111 Codice banale: (n,0): è un codice contenente una sola parola: lo zero (oppure l’uno). (dH=∞) Esempio: n=3: C 0 000 oppure C ' 1 111 Codice a ripetizione: (n,1): è un codice contenente due parole: lo zero e l’uno (dH=n). Esempio: n=3: C 0,1 000,111 Codice a parità singola (SPC): (n,n-1): è un codice con 2n-1 parole, distanti dH=2. Esempio: n=3: C 000,011,101,110 P Guccione Guadagno nominale dei codici a blocchi Siccome la codifica di canale di riferimento è la 2-PAM: {α,-α} , ogni parola di codice si mappa in {0,1}. Quindi si ha: x={±α, ±α,…, ±α}. Il numero di parole di codice è: M=2k (n bit/blocco), Il bit rate (efficienza spettrale nominale) è =2k/n bit/symb L’energia associata ad ogni blocco (parola di codice): Ec=nα2, L’energia media per ogni bit di informazione: Eb=nα2/k Due parole di codice (x,y) che abbiano una distanza di Hamming pari a dH, avranno una distanza euclidea pari a: x y 4 2 d H (x, y) Il guadagno nominale del codice è: 2 2 kd H , min d min 4 Eb n La probabilità d’errore vale: N d 2kd H ,min Eb 2 P ( E ) Kb (C)Q d min / 2 N0 Kb (C)Q 2 Eb / N0 Q k n N0 (dove: se Kb è il numero medio di simboli a distanza minima per bit, Nd è il numero di simboli a distanza minima). P Guccione Codici di Reed-Muller 1 I codici di Reed-Muller (RM) sono una famiglia infinita di codici binari lineari. Per n<=32 sono tra i migliori codici conosciuti con distanza minima d pari ad una potenza del 2. Per valori di n>32 sono ancora abbastanza buoni, se si guarda alle loro prestazioni in rapporto alla complessità di decodifica. Definizione. Per ogni intero m 0 e 0 r m esiste un codice RM, denotato con RM(r,m). Questo ha lunghezza delle parole di codice pari a n=2m (n è la lunghezza) e minima distanza di Hamming dH=2m-r. Codici RM banali. Se r=m: RM(m,m), la distanza di Hamming è d=1, cioè il codice universale: (2m,2m,1). Se r=-1, RM(-1,m) è il codice banale (2m,0,∞). Se m=0,r=0 si ha il codice RM(0,0)=(1,1,1) che è il codice universale C 0,1 Se m=0,r=-1 si ha RM(-1,0)=(1,0, ∞) che è il codice banale C 0 P Guccione Codici di Reed-Muller 2 Tutti gli altri codici per m 1 ed 0 r m sono ottenuti partendo da questi codici RM banali e dalla seguente costruzione ricorsiva | u | u v | . Vediamo nel dettaglio. Il codice RM(r,m) si costruisce a partire dal codice RM(r-1,m-1) e da RM(r,m-1) mediante: RM (r, m) (u, u v) | u RM (r, m 1), v RM (r 1, m 1) Da questa costruzione si può ricorsivamente dimostrare che: il codice RM(r,m) è un codice binario lineare a blocchi di lunghezza n=2m e dimensione k (r, m) k (r, m 1) k (r 1, m 1) i codici sono annidati l’uno dentro l’altro, nel senso che: la distanza minima nel codice RM(r,m) è d H 2 mr , r 0 d H , r 1 P Guccione RM (r 1, m) RM (r, m) Codici di Reed-Muller 3 I codici a metà tra due alla loro sinistra sono quelli usati per la costruzione ricorsiva. k (r, m) k (r, m 1) k (r 1, m 1) k(1,2)=k(1,1)+k(0,1) 3=2+1 Una formula esplicita per k: k (r , m) (2m,k,2m-r) (n,k,dH) P Guccione m j 0 j r Casi particolari Il numero di parole di codice (simboli) a distanza minima è: 2 mi 1 N d 2 mr i 1 i 0 2 mr 1 r Codici con r=m-1: codici a parità singola. Hanno d=2, guadagno nominale pari a 2k/n→2, per n→∞. Tuttavia essendo Nd=2m(2m-1)/2, Kb=2m-1 →∞, e questo limita il guadagno effettivo Codici con r=m-2, sono i codici estesi di Hamming. Hanno d=4, guadagno nominale pari a 4k/n→4, per n→∞. Anche in questo caso, essendo Nd=2m(2m-1)(2m-2)/24, Kb→∞. I codici con r=1 generano un set di parole di codice detta bi-ortogonale. Sono di dimensione n=2m e k=2m+1 (quindi numero di parole di codice pari a M=2m+1). Questi codici hanno una parola di codice tutta zeri, una tutta uno e 2m+1-2 parole con metà bit zero e metà 1. La distanza tra le parole di codice vale: d=n/2=2m-1. P Guccione Casi particolari Parametri di codici di Reed-Muller con dimensione n<128. Il guadagno effettivo è calcolato con la regola approssimata a partire dal guadagno nominale: eff 0.2 log2 K b (si ricordi che: =2k/n [bit/2D]) P Guccione [dB] Esempi Esempi di codici derivati da altri codici. 1. Dato un codice del tipo (n,k,d), è possibile ottenere, da questo, un codice del tipo: (n+1, k, d+1), semplicemente aggiungendo un bit di parità complessivo: p xi i (supponendo d dispari). Il guadagno di codifica è migliore di quello del codice di partenza, se k>1. 2. Preso un codice C, in una data posizione della parola di codice può accadere una delle due possibilità: tutte le parole di codice in quella posizione hanno uno 0, oppure metà hanno zero, metà 1. Si può, nel primo caso, eliminare quella posizione ottenendo un codice che mantiene le stesse prestazioni ma risparmia in energia (dato che la sua dimensionalità n è minore). Tali codici sono detti perforati (punctured). 3. I codici di Hamming sono del tipo: (2m-1,2m-m-1,3) e sono ottenuti perforando i codici estesi di Hamming (2m,2m-m-1,4)=RM(m-2,m) in una qualunque delle posizioni della parola di codice. P Guccione