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
 nk 1  h0,n1i0   h1,n1i1   ... hk 1,n1ik 1 
dove le quantità
 h0,k
k  n  k  :  
hk 1,k

h0,n1 


 
 hk 1,n1 
...
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 ,...,mn1   i0 , i1 ,...,ik 1 , p0 , p1 ,..., p nk 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,n1 
 h1,n1 
: k  n  I k | P 

 

 hk 1,n1 

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 nk 
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  me
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 nk  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 nk  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 mr , 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 mi  1
N d  2   mr i
1
i 0 2
mr 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