Professional Documents
Culture Documents
Ing. Pazzo
20 settembre 2009
2
Si consiglia di affiancare il materiale presente in questo riassunto agli appunti presi a lezione. Que-
sto perché (ovviamente!) non si vuole avere alcuna presunzione di esaustività, né di assoluta corret-
tezza: nonostante le revisioni fin’ora effettuate, potrebbero infatti essere ancora presenti molti errori e
imprecisioni.
2
Indice
3
4 INDICE
4 Il limite di Shannon 51
4.1 Capacità del canale additivo gaussiano bianco . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Caso tempo-continuo a banda limitata (formula di Hartley-Shannon) . . . . . . . . . . . . . . 53
4.2.1 Incorrelazione del rumore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3 Il limite di Shannon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.4 Antipodal Signalling AWGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.5 Hard decision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.6 Unquantized output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.7 Low SNR region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.8 Trattamento dei segnali passa-banda e water-filling . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.8.1 Caso tempo-discreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6 Codici a traliccio 99
6.1 Codici convoluzionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.2 Diagramma a traliccio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.3 Decodifica dei codici convoluzionali con hard decisions su BSC . . . . . . . . . . . . . . . . . . 101
6.4 Algoritmo di Viterbi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.1 Complessità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.2 Altri aspetti implementativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5 Codici convoluzionali punturati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.6 Codici convoluzionali sistematici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.7 Codici convoluzionali catastrofici (paura eh!?) . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4
INDICE 5
5
6 INDICE
6
Capitolo 1
Nessun riassunto di Teoria dell’Informazione deve iniziare senza aver prima visto lo schema del col-
legamento! Questo schemino essenziale mostra il percorso che l’informazione compie, dalla sorgente
all’utilizzatore finale; gli step sono i seguenti:
∙ sorgente: trattasi della sorgente dell’informazione: può essere un’entità analogica1 (un suono), ma
anche un’informazione in formato digitale come un documento, un brano audio, etc. . .
∙ codificatore di sorgente: ha il compito di rappresentare i dati in maniera più sintetica, in modo che
si possa spedire quanta più informazione possibile nel minor tempo possibile. Possono essere di due
tipi, in base a se viene persa informazione (esempio: codifica JPEG) o meno (esempio: compressione
ZIP);
7
8 CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE
Gregory Bateson
Che cos’è l’informazione? In una comunicazione, che avviene attraverso un dato alfabeto di simboli,
l’informazione viene associata a ciascun simbolo trasmesso e viene definita come la riduzione di incertezza
che si poteva avere a priori sul simbolo trasmesso. L’informazione non è semplicemente una variazione:
una sequenza del tipo
... 01010101010101010...
varia continuamente, ma non porta informazione perché è assolutamente prevedibile. In questo senso,
l’informazione è legata alla non prevedibilità di un certo evento: ad esempio, se affermiamo che ’Oggi, in
questo punto, non sono caduti degli aerei’, non diamo una grande informazione perché si presuppone che
questo accada per la stragrande maggioranza del tempo. Viceversa l’affermazione ’Oggi, in questo punto,
sono caduti degli aerei’ ha una componente informativa molto più preziosa (anche se un po’ drammatica).
La Teoria dell’informazione è quel settore delle telecomunicazioni che si occupa di definire le basi teo-
riche su cui si fonda la scienza dell’informazione. La sua nascita è relativamente recente: essa viene
solitamente fatta risalire al 1948, anno in cui Claude Shannon pubblicò sul Bell System Technical Jour-
nal Una teoria matematica della comunicazione in cui introduceva per la prima volta in modo sistematico lo
studio dell’informazione e della comunicazione. Grazie alla sua affascinante teoria, Shannon è riuscito a
definire e specificare in maniera quantitativa i meccanismi di compressione, codifica e trasmissione dei
dati, mostrandocene i limiti ultimi.
In questo contesto, L viene detta cardinalità di 𝒳 . A ciascun possibile risultato dell’esperimento ’incarnato’
dalla variabile aleatoria viene associato un valore e una probabilità:
p ( X = x̃1 ) = p ( x̃1 ) = p1
p ( X = x̃2 ) = p ( x̃2 ) = p2
...
p ( X = x̃ L ) = p ( x̃ L ) = p L
Chiaramente, per le basilari proprietà del calcolo aleatorio, si deve avere che
∑ pi = 1 (1.1)
i
1
I ( x ) = log2 = − log2 p( x ) (1.2)
p( x )
Graficando la curva otteniamo la figura 1.2. L’unità di misura per I è il cosiddetto Shannon (Sh) detto
anche ’bit di informazione’.
2 Random Variable.
8
CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE 9
xi , x j → Statisticamente indipendenti
e l’informazione pari a:
1 1 1
I ( xi , x j ) = log2 = log2 + log2 = I ( xi ) + I ( x j ) (1.3)
p ( xi ) p ( x j ) p ( xi ) p( x j )
Claude Shannon
Nella teoria dell’informazione - e in rapporto alla teoria dei segnali - l’entropia misura la quantità di
incertezza o informazione presente in un segnale aleatorio, che può essere interpretata anche come la
minima complessità descrittiva di una variabile aleatoria, ovvero il limite inferiore della compressione
dei dati. L’entropia (che chiameremo H ( x )) è inoltre definita come la media statistica dell’informazione
portata da tutti i possibili valori che può assumere una variabile aleatoria:
1
H ( x ) = E[ I ( x )] = ∑ p( x ) I ( x ) = ∑ p( x ) log2
p( x )
= − ∑ p( x ) log2 p( x ) (1.4)
x ∈𝒳 x ∈𝒳 x ∈𝒳
9
10 CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE
ESEMPIO:
Calcoliamo l'entropia di una distribuzione Bernoulliana3:
𝒳 = x̃1 , x̃2
Associamo a x̃1 la probabilità p e a x̃2 la probabilità q = 1 − p. L'entropia sarà quindi:
1 1 1 1
H ( x ) = p log2 + q log2 = p log + (1 − p) log
p q p 1− p
Andando a gracare otteniamo la gura 1.3.
variabili casuali. È una variabile dicotomica, dunque con due sole possibili realizzazioni (0 e 1), cui sono associate le rispettive
probabilità p e 1 − p.
10
CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE 11
Ora ci giochiamo il Jolly: osserviamo che la retta di equazione χ − 1 sovrasta la curva ln χ per ogni
valore di χ (le due curve si toccano solamente in χ = 1)4 . Possiamo quindi scrivere:
Infine:
H ( x ) − log2 L ⩽ 0 ⇒ H ( x ) ⩽ log2 L
Questo risultato ci suggerisce una proprietà importante: la distribuzione uniforme (quella che rende
possibile la sostituzione del segno ≤ con l’uguaglianza) è un’estremale per l’entropia e garantisce la
massima incertezza.
ESERCIZIO:
Siano a e b due vettori di uguale lunghezza n, con elementi tutti positivi. Per ipotesi si ha che:
n n
∑ a i = ∑ bi = 1
i =1 i =1
11
12 CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE
ESERCIZIO:
Siano ai e bi due successioni e sia
i→∞
ai −−→ a
Si dimostri che si ha (regola di Cesaro 5 ):
n
1 n→∞
bn =
n ∑ ai −−−→ a (1.7)
i =1
Soluzione6 :
n
1
bn − a =
n ∑ ai − a
i =1
⎛ ⎞ ( )
n N (ε) n N (ε)
1 1⎝ 1
∣ bn − a ∣ =
n ∑ ∣ a i − a ∣ = n ∑ ∣ a i − a ∣ + ∑ ∣ a i − a ∣ ⎠ ⩽ n ∑ ∣ a i − a ∣ + ε ( n − N ( ε ) − 1)
i =1 i =1 i = N (ε)+1 i =1
( )
N (ε)
1 ε n→∞
n i∑
∣ bn − a ∣ ⩽ ∣ ai − a∣ + (n − N (ε) − 1) −−−→ ε
=1
n
n→∞
bn −−−→ a + ε ≈ a
p X,Y ( x, y) = p ( x, y) = p ( X = x, Y = y) (1.8)
Infine, abbiamo la probabilità condizionata, ovvero quella che si verifichi un dato evento sapendo a priori
che se n’è verificato un altro: di seguito riportiamo l’espressione della probabilità che X assuma valore x
sapendo che Y ha assunto valore y
p ( x ∣ y ) = p ( X = x ∣Y = y ) (1.10)
La seguente equazione mette in relazione la probabilità congiunta con quella condizionata:
p ( x ∣y ) p (y) = p (y ∣ x ) p ( x ) = p ( x, y) (1.11)
Invece quella riportata di seguito relaziona la probabilità marginale con quella congiunta:
p( x ) = ∑ p( x, y) (1.12)
y∈𝒴
Ovviamente continua a valere la proprietà per la quale la somma di tutte le probabilità deve restituire 1:
∑ ∑ p( x, y) = 1 (1.13)
x ∈𝒳 y∈𝒴
12
CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE 13
Figura 1.4: Esempio delle relazioni che intercorrono fra le probabilità congiunte e marginali
ESEMPIO:
In gura 1.4 viene riportato un esempio delle relazioni che intercorrono fra le probabilità congiunte e
marginali. Si nota ad esempio che, per ogni colonna ed ogni riga, sommando le probabilità congiunte
otteniamo le probabilità marginali segnate, appunto, a margine della tabella. Sfruttando la relazione
1.11 possiamo ad esempio provare a calcolare la probabilità condizionata:
p ( x1 , y2 ) 1/2
p ( x1 , y2 ) = p ( x1 ∣ y2 ) p ( y2 ) ⇒ p ( x1 ∣ y2 ) = = =1
p ( y2 ) 1/2
Guardando la tabella, d'altronde, sappiamo che la probabilità che X e Y assumano contempora-
neamente valori x2 e y2 è nulla: quindi, se si palesa l'evento y2 , sicuramente si sarà vericato
x1 .
y x y
= − ∑ ∑ p ( x, y) log2 p ( x ∣y )
x y | {z }
= p(y) p( x ∣y )
5 Ernesto Cesàro (Napoli, 12 marzo 1859 - Torre Annunziata, 12 settembre 1906) è stato un matematico italiano, noto per i suoi
13
14 CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE
∙ prima proprietà:
H ( X, Y ) = H ( X ∣Y ) + H (Y ) = H (Y ∣ X ) + H ( X )
Dimostrazione:
∙ seconda proprietà: l’incertezza che abbiamo sulla variabile X data la variabile Y è non superiore
all’incertezza che abbiamo sulla sola X. Si ha ovvero:
Dimostrazione:
( )
− ∑ ∑ p ( x, y) log2 p ( x ∣y ) − − ∑ p ( x ) log2 p ( x ) ⩽0
x y x
| {z } | {z }
H ( X ∣Y ) H (X)
1 1
∑ ∑ p (x, y) log2 p (x ∣y ) − ∑ ∑ p (x, y) log2 p (x) ⩽ 0
x y x y
| {z }
p( x )
( )
p (y) 1
∑ ∑ p (x, y) log2 p (x, y) − log2 p (x) ⩽ 0
x y
( ) ( )
p (y) p ( x ) p (y) p ( x )
∑∑ p ( x, y ) log 2 p ( x, y ) ⩽ log 2 ∑∑
e p ( x, y )
p ( x, y)
− 1 =
x y x y
= log2 e ∑ ∑ p (y) p ( x ) − p ( x, y) = 0
x y
| {z }
=0
∙ terza proprietà (chain rule, regola della catena): consideriamo tre variabili aleatorie X1 , X2 , X3 . Allora
si ha, applicando due volte la chain rule:
H ( X1 , X2 , X3 ) = H ( X1 ∣ X2 , X3 ) + H ( X2 , X3 ) = H ( X1 ∣ X2 , X3 ) + H ( X2 ∣ X3 ) + H ( X3 ) (1.16)
Possiamo, volendo, iterare il procedimento e considerare k variabili aleatorie (e, infine, applicare la
seconda delle nostre proprietà):
k k
H ( X1 , X2 , . . . , X k ) = ∑ H ( X i ∣ X i − 1 , X i − 2 , . . . , X1 ) ⩽ ∑ H ( X i ) (1.17)
i =1 i =1
k
La sommatoria ∑ H nel secondo passaggio non deve turbare: il risultato è esattamente l’estensione
i =1
della 1.16 perché l’addizione è commutativa. Era scontato? Scusate.
14
CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE 15
H ( X, Y ) ≤ H ( X ) + H (Y ) (1.18)
A parole: l’incertezza sulla coppia non può essere superiore a quella che abbiamo guardando se-
paratamente gli elementi (nella coppia, infatti, possono esservi regole o legami che diminuiscono
l’incertezza). Generalizzando:
k
H ( X1 , X2 , X3 , . . . , X K ) ≤ ∑ Xi (1.19)
i =1
ESEMPIO:
Consideriamo nuovamente la gura 1.4 e facciamo qualche calcoletto7 :
∙ entropia di X : è l'entropia di una variabile bernoulliana con probabilità p = 1/4. Essendo
un'entropia notevole si scrive direttamente
( )
1
H (X) = ℋ
4
∙ entropia congiunta:
1 1 1 3
H ( X, Y ) = log2 4 + log2 4 + log2 2 + 0 =
4 4 2 2
p ( x, y1 ) p ( x, y1 )
H ( X ∣Y = y1 ) = − ∑ p ( x ∣y1 ) log2 p ( x ∣y1 ) = − ∑ log2 =
x x p ( y1 ) p ( y1 )
⎛ ⎞
p( x1 ,y1 ) p( x2 ,y1 )
z}|{ z}|{ ( )
⎜ 0, 25 0, 25 0, 25 0, 25 ⎟ 1 1
= −⎜ log2 + log2 ⎟=− (−1) + (−1) = 1
⎜ ⎟
⎝ 0, 5 0, 5 0, 5 0, 5 ⎠ 2 2
p ( x, y2 ) p ( x, y2 )
H ( X ∣Y = y2 ) = − ∑ p ( x ∣y2 ) log2 p ( x ∣y2 ) = − ∑ log2 =
x x p ( y2 ) p ( y2 )
⎛ ⎞
p( x1 ,y2 )
z}|{
⎜ 0, 5 0, 5 ⎟
= −⎜ log2 + 0⎟ = 0 ⇒ non c'è incertezza!
⎜ ⎟
⎝ 0, 5 0, 5 ⎠
potrebbero turbarci, visto che abbiamo detto (nella proprietà 2) che il condizionamento non aumenta
l'entropia. In realtà non abbiamo violato alcuna regola perché non è corretto considerare la sola y1 :
dovendo ragionare in termini medi, dobbiamo includere anche y2 :
( )
1
H ( X ∣Y ) = H ( X ∣Y = y1 ) p (y1 ) + H ( X ∣Y = y2 ) p (y2 ) = 0, 5 < ℋ
4
15
16 CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE
ESERCIZIO:
NOTA: non ho le soluzioni 'uciali' di questo esercizio. Quanto scritto di seguito costituisce la mia
soluzione, ma può essere errata!
Date due variabili aleatorie discrete X e Y con alfabeto 𝒳 = 𝒴 = {−1, 1} e distribuzione di probabilità
congiunta di tipo:
p( x, y) = ke βxy
1. Determinare la costante k.
Siccome si deve avere che:
k ∑ ∑ e βxy = 1
x y
Allora:
( )
( ) ( ) ( ) 1
k∑ ∑e βxy
= k ∑ e− βx + e βx = k e− β + e β + e− β + e β = 2k e− β + e β = 1 ⇒ k =
x y x 2e− β + 2e β
Probabilità p(y):
( )
p(y) = k e− βy + e βy
I valori numerici sono riportati in tabella 1.1: si nota in particolare che le probabilità marginali hanno
distribuzione uniforme.
H ( X, Y ) ≤ H ( X ) + H (Y ) = 2
Svolgendo i calcoli:
= − ( p (1, −1) log2 p (1, −1) + p (1, 1) log2 p (1, 1) + p (−1, −1) log2 p (−1, −1) + p (−1, 1) log2 p (−1, 1)) =
( −β
e log2 e− β + e β log2 e β
( ) )
−β −β −β −β
= −k e log2 e + e log2 e + e log2 e + e log2 e
β β β β
=−
e− β + e β
16
CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE 17
ESERCIZIO:
NOTA: non ho le soluzioni 'uciali' di questo esercizio. Quanto scritto di seguito costituisce la mia
soluzione, ma può essere errata!
Due variabili aleatorie discrete X1 e X2 sono caratterizzate da distribuzioni p1 ( x ) e p2 ( x ) e da alfabeti
𝒳1 = {1, . . . , m}
𝒳2 = {m + 1, . . . , n}
A partire da queste due si denisce una terza variabile aleatoria:
X1 con probabilità α
{
X=
X2 con probabilità 1 − α
Si chiede di:
1. Determinare la distribuzione di X, detta p(x), in funzione di α, p1 (x) e p2 (x).
Risultato:
p( x ) = αp1 ( x ) + (1 − α) p2 ( x )
17
18 CAPITOLO 1. INTRODUZIONE ALLA TEORIA DELL’INFORMAZIONE
18
Capitolo 2
Intendiamo con questo sorgenti tempo-discrete (vedi figura 2.1); per ipotesi supporremo che le variabili
aleatorie (simboli) emesse dalla sorgente posseggano tutti lo stesso alfabeto e che la distribuzione p( x )
(probability mass function) per tali variabili non muti nel tempo. Chiameremo quindi questo caso DMS
(Discrete Memoryless Source) in quanto:
∙ la p( x ) è tempo-invariante.
In particolare, le variabili aleatorie vengono dette i.i.d. (indipendenti e identicamente distribuite) così che
possiamo scrivere:
( ) M ( ) M ( )
p X n1 = x (1) , X n2 = x (2) , . . . , X n M = x ( M ) = ∏p Xni = x (i ) = ∏p x (i )
i =1 i =1
{ (2.1)
ni → istante d’osservazione
x (i) → uno dei possibili valori dell’alfabeto
H ( X1 ) = − ∑ p ( x ) log2 p ( x )
x
H ( X2 ) = H ( X1 ) = H ( X )
Si noti che nel caso DMS ha senso la notazione H ( X ), la quale non indica un preciso istante:
H ( X ) viene detta entropia di una DMS e indica quantitativamente l’informazione mediamente portata
(trasmessa) da un simbolo.
19
20 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
H ( X (K ) )
= H (X) (2.2)
K
Rimuovendo l’ipotesi di mancanza di memoria1 , ma mantenendo quella di stazionarietà, abbiamo
invece:
( ) !! K ( )
H X ( K ) = H ( X1 , X2 , . . . , X K ) < ∑ H ( X i ) = K ⋅ H ( X ) ⇒ H X ( K ) < K ⋅ H ( X )
i =1
( )
H X (K )
< H (X)
| K
{z } | {z }
Entropia/simbolo (caso NO memoria)
Entropia/simbolo (caso con memoria)
La presenza di memoria ha fatto calare l’entropia: ciò equivale ad affermare che, all’interno di un vettore
(cioè di un supersimbolo), un simbolo è meno incerto se c’è memoria.
∙ la seconda definizione si ricava col calcolo dell’entropia di un simbolo molto ’lontano’ una volta noti
tutti i precedenti:
′
H∞ ( X ) = lim H ( Xk ∣ Xk−1 Xk−2 . . . X1 ) (2.4)
k→∞
Dimostrare che il secondo limite esiste è relativamente facile e lo si fa sfruttando in maniera astuta l’ipotesi
di stazionarietà. Sicuramente possiamo scrivere
0 ⩽ H ( X k ∣ X k − 1 X k − 2 . . . X1 ) ⩽ H ( X k ∣ X k − 1 X k − 2 . . . X2 )
| {z }
Un simbolo in meno ( X1 )!
in quanto l’entropia è sempre maggiore o uguale zero e, rimuovendo un simbolo (in questo caso X1 ), non
può che aumentare (o al limite rimanere costante) visto che la presenza di X1 , unitamente al fatto che
c’è memoria, costituiva un’informazione in più nell’ambito della nostra sequenza. Se la nostra sorgente è
1 Le variabili aleatorie smettono di essere indipendenti fra loro.
20
CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE 21
stazionaria, i pedici temporali possono essere amabilmente traslati di una posizione senza che si modifichi
il risultato:
H ( X k ∣ X k − 1 X k − 2 . . . X2 ) = H ( X k − 1 ∣ X k − 2 X k − 3 . . . X1 )
| {z }
Traslazione di una posizione
Ora possiamo immaginare di iterare questi passaggi, rimuovendo di volta in volta un simbolo e successi-
vamente traslando2 ; l’entropia, ad ogni rimozione, sarà sempre ≤ rispetto al passo precedente: abbiamo
quindi una successione di elementi non decrescenti e finiti, cosicché esiste il limite. I due limiti, inoltre,
coincidono: possiamo dimostrarlo tramite la chain rule (vedi la 1.17) e la regola di Cesàro in quanto si ha,
portando k all’infinito3 :
( )
H X (k) 1 k Cesa ro
= ∑ H ( Xi ∣ Xi−1 . . . X1 ) −−−−→ H∞ ′
(X)
k k i =1
0 ⩽ H∞ ( X ) ⩽ H ( X ) ⩽ log2 L (2.7)
Come abbiamo già più volte sottolineato, il segno ≤ fra H∞ ′ ( X ) e H ( X ) diventa un = nel caso senza
memoria; il segno ≤ fra H ( X ) e log2 L, invece, diventa un = nel caso di distribuzione uniforme (simboli
tutti equiprobabili): tale tipologia di p.d.f.4 è infatti quella che massimizza l’entropia e la porta al suo
valore limite.
Concludendo, si ha massimo flusso informativo in caso di:
∙ assenza di memoria;
Hmax − H∞ ( X ) H∞ ( X )
ℛ= = 1− ⩽1 (2.8)
Hmax log2 L
Come si può notare dalla formula, questo parametro è compreso fra 0 e 1 (compresi): il numeratore può
inoltre essere scritto nel seguente modo
due effetti provocano la ridondanza!
z }| {
Hmax − H∞ ( X ) = Hmax − H ( X ) + H ( X ) − H∞ ( X ) (2.9)
| {z } | {z }
dovuto alla non equiprobabilità legato alla memoria della sorgente
Nel caso particolare di Hmax = H∞ ( X ) i simboli sono indipendenti ed equiprobabili: infatti, nella 2.9,
entrambi i contributi messi in evidenza diventano pari a zero.
Hmax − H ( X ) + H ( X ) − H∞ ( X ) =0⇒ℛ=0
| {z } | {z }
equiprobabili ( Hmax = H ( X )) sorgente senza memoria ( H ( X )= H∞ ( X ))
2 FFffatto?
3 Il termine H ( Xi ∣ Xi−1 . . . X1 ) è l’ak dell’enunciato della regola di Cesaro.
4 Probability Density Funciton.
21
22 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
Tramite il parametro ridondanza possiamo fare interessanti paragoni fra due sorgenti; consideriamo, a
titolo d’esempio, due sorgenti tempo-discrete: la prima sia una sorgente avente symbol-rate Bs1 e entropia
H∞ ( X ), mentre la seconda sia una sorgente ’ottima’ (generatrice di simboli indipendenti ed equiprobabili)
con symbol-rate Bs1 e entropia massima (log2 L). Avremo, con semplicissime considerazioni:
}[
sorgente 1 → Bs1 ⋅ H∞ ( X )
]
Shannon
sorgente 2 → Bs2 ⋅ log2 L sec
∙ la sorgente 1 diventa equivalente alla sorgente ’ideale’, ed emette quindi massimo contenuto infor-
mativo, solo se H∞ ( X ) = Hmax ;
∙ se la sorgente è un po’ ridondante (entropia non massima) sarà necessario emettere più simboli, e
quindi più bit, per ottenere la stessa informazione della sorgente ottima (che ha massima efficienza).
ESEMPIO:
Consideriamo lingua italiana: il nostro alfabeto ha 22 simboli (21 lettere più lo spazio). Se essi fossero
indipendenti ed equiprobabili, l'entropia della nostra lingua sarebbe:
Sh
Hmax = log2 L = 4, 46
simbolo
Questo signica che servirebbero in media 4,46 bit per rappresentare ciascun carattere o, anche, che
ciascun carattere porterebbe un quantitativo d'informazione pari a 4,46 Shannon. In realtà le lingue
umane non possono avere entropia massima in virtù del fatto che esistono regole grammaticali e
regole lessicali: la loro presenza rende i caratteri non equiprobabili e questo, di conseguenza, abbassa
l'entropia
H < Hmax
Considerando ad esempio il testo dell'Inferno di Dante, l'entropia risulta essere pari a 3,97 Shannon per
simbolo, quantitativo sensibilmente inferiore rispetto ai 4,46 teorici. Quanto detto potrebbe generare,
nel cuore dell'impulsivo lettore, un moto di indignazione e protesta verso il linguaggio umano, così
dannatamente ridondante: non vi è tuttavia da scaldarsi visto che, in realtà, ciò ci permette di
correggere gli errori sulla base della storia passata dei simboli. Chiunque, infatti, potrebbe capire che
in questa frase
Oggi avevo sete e ho bevuto dell'aqua.
manca la lettera 'c'. Perché possiamo dirlo? Perché la storia passata dei simboli, ovvero le lettere
precedenti, ci suggeriscono che la parola non riconosciuta si riferisce a qualcosa di liquido ('Avevo
sete') che contiene le lettere 'a', 'q' e 'u'. Inoltre, sappiamo che è molto probabile trovare una 'c'
prima della 'q' (simboli non equiprobabili !) per cui il gioco è fatto!
22
CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE 23
Indicheremo con C ( x ) una parola di codice, ovvero una stringa binaria lunga l ( x ) bit. L’operazione di
codifica (codifica di sorgente) dev’essere chiaramente invertibile dal ricevente per poter fruire dell’informa-
zione. Una delle condizioni che si deve avere perché il codice sia invertibile (necessaria ma non sufficiente)
è che a due simboli diversi corrispondano due codeword diverse (codice non singolare):
( )
C ( xi ) ∕ = C x j , ∀i ∕ = j (2.10)
Un codice non singolare potrebbe non essere decodificabile in maniera univoca (e quindi non invertibi-
le, vedi esempio di seguito); si parla invece di codice univocamente decodificabile (invertibile) se, data una
sequenza qualunque, si ha:
C ( x1 ) , C ( x2 ) , . . . , C ( x M ) ⇔ x1 , x2 , . . . , x M (2.11)
univocamente
Eventualmente, le parole di codice possono essere di lunghezza diversa (codice a lunghezza variabile): si
definisce allora la lunghezza media di un codice:
Inoltre, un codice si dice a prefisso (o codice istantaneo)5 se nessuna parola di codice C ( x ) è prefisso
di un’altra. Tali codici sono sempre univocamente decodificabile. Questo aspetto verrà approfondito nel
paragrafo 2.5.1.
ESEMPIO:
Si osservi la tabella 2.1. Il codice 1 è non singolare, in quanto ad ogni simbolo è associata una
codeword diversa. Stesa cosa possiamo dire dei codici 2 e 3 (i quali, come vedremo di seguito, hanno
un'ulteriore e importante proprietà). La lunghezza media del codice 1 è:
1 1 1 1 3
1⋅ +2⋅ +2⋅ +2⋅ =
2 4 8 8 2
5 In quanto la codifica è istantanea.
23
24 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
Il codice 1 non è tuttavia invertibile perché non è univocamente decodicabile : per esempio
1001
potrebbe contemporaneamente essere x1 x2 x1 oppure x4 x3 , ma non possiamo saperlo. Come si può fa-
cilmente vericare, i codici 2 e 3 sono invece univocamente decodicabili in quanto non vi è ambiguità.
In particolare:
∙ il codice 2 è a presso in quanto nessuna codeword è presso di altre. Inoltre esso ha lunghezza
media
1 1 3 7
2⋅ +2⋅ +2⋅ =
2 4 8 4
Tale lunghezza ci soddisfa? Abbastanza perché è mediamente inferiore a quella ipotetica (si
poteva supporre che con 4 simboli avremmo avuto bisogno di 2 bit per simbolo), visto che
abbiamo usato un diabolico trucco, cioè quello di dare alle parole più probabili una lunghezza
minore!
∙ il codice 3 è decodicabile, ma dobbiamo per forza attendere che nisca la sequenza per poter
comprendere quale sia stata la parola codicata (cosa che non accadeva nel codice 2): ad
esempio, potremmo confondere x2 con x3 se non trasmettiamo l'ultimo bit di quest'ultima
parola di codice.
poi sono soltanto 2), etc. . . Generalizzando, ogni albero ha sempre 2k potenziali nodi di ordine k.
lengths. Its applications to prefix codes and trees often find use in computer science and information theory. More specifically, Kraft’s inequality
limits the lengths of codewords in a prefix code: if one takes an exponential function of each length, the resulting values must look like a probability
mass function. Kraft’s inequality can be thought of in terms of a constrained budget to be spent on codewords, with shorter codewords being more
expensive.
∙ If Kraft’s inequality holds with strict inequality, the code has some redundancy.
∙ If Kraft’s inequality holds with strict equality, the code in question is a complete code.
∙ If Kraft’s inequality does not hold, the code is not uniquely decodable.
24
CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE 25
L
∑ 2− li ≤ 1 (2.13)
i =1
Dimostrazione: iniziamo col dimostrare la necessarietà. Il codice a prefisso con parole di lunghezza
l1 ≤ l2 ≤ l3 ≤ . . . ≤ l L può essere generato da un albero che si estende al massimo fino all’ordine l L , con
2l L potenziali nodi. Se però posizioniamo una parola di codice all’ordine li andiamo in realtà ad eliminare
tutti i potenziali rami ’figli’ di quella parola, i quali sono 2l L −li . Abbastanza ovvio è il fatto che il numero
di nodi che andremo in tutto a eliminare non potrà essere maggiore del numero totale di nodi 2l L :
L
∑ 2l L − li ⩽ 2l L
i =1
Se ora dividiamo per 2l L quel che otteniamo è la disuguaglianza di Kraft. Ora passiamo a dimostrare la
sufficienza: supponiamo che le nostre lunghezze abbiano soddisfatto la disuguaglianza. . . riusciamo ora
a costruire un codice a prefisso? Immaginiamo di avere l’albero completo e di posizionare presso un suo
nodo una certa parola di codice C1 di lunghezza l1 . Così facendo avremo seccato 2l L −l1 nodi, ovvero il
2 l L − l1
= 2 − l1 %
2l L
dei nodi di ordine massimo (cioè i più ’figli di tutti’7 ). Questo implica che sarà rimasta una percentuale
pari a
( 1 − 2 − l1 ) %
di nodi di ordine massimo. Possiamo ora posizionare una parola di lunghezza l2 ? Certamente sì perché
Kraft ci garantisce che sicuramente un nodo di lunghezza l2 sarà sopravvissuto (sono sopravvissuti quelli
di ordine massimo, ovvero i figli, quindi sicuramente sono ’vivi’ anche quelli di ordine l2 , cioè i padri).
Giunti qui ci siamo mangiati già
2 − l1 + 2 − l2
nodi di ordine massimo (in percentuale). Questa quantità è però inferiore ad 1 per la disuguaglianza di
Kraft, quindi esisteranno ancora dei nodi di ordine l L (massimo) e quindi anche nodi di ordine inferiore
(padri): esisterà ad esempio un nodo di ordine l3 per posizionare la terza parola, la quale farà seccare
2l L −l3 nodi di ordine massimo. Rimarrà quindi il
2 − l1 + 2 − l2 + 2 − l3
percento dei nodi di ordine massimo. Siccome la disuguaglianza di Kraft è tuttavia ancora soddisfatta,
sarà presente un nodo-padre di ordine l4 per la quarta parola visto che alcuni nodi-figli di ordine massimo
sono ancora vivi, etc. . . Al passo k la disuguaglianza di Kraft sarà ancora soddisfatta e varrà
k
∑ 2− li ⩽ |{z}
1
i =1 totale
| {z }
% nodi (ordine max) morti
Quindi i nodi sono sempre sufficienti per poter posizionare le nostre parole di codice!
Concludendo, la disuguaglianza di Kraft ci dice come prendere le lunghezze delle parole; tal McMil-
lan ha dimostrato che qualunque codice univocamente decodificabile ha lunghezze che soddisfano tale
disuguaglianza.
7 Detto così è ambiguo eh. . . ?
25
26 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
Mostriamo che tali codici soddisfano la disuguaglianza di Kraft verificando la prima parte della disugua-
glianza soprastante:
1 log 1 1
l ( x ) ⩾ log2 ⇒ 2l ( x ) ⩾ 2 2 p( x ) ⇒ 2l ( x ) ⩾ ⇒ 2− l ( x ) ⩽ p ( x )
p( x ) p( x )
∑ 2− l ( x ) ⩽ ∑ p ( x ) = 1
x x
ESEMPIO:
Se proviamo a costruire il relativo codice a presso scopriamo che una possibile soluzione è quella del
codice avente albero come quello in gura 2.3 con probabilità C( x1 ) = 0, 5; C ( x2 ) = 0, 25; C ( x3 ) =
0, 125; C ( x4 ) = 0, 125.
1 1
H ( X ) − E [l ( x )] = ∑ p (x) log p (x) − ∑ p (x) l (x) = ∑ p (x) log p (x) − ∑ p (x) log2 2l ( x) =
x x x x | {z }
=l ( x ) Che trucco!
[ ]
1 2− l ( x ) 2− l ( x )
= ∑ p ( x ) log = ∑ p ( x ) log ⩽ log2 e ∑ p ( x ) −1
x p ( x ) 2l ( x ) x p (x) x p (x)
elettronica e di scienza dell’informazione presso il Massachusetts Institute of Technology. Fano è noto prevalentemente per il suo
lavoro sulla teoria dell’informazione, avendo sviluppato (in collaborazione con Claude Shannon) i codici di Shannon-Fano. Nei
primi anni ’60, fu partecipe dello sviluppo dei sistemi di computer in time-sharing ed ha prestato servizio come direttore del Project
MAC del MIT fin dalla sua fondazione nel 1963 e fino al 1968.
26
CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE 27
già dimostrata nel paragrafo 1.3.2. Ora possiamo applicare la disuguaglianza di Kraft (verificata per
ipotesi) e scrivere:
⩽0
z
⎛ }| ⎞{
[ ]
2− l ( x ) ( ) ⎜ ⎟
log2 e ∑ p ( x ) − 1 = log2 e ∑ 2−l (x) − p ( x ) = log2 e ⎜ ∑ 2− l ( x ) −1⎟ ⩽ 0
⎜ ⎟
x p ( x ) x | {z } ⎝ x ⎠
⩾0 | {z }
⩽1 PER KRAFT!
Dimostrazione (2∘ parte): troviamo ora almeno un codice che soddisfi la 2.16. Scegliamo ad esempio
il codice di Shannon-Fano (equazione 2.14) e moltiplichiamo a sinistra e a destra per p( x ):
1 1 1
log2 ⩽ l ( x ) < log2 + 1 ⇒ p ( x ) l ( x ) < p ( x ) log2 + p (x)
p (x) p (x) p (x)
1
∑ p (x) l (x) < ∑ p (x) log2 p (x) + ∑ p (x)
x x x
| {z } | {z } | {z }
E[l ( x )] H (X) 1
E [l ( x )] < H ( X ) + 1
Perfetto!
Si tenga tuttavia presente che i codici di Shannon-Fano non sono i codici ottimi: osserviamo infatti il
seguente
ESEMPIO:
Abbiamo una sorgente binaria che emette i due simboli in tabella 2.2. Secondo Shannon-Fano do-
vremmo usare ben 4 bit d'informazione per la parola meno probabile, principio che a prescindere non
è sbagliato in quanto conviene usare le parole di codice più corte per i simboli più probabili, ma che in
questo caso si rivela una scelta piuttosto stupidina9 in quanto basterebbe un unico bit per codicare
sia x̃1 che x̃2 .
p( x ) I (x) l ( x ) (Shannon-Fano)
x̃1 0,1 3,32 4 (!!!)
x̃2 0,9 0,15 1
27
28 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
rappresentazione di ciascun simbolo ed è stato dimostrato che è il più efficiente sistema di compressione
di questo tipo: nessun’altra mappatura di simboli in stringhe binarie può produrre un risultato più breve
nel caso in cui le frequenze di simboli effettive corrispondono a quelle usate per creare il codice. Oggi la
codifica di Huffman è spesso usata come complemento di altri metodi di compressione: sono esempi il
Deflate (l’algoritmo di PKZIP, e dei successori ZIP e WinRar) e codec multimediali quali JPEG ed MP3.
I passi per costruire un codice di Huffman sono 3:
1. si ordinano le probabilità in ordine decrescente;
2. si uniscono le due minori in un nuovo nodo (unico) e a questo nodo viene associata la somma delle
probabilità;
3. si ripetono i punti 1 e 2 fino all’esaurimento.
Iterando questo procedimento otterremo in men che non si dica il grafico binario che garantisce la
lunghezza media del codice migliore in assoluto.
Nella codifica a blocchi, invece dei simboli, codifichiamo gruppi di simboli ovvero dei supersimboli
(vedi figura 2.4). I limiti teorici riguardanti il numero medio di bit per supersimbolo rimangono però
invariati rispetto ai casi visti fin’ora:
( ) [ ( )] ( )
H X (k) ⩽ E l X (k) < H X (k) + 1 (2.18)
Il primo (entropia della sorgente) e il secondo termine (numero medio di bit per simbolo) vengono a
coincidere; codificando i blocchi possiamo perciò avvantaggiarci della memoria del codice e avvicinarci
sempre di più al limite ’destro’ della nostra doppia disequazione (1/k sempre più piccolo).
Se poi aggiungiamo l’ipotesi di sorgente DMS si ha che:
H ( X (k) ) = kH ( X ) (2.20)
28
CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE 29
ESEMPIO:
Sorgente binaria senza memoria con la distribuzione di probabilità mostrata in tabella 2.3. L'entropia
p( x )
x1 0,1
x2 0,9
è pari a
H ( X ) = 0, 47
Shannon per simbolo. Non abbiamo tuttavia altra scelta che usare un bit per simbolo, visto che
abbiamo scelto la codica simbolo-per-simbolo. . . La cosa è abbastanza deludente perché siamo ben
lontani dall'entropia H ( X ), ma che succede se codichiamo supersimboli costituiti da due simboli
'elementari' (tabella 2.4)?
p ( X (2) )
x1 x1 0,01
x1 x2 0,09
x2 x1 0,09
x2 x2 0,81
Ora possiamo costruire il nostro alberino post-natalizio con il metodo di Human (vedi gura
2.5): calcolando la lunghezza media otteniamo 1, 29 bit per supersimbolo, ovvero 1, 29/2 = 0, 645
bit/simbolo, risultato molto più vicino a H ( X ) e sicuramente più soddisfacente dell'1 bit/simbolo un
po' schifoso trovato con la codica simbolo-per-simbolo.
29
30 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
in generale prestazioni inferiori (tali tipologie di codici si dicono universali), è quello di Lempel-Ziv che,
data la grande versatilità, è uno standard de facto per la compressione di dati. Tale procedimento è infatti
utilizzato nella codifica delle immagini in formato GIF (e, facoltativamente, nei file TIFF) ed è il risultato
delle modifiche apportate nel 1984 da Terry Welch ai due algoritmi sviluppati nel 1977 e nel 1978 da Jacob
Ziv e Abraham Lempel, e chiamati rispettivamente LZ77 e LZ78. Funziona costruendo un dizionario nel
quale sono elencate le diverse frasi (generalmente di lunghezza diversa) ottenute scorrendo la sorgente
(supposta binaria in questo caso). Ciascuna frase è data dalla concatenazione di una precedente con una
cifra binaria (1 oppure 0). Successivamente si codificano le frasi con parole di lunghezza fissa, che indica-
no la posizione in binario della frase precedente seguita dal nuovo bit della sorgente. Si può dimostrare
che la codifica di lunghe sequenze di n bit è efficiente, cioè il numero di bit richiesto si avvicina a nH∞ ( X ).
ESEMPIO:
Abbiamo la sequenza:
101011110101111100100111011100001101100000101
La suddivisione in frasi dà
1-0-10-11-110-101-111-100-1001-1101-1100-00-11011-000-001-01
cioè 16 diverse frasi ciascuna codicabile con 5 bit: i primi 4 sono l'indice della parola del dizionario che
costituisce tutti i bit tranne quello più a destra (il meno signicativo, per intenderci), mentre l'ultimo
è il bit che bisogna aggiungere alla parola indicata dai primi 4 bit per ottenere quella corrente. Ad
esempio:
Posizione nel dizionario | Frase nel dizionario | Codeword
0000 | - | -
0001 | 1 | 0000 1
0010 | 0 | 0000 0
0011 | 10 | 0001 0
0100 | 11 | 0001 1
La frase 10 si ottiene concatenando la frase di posizione 0001 (cioè 1) con uno 0 (1#0 = 10), mentre
la frase 11 si ottiene concatenando quella di posizione 0001 (sempre 1) con un 1 (1#1=11).
10 La legge dei grandi numeri, detta anche legge empirica del caso oppure teorema di Bernoulli (in quanto la sua prima formu-
lazione è dovuta a Jakob Bernoulli), descrive il comportamento della media di una sequenza di n variabili casuali indipendenti e
caratterizzate dalla stessa distribuzione di probabilità (n misure della stessa grandezza, n lanci della stessa moneta ecc.) al tendere
ad infinito della numerosità della sequenza stessa (n). In altre parole, grazie alla legge dei grandi numeri, possiamo fidarci che la
media che calcoliamo a partire da un numero sufficiente di campioni sia sufficientemente vicina alla media vera.
30
Capitolo 3
Se il codificatore di sorgente è ’di qualità’ e ha fatto il suo lavoro (quindi non l’abbiamo comprato al
Lidl) non vi sarà più molta ridondanza all’uscita. Non abbiamo però finito il lavoro: dobbiamo trasportare
questi bit a destinazione! Purtroppo il canale che tali bit dovranno attraversare è tutt’altro che ideale e
favorisce intrinsecamente, al suo interno, delle transazioni probabilistiche che si manifestano in disturbi
(interferenze, rumori, etc. . . ). Il canale quindi non è deterministico: non sappiamo cosa esce, ma sappiamo
cosa potrebbe uscire.
Detto anche DMC (Discrete Memoryless Channel) ha la caratteristica si poterci far osservare anche solo
un simbolo alla volta, senza dover specificare l’indice temporale nelle varie formule in cui compare l’ope-
ratore di probabilità: per questo, considerando lo schema in figura 3.1, possiamo ad esempio dire che Yk
dipenderà soltanto da Xk e da nessun’altro simbolo.
Volendo, possiamo graficare la probabilità che un certo simbolo X generi il relativo Y in uscita dal
canale facendo uso di un grafo bipartito, dove ad ogni freccia sono associate delle probabilità (vedi figura
3.2). Tutte le probabilità di transizione dal nodo generico i al nodo generico j possono perciò essere poste
in una matrice P, detta matrice di transizione, i cui elementi saranno molto semplicemente
{ }
pij = p Y = y j ∣ X = xi (3.1)
Supponiamo di conoscere solamente la P di una certa sorgente: trasmettiamo i nostri simboli X at-
traverso il canale e vediamo che accade alle Y. Ebbene, si può dimostrare che si ha una riduzione di
incertezza legata all’osservazione del canale:
H ( X ∣Y ) ≤ H ( X ) (3.2)
Tale riduzione di incertezza1 può essere quantificata con un parametro che chiameremo informazione
mutua:
I ( X; Y ) = H ( X ) − H ( X ∣Y ) (3.3)
Com’è facile accorgersi, questo parametro viene quantificato in Shannon per simbolo. Inoltre, soggiace
alle seguenti proprietà:
1 Come sappiamo, l’incertezza e l’informazione sono entrambe legate al concetto di entropia.
31
32 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
H ( X ) − H (Y ∣ X ) = H ( X ) − [ H ( X, Y ) − H (Y )] = H (Y ) − H ( X ∣Y )
Provando a dare in pasto al canale più informazione rispetto alla sua capacità inevitabilmente perde-
remo qualcosa: la capacità è infatti un metro di misura per la massima quantità di informazione che
possiamo convogliare nel nostro canale.
Nei prossimi paragrafi ricaveremo la capacità di canale in alcuni casi notevoli.
32
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 33
I ( X; Y ) = H ( X ) − H ( X ∣Y ) = H ( X ) (3.5)
in quanto l’entropia condizionata è nulla. La capacità del canale è perciò quella massima possibile
(eventualità assolutamente plausibile per qualcosa di ideale, come abbiamo in questo caso):
Prendendo lo stesso grafo del canale noiseless e aggiungendo qualche nuova transizione (rompendo cioè
la corrispondenza 1-a-1 e aggiungendo del rumore), la capacità non potrà far altro che calare.
Detto anche BSC (Binary Symmetric Channel), è forse il caso notevole per eccellenza (vedi figura 3.4).
Calcoliamo l’informazione mutua:
⎡ ⎤
ℋ( p) ℋ( p)
z }| { z }| {
I ( X; Y ) = H ( X ) − ( X ∣Y ) = H ( X ) − ⎣ p (y1 ) p ( X ∣Y = y1 ) + p (y2 ) p ( X ∣Y = y2 )⎦ = H ( X ) − ℋ( p)
⎢ ⎥
| {z }
Caso della variabile bernoulliana!
(3.7)
Ora siamo pronti a ricavare anche la capacità:
I ( X; Y ) = H ( X ) − H ( X ∣Y ) = H (Y ) − H (Y ∣ X ) =
⎡ ⎤
stessa prob. per x1 e x2
z }| {
= H ( X ) − ⎣ p ( y1 ) H ( X ∣Y = y 1 ) + p ( y2 ) H ( X ∣Y = y 2 ) + p (e) H ( X ∣Y = e )
⎢ ⎥
⎦
| {z } | {z } | {z }
=0 (il risultato è certo: x1 ) =0 (il risultato è certo: x2 ) =1: caso di massima incertezza
(3.9)
33
34 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
Calcoliamo p(e):
⎛ ⎞
p ( e ) = p ( e ∣ x1 ) p ( x1 ) + p ( e ∣ x2 ) p ( x2 ) = q ⎝ p ( e ∣ x1 ) + p ( e ∣ x1 ) ⎠ = q
| {z } | {z } | {z }
=q =q =1
3.2.4 Canale Z
Si faccia riferimento alla figura 3.10 e si abbiano le seguenti probabilità a priori:
P ( X = x1 ) = 1 − π
P ( X = x2 ) = π
34
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 35
I ( X; Y ) = H (Y ) − H (Y ∣ X )
H (Y ∣ X ) = H (Y ∣ X = x 1 ) p ( x 1 ) + H (Y ∣ X = x 2 ) p ( x 2 ) = H (Y ∣ X = x 2 ) p ( x 2 ) = π ℋ ( p )
| {z } | {z } | {z }
=0, no incertezza! =ℋ( p) =π
p ( y2 ) = p ( y2 ∣ X = x1 ) p ( x1 ) + p ( y2 ∣ X = x2 ) p ( x2 ) = (1 − p ) π
| {z } | {z } | {z }
=0 (impossibile) =1− p =π
H (Y ) = ℋ ( p (y2 )) = ℋ ((1 − p) π )
Su p non possiamo agire, mentre possiamo mettere le mani su π: massimizziamo quindi la funzione
tramite quest’ultima variabile. Calcoliamo la derivata:
∂ f (π, p)
= 0 troviamo il massimo!
∂π
∂ f (π, p) ∂ ∂
= {ℋ [(1 − p)π ] − π ℋ( p)} = (ℋ [(1 − p)π ]) − ℋ( p)
∂π ∂π ∂π
Ora sfruttiamo la preziosissima regolina:
d 1−x
ℋ ( x ) = log2 (3.12)
dx x
Otteniamo:
∂ 1 − π (1 − p )
(ℋ [(1 − p)π ]) − ℋ( p) = (1 − p) log2 − ℋ ( p) = 0
∂π π (1 − p )
35
36 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
1 − π (1 − p )
(1 − p) log2 ℋ ( p)
π (1 − p )
1 − π (1 − p )
( )
(1 − p) log2 − (1 − p) log2 (1 − p) = − p log2 p − (1 − p) log2 (1 − p)
π | {z }
ℋ( p)
1 − π (1 − p )
( )
(1 − p) log2 = − p log2 p
π
1 − π (1 − p )
( )
p −
p
log2 =− log2 p = log2 p 1− p
π 1− p
1 − π (1 − p ) −
p
= p 1− p
π
p
−
1 − π ( 1 − p ) = p 1− p
1
π = π0 = p
−
1 − p + p 1− p
In definitiva, la capacità del canale Z è solo funzione di p e la sua espressione è più complicata nel caso di
canale simmetrico. Andando a graficare la capacità C (ottenuta inserendo come parametro π0 ) in funzione
otteniamo la figura 3.8.
C = max I ( X; Y ) = H (Y ) − H (Y ∣ X )
π
H (Y ∣ X ) = H (Y ∣ X = x 1 ) p ( x 1 ) + H (Y ∣ X = x 2 ) p ( x 2 ) = π ℋ ( p ) + ( 1 − π ) ℋ ( q )
| {z } | {z } | {z } | {z }
ℋ( p) π ℋ(q) 1− π
36
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 37
p ( y1 ) = p ( y1 ∣ X = x1 ) p ( x1 ) + ( y1 ∣ X = x2 ) p ( x2 ) = (1 − p ) π + (1 − π ) ε
| {z } | {z } | {z } | {z }
1− p π 1− π ε
Di conseguenza:
H (Y ) = ℋ[(1 − p)π + (1 − π )ε]
I ( X; Y ) = ℋ [π (1 − p) + (1 − π ) ε] − (π ℋ ( p) + (1 − π ) ℋ (ε))
| {z } | {z }
H (Y ) H (Y ∣ X )
Ora vogliamo trovare il massimo di questa funzione, visto che ci servirà per trovare il massimo del-
l’informazione mutua e quindi la capacità: per trovare il massimo sfruttiamo le ben note derivate e
scriviamo
∂
f (π, p, ε) = 0
∂π
1 − π (1 − p ) − ε (1 − π )
[(1 − p) − ε] log2 −ℋ ( p) + ℋ (ε) = 0
π (1 − p ) + ε (1 − π )
| {z }
d 1− x
d x ℋ( x )=log2 x
1 − π (1 − p ) − ε (1 − π ) ℋ ( p) − ℋ (ε)
log2 =
π (1 − p ) + ε (1 − π ) (1 − p ) − ε
ℋ( p)−ℋ(ε)
1 − π (1 − p ) − ε (1 − π )
= 2 (1− p)−ε ≜ γ ( p, ε)
π (1 − p ) + ε (1 − π )
Dopo svariati calcoli (che qui per brevità non riporteremo) si avrà quindi:
1 − ε (1 + γ )
π0 =
(1 − p − ε ) (1 + γ )
Ora sostituiamo π0 nell’espressione dell’informazione mutua ed ecco che abbiamo trovato la capacità del
canale non simmetrico.
I ( X; Y ) = ℋ [π0 (1 − p) + (1 − π0 ) ε] − π0 ℋ ( p) − (1 − π0 ) ℋ (ε)
Si può verificare che i calcoli sono stati fatti correttamente provando a imporre p = ε e appurando che il
risultato va a coincidere con il BSC.
37
38 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
ESERCIZIO:
Si vuole calcolare la capacità del canale indicato in gura 3.10: non è un canale banale in quanto la simmetria
può aiutarci solo parzialmente. Se chiamiamo per ipotesi Q la probabilità che all'ingresso del canale si presenti
x2 o x3
Q = p ( X = x2 ) = p ( X = x3 )
allora avremo che la probabilità di trasmissione di x1 sarà:
p( X = x1 ) = 1 − 2Q
Passiamo ora alla determinazione della capacità vera e propria:
C = max I ( X; Y ) = max{ H (Y ) − H (Y ∣ X )}
Q Q
Sostituendo:
H (Y ) = − p (y1 ) log2 p (y1 ) − 2Qlog2 Q = − (1 − 2Q) log2 (1 − 2Q) − 2Qlog2 Q
Ora possiamo ricavare l'espressione generale dell'informazione mutua:
I ( X; Y ) = H (Y ) − H (Y ∣ X ) = − (1 − 2Q) log2 (1 − 2Q) − 2Qlog2 Q − 2Qℋ ( p)
Ricordando ora la relazione notevole
d 1
log x =
dx 2 x ln 2
possiamo calcolare la derivata dell'informazione mutua al ne di ricavare il massimo di quest'ultima:
d d
I ( X; Y ) = {− (1 − 2Q) log2 (1 − 2Q) − 2Qlog2 Q − 2Qℋ ( p)} =
dQ dQ
2 1
= (1 − 2Q) + 2log2 (1 − 2Q) − 2Q − 2log2 Q − 2ℋ ( p) =
(1 − 2Q) ln 2 Q ln 2
= 2log2 (1 − 2Q) − 2log2 Q − 2ℋ ( p) = 0
38
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 39
Semplicando e riordinando:
log2 (1 − 2Q) − log2 Q − ℋ ( p) = 0
1 − 2Q
log2 = ℋ ( p)
Q
1 − 2Q 1
= 2ℋ( p) ≜ β ( p) ⇒ Q =
Q 2+β
Ora che abbiamo trovato il valore di Q che massimizza l'informazione mutua, possiamo andare a sostituirlo nella
relativa espressione per scoprire la capacità del canale (in funzione di β e quindi di p):
C = − (1 − 2Q) log2 (1 − 2Q) − 2Qlog2 Q − 2Qℋ ( p) =
( ) ( )
1 1 1 1 1
= − 1−2 log2 1 − 2 −2 log2 −2 ℋ ( p) =
2+β 2+β 2+β 2+β 2 + β | {z }
≜log2 β
( )
β β 2 1 2
=− log2 − log2 − log2 β =
2+β 2+β 2+β 2+β 2+β
( )β ( )2
1 β 1 1 1
=− log2 − log2 − log2 β2 =
2+β 2+β 2+β 2+β 2+β
[ ( )β ( )2 ]
1 β 1 2
=− log2 + log2 + log2 β =
2+β 2+β 2+β
[ ( )β ( )2 ] ( ) 2+ β
1 β β 1 β 2+β
=− log2 + log2 =− log2 = log2
2+β 2+β 2+β 2+β 2+β β
Come da tradizione, vediamo cosa succede se vediamo la cosa non simbolo per simbolo bensì a blocchi
di simboli (vedi figura 3.11). Allora in tal caso si ha:
I ( X (n) ; Y (n) ) ≤ n ⋅ C (3.13)
dove C è la capacità che si ha nel caso simbolo-per-simbolo.
Dimostrazione: l’informazione mutua intesa per supersimboli è definita come
( ) ( ) ( )
I X (n) ; Y (n) = H Y (n) − H Y (n) X (n)
39
40 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
Ora invece soffermiamoci sull’altro addendo: anche in questo caso possiamo sfruttare l’ipotesi di assenza
di memoria e i calcoli si rivelano abbastanza semplici.
( )
H Y (n) = H (Y1 Y2 Y3 . . . Yn ) ⩽ ∑ H (Yi )
i
I ( X; Z ) ≤ I (Y; Z )
(3.14)
I ( X; Z ) ≤ I ( X; Y )
Dimostrazione:
I ( X; Z ) = H ( Z ) − H ( Z ∣ X )
I (Y; Z ) = H ( Z ) − H ( Z ∣Y )
H ( Z ∣ X ) ⩽ H ( Z ∣Y )
Da qui capiamo che, per conoscere la Z, è più ’notevole’ la Y della X. Forti di questa informazione e
guardando le prime due definizioni di I ( X; Z ), I (Y; Z ) si ha immediatamente:
I ( X; Z ) ≤ I (Y; Z )
Osserviamo la figura 3.13: supponiamo di voler capire la X guardando la Y e, a tal proposito, infiliamo
un blocchetto decisore nella catena. Tale elemento funziona secondo alcuni criteri che per semplicità
40
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 41
considereremo alla stregua di una certa funzione g(). Chiameremo x̂ il simbolo che il decisore ha stimato
per X in un certo istante: chiaramente il DMC può aver indotto degli errori e quindi non sempre accadrà
che x = x̂. Sia quindi
pe = p( x̂ ∕= x )
H ( X ∣Y ) ≤ ℋ( Pe ) + Pe log2 ( Nx − 1) (3.15)
REGOLINA! ⇒ H ( X, Y ) = H ( X ∣Y ) + H (Y ) = H (Y ∣ X ) + H ( X )
(3.16)
H ( X, E ∣Y ) = H ( X ∣ E , Y ) + H ( E ∣Y ) = H ( E∣ X, Y ) + H ( X ∣Y )
Conoscere Y 3 equivale a conoscere X̂ (grazie al decisore): se conosciamo sia X che X̂ sappiamo con
certezza se c’è errore oppure no, quindi l’entropia associata a questo caso sarà nulla → H ( E∣ X, Y ) = 0.
Ora cerchiamo di sviluppare le espressioni dei due addendi che compaiono nella 3.16; secondo le regole
di base sull’entropia di variabili aleatorie si ha:
H ( E∣Y ) ≤ H ( E) = ℋ( Pe )
Infatti l’incertezza su E conoscendo Y sarà sicuramente minore o uguale di quella che abbiamo senza
nessuna informazione. Inoltre possiamo sviluppare H ( X ∣ E, Y ), cioè l’altro addendo:
H ( X ∣ E , Y ) = H ( X ∣ E = 1 , Y ) p ( E = 1) + H ( X ∣ E = 0 , Y ) p ( E = 0)
| {z } | {z }
Pe 1− Pe
H ( X ∣ E = 1, Y ) ≤ log2 Nx − 1
H ( X ∣Y ) + H ( E ∣ X, Y ) = H ( X ∣ E , Y ) + H ( E ∣Y ) ⩾ ℋ ( Pe ) + Pe log2 ( Nx − 1)
| {z } | {z } | {z }
=0 ⩾ Pe log2 ( Nx −1) ⩾ℋ( Pe )
3 Tale variabile aleatoria fa sempre parte della condizione nell’equazione 3.16. Per interpretare correttamente i calcoli bisogna
forzare la sua presenza a destra dell’operatore pipe (∣) e sfruttare le note regoline dell’entropia sulle altre due variabili aleatorie (X e
Y).
41
42 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
C = max [ I ( X; Y )] = max [ H ( X ) − H ( X ∣Y )] ⇒ C ⩾ H ( X ) − H ( X ∣Y )
p( x ) p( x )
(3.17)
H ( X ) ⩽ C + H ( X ∣Y ) ⩽ C + ℋ ( Pe ) + Pe log2 ( Nx − 1)
Ecco trovato, in funzione di C, un bound superiore per l’entropia H ( X ). Anche qui possiamo dare un’in-
terpretazione grafica di quanto trovato (vedi figura 3.15): notiamo che non possiamo immettere troppa
informazione nel canale se vogliamo lavorare nella zona cerchiata di rosso, dove si sbaglia poco (Pe piccola
o - meglio ancora - nulla). Possiamo certo provare a spedire più informazione (aumentare H ( X )), ma a
patto di accettare una probabilità d’errore Pe maggiore.
5 Se ogni supersimbolo è costituito da n simboli, ogni simbolo arriverà con periodo T/n.
42
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 43
H (W ) = log2 L
H (W ) log2 L
= = Rc (3.18)
n n
dove Rc è la code-rate, ovvero la quantità d’informazione per simbolo entrato nel canale. La sostanza,
tuttavia, non è cambiata: il codificatore non ha trovato il modo di immettere più informazione nel canale,
visto che per Fano si deve ancora avere Rc < C. Il codificatore mappa piuttosto queste k-ple in delle n-ple
e, se è ben fatto, farà in modo di rendere il più possibile distanti6 (cioè differenti) in modo da minimizzare
la probabilità che la Ŵ, stimata al ricevitore, sia errata. Tale probabilità verrà di seguito indicata con
pe = p(Ŵ ∕= W ) (3.19)
Mentre quella di seguito è la probabilità d’errore condizionata dal fatto che sappiamo quale vettore è stato
inviato:
pe∣i = p(Ŵ ∕= W ∣W = wi ) (3.20)
Definiamo inoltre la massima probabilità di errore:
Il criterio con il quale il codificatore effettua il mapping dei vettori dipende dal codice 𝒞 utilizzato, il quale
è definito in maniera univoca:
43
44 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
log2 L
∀ε > 0, Rc = < C ∃ Codice 𝒞 : Pe < ε per n sufficientemente elevato (3.22)
n
Dimostriamo questo teorema tenendo presente la simbologia in figura 3.16. Ricordiamo il teorema del
Figura 3.16: Schema di riferimento per la dimostrazione del secondo teorema di Shannon
log2 L 1 + Pe log2 L + nC 1
= Rc < = + Pe Rc + C
n n n
7 La capacità di Shannon, nota anche come limite di Shannon, di un canale di comunicazione è il massimo tasso di trasferimento di
dati che può fornire il canale per un dato livello di rapporto segnale/rumore, con un tasso di errore piccolo a piacere.
8 Shannon diede solo una traccia della dimostrazione. La prima dimostrazione rigorosa è dovuta a Amiel Feinstein nel 1954.
9 Utilizzando i più recenti codici Turbo (o gli LDPC) e la potenza computazionale disponibile sugli odierni DSP, è oggi possibile
44
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 45
Mandando Pe a 0 e imponendo n ≫ 1
1
Rc < + Pe Rc + C ⇒ Rc < C
n
Questo significa che per un generico codice, anche se potentissimo (Pe → 0) e sufficientemente lungo
(n ≫ 1), la code-rate non potrà comunque mai superare il limite asintotico imposto dal teorema di Shannon
(cioè la capacità). Per graficare la code-rate in funzione della probabilità d’errore non imponiamo che
Pe → 0, ma manteniamo l’ipotesi n ≫ 1: otteniamo
Rc > Pe Rc + C (3.23)
da cui
C
Pe > 1 − (3.24)
Rc
Graficando quanto ottenuto (vedi figura 3.17) possiamo dedurre la morale della favola, ovvero che vi
è un limite all’informazione trasportabile attraverso un canale: oltre tale limite l’informazione va perduta,
quindi possiamo ridurre la Pe a piacere con tecniche sempre più raffinate (e allungando a dismisura il co-
dice), ma non potremo mai superare i limiti teorici imposti da Shannon (e quindi esagerare con la code-rate).
Il secondo teorema di Shannon ha numerose applicazioni, sia nel campo delle telecomunicazioni che
in quello dell’archiviazione di dati ed è alla base della moderna Teoria dell’informazione.
∫b
p ( a ⩽ x ⩽ b) = p X ( x ) dx (3.25)
a
Per passare da variabile continua a discreta è sufficiente quantizzare la funzione continua prendendone
campioni con spaziatura ∆; il criterio con il quale vengono tratti questi campioni è quello del teorema del
45
46 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
cosicché, come indicato, la sommatoria delle probabilità associate a ciascun campione restituisca esatta-
mente 1. Il teorema del punto medio ci garantisce che il rettangolino di larghezza ∆ su cui integriamo
avrà la stessa area della funzione calcolata nell’intervallo (P ( x̂n ) = ∆ ⋅ p X ( xi )). Calcoliamo ora l’entropia
della nostra variabile aleatoria ’discretizzata’ X̂:
Che acciderbolina sta a significare quell’∞? Sembra una roba astrusissima, ma in realtà ha senso perché
significa che servono ∞ bit per rappresentare una variabile continua. Questo non ci dà fastidio anche
perché di seguito tratteremo sempre differenze di entropia (come nell’informazione mutua) tali per cui il +∞
si cancella.
∫∞ ∫∞
1
h (X) ≜ p ( x ) log2 dx = p ( x ) log2 p ( x ) dx (3.27)
p (x)
−∞ −∞
Tale parametro ci dà un’indicazione di quanto sia random la nostra variabile aleatoria. Chiaramente
esistono anche. . .
46
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 47
ESERCIZIO:
Dimostrare che si ha la seguente relazione per la distanza di Kullback-Leiber 12 :
∫ ∫
− p ( x ) log2 p ( x ) dx ⩽ − p ( x ) log2 q ( x ) dx
∫∞ (3.30)
q (x)
cioè che (distanza di Kullback-Leiber) → p ( x ) log2 dx ⩽ 0
p (x)
−∞
L'uguaglianza si ha solo se q( x ) = p( x ) ∀ x.
p (y)
∫ ∫ ∫ ∫
− p ( x, y) log2 dxdy ⩽ p ( x, y) log2 p ( x ) dxdy
p ( x, y)
x y x y
( ) ( )
p (y) p ( x ) p (y) p ( x )
∫ ∫ ∫ ∫
− p ( x, y) log2 dxdy ⩽ − log2 e p ( x, y) − 1 dxdy = 0
p ( x, y) p ( x, y)
x y x y
12 Questa quantità viene usata per vedere quanto una distribuzione è simile ad un’altra:
∙ se è pari a zero, le distribuzioni coincidono;
∙ se è maggiore di zero, le distribuzioni sono diverse;
∙ se è MOOOOLTO maggiore di zero, le distribuzioni sono parecchio differenti.
47
48 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
√
h( X ) < log2 2πσ2 e (3.32)
∫∞
hgaussiana ( X ) = − pgaussiana ( x ) log2 pgaussiana ( x ) dx =
−∞
| {z
{
} }
1 ( x − µ )2
√ exp −
2πσ2 2σ2
∫∞
( }) {
( x − µ )2
1
=− pgaussiana ( x ) log2 √ exp − dx =
2πσ2 2σ2
−∞
∫∞
[ ( { }) ]
1 ( x − µ )2
=− pgaussiana ( x ) ⋅ log2 √ + ln exp − ⋅ log2 e dx =
2πσ 2 2σ2
−∞
∫∞ √
[ ]
2 ( x − µ )2
= pgaussiana ( x ) ⋅ log2 2πσ + ⋅ log2 e dx =
2σ2
−∞
√ ∫∞ ∫∞
log2 e
= log2 2πσ2 pgaussiana ( x ) dx + pgaussiana ( x ) ⋅ ( x − µ)2 dx =
2σ2
−∞ −∞
| {z } | {z }
=1 definizione E[( X −µ)2 ]=var X =σ2
√ log2 e √ √ √
= log2 2πσ2 + = log2 2πσ2 + log2 e = log2 2πσ2 e
2
Ora dobbiamo dimostrare che è quella avente l’entropia differenziale maggiore rispetto a tutte le altre
densità di probabilità. Abbiamo già dimostrato che si ha:
1 1
∫ ∫
h (X) = p ( x ) log2 dx ⩽ p ( x ) log2 dx
p (x) q (x)
1 1
∫ ∫
p ( x ) log2 dx ⩽ p ( x ) log2 dx
p (x) pgaussiana ( x )
∫
1 √
pgaussiana ( x ) log2 dx = log2 2πσ2 e
pgaussiana ( x )
A parità di µ e σ2 , quindi, la massima incertezza la si ha con la gaussiana. Si noti che l’entropia dif-
ferenziale dipende da σ, cosa abbastanza prevedibile visto che se la campana è spanciata l’incertezza è
maggiore. Il valor medio µ invece non influisce proprio un tubo.
48
CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ 49
Ora dimostriamo, con la solita disequazione, che è quella ad entropia maggiore. Con p( x ) e q( x ) generiche
si ha:
1 1
∫ ∫
h ( X ) = p ( x ) log2 dx p ( x ) log2 dx
p (x) q (x)
Quindi se scegliamo al posto di q( x ) la distribuzione esponenziale negativa, l’uguaglianza vale solo se
p( x ) = q( x ) e si ha:
1
∫
h ( X ) pesp - neg ( x ) log2 dx = hesp - neg ( X )
pesp - neg ( x )
49
50 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
50
Capitolo 4
Il limite di Shannon
In questo capitolo tratteremo la parte più avanzata della Teoria dell’Informazione, soffermandoci
sull’analisi del canale additivo gaussiano bianco e su altri importanti aspetti.
In figura 4.1 viene mostrato lo schema di riferimento: Z è una distribuzione continua gaussiana a valor
medio nullo e varianza σ2 così che possiamo scrivere
Z ∼ 𝒩 (0, σ2 ) (4.1)
Visto che Y = X + Z, anche Y sarà (come Z) una variabile aleatoria caratterizzata da una distribuzione
continua. All’interno di questo schema un vincolo è costituito dalla potenza del rumore e da quella del
segnale che trasmettiamo, le quali dipendono dai seguenti momenti del second’ordine:
[ ]
E X 2 = S (signal)
[ ]
E Z2 = N = σ2 (noise)
Si noti che si è usato il simbolo h (entropia differenziale) in quanto le variabili in gioco sono continue e che
è stato utilizzato il risultato ottenuto nel paragrafo 3.9.2. Ciò che ci autorizza a scrivere direttamente che
51
52 CAPITOLO 4. IL LIMITE DI SHANNON
√
l’entropia h(Y ∣ X ) è pari a log2 2πeσ2 è il fatto che la distribuzione Y è la somma di un valore associato
a X (costante e pari a x) e di un valore Z (distribuzione gaussiana), dunque è anch’essa una distribuzione
gaussiana1 e si ha: ( )
{Y ∣ X = x (costante)} ∼ 𝒩 x, σ2
Ma l’entropia differenziale dipende solo dalla varianza: se√ effettuiamo una media sui valori di tutte le x
otteniamo quindi un valor medio esattamente pari a log2 2πeσ2 .
Calcoliamo ora la capacità, ovvero il massimo dell’informazione mutua; dovendo noi massimizzare la
h(Y ), faremo l’ipotesi che anche la Y sia una variabile gaussiana imponendo che anche X lo sia, cosicché
possiamo scrivere:
√ √
√ √ 2πeσy2 σy2 1 σy2
C = max I ( X; Y ) = log2 2πeσy2 − log2 2πeσ2 = log2 √ = log2 √ = log2 2
p( x ) 2πeσ2 σ2 2 σ
Se facciamo l’ipotesi (ragionevole) che rumore e segnale utile facciano capo a due variabili indipendenti
ed entrambe gaussiane, allora la varianza di Y = X + Z è uguale alla somma delle varianze di X e Y:
Possiamo ora esprimere la varianza σx2 in funzione dei nostri vincoli, dato che si ha
[ ]
σx2 = E X 2 − E2 [ X ]
Volendo noi massimizzare σx2 , cioè la potenza del segnale utile, l’unica è annullare E2 [ X ]. Così facendo
otteniamo:
σx2 = E[ X 2 ] = S (4.2)
Sostituendo nella formula della capacità di canale otteniamo:
( )
1 S
C = log2 1 + (4.3)
2 N
S
Provando a graficare la capacità in funzione del rapporto segnale-rumore N otteniamo la figura 4.2. Con
ragionamenti al limite possiamo trovare la pendenza, cioè il coefficiente angolare, della retta indicata come
’asintoto’:
sommando una costante ad una qualsiasi variabile aleatoria gaussiana otteniamo un’altra variabile aleatoria gaussiana, ma con un
valor medio differente (per ricavarlo dobbiamo sommare la costante al valor medio della variabile aleatoria di partenza).
52
CAPITOLO 4. IL LIMITE DI SHANNON 53
Esaminiamo lo schema in figura 4.3: abbiamo un segnale utile x (t) che attraversa un canale additivo
gaussiano bianco e quindi riceve un contributo di rumore n(t). Per ipotesi supporremo la banda limitata
tra − B e B (ecco quindi spiegata la presenza del filtro). In figura 4.4 possiamo invece vedere le densità
spettrali di potenza.
Figura 4.4: Spettri dei segnali (raffiguriamo solo la parte tra − B e B tanto ci pensa il filtro ad eliminare tutto il resto!)
∫B 〈 〉 Ergodicità [ ]
Gx ( f ) d f = S = x 2 ( t ) = E X 2 (t)
−B
∫B 〈 〉 Ergodicità [ ]
Gn ( f ) d f = N = n2 (t) = N0 B = σ2 = E n2 ( t )
−B
Ora serviamoci della nostra arma segreta: il teorema del campionamento! Esso, ci ricordiamo, afferma che
si ha reversibilità nella conversione A/D se la frequenza di campionamento f s è almeno il doppio della
banda del segnale B:
f s ≥ 2B (4.4)
53
54 CAPITOLO 4. IL LIMITE DI SHANNON
x− = x1 , x2 , . . . , x2BT̃
y = y1 , y2 , . . . , y2BT̃
−
− = n1 , n2 , . . . , n2B T̃
n
yi = xi + ni
Si noti che, come indicato, ni è il campione una variabile aleatoria gaussiana. Nonostante vengano tra-
smessi dei vettori, ha comunque senso calcolare la capacità simbolo per simbolo in quanto si dimostra che
gli ni sono indipendenti (vedi paragrafo 4.2.1) e quindi il canale può essere considerato senza memoria;
se supponiamo inoltre che anche gli xi siano indipendenti allora siamo completamente liberi di ragionare
campione per campione. Ricordando dal paragrafo 4.1 che la capacità (in Shannon per campione) è
( )
1 S
C = log2 1 +
2 N
che può essere facilmente graficata come mostrato in figura 4.5. Purtroppo, come si nota, anche qui
emerge che la capacità aumenta logaritmicamente con il rapporto segnale-rumore (SNR). Se fissiamo
ora S e N0 2 possiamo provare a mandare al limite B → ∞: la capacità C in tal caso tende a
( ) ( )B
S S LIMITE NOTEVOLE S S
C = lim Blog2 1+ = lim log2 1+ −−−−−−−−−−− → lim log2 e N0 = log2 e
B→∞ N0 B B→∞ N0 B x
lim (1+ x ) =eα
α B→∞ N0
x →∞
Anche questo risultato è riportato in figura 4.5: altra brutta notizia - pure la banda alla fine non paga più
di tanto. . . anzi, anche con tutta la banda del mondo a disposizione la capacità arriva ad un valore limite
invalicabile!
2 Si noti che N0 non è adimensionale: ha unità di misura Watt/Hertz.
54
CAPITOLO 4. IL LIMITE DI SHANNON 55
Figura 4.5: Capacità su banda in funzione dell’SNR e capacità in funzione della banda
La nostra funzione Rn , come sappiamo da Comunicazioni Elettriche LB, è una sinc avente forma:
1
La distanza temporale fra un campione e l’altro sarà 2B dunque ti − t j sarà sicuramente un multiplo intero
di tale distanza. Possiamo quindi scrivere:
i
ti = i ⋅ TS =
2B
i−j i−j
( ) ( )
( )
R n ti − t j = R n = N sinc 2B =N sinc (i − j) =0
2B 2B | {z }
sinc di un numero intero→0
Dunque fra campioni non c’è correlazione: questo implica che siano indipendenti! Si noti che ciò è legato
a due ipotesi:
Come sappiamo l’informazione trasmessa dipende dall’entropia ed essa è tanto maggiore quanto i
campioni sono imprevedibili: il massimo risultato si ha quindi nel caso di campioni xi indipendenti. Se
dunque prendiamo un segnale utile molto simile al rumore (cioè gaussiano, visto che la distribuzione
gaussiana massimizza l’entropia), e dunque abbiamo indipendenza statistica fra i campioni, massimizzia-
mo l’informazione per il canale AWGN (Additive White Gaussian Noise). Lo strumento con il quale rendere
i campioni meno ridondanti possibili, lo sappiamo, è il codificatore di sorgente mentre, per proteggere
l’informazione dai disturbi del canale, c’è il codificatore di canale. Ora possiamo quindi parlare di un si-
stema di trasmissione completo, come mostrato in figura 4.6; se lo osserviamo ai morsetti della nuvoletta
tratteggiata vediamo dei simboli in ingresso bn e dei simboli in uscita bn′ : se la rate dei bn è inferiore alla
capacità di canale allora Shannon ci garantisce che esisteranno dei codici coi i quali è possibile rendere
arbitrariamente piccola la probabilità di errore Pe dei bit consegnati all’utente (cosa non vera viceversa).
Ma riusciamo a trovare un legame fra le nostre quantità statisticamente determinate, la potenza e la
capacità di un sistema? Riusciamo ad avere un limite di riferimento per capire quanto più in là possiamo
spingerci in questa sistematica riduzione di Pe ?
55
56 CAPITOLO 4. IL LIMITE DI SHANNON
Se l’energia per bit di sorgente spedito è Eb abbiamo che la potenza del segnale è pari a
Eb
S = Eb ⋅ Br = (4.7)
Tb
Quindi la nostra potenza trasmessa dev’essere sufficiente per garantire una trasmissione corretta dei dati;
inoltre, l’efficienza spettrale ha un valore limite e insuperabile ricavabile nel seguente modo:
2η − 1 Limite notevole
lim = ln 2 ≃ 0, 69 ≃ −1, 6 dB (4.8)
η →0 η
56
CAPITOLO 4. IL LIMITE DI SHANNON 57
Fissata la potenza per bit trasmesso, non è possibile andare oltre una certa efficienza spettrale (vedi figura
4.7) ma, cosa ancor più importante, fissata l’efficienza spettrale non è possibile trasmettere a meno
di una certa potenza (vedi figura 4.8). Non sarà inoltre mai possibile, neanche con il codificatore di
canale più furbo del mondo, trasmettere in maniera corretta un’informazione con un rapporto segnale
rumore inferiore a −1, 6 dB. . . e già ci va grassa perché significa che, comunque, possiamo correttamente
comunicare anche con segnali meno potenti del rumore (SNR < 0 dB)!
∙ quella dei sistemi limitati in potenza (esempio: le sonde dello spazio profondo) → abbiamo un’au-
tonomia limitata (non possiamo assolutamente sprecare energia) tuttavia non abbiamo problemi di
banda (parte in basso a sinistra del grafico).
h ( t ) = K ⋅ x ∗ ( t0 − t ) (4.11)
Il parametro K è un fattore di attenuazione/amplificazione che influisce sia sul segnale utile S che sul
rumore N: l’SNR, dunque, non dipende da K.
3 In questo modo abbiamo l’SNR ottimo.
57
58 CAPITOLO 4. IL LIMITE DI SHANNON
58
CAPITOLO 4. IL LIMITE DI SHANNON 59
Per via del fatto che il rumore è gaussiano e bianco, allora anche di n(t0 ) possiamo dire la stessa cosa ed
esaminare valor medio e varianza:
∫∞ ∫∞
⎡ ⎤
∫∞ ∫∞
⎡ ⎤
[ ]
var [n (t0 )] = E n2 (t0 ) − E2 [n (t0 )] = E ⎣ ν (τ ) ν (ξ ) h (t0 − τ ) h (t0 − ξ ) dτdξ ⎦ =
| {z }
=0 −∞ −∞
∫∞ ∫∞
= E [ν (τ ) ν (ξ )] h (t0 − τ ) h (t0 − ξ ) dτdξ
| {z }
−∞ −∞ Rν (τ −ξ )
Ora possiamo sfruttare il fatto che l’autocorrelazione è l’antitrasformata dello densità spettrale di potenza,
la quale è per ipotesi costante (lo spettro è bianco, vedi la figura 4.9); ma la trasformata di una costante è
la delta di Dirac, dunque si ha:
N0
Rν ( x ) = ℱ −1 { G0 ( f )} = δ (x) (4.13)
2
Sostituendo nuovamente nell’espressione della varianza:
∫∞ ∫∞ ∫∞ ∫∞
N0
var [n (t0 )] = R0 (τ − ξ ) h (t0 − τ ) h (t0 − ξ ) dτdξ = δ (τ − ξ ) h (t0 − τ ) h (t0 − ξ ) dτdξ
2
−∞ −∞ −∞ −∞
La delta di Dirac ha la ben gradita proprietà di ’ammazzare’ un integrale (in quanto impone z = τ), quindi
si ha:
∫∞ ∫∞ ∫∞
N0 N0 2 N0 N0 2
var [n (t0 )] = h (t0 − τ ) h (t0 − τ ) dτ = h (t0 − τ ) dτ = K2 x2 (t0 − t0 + τ ) dτ = K Ex
2 2 2 2
−∞ −∞ −∞
Dunque ora possiamo scrivere che n(t0 ) è una variabile aleatoria gaussiana avente i seguenti parametri:
( )
∼ N0 2
n(t0 ) = 𝒩 0, K Ex (4.14)
2
1
h ( t ) = √ x ( t0 − t ) (4.16)
Ex
59
60 CAPITOLO 4. IL LIMITE DI SHANNON
Assumendo che i bit trasmessi siano equiprobabili, proviamo a valutare la probabilità d’errore:
1( {
Pr d = +1 trasmesso un ′ 1′ + Pr d = −1 trasmesso uno ′ 0′
} { })
= =
⎛ 2 ⎞
1⎜ { √ } {√ }⎟ 1 ( {√ } { √ })
= ⎜Pr − Ex + n0 > 0 + Pr Ex + n0 < 0 ⎟ = Pr Ex < n0 + Pr − Ex > n0 =
2 |
⎝
{z } | {z }
⎠ 2
soprasoglia sottosoglia
{ √ √ } √ N0 √
1 1 Ex 1 Ex 1 Ex σn2 = 2 1 Ex
= erfc √ + √ = erfc √ = erfc √
2 2 2σn2 2 2σn2 2 2σn2 2 N0
In figura 4.11 possiamo vedere la gaussiana e localizzare le erfc citate nelle formule precedenti. In
particolare si ricorda che la funzione erfc ha la seguente forma analitica:
∫∞
1 2
erfc ( x ) ≜ √ e−t dt (4.18)
π
x
60
CAPITOLO 4. IL LIMITE DI SHANNON 61
∫∞ √ ∫∞ ∫∞
(√ )
√ t2 √
{ } 1 − dt= 2σn ds 1 − s2 1 2 1 Ex
p e n0 > Ex = e 2σn2 dt −−−−−−→ e 2σn ds = √ e−s ds = erfc
2σn2
√ √
√ 2πσn2 s= √ t 2πσn2 π 2
2σn
√ √
Ex Ex Ex
2σn2 2σn2
Quanto fatto fin’ora, a pensarci bene, ricorda il canale BSC con p pari alla pe così faticosamente calcolata
poco fa (vedi figura 4.12). Sappiamo quindi bene qual è la sua capacità:
C = 1 − ℋ( p) = 1 + p log2 p + (1 − p) log2 (1 − p) (4.19)
61
62 CAPITOLO 4. IL LIMITE DI SHANNON
62
CAPITOLO 4. IL LIMITE DI SHANNON 63
mentre la probabilità p è: √
1 Ex
p = erfc (4.22)
2 N0
Concentriamoci però sulla zona cosiddetta Low SNR, ovvero quella tale per cui
√
Ex
z= →0 (4.23)
N0
1 2
( ) ( ) ( )
1 1 1 1
= (log2 p − log2 (1 − p)) p=0,5 p − + log2 e + log2 e p− =
| {z } 2 2 p 1− p p=0,5 2
=0
)2
1 2 1 2
( ( ) ( )
1 1 2
= (2log2 e + 2log2 e) p=0,5 p − = 2log2 e ⋅ p − = p− =
2 2 2 ln 2 2
⎛ ⎞2
√
2 ⎜ ⎜ 1 Ex 1⎟ 2 Ex 1 Ex 1 Ex
= − − ⎟ = = ≈
⎟
ln 2 ⎝ 2 N0 π 2⎠ ln 2 2σn2 π ln 2 σn2 π ln 2 2σn2
⎜
| {z } |{z} | {z } | {z }
Trovato con McLaurin N0 BSC hard - decision LOW SNR LOW SNR
Si noti che fra la penultima e l’ultima espressione (fra le quali intercorre il segno ≈) vi sono 2 dB di
differenza persi quantizzando.
E ora passiamo al calcolo della capacità e alla ricerca di un metodo per massimizzarla: effettueremo tale
calcolo su piccoli intervallini ∆ f in cui possiamo considerare circa costante sia la ∣ H ( f )∣ che le densità
63
64 CAPITOLO 4. IL LIMITE DI SHANNON
spettrali di potenza Gν ( f ) e Gx ( f ). Con questo piccolo trucco possiamo ancora fare i calcoli considerando
un canale non distorcente (∣ H ( f )∣ costante) on rumore AWGN (Gν ( f ) costante) e scrivere, per ogni ∆ f :
⎛ bilatera ⎞
z}|{ ( )
( ) 2⎟ 2
S 2∆ f i G x ( f i ) ∣ H ( f i )∣ G x ( f i ) ∣ H ( f i )∣
= ∆ f i log2 ⎜ ⎟ = ∆i f log 1 +
⎜
Ci = Blog2 1 + ⎝1 + 2
N 2∆i f ⋅ Gν ( f i ) ⎠ Gν ( f i )
Se ora mandiamo ∆ f → 0 e facciamo l’integrale su tutta la banda W otteniamo un’estensione della formula
di Hartley-Shannon:
( )
Gx ( f ) ∣ H ( f )∣2
∫
C = log2 1 + df
Gν ( f )
W
è possibile scoprire quale fra tutte le possibili Gx ( f ) massimizza C? Se la conoscessimo, potremmo sfrut-
tarla! Per effettuare tale calcolo, ci serviamo del metodo dei moltiplicatori di Lagrange; cerchiamo quindi di
massimizzare la seguente espressione, dove µ è una variabile ausiliaria:
( )
Gx ( f ) ∣ H ( f )∣2
∫
log2 1+ − µGx ( f ) d f
Gν ( f )
W
1 ∣ H ( f )∣2 ∣ H ( f )∣2
log 2 e − µ = log2 e − µ = 0
Gx ( f ) ∣ H ( f )∣2 Gν ( f ) Gν ( f ) + Gx ( f ) ∣ H ( f )∣2
1+
Gν ( f )
64
CAPITOLO 4. IL LIMITE DI SHANNON 65
Ma si ha anche:
( ) −1
∣ H ( f )∣2 Gν ( f ) µ
= + Gx ( f ) = = costante
Gν ( f ) + Gx ( f ) ∣ H ( f )∣2 ∣ H ( f )∣ 2 log2 e
Dunque otteniamo:
⎧
⎨ costante − Gν ( f )
se tale sottrazione dà come risultato un numero positivo
Gx ( f ) = ∣ H ( f )∣2
0 se la sottrazione di cui sopra dà come risultato un numero negativo
⎩
Perciò Gx ( f ) sarà per forza sempre positiva; possiamo ora inoltre scriverne un’espressione generale:
⎧ { }
⎨ max costante − Gν ( f )
,0 nella banda W
Gx ( f ) = ∣ H ( f )∣2
⎩
0 altrove
Il risultato sembra non dire niente? E invece nasconde un’importantissima informazione! Si osservi la
figura 4.16: lo spettro Gx ( f ), lo ricordiamo, è la differenza fra il valore costante e la curva in figura. Nella
zona verde, dove il canale è buono, questa quantità è maggiore di zero (e quindi è un valore ammissibile in
quanto positivo), mentre altrove risulta essere negativa e quindi, come indicato nelle formule precedenti,
in tali luoghi non impiegheremo potenza (Gx ( f ) = 0). In soldoni, la morale della favola è che conviene
investire sui canali migliori e non sprecare potenza dove c’è molto rumore, perché il gioco non varrebbe la
candela. Tale tecnica viene chiamata water-filling (o water-pouring) in quanto è visivamente comprensibile
se immaginiamo di avere una certa quantità d’acqua (cioè di potenza) e di versarla sulla curva in figura:
essa andrà certamente a insinuarsi nelle zone a quota minore (= canale migliore) e le riempirà, ignorando
completamente tutte le altre parti della banda W.
65
66 CAPITOLO 4. IL LIMITE DI SHANNON
La banda viene ora suddivisa in tanti canali e su ciascuno di essi inviamo un segnale (tecnica OFDM4 ).
Quanta potenza viene trasmessa?
[ ] [ ] [ ] [ ]
E X12 + E X22 + . . . + E Xn2 = ∑ E Xk2 = ∑ Sk = S
k k
Massimizziamo quindi C tenendo conto del vincolo sulla potenza e usiamo nuovamente il metodo dei
moltiplicatori di Lagrange: il risultato è il seguente:
σ2
( )
Sk = max cost − , 0
λk
Si veda quindi la figura 4.19, in cui la somma delle frecce tratteggiate rosse rappresenta la potenza S del
segnale utile: il principio è esattamente identico a quello del caso continuo.
66
CAPITOLO 4. IL LIMITE DI SHANNON 67
67
68 CAPITOLO 4. IL LIMITE DI SHANNON
68
Capitolo 5
Come si vede dalla figura 5.1, il codificatore di un codice a blocco emette blocchi di n bit1 per ogni
blocco d’ingresso di k bit. Di seguito chiameremo:
∙ code-rate il rapporto Rc = nk . Tanto minore è la code-rate e tanto più ridondante sarà il codice;
∙ Brc il numero di bit codificati al secondo. Chiaramente Brc > Br perché la code-rate è < 1 e dunque
sono molti di più i bit che trasmettiamo di quelli che dobbiamo codificare dalla sorgente.
1 Volendo rimanere nel caso generale dovremmo parlare di simboli, perché a rigore non è detto che l’alfabeto sia semplicemente
quello binario (altri possibili alfabeti sono tipicamente quelli di cardinalità 2q con q > 1). Tuttavia quest’ultima casistica è quella di
maggiore interesse e quindi daremo per scontato di lavorare con l’alfabeto {0, 1}.
69
70 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
S = Ebc ⋅ Brc = Eb ⋅ Br
Figura 5.2: Insieme delle parole non codificate e mapping iniettivo verso quello delle parole codificate
ESEMPIO:
Codice a ripetizione (3,1)
Abbiamo 21 possibili parole d'informazione di lunghezza 1, ovvero il bit '0' e il bit '1'. Esse
vengono mappate rispettivamente in '000' e '111', basandosi cioè sul semplice criterio di ripetizione
del bit d'informazione che si vuole trasmettere. Le parole codicate (2 su un totale di 23 possibili
stringhe lunghe 3) non sono però state prese a caso: esse sono infatti scelte anché abbiano distanza
massima (tutti i bit sono infatti dierenti). Non è l'unica possibile opzione a nostra disposizione: si
poteva ad esempio propendere per '101' e '010', oppure per '001' e '110' etc. . .
∙ distribuzione dei pesi {wi }: insieme dei pesi di tutte le parole di codice. La distribuzione dei pesi
caratterizza le proprietà della distanza del codice;
70
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 71
∙ distanza di Hamming dij = d H (ci , c j ) fra due parole di codice ci , c j : numero di posizioni in cui le due
parole sono differenti;
( c1 , c2 , . . . , c n ) + ( d1 , d2 , . . . , d n ) = ( c1 + d1 , c2 + d2 , . . . , c n + d n ) (5.3)
Possiamo poi definire la moltiplicazione scalare componente per componente (componentwise scalar molti-
plication):
k(c1 , c2 , . . . , cn ) = (kc1 , kc2 , . . . , kcn ) (5.4)
Indicando con S il campo di Galois appena descritto una volta definite queste operazioni, possiamo defi-
nire anche dei sottospazi vettoriali: possiamo ad esempio scegliere k vettori di lunghezza n linearmente
indipendenti
c̃1 , c̃2 , . . . , c̃k
e le possibili combinazioni lineari di questi ultimi genereranno il sottospazio SC di dimensione k. I vettori
ortogonali ai vettori di SC genereranno invece un sottospazio ortogonale a SC (che chiameremo SC⊥ ) che
avrà dimensione n − k. Ovviamente, qualunque codice 𝒞 è un sottospazio di GF (q)n .
Nel caso di codici a blocco lineari binari, il nostro insieme S (quello che prima coincideva con il campo
di Galois tutto intero) conterrà tutti i possibili vettori binari di lunghezza n. Se SC è un sottoinsieme di S
avente cardinalità 2k , allora il sottoinsieme ortogonale SC⊥ avrà cardinalità 2n−k e genererà il codice duale a
quello generato da SC .
d H ( ci , c j ) = w ( ci − c j ) = w ( ci + c j ) (5.6)
ESEMPIO:
Il codice a ripetizione (3,1), già visto in un precedente esempio, è un codice lineare in quanto tutte
le possibili somme fra le parole di codice restituiscono un'altra parola di codice2 . Supponiamo di
trasmettere tramite questo codice attraverso un BSC caratterizzato da probabilità di transizione
p < 1/2 e facciamo l'ipotesi che il decoder decida a maggioranza: le codeword 000, 100, 010 e 001
verranno quindi interpretate come 000 (bit '0') mentre 110, 101, 110 e 111 verranno interpretate
come 111 (bit '1'). Questo criterio è abbastanza ragionevole, anche se non è infallibile: può infatti
2 D’altronde le parole di codice sono soltanto due e una ha tutti zeri, quindi. . .
71
72 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
capitare che vengano sbagliati due bit (o addirittura tre bit, se è il nostro giorno sfortunato) all'interno
della stessa parola di codice. Calcoliamo la probabilità che ciò accada, cioè calcoliamoci la seguente
quantità:
⎧ ⎫
⎨ ⎬
Pe = Pr B̂n ∕=
Bn = Pr {2 o 3 errori nella parola di codice} =
⎩ |{z}
|{z} ⎭
Stimato Trasmesso
( )
3 [ ]
= p3 + p ⋅ p ⋅ (1 − p ) = p3 + 3 p2 (1 − p) = 3p2 − 2p3
|{z} | {z } 2
3 errori 2 errori e 1 bit corretto
Ci abbiamo guadagnato o no? Se facciamo il confronto con il sistema uncoded scopriamo di sì (vedi
gura 5.3, graco a sinistra), perché 3p2 − 2p3 < p se p < 0, 5. Tuttavia il prezzo da pagare è stato
molto alto: mentre prima trasmettevamo un unico bit ora ne dobbiamo infatti trasmettere tre, cosa
che comporta parecchi sacrici in termini di energia.
Figura 5.3: Confronto fra il caso non codificato e il codice a ripetizione (3,1)
Supponiamo infatti di eettuare la stessa trasmissione con codice a ripetizione attraverso un canale
AWGN, trasmissione antipodale e uso di hard decision. In questo caso si ha
√
1 Ebc
p = erfc
2 N0
dove Ebc è l'energia della forma d'onda che rappresenta un bit codicato e che costituisce una frazione
di quella che possiamo pensare attribuita su un bit d'informazione:
v
u =1/3
√ u z}|{ √
u
1 Ebc 1 ⎷ Eb Rc 1 Eb
Ebc = Eb Rc ⇒ p = erfc = erfc > erfc
2 N0 2 N0 2 N0
Dunque conviene non codicare e utilizzare il triplo dell'energia per bit trasmesso, oppure codicare
e accontentarsi del quantitativo energetico Ebc per ogni bit codicato? La gura 5.3 (gura a destra)
ci mostra che in realtà le cose vanno peggio nel caso codicato!
ESEMPIO:
Codice a singolo bit di parità (single parity check code )
L'encoder per questo tipo di codici funziona nel seguente modo: prende in ingresso una parola
di k bit ed emette in uscita una parola di n = k + 1 bit che altro non è se non la parola in ingresso
concatenata con un bit di parità, il quale - come suggerisce il nome - ha il compito di rendere pari il
numero di '1' all'interno della parola codicata. Se al ricevitore perviene una parola con peso dispari
(cioè con un numero dispari di '1'), allora l'errore potrà essere rilevato (ma non corretto: chi ci dice
qual è il bit sbagliato?). Questo tipo di codice è in grado di correggere solo un numero dispari di
72
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 73
errori in quanto due errori su una parola di codice (che avrà sicuramente peso pari) renderanno la
parola nuovamente pari e non permetteranno la rilevazione. Possiamo però fare moooooolto meglio
di così: continuate a seguirci su questi schermi e scoprirete come!
la relativa parola di codice. Il generico bit cmj della parola di codice può anche essere visto come una com-
Figura 5.4: Ogni bit della parola di codice è combinazione lineare dei bit della parola d’informazione
binazione lineare dei bit d’ingresso (cioè dei bit della parola d’informazione, vedi figura 5.4), perpetrata
tramite i coefficienti g:
cmj = xm1 g1j + xm2 g2j + . . . + xmn gmj (5.7)
Dunque possiamo impostare il seguente sistema lineare per trovare tutti i bit cm j della parola codificata
cm ⎧
cm1 = xm1 g11 + xm2 g21 + . . . + xmk gk1
⎨c = x g +x g +...+x g
m2 m1 12 m2 22 mk k2
. . .
⎩c = x g +x g +...+x g
mn m1 1n m2 2n mk kn
⋅⋅⋅
⎡ ⎤
g11 g12 g1n
⎢ .. .. ⎥
⎢ g21 . . ⎥
cm = xm G = xm ⎢
⎢ . ..
⎥
⎣ .. .. ⎥
. . ⎦
gk1 ⋅⋅⋅ ⋅⋅⋅ gkn
e G viene chiamata la matrice generatrice del codice. In matematichese, il codice 𝒞 è lo spazio-riga della
matrice G, ovvero l’insieme delle combinazioni lineari delle righe di tale matrice. Un’operazione di riga
sulla matrice G non modifica il codice (si modifica la base del sottospazio, ma non il sottospazio stesso
quindi le parole di codice rimangono invariate); nemmeno una permutazione di colonne della matrice
G modifica il codice perché permutiamo i bit in tutte le parole di codice (dunque i pesi, le distanze,
etc. . . rimangono invariati). Dunque un codice ottenuto da G tramite operazioni di riga e/o di colonna
(permutazioni) è un codice equivalente a quello di partenza. In altre parole, due matrici G1 e G2 si
riferiscono a due codici equivalenti se una si può ottenere dall’altra con operazioni di riga e permutazioni
di colonna.
73
74 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
In tale relazione I è la matrice identità e P viene detta matrice di parità. Questa strutturazione della matrice
generatrice ha il grosso vantaggio di conferire alla generica parola codificata la seguente struttura:
Dunque nei primi k bit della parola codificata troviamo la parola d’informazione: per il ricevitore, se
non vengono rilevati errori, sarà quindi sufficientemente tagliare via gli n − k bit della parte di parità per
ottenere la parola che volevamo trasmettere, senza dover effettuare alcuna operazione di combinazione
lineare per rilevarla.
ESEMPIO:
Il codice a ripetizione (3,1) ha matrice generatrice:
[ ]
G= 1 1 1
La parte di parità (2 × 1) è costituita dagli ultimi 2 uni, mentre la matrice identità (1 × 1) è il primo
uno. Provando a moltiplicare le uniche due parole d'informazione disponibili (i bit '0' e '1') otteniamo:
{
0 ⋅ 111 = 000
1 ⋅ 111 = 111
Le due parole di codice sono quindi 000 e 111. Questo codice è evidentemente sistematico.
ESEMPIO:
Il codice generato dalla seguente
⎡ ⎤
1 0 0 1 1
G=⎣ 0 1 0 0 1 ⎦
0 0 1 0 1
74
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 75
Tabella 5.1: Matrici generatrici e di controllo parità di un codice e del suo duale
Codice e codice duale sono in rapporto fra loro come definito nella tabella 5.1: è però necessario specificare
che, così come per un certo codice 𝒞 la matrice G non è unica, anche la matrice di controllo parità non sarà
unica (purché lo spazio generato sia lo stesso). Un qualsiasi vettore c di 𝒞 , per definizione, sarà ortogonale
a qualunque vettore u di 𝒞 ⊥ . Inoltre, si avrà che:
H ⋅ c T = 0, ∀c ∈ 𝒞 (5.9)
Dunque un qualsiasi vettore del codice 𝒞 , moltiplicato per la matrice di controllo parità trasposta H T ,
deve dare come risultato zero: tale condizione è necessaria e sufficiente e ciò significa che una parola non
appartenente al codice 𝒞 , giunta a destinatario e frutto di uno o più errori di trasmissione, se moltiplicata
per H T restituirà un risultato diverso da zero. In queste semplici considerazioni è quindi nascosto il
principio di rilevazione degli errori per i codici di questo tipo.
Se G è in forma sistematica si ha che:
in GF(2)
−PT PT
[ ] [ ] [ ]
G= I ∣P ⇒H= ∣I −−−−→ ∣I
Sarà vero? L’Ingegnere Pazzo dice forse delle balle? Probabile, ma facciamo la controprova:
] P TT
[ ] [ ]
T
[ [ ] P
GH = I ∣P = I ∣P = P+P = 0
IT I
ESEMPIO:
Troviamo la matrice di controllo parità del codice a ripetizione (3,1), avente la seguente
[ ]
G= 1 1 1
Tale matrice è anche la matrice generatrice del single parity check code: se la permutiamo per colonne
otteniamo infatti: [ ] [ ]
1 1 0 1 0 1
⇒
1 0 1 0 1 1
Di norma, il duale di un codice a ripetizione è un codice di tipo single parity check.
ESEMPIO:
Codice di Hamming3 (7,4)
NOTA: per maggiori informazioni consulta il paragrafo 5.10.
3 Richard Wesley Hamming (Chicago, 11 febbraio 1915 - Monterey, 7 gennaio 1998) è stato un matematico statunitense, famoso
per l’ideazione del Codice di Hamming. Dopo il dottorato conseguito all’Università dell’Illinois nel 1942, Hamming fu professore
all’Università di Louisville fino all’inizio della Seconda guerra mondiale. Nel 1945 fece parte del Progetto Manhattan, programmando
uno dei calcolatori digitali per calcolare le soluzioni delle equazioni fornite dai fisici del progetto. Nel 1968 ricevette il Premio Turing.
75
76 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
peso w n∘ di codeword
0 1
3 7
4 7
7 1
in cui le prime quattro colonne, costituenti la sottomatrice P, sono costituite da tutte le possibili
combinazioni di 3 bit aventi almeno due uni, mentre le ultime tre colonne formano una matrice
identità I: in questo modo, le 7 colonne della matrice di controllo parità costituiscono tutti i modi
possibili in cui si può formulare un vettore di lunghezza tre, se escludiamo la parola di tutti zeri. Tutte
le matrici costruite in questo modo generano codici equivalenti a quello di Hamming. Ricordando la
solita relazione, per cui
in GF(2)
−PT PT
[ ] [ ] [ ]
G= I ∣P ⇒H= ∣I −−−−−→ ∣I
Il codice generato da G è detto Codice di Hamming (7,4) e ha la distribuzione dei pesi indicata in
tabella 5.2: si noti che la distanza minima del codice, in questo caso, è 3.
Nella formula precedente 0 è un vettore colonna di tutti zeri, 1 un vettore riga di tutti uni e H la matrice
di controllo parità del codice di partenza. Con la precedente modifica effettuiamo il seguente passaggio:
estensione
Codice 𝒞 ⇒ (n, k) −−−−−→ (n + 1, k) ⇒ Codice 𝒞ext
ESEMPIO:
Consideriamo il codice di Hamming (7,4) e la sua versione estesa (8,4). Se ricaviamo gli spettri di
tali codici otteniamo la tabella 5.3. La distanza minima del codice, come si nota, è aumentata da 3
a 4.
Come accennato poco fa il rovescio della medaglia sta nel fatto che, mentre prima trasmettevamo 7 bit
di codice per 4 bit di informazione, ora dobbiamo inviarne uno in più (per un totale di 8), il che comporta
un dispendio maggiore di energia. La code-rate si è infatti abbassata da 4/7 a 4/8 = 1/2.
76
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 77
Tabella 5.3: Distribuzione dei pesi del codice di Hamming (7,4) e della versione estesa
Tabella 5.4: Distribuzione dei pesi del codice di Hamming (7,4) e della versione purgata
Per ottenere tale risultato è sufficiente prendere soltanto le parole di peso pari del nostro codice di
partenza, il che equivale modificare nel seguente modo la matrice H (che diventerà una n − k + 1 × n):
[ ]
H
Hpurg =
1
Nella formula soprastante s’intende che H è la matrice di controllo parità del codice non purgato e 1 un
vettore di tutti uni. La distanza minima del codice è aumentata (vedi tabella 5.4, in cui si fa un esempio
col solito codice di Hamming (7,4)), ma anche questa volta la code-rate è diminuita in quanto è passata da
4/7 a 3/7.
dmin ≤ n − k + 1 (5.10)
000..010..000 | 111...11
parte sistematica (peso 1) | parte di parità (peso n-k)
Tale parola di codice avrebbe distanza di Hamming pari a n − k + 1 dalla parola di tutti zeri. A questo
punto, per non peggiorare (diminuire) la distanza minima del nostro codice, dobbiamo cercare di aumen-
tare (o al limite di non far calare) il peso di tutte le altre parole, cosa abbastanza plausibile visto che -
certo, la parte di parità non potrà più avere tutti ’1’ - ma la parte sistematica possiamo ancora ’gonfiarla’
di bit a uno. Meglio di così non possiamo fare: se affidassimo quella stessa parte di parità (tutti 1) ad una
parola di codice avente una parte sistematica con due ’1’
4 Senza perdere in generalità, in quanto per ogni codice è possibile trovarne un equivalente sistematico.
77
78 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
n k code-rate Rc
3 1 1/3
7 4 4/7
15 11 11/15
000..0110..000 | 111...11
parte sistematica (peso 2) | parte di parità (peso n-k)
potremmo pensare di aver fatto meglio in quanto distiamo dalla parola di tutti zeri n − k + 2. Tuttavia
questa non sarebbe la distanza minima del codice, perché esisterebbe sicuramente una codeword con un ’1’
in meno nella parte sistematica e una parte di parità diversa da quella di tutti uni (mettiamo, per esempio,
con un ’1’ in meno):
000..010..000 | 111..101..11
parte sistematica (peso 1) | parte di parità (peso n-k-1)
Questa parola di codice avrebbe un numero di uni inferiore a quello della parola di peso n − k + 2 e
quindi si candiderebbe ad essere quella di peso minimo; se così fosse (e sarebbe un caso fortunato),
avremmo ottenuto una distanza minima del codice addirittura inferiore rispetto a quella del Singleton
bound (n − k − 1 + 1 = n − k < n − k + 1).
Se il codice ha distanza minima pari a n − k + 1 allora viene denominato maximum distance separable
code (MDSC). Ma è poi così importante disporre di un codice MDSC? Apparentemente sì, ma in realtà in
GF(2) gli unici codici ad avere questa proprietà sono quelli a ripetizione, che sappiamo non essere proprio
brillantissimi. . . Ma d’altronde chi ha mai detto che i MDSC sarebbero stati i migliori a prescindere?
n = 2n − k − 1
dove 2n−k è il numero di configurazioni possibili per vettori lunghi n − k e il −1 serve ad escludere la
parola di tutti zeri. In tabella 5.5 riportiamo alcuni valori di n e k ammissibili per i codici di Hamming
(ma si potrebbe ovviamente continuare). I codici di Hamming vengono detti codici perfetti in quanto un
qualunque vettore di lunghezza n o è una codeword oppure è distante
dmin − 1
⌊ ⌋
78
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 79
∙ p(ci ∣y) la probabilità (a posteriori) che sia stato trasmesso ci sapendo che è stato ricevuto y.
Qual è il criterio di scelta a minima probabilità d’errore per il nostro decisore? La Teoria della Decisione
ci suggerisce di prendere la parola che massimizza la probabilità a posteriori (MAP, Maximum a-posteriori
detection):
ĉm = arg max p(ci ∣y) (5.11)
c∈𝒞
Possiamo poi applicare il criterio di Bayes:
p (y ∣c ) p (c)
p (c ∣y ) = (5.12)
p (y)
La quantità p (y ∣c ) viene denominata funzione di verosimiglianza (likelyhood function). Al variare di c si
modifica, della 5.12, solo il numeratore, dunque il decodificatore MAP massimizza quest’ultimo:
Nel caso i simboli siano equiprobabili le probabilità p(ci ) saranno pari a 1/M (dove M è il numero
totale di parole d’informazione): in questo caso si parla di maximum likelyhood detection (criterio ML) e il
decodificatore deve limitarsi a massimizzare
ĉm = arg max p(y∣c) (5.13)
c∈𝒞
Quindi si ha:
n n
p(r∣c) = ∏ p ( ri ∣ ci ) = ∏ pdH (ri ,ci ) ⋅ (1 − p)(1−dH (ri ,ci ))
i =1 i =1
79
80 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
Le quantità all’esponente (sommatorie della distanza di Hamming fra bit) possono essere viste come
distanze di Hamming calcolate sui vettori:
∑ d H (ri , ci ) = d H (r, c)
i
∑ (1 − d H (ri , ci )) = n − d H (r, c)
i
Dunque:
( )d H (r,c)
n−d H (r,c) p
p(r∣c) = p d H (r,c)
⋅ (1 − p ) = ⋅ (1 − p ) n
1− p
La quantità che il decoder deve massimizzare è il primo fattore, quello in cui compare c:
( )d H (r,c)
p
1− p
p
Ma se la base è minore di 1 (ed è questo il caso, perché 1− p è minore di 1 quando p < 0, 5), l’esponenziale
è massimo quando è minimo l’esponente, ovvero quando è minimo d H (r, c). Ecco quindi trovata una
formulazione alternativa e molto significativa (anche se apparentemente ovvia) del criterio ML:
Tradotto in parole povere, il decodificatore ottimo è quello che decide in base alla minima distanza di
Hamming: ricevuto il vettore r, il decoder propenderà quindi per la parola di codice c con meno bit
differenti rispetto a r stessa.
1. ricevere r, calcolare la distanza di Hamming con le 2k parole di codice e scegliere quella a distanza
minima;
Come accennato poco fa, tuttavia, questi metodi non sono molto performanti: k può infatti diventare
consistente e 2k ’esplodere’, cosa che non possiamo assolutamente permetterci. Fortunatamente esiste un
terzo metodo: sappiamo infatti che
Hc T = 0 = cH T
Supponiamo di poter prendere r e di moltiplicarla per H T :
r ⋅ H T = (cm + e) H T = 0 + eH T = s
Il vettore s viene chiamato sindrome dell’errore; il numero di possibili sindromi è pari a 2n−k e ad ognuna
di esse è associato un pattern d’errore ovvero il vettore e che, moltiplicato per H T , restituisce la s stessa
e che corrisponde quindi alla ’mappa’ dei bit invertiti nel passaggio attraverso il canale rumoroso. La
tabella in cui vengono messi in corrispondenza le sindromi e i pattern d’errore (di peso minimo, visto che
80
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 81
s1 = 0 c1 =0 c2 ... c 2k
s2 e2 c2 + e2 ... c 2k + e 2
.. .. .. ..
. . . ... .
s 2n − k e 2n − k c 2 + e 2n − k ... c 2k + e 2n − k
per ipotesi si vuole utilizzare il criterio ML) è chiamata tabella di decodifica (vedi tabella 5.6). Dunque da
r calcoliamo s, poi dalla tabella determiniamo il pattern d’errore di peso minimo e infine lo sommiamo ad
r per ottenere ĉm . Si noti che, fatta l’ipotesi di aver sbagliato per la parola più vicina, se e non è il pattern
di peso minimo, il decodificatore produce una parola di codice corretta ma diversa da quella trasmessa.
Siccome poi si ha che la generica sindrome sl è generata da el , ma anche da el + ck , ∀k in quanto si ha
(el + ck )H T = el H T + ck H T
| {z }
=0
è possibile estendere la tabella di decodifica aggiungendo 2k − 1 colonne che considerino anche i casi
non di peso minimo. Così facendo si crea lo Standard Array (o matrice canonica, vedi tabella 5.7), in cui
vengono riportati le sindromi e tutti i modi in cui tali sindromi possono essere ottenute a partire dalle
varie parole di codice valide. Ogni riga (coset) corrisponde a una determinata sindrome, ogni colonna ad
una parola di codice (sommata di volta in volta con tutti i possibili pattern d’errore); la prima colonna
(quella più a sinistra) è chiamata coset leader in quanto contiene gli errori di peso minimo.
ESEMPIO:
Abbiamo la seguente matrice per un codice (5,2):
[ ]
1 0 1 0 1
G=
0 1 0 1 1
Ad essa corrisponde la seguente matrice di controllo parità:
⎡ ⎤
1 0 1 0 0
H=⎣ 0 1 0 1 0 ⎦
1 1 0 0 1
Vogliamo riempire il relativo standard array ; per calcolare la sindrome eettuiamo la seguente opera-
zione:
⎡ ⎤
1 0 1
⎢ 0 1 1 ⎥
T T T
⇒ 23 sindromi
⎢ ⎥ [ ]
s = rH = (cm + e) H = eH = e ⋅ ⎢
⎢ 1 0 0 ⎥ = s1
⎥ s2 s3
⎣ 0 1 0 ⎦
0 0 1
Dopodiché ci serviamo di questa relazione per riempire la nostra matrice canonica (vedi tabella 5.8): in
neretto sono evidenziate le parole di codice valide. Le righe successive si possono costruire sommando
il pattern d'errore di peso minimo (seconda colonna) alle rispettive parole valide. Supponiamo, per
esempio, di ricevere 10011: moltiplicando tale vettore per la matrice HT otteniamo 110. A questo
punto consultiamo lo standard array e otteniamo la stringa 11000, la sommiamo a 10011 e otteniamo
inne la decisione del decoder (01011).
81
82 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
s e
000 00000 01011 10101 11110
001 00001 01010 10100 11111
010 00010 01001 10111 11100
011 00100 01111 10001 11010
100 01000 00011 11101 10110
101 10000 11011 00101 01110
110 11000 10011 01101 00110
111 10010 11001 00111 01100
questa l’unica scelta possibile: possiamo per esempio optare per un decoder a distanza limitata il che
significa, se manteniamo la raffigurazione visiva introdotta con la figura 5.6, tracciare delle circonferenze
attorno a ciascuna parola di codice e rendere tali circonferenze le nostre regioni di decisione. Il raggio
delle circonferenze dev’essere chiaramente imparentato con la distanza minima fra le codewords: esso
deve infatti valere al massimo
dmin − 1
⌊ ⌋
2
dmin − 1
⌊ ⌋
pena l’insorgere di ambiguità (vedi figura 5.7). Un decoder ML può quindi correggere fino a
2
errori oppure rivelarne dmin = 1 (se viene utilizzato solo come rilevatore).
La soluzione appena illustrata (bounded distance decoding) è chiaramente sub-ottima in quanto, se il
vettore ricevuto sta al di fuori di una circonferenza, il decoder non è in grado di decidere (vedi sempre
figura 5.7). Chiaramente, un decoder ML non lascerebbe fuori alcun punto ma coprirebbe tutto lo schema;
il rovescio della medaglia di questo aspetto sta tuttavia nel fatto che, se si verificano troppi errori, il
decoder deciderà per una parola sbagliata interpretandola come corretta (risultato catastrofico).
Fortunatamente è possibile propendere per una strategia mista, che comporta l’utilizzo di sfere piccole
(che non coprano tutto lo schema) all’interno delle quali è possibile la correzione, mentre negli interstizi
non coperti fra le sfere è possibile solo la rilevazione (alla quale si reagisce mettendo in funzione un
82
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 83
Se p è piccola (auspicabile) il termine dominante sarà in realtà il primo della sommatoria e quindi potremo
scrivere: ( )
n
Pe ≈ p t +1
t+1
Molto probabilmente, se il decoder fallisce scegliendo una parola (corretta) ma diversa da quella che è
stata trasmessa, deciderà per la parola a distanza dmin da quella ’vera’: in questo modo sbaglieremo il
dmin
n % di bit della nostra codeword. La probabilità di errore per bit sarà quindi:
numero bit sbagliati
Peb ≈ ⋅ (Probabilità di sbagliare) =
bit totali per codeword
( ) ( )
d n dmin n 2t + 1
= min Pe ∼= p t +1 = p t +1
n t+1 n t+1 n
La probabilità di rivelare l’errore (ma non di correggerlo) è invece:
n ( )
n
Pmis ⩽ Pr {più di dmin − 1 errori} = ∑ p m (1 − p ) n − m
m=d
m
min
Fra tutti i codici, gli unici ad avere la proprietà interessante di contenere tutti i possibili punti all’interno
delle sfere (e di non avere quindi elementi negli interstizi) sono i cosiddetti codici perfetti (come ad
esempio i codici di Hamming, vedi paragrafo 5.10).
6 Il leq indica che delle volte finiamo negli interstizi, quindi chiediamo la ritrasmissione e possiamo considerare questo caso come
83
84 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
Dunque, siccome y è il risultato della somma fra un valore costante (cmk ) ed una variabile aleatoria
gaussiana avente parametri (0, σ2 ), avremo che:
y = 𝒩 (cmk , σ2 ) (5.16)
)n n
n n (
− ∑ 1 y −c 2
1 − 1 y −c 2 1 2( k lk )
∏ ∏ √2πσ2 e
( k lk ) k=1 2σ
p (y∣cl ) = p (yk ∣clk ) = 2σ2 = √ e
k =1
| {z } k =1 2πσ2 (5.17)
v.a. gaussiana
| {z }
produttoria ⇔ no memoria
Osservando che
n
∑ (yk − clk )2 = d2E (y, cl )
k =1
(dove d E è la distanza euclidea, così chiamata in quanto continua), che l’esponente della 5.17 è negativo e,
infine, che il decodificatore a massima verosimiglianza (ML) cerca di massimizzare la funzione 5.17, si ha
il seguente criterio:
arg max p (y∣cl ) = arg min d E (y, cl ) (5.18)
cl cl
Il decodificatore ML lavora perciò basandosi sul criterio della minima distanza euclidea. Volendo ulterior-
mente sviscerare le nostre formule possiamo elaborare il seguente termine:
n n ( ) n
d2E (y, cl ) = ∑ (yk − clk )2 = ∑ y2k + c2lk − 2yk clk = ∥ y ∥2 + ∥ c l ∥2 −2 ∑ yk clk
k =1 k =1 k =1
| {z } | {z }
energia Ey energia El | {z }
correlazione
84
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 85
ESEMPIO:
Come indicato in gura 5.9, vogliamo trasmettere una certa forma d'onda (x (t) in corrispondenza
del bit d'informazione '0' e − x (t) per il bit d'informazione '1'), avente energia E = Ebc , attraverso
un canale AWGN con parametro N0 per la densità spettrale di potenza monolatera (forma d'onda del
rumore: ν(t)).
Il generico campione yk della forma d'onda in uscita dal canale sarà quindi la somma di:
yk = cmk + νk
√
|{z} √
|{z}
(
N0
) (5.19)
+ E oppure − E 𝒩 0, 2
√
Se ora dividiamo per E otteniamo la stessa somma ma diversamente normalizzata:
yk = cmk + νk
|{z} |{z}
+1 −1 N
( )
oppure
𝒩 0, 2E0
bc
Come funziona il decoder a minore distanza euclidea? Supponiamo che il nostro codice contenga le
seguenti due parole
trasmissione antipodale
𝒞 = {(0, 0, 0) , (1, 1, 1)} −−−−−−−−−−−−−→ 𝒞 ant = {(1, 1, 1) , (−1, −1, −1)}
Siccome d2E2 < d2E1 il decoder propenderà per la parola (+1, +1, +1) = (0, 0, 0)bit .
In soldoni, la somma delle probabilità dei vari eventi presi singolarmente non potrà mai essere inferiore
della probabilità dell’unione di tali eventi. La cosa è molto intuitiva: alcuni eventi possono intersecarsi (si
85
86 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
pensi alle intersezioni nei Diagrammi di Venn) e, mentre somma delle probabilità conta due volte queste
intersezioni (cioè una volta per ogni evento), l’unione le quantifica una volta soltanto. Applichiamo ora
questo union bound alla trattazione del decoder ML:
Per lo union bound, questa probabilità sarà inferiore alla seguente somma di probabilità (ognuna delle
quali è denominata pairwise error probability Pep (cm , cl ):
M { } M
Pr (errore ∣cm ) ⩽ ∑ Pr d2E (cl , y) < d2E (cm , y) ∣cm = ∑ Pep (cm , cl )
| {z } l ∕=m,l =1 l ∕=m,l =1 (5.21)
da unione di eventi... | {z }
...a eventi singoli presi a coppie
k k
k k k k
(5.22)
Esaminando bene l’ultimo termine:
⎧ ⎫
⎨
⎬
Pr ∑ lk mk
( c − c ) 2
< 2 ∑ k lk mk
ν ( c − c )
k k
| {z } | {z }
2
distanza euclidea d E (cl, cm ) combinazione lineare di gaussiane (un’altra gaussiana)
⎩ ⎭
La gaussiana a cui si fa riferimento sarà una variabile aleatoria, che chiameremo Z, avente i seguenti
parametri: ⎛ ⎞
⎜ ⎛ ⎞ ⎟
( ) ⎜ ⎟
⎜ 1 ⎟
Z ∼ 𝒩 0, ∑ 4(clk − cmk ) σ2 2 ⎟ ∑ (clk − cmk ) ⎟ 2
⎜ ⎟
= 𝒩 ⎜0, 4 ⎜
⎜
E
⎟
2 bc |k
⎝ ⎠
k
⎜ ⎟
⎜ }⎟
⎝ N0 {z ⎠
| {z } d2E (cl ,cm )
σ2
Ora che sappiamo i parametri della gaussiana, possiamo - tramite la funzione erfc - determinare qual è la
probabilità indicata nella relazione 5.22:
⎛ ⎞
⎜ ⎟
{ } ⎜ ⎟ ⎛√ ⎞
⎜
d 2 (c , c ) ⎟
d 2 (c , c ) E
1 ⎟ = 1 erfc ⎝
∑ (clk − cmk )2 < 2 ∑ νk (clk − cmk ) E l m E l m
⎜ ⎟ bc ⎠
Pr = erfc ⎜
⎜v
2 u N
⎟ 2 4N 0
k k
⎜ u2 ⋅ 2d2E (cl , cm ) 0 ⎟
⎜u ⎟
⎝⎷ Ebc ⎠
| {z }
la varianza!
86
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 87
Ora possiamo invece osservare che ciascun bit a differenziare le parole cl e cm dà un contributo pari a 4
come indicato dalla seguente relazione:
[(+1) − (−1)]2 = 4
}
⇒ d2E (cl , cm ) = 4d H (cl , cm )
[(−1) − (+1)]2 = 4
Sostituendo: ⎛√ ⎞ (√ )
1 d2E (cl , cm ) Ebc 1 Ebc
erfc ⎝ ⎠ = erfc d H (cl , cm )
2 4N0 2 N0
Quest’ultimo contributo, come abbiamo già accennato, rappresenta una formulazione alternativa della
pairwise error probability. Sommando ora i contributi di tutte le parole l ∕= n (nella relazione 5.21 c’era
una sommatoria che poi dopo abbiamo tralasciato per semplicità) otteniamo:
2k (= M )
(√ )
1 E
Pe∣cm ⩽ ∑ erfc d H (cl , cm ) bc
l =1,l ∕=m
2 N0
La probabilità d’errore Pe sarà una media su tutte le parole di codice (supponendo queste equiprobabili):
√
M M
1 1 1 Ebc
Pe = ∑ Pe∣cm = ∑ Pe∣cm ⩽ ∑ ∑ erfc d H (cl , cm )
M
m=1 |{z}
M m =1
2M m l ∕=m N0
p(cm )
Quest’ultima espressione è lo union bound sulla probabilità d’errore per la decodifica soft-decision dei codici
a blocco: essa fornisce un limite superiore per la probabilità d’errore. Osserviamo ora che il set di distanze
(cioè l’insieme delle distanze fra le varie parole di codice) è sempre lo stesso qualsiasi sia la parola cm
dalla quale partiamo, in quanto stiamo in realtà calcolando dei pesi di Hamming e, per le proprietà dei
codici a blocco, sommando due parole di codice si ottiene un’altra parola di codice: le distanze saranno
quindi sempre quelle, visto che le parole sono ’intercambiabili’ all’interno di tale set. Possiamo dunque
scegliere una parola (ed esempio quella di tutti zeri c1 , ma è indifferente) e rimuovere la sommatoria in m
e moltiplicare tutto per M:
√
1 M 1 M
v
uE Ebc
Pe = Pe∣cm = Pe∣c1 ⩽ ∑ erfc u bc
d H ( c1 , c ) = ∑ erfc w
2 l =2 ⎷N
0 | {z l } 2 l =2 N0 l
=peso (c1 parola di zeri)
Possiamo inoltre eliminare alcuni elementi dalla sommatoria, visto che il codice avrà una sua distanza
minima e sarà quindi sufficiente utilizzare, come estremo inferiore, dmin (ricordiamo inoltre che il peso w
rappresenta la distanza dalla parola di tutti zeri, ovvero il numero di ’1’ contenuti nella codeword). Se Ad
è il numero di parole di peso d possiamo scrivere:
√ √ √
1 M Ebc 1 M Ebc 1 M Eb Rc
Pe ⩽ ∑ erfc
2 d=∑ 2 d=∑
wl = Ad erfc d= Ad erfc d (5.23)
2 l =2 N0 d
N0 d
N0
min min
Eb
Se il rapporto N 0
è grande, nella sommatoria i contributi maggiori verranno dalla parole con distanza più
vicina a dmin (se l’erfc aumenta troppo poi il suo contributo tende a calare). Quindi possiamo dare una
versione approssimata dello union bound e anche un termine in grado di maggiorarlo (facciamo finta che
tutte le parole tranne quella di tutti zeri abbiano distanza dmin così viene massimizzato l’effetto dell’erfc
con dmin al suo interno):
⎧ √
A dmin E Rc
erfc dmin b
√ ≈
M 2 N0
1 E Rc ⎨
Pe ⩽ ∑
2 d=d
Ad erfc d b
N0
√
M−1 E Rc
erfc dmin b
min
⎩⩽
2 N0
87
88 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
Ad d
1 0
7 3
7 4
1 7
Volendo, possiamo trovare la probabilità d’errore sul singolo bit ipotizzando di sbagliare per una parola
a distanza dmin da quella corretta e scrivendo quindi:
dmin
Peb = Pe
n
ESEMPIO:
Hamming (7,4) su AWGN, ML Soft-decision decoding
In tabella 5.9 è presente il set di distanze di Hamming. In base ad esso possiamo usare la formula
5.23 per trovare il limite superiore alla probabilità di errore:
√ √ √ √
1 M E Rc 1 E 4 1 E 4 1 Eb 4
2 d=∑
Pe ⩽ Ad erfc d b = ⋅ 7 ⋅ erfc 3 ⋅ b + ⋅ 7 ⋅ erfc 4 ⋅ b + ⋅ 1 ⋅ erfc 7⋅
d
N0 2 N0 7 2 N0 7 2 N0 7
min
Il decodicatore soft fa quindi i suoi 1 + 7 + 7 + 1 = 16 confronti e poi decide con un bound alle
prestazioni che è quello appena scritto. Nel caso hard-decision, invece, la probabilità d'errore era la
seguente:
n ( ) n ( ) ( )
n n n
Pe ⩽ ∑ m
p m (1 − p ) n − m = ∑ m
p m (1 − p ) n − m = 1 − ∑ m
p m (1 − p ) n − m
m = t +1 m =2 m=0,1
| {z }
proprietà delle distribuzioni statistiche
Provando a gracare le due probabilità di errore si scopre che, volendo una probabilità d'errore pari a
10−6 :
∙ possiamo risparmiare 0,6 dB di SNR rispetto al caso non codicato con Hamming (7,4) e
hard-decision;
∙ possiamo risparmiare ulteriori 2 dB (!) di SNR se usiamo la soft-decision.
Uno dei grossi vantaggi sta nel fatto che possiamo mantenere il codificatore originale! Siccome l’imple-
mentazione del codificatore è quella che dà più grane a un progettista, questo aspetto va particolarmente
88
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 89
considerato. Purtroppo tutto ciò viene ad un prezzo consistente nell’abbassamento della code-rate: infatti7
k−l k
<
n−l n
( c n −1 , c n −2 , . . . , c 1 , c 0 )
( c n −2 , . . . , c 1 , c 0 , c n −1 )
In un codice ciclico, tale parola è ancora una parola di codice, così come tutte le altre n − 2 parole che è
possibile calcolare a partire da queste tramite ulteriori scorrimenti ciclici.
Codici di questo tipo si studiano associando polinomi (di grado massimo n − 1) ai vettori (lunghi n):
c ⇒ C ( D ) = c n −1 D n −1 + c n −2 D n −2 + . . . c 1 D + c 0
La variabile D è una variabile ausiliaria, mentre i coefficienti sono da considerarsi modulo 2, visto che
lavoriamo in GF(2). Shiftando di una posizione:
C (1) ( D ) = c n −2 D n −1 + c n −3 D n −2 + . . . c 0 D + c n −1
C (D)
D
D n −1
In altre parole, si ha che
C (1) ( D ) ≡ D ⋅ C ( D ) mod ( D n − 1) (5.24)
dove tale simbologia sta ad indicare che tali quantità restituiscono lo stesso resto se divise per Dn − 1.
Reiterando questo principio otteniamo:
C (i ) D ≡ D i C ( D )
Esiste una codeword di grado minimo? Indicandola con g( D ) è facile mostrare che tale parola ha sempre
questa forma8 :
g ( D ) = D n−k + ...qualcosa... + 1
Inoltre, essa è unica: se infatti ne esistessero due, e le sommassimo, il grado diminuirebbe (siamo in
modulo due quindi il coefficiente col termine D di grado maggiore diventerebbe pari a zero) ma ciò
farebbe per assurdo cadere l’ipotesi che quelle fossero le codeword di grado minimo. La nostra parola di
grado minimo, per come l’abbiamo strutturata, avrà quindi tanti zeri in testa:
Come sono fatti gli scorrimenti ciclici di questa parola di grado minimo? Iniziando con uno shift di una
posizione, dovremmo trovare il resto di
Dg ( D )
Dn − 1
7 Dimostrazione:
k−l k n (n − l ) − k (n − l )
< ⇒ <1
n−l n n (n − l )
n−k
<1
n
k
− <0
n
8 La presenza dell’uno, lì in fondo, è necessaria: se non ci fosse potrei infatti shiftare il tutto per ottenere una parola di grado
inferiore.
89
90 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
ma il resto di tale frazione è direttamente Dg( D ) in quanto tale termine ha grado inferiore ad n. Il vettore
associato a questo primo scorrimento sarà:
Reiterando questo stesso procedimento, anche D2 g( D ) sarà una parola di codice, dunque possiamo pro-
seguire finché il primo ’1’ in testa non arriva nell’ultima posizione a sinistra, eventualità che si verifica al
k − 1-esimo shift:
D k −1 g ( D )
Dn − 1
In tal caso il nostro vettore associato avrà forma:
Con questi shift abbiamo ottenuto k parole di codice linearmente indipendenti (le quali possono quindi
costituire una base k-dimensionale):
g ( D ) , Dg ( D ) , D2 g ( D ) , . . . , D k−1 g ( D )
Questo semplice prodotto ci permette quindi di scrivere tutte le parole del codice: per questo motivo la
preziosissima g( D ) viene denominata polinomio generatore del codice ciclico. Essa individua esattamente
il nostro codice e ne individua le proprietà.
Le condizioni perché un certo polinomio possa fregarsi dello status di generatore sono due:
∙ se 𝒞 è l’insieme dei polinomi g( D ) e Q( D ), ovvero il nostro codice (n, k) ciclico, il polinomio gene-
ratore è divisore di D n − 1.
Dimostrazione: abbiamo la seguente corrispondenza
Allora:
Dg ( D ) ⇔ (0, . . . , 0, 1, . . . qualcosa . . . , 1, 0)
Come abbiamo visto, questo giochetto funziona fino a D k−1 g( D ), polinomio di grado esattamente
n − 1 corrispondente ad un vettore con un ’1’ in testa. Se ora ostinatamente reiteriamo il processo e
moltiplichiamo per D k otteniamo:
D k g ( D ) = g ( k ) ( D ) + ( D n − 1)
Ma g(k) ( D ) è ancora una parola di codice, la quale può essere scritta come
Q̃( D ) g( D )
dunque: ( )
D k g( D ) = Q̃( D ) g( D ) +( D n − 1) ⇒ g ( D ) D k + Q̃( D ) = D n − 1
| {z }
g(k) ( D )
Abbiamo quindi fatto vedere che, fra i fattori di D n − 1, vi è g( D ), il che equivale a dire che tale
polinomio è divisore di D n − 1;
C (1) ( D ) = DC ( D ) + cn−1 ( D n − 1)
90
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 91
Ma ora, visto che per ipotesi g( D ) è un divisore di D n − 1, possiamo effettuare le seguenti sostitu-
zioni (p( D ) è un polinomio generico):
C (1) ( D ) = D Q ( D ) g ( D ) +Cn−1 g ( D ) P ( D ) = g ( D ) ( DQ ( D ) + Cn−1 P ( D ))
| {z } | {z } | {z }
C(D) D n −1 polinomio Q̃( D )
Dunque C (1) è una parola di codice; ciò dimostra che quest’ultimo è effettivamente ciclico.
ESEMPIO:
Quali sono i codici ciclici con n = 2?
Il polinomio generatore g( D ) dev'essere divisore di D2 + 1 che, in GF(2), può essere scritto come
( D + 1)( D + 1). Non abbiamo quindi altre possibilità all'infuori di:
g(d) = D + 1
Ricordiamo poi che si ha
C ( D ) = Q( D ) g( D )
e che il grado di Q( D) è al massimo k − 1: in questo caso k − 1 = 1 − 1 = 0 dunque Q( D ) assume
i valori 0 e 1. Possiamo ora ricavare le parole di codice:
0 ⋅ g ( D ) =′ 00′
{
C (D) =
1 ⋅ g ( D ) =′ 11′
Ecco quindi ricavato l'unico possibile codice ciclico di lunghezza 2.
ESEMPIO:
Quali sono i codici ciclici con n = 3?
Qui la cosa si fa più interessante, perché abbiamo due potenziali polinomi generatori:
( )
D 3 + 1 = ( D + 1) D 2 + D + 1
∙ se scegliamo come polinomio generatore il polinomio di grado 1
g( D ) = D + 1
otteniamo un codice con parametri (n − k) = (3, 3 − 1) = (3, 2). Dalla relazione
C ( D ) = Q( D ) g( D )
intuiamo che le parole di codice sono tutte quelle che si annullano in D = 1 (valore per il
quale g( D) è sicuramente zero), ovvero tutte le parole con un numero pari di '1' (sommando
un numero pari '1', in GF(2), otteniamo uno zero). Dunque questo codice ciclico è un codice di
parità in versione ciclica;
∙ se scegliamo come polinomio generatore il polinomio di grado 1
g( D ) = D2 + D + 1
otteniamo un codice con parametri (n − k) = (3, 3 − 2) = (3, 1). Ci troviamo in questo caso
in una situazione molto simile a quella dell'esempio precedente: si ha
C ( D ) = Q( D ) g( D )
Tuttavia il grado di Q( D ) è al massimo k − 1, ma k − 1 = 1 − 1 = 0 dunque Q( D ) assume i
valori 0 e 1.
′ ′
{
0 ⋅ g ( D ) = 000
C (D) =
1 ⋅ g ( D ) =′ 111′
Anche questa volta spunta fuori un codice a ripetizione.
ESEMPIO:
Quali sono i codici ciclici con n = 7?
Osservando le seguenti possibili scomposizioni
( ) ( )( )
D 7 + 1 = ( D + 1) D 5 + D 4 + D 3 + D 2 + D + 1 = ( D + 1) D 3 + D 2 + 1 D 3 + D + 1
91
92 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
(n, k) g( D )
(7, 7) 1 No parity code: vengon fuori tutte le n-ple
(7, 6) D+1 Parole di codice = parole di peso pari (overall parity check code)
(7, 4) D3 + D2 + 1 Hamming (7,4)
(7, 4) D3 + D + 1 Hamming (7,4)
(7, 3) ( D + 1)( D3 + D2 + 1) Hamming (7,4) + parità imposta da ( D + 1)
(7, 3) ( D + 1)( D3 + D + 1) Hamming (7,4) + parità imposta da ( D + 1)
(7, 1) ( D 6 + D 5 + . . . + 1) Codice a ripetizione (7,1)
(7, 0) D7 + 1 Il codice più inutile del mondo
E se volessimo raggiungere lo stesso risultato aggiungendo la sistematicità del codice? Questo com-
porterebbe moltiplicare per D n−k il polinomio x ( D ) della parola di informazione, in modo da elevarne il
grado a n − 1 e portarlo ’in cima’ al polinomio codificato. Dobbiamo quindi imporre che si abbia:
x ( D ) ⋅ D n−k = Q ( D ) g ( D ) + R ( D ) = C ( D )
| {z }
resto
Si ha anche:
x ( D ) ⋅ D n−k + R ( D ) = Q ( D ) g ( D ) = C ( D )
Dunque il resto R( D ) è la parte di parità della parola/polinomio di codice e va a ’riempire’ i gradi
0 → (k − 1) del polinomio C ( D ) (i gradi n → k sono invece ’occupati’ dalla parola d’informazione
precedentemente shiftata). Dunque, riassumendo, ecco come si ottiene una parola di codice nel caso di
codice ciclico sistematico:
1. calcoliamo D n−k x ( D ) il che significa, in soldoni, appendere alla parola di informazione n − k zeri in
coda;
D n−k x ( D ) mod g( D ) = R( D )
Per la moltiplicazione fra polinomi esiste il circuito in figura 5.10, mentre per la divisione quello in
figura 5.11 (i cui blocchi di ritardo - cioè di memorizzazione, dopo n colpi di clock, contengono R( D )).
Il circuito di figura 5.11 può essere specializzato al caso di codici sistematici (vedi figura 5.12): si
noti che lo switch A è chiuso durante l’elaborazione dei primi k bit (che sono necessari caricare nel ramo
di retroazione la parte sistematica da elaborare) mentre lo switch B discrimina fra la scelta della parte
sistematica e quella del quoziente della divisione (ovvero dei n − k bit successivi ai primi k, corrispondenti
ala parte sistematica che B pescava dal filo inferiore).
92
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 93
ciò che arriva al decodificatore per codici a blocco ciclici: C ( D ) è ovviamente la parola di codice, mentre
e( D ) è l’eventuale pattern d’errore causato dal canale. Anche e( D ) è un polinomio:
e n −1 D n −1 + . . . + e1 D + e0
Per capire se un polinomio fa parte del codice basta dividere ciò che si è ricevuto, cioè r ( D ), per il
polinomio generatore g( D ):
{
no errore ⇒ r ( D ) mod g ( D ) = 0
sì errore ⇒ r ( D ) mod g ( D ) = 0 + e ( D ) mod g ( D ) = s ( D )
93
94 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
S( D ) e( D )
0 0 0000000
1 1 0000001
D D 0000010
D2 D2 0000100
D+1 D3 0001000
D2 + D D4 0010000
D2 + D + 1 D5 0100000
D2 + 1 D6 1000000
r ( D ) + e( D ) = C ( D ) + e( D ) + e( D ) = C ( D )
Lavorando con i polinomi, l’hardware di codifica-decodifica risulta essere molto più semplice!
ESEMPIO:
Abbiamo il codice ciclico descritto dal polinomio generatore
g( D ) = D3 + D + 1
Ricordando che
r ( D ) mod g ( D ) = 0 + e ( D ) mod g ( D ) = s ( D )
si può ricavare la tabella 5.11.
Si noti che risulta di fondamentale importanza che la sindrome s( D ) sia diversa per ciascun caso di
correzione. Con codici più lunghi di quello mostrato in tale esempio, le cose sono molto più complicate
g( D ) = D16 + D12 + D5 + 1
il quale è divisore di
15 −1
D2 +1
Siccome abbiamo un numero pari di coefficienti, tutte le parole si annullano in D = 1 (e vengono quindi
selezionate le sole codewords di peso pari). La distanza minima di questo codice, avente parametri (215 −
1, 215 − 1 − 16), è pari a 4, dunque:
∙ ne sappiamo rilevare anche 5,7,9. . . visto che, per quanto detto poco fa, questo codice possiede anche
il meccanismo ereditato dai codici di parità.
9 Incapsulato nell’IP.
94
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 95
g( D ) = D11 + D9 + D7 + D6 + D5 + D + 1
n = 2m − 1 (5.25)
La distanza minima dei codici di Reed-Solomon, definita come il numero di simboli differenti fra i due
vettori (si tenga però presente che due simboli sono diversi anche se differiscono di un solo bit), è invece
pari al valore (sempre dispari)
n−k+1 (5.26)
Come si nota, i codici di Reed-Solomon raggiungono il Singleton Bound; inoltre, con tale codifica possiamo
correggere
n−k
t=
2
errori; come si noterà nel seguente esempio, spesso t è un parametro fissato in fase di scelta del codice ed
è utilizzato per ricavare k.
ESEMPIO:
Scegliamo di utilizzare 4 bit per simbolo. Abbiamo quindi m = 4 e n = 2m − 1 = 15, lavoriamo
in GF(4) e - volendo correggere no a t = 4 simboli - dobbiamo avere un parametro k pari a
k = n − 2t = 7. La rate di questo codice è di circa 1/2.
ESEMPIO:
Scegliamo questa volta di utilizzare 8 bit per simbolo. La lunghezza naturale del codice sarà n =
2m − 1 = 28 − 1 = 255. Volendo correggere t = 2 errori, k dev'essere pari a n − 2t = 251; un codice
siatto ha 4 bit di parità, ne corregge no a 2 e ha una coderate molto vicina a 1.
I codici Reed-Solomon possono essere accorciati e anche estesi. Inoltre hanno l’importante caratteristica
di difendere bene l’informazione che attraversi un generico canale in grado di introdurre errori burst (=
molti bit sbagliati consecutivi): infatti, errori consecutivi su un simbolo hanno grande probabilità di
rendere errato un solo simbolo, visto che è formato da più bit. Di seguito tratteremo altri casi di questo
genere.
95
96 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
Teorema
Ogni codice ciclico può rilevare tutti i burst di lunghezza b ≤ n − k. Questo significa che il polinomio
errore e( D ) avrà in generale la seguente forma
dove il Di sta ad indicare la posizione assoluta della sequenza di bit errati. Supponiamo di voler solo
rilevare (e non correggere) e ricordiamo che si ha:
Se abbiamo un polinomio e( D ) di grado inferiore a n − k il resto della divisione dev’essere per forza
diverso da zero, dato che g( D ) ha grado n − k; dunque e( D ), in questo caso, fungerebbe (tutt’intero) da
resto. Infatti:
∙ Di è divisibile per g( D )? No, perché il polinomio g( D ) non ha radice in D = 0 dato che finisce
sempre per 1;
Essendo il resto sempre diverso da zero, la rivelazione di errori burst può essere effettuata.
Fra i più importanti codici ciclici per la correzione dei burst di errore citiamo i codici di Fire (usati nel
GSM).
ESEMPIO:
In gura 5.13 vediamo lo schema di codica per un codice MLSR duale al codice di Hamming (7,3).
Risulta interessante notare che le sequenze in uscita hanno la caratteristica di essere pseudo-casuali,
visto che sono grossomodo bilanciate fra bit a 0 e bit a 1. Inoltre, si hanno mediamente
∙ etc. . .
96
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 97
n −1
1
R x (k) =
n ∑ xi xi +k
i =0
Questa vale 1 quando k = 0 + ln (l intero, zero compreso) e −1/n altrove10 . Questa caratteristica fa
avvicinare le sequenze pseudo-casuali a quelle veramente casuali, per le quali vale:
{
1 per k pari a 0
R X ( k ) = E [ xi xi +k ] =
0 per k diverso da 0
Le due funzioni di autocorrelazione si somigliano, a meno del valore − n1 (che per n → ∞ tende comunque
a zero) e per la periodicità.
Queste sequenze vengono utilizzate per gli scopi più vari (ad esempio per ottenere sequenze ran-
dom, per lo scrambling11 , per la crittografia o per evitare che lunghe sequenze di 0 e di 1 ostacolino la
sincronizzazione fra sistemi di telecomunicazione).
10 Proposta di dimostrazione: ricordando che xi può assumere il valore 1 o il valore -1 (segnalazione antipodale):
1 n −1 2 nxi2
⎧
k = 0 + ln ⇒ ∑ xi = = xi2 = sempre 1
1 n −1
⎨ n i =0 n
n i∑
R x (k) = xi xi +k =
=0 1 n −1 1 1
n i∑
⎩ altrove ⇒ xi xi+k = (−1) = −
=0
n n
Si noti che nel penultimo passaggio abbiamo usato l’ipotesi che n sia dispari (non può essere altrimenti, visto che è pari a 2m − 1);
essendo la sequenza grosso modo bilanciata, avremo un numero di bit a zero (valore +1) pari al numero di bit a uno (valore −1)
meno uno (o più uno, dipende!). La sommatoria, dunque, coinvolgerà un numero dispari di termini: n2 di questi varranno −1
(moltiplicazione fra simboli di segno diverso), n2 − 1 varranno +1 (prodotto di simboli d’uguale segno); il risultato della sommatoria,
da dividere ancora per n, sarà dunque −1.
11 A scrambler is a device that transposes or inverts signals or otherwise encodes a message at the transmitter to make the message
unintelligible at a receiver not equipped with an appropriately set descrambling device. Scrambling is accomplished by the addition
of components to the original signal or the changing of some important component of the original signal in order to make extraction
of the original signal difficult. A scrambler (also referred to as a randomizer) is a device that manipulates a data stream before
transmitting. The manipulations are reversed by a descrambler at the receiving side. Scrambling is widely used in satellite, radio
relay communications and PSTN modems. A scrambler can be placed just before a FEC coder, or it can be placed after the FEC, just
before the modulation or line code. A scrambler in this context, has nothing to do with encrypting, as the intent is not to render the
message unintelligeable, but to give the transmitted data useful engineering properties. A scrambler replaces sequences into other
sequences without removing undesirable sequences, and as a result it changes the probability of occurrence of vexatious sequences.
Clearly it is not foolproof as there are input sequences that yield all-zeros, all-ones, or other undesirable periodic output sequences.
A scrambler is therefore not a good substitute for a line code, which, through a coding step, removes unwanted sequences.
97
98 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
98
Capitolo 6
Codici a traliccio
Si noti che i bit di uscita dipendono non solo k bit d’ingresso dell’istante presente, ma anche dai bit
precedenti: il codificatore, dunque, ha memoria! In generale il codificatore ha memoria (𝒦 − 1)k bit: ciò
significa che tiene conto di tutti bit precedenti nello shift-register oltre ai k bit d’ingresso.
ESEMPIO:
Il codicatore in gura 6.2:
∙ ha un solo shift-register all'interno del quale entra un bit alla volta;
∙ ha rate di codica 1/2 (per ogni bit che entra ne escono due);
∙ ha 2(𝒦−1)k = 22 = 4 possibili stati (σl = {00, 01, 10, 11}, dove il primo bit è xl −1 e il secondo
xl −2 );
∙ i bit d'uscita sono ottenuti tramite la combinazione lineare dei bit ( xl , xl −2 ) ≡ g2 = (5)8
(notazione in ottale per riferirsi a 101, cioè al primo e al terzo bit) e ( xl , xl −1 , xl −2 ) ≡ g2 = (7)8 ;
∙ è possibile denire un diagramma degli stati in cui si indicano i bit d'ingresso con delle frecce
e i bit d'uscita (sopra tali frecce, vedi gura 6.3).
99
100 CAPITOLO 6. CODICI A TRALICCIO
ESEMPIO:
Ad esempio, cinque transizioni sono necessarie per codicare una parola di 3 bit (3 transizioni su 5)
e per riportare sicuramente lo stato a S0 (altre 2 transizioni su 5): solo 3 bit su 5 sono quindi liberi,
dunque abbiamo 23 possibili codewords.
Più in generale, se si vuole fare in modo che il trellis finisca nello stato ’zero’ (S0 nei precedenti esempi),
si devono aggiungere in coda ai bit d’informazione (𝒦 − 1)k bit a zero (tail biting). Questi bit aggiuntivi
influiscono sulla coderate che, per m transizioni (codewords di nm bit), diventa pari a:
k ( m − 𝒦 + 1)
Rc = (6.1)
nm
100
CAPITOLO 6. CODICI A TRALICCIO 101
ESEMPIO:
Consideriamo il traliccio in gura 6.4. Partendo dallo stato iniziale S0 , se riceviamo la sequenza 00,
possiamo dire percorrendo la freccia rossa (che rimane in S0 ) di aver accumulato una distanza di
Hamming pari a 0 (la sequenza ricevuta coincide con quella sopra la freccia); viceversa, percorrendo
101
102 CAPITOLO 6. CODICI A TRALICCIO
la freccia blu (che porta in S1 ), accumuliamo distanza di Hamming pari a 2, visto che la sequenza
ricevuta 00 dierisce per due bit rispetto a quella indicata sopra la freccia. Dopo cinque transizioni,
quando la parola codicata si sarà 'esaurita', saremo in grado di determinare tutti i possibili percorsi,
ognuno dei quali avrà un proprio peso: scegliere quello minore signicherà anche propendere per la
sequenza che più probabilmente, in base al criterio ML, è stata trasmessa.
Le possibili strategie per la rivelazione della shortest route sono il calcolo della distanza di Hamming
per tutte le possibili 23 codewords oppure l’utilizzazione dell’algoritmo di Viterbi (vedi paragrafo 6.4).
∙ si mantiene, per ciascun possibile stato intermedio l, solo il percorso di lunghezza minima σ0 → σl
(percorso sopravvissuto, survivor per gli anglofoni). Ogni volta che siamo quindi indecisi fra due
percorsi andiamo a prendere solo quello più probabile;
Più formalmente, indicando con l il passo dell’algoritmo al quale ci troviamo, vengono definite tre fasi:
∙ memorizzazione: va effettuata per ogni stato e consiste nella definizione dei survivors e della lunghezza
del relativo percorso;
∙ inizializzazione: va effettuata solo per l = 0. Si parte dallo stato S0 e si definisce per l’unico possibile
survivor di lunghezza 0. Tutti gli altri percorsi si trovano invece a distanza +∞;
∙ ricorsione: si calcola, per ogni transizione, l’estensione dei cammini al passo l ed il relativo peso, che
sarà pari al peso al passo precedente (l − 1) sommato al peso della transizione. Per ogni stato finale
si determina il survivor come quello a peso minimo. Dopodiché si ripete questo procedimento fino
al termine.
L’algoritmo di Viterbi si può usare per decodificare codici convoluzionali sia nel caso di hard-decision
che di soft-decision: nel primo caso la metrica di ogni ramo va descritta in termini di distanza di Hamming,
mentre nel secondo bisogna fare riferimento alla distanza euclidea fra i campioni del ricevitore e quelli
associati al ramo.
ESEMPIO:
Mettiamoci nel caso di trasmissione antipodale su AWGN, nell'ipotesi di aver disposto tutto come nel
paragrafo 4.4. Facendo nuovamente riferimento alla gura 6.4, supponendo di trovarci al primo passo
dell'algoritmo e di aver ricevuto i valori soft (−0, 3; 1, 1), la distanza (metrica) da scrivere sul ramo
'orizzontale' (che porta nuovamente in S0 ) sarà1 :
(1 − (−0, 3))2 + (1 − 1, 1)2 = 1, 7
6.4.1 Complessità
Sia Nσ il numero di stati del trellis e NT il numero di transizioni dagli stati σl a σl +1 . Il quantitativo di
memoria richiesto sarà pari a
102
CAPITOLO 6. CODICI A TRALICCIO 103
Nσ = 2k(𝒦−1)
103
104 CAPITOLO 6. CODICI A TRALICCIO
104
Capitolo 7
7.1 Interleaving
Il saggio
Consideriamo un’applicazione particolare, cioè quella della memorizzazione dei dati su CD. Quando
poniamo il nostro ditone sulla superficie del CD non stiamo compiendo un’azione indolore, bensì creando
una valanga di errori a burst. Magari il nostro codice è in grado di correggere un certo numero di errori
per codeword e tuttavia, fatta la ditata, ci troviamo con un sacco di parole senza errori assieme ad altre
completamente sbagliate.
Facciamo ora un altro esempio: una stazione mobile (come un cellulare), non riceve un unico cammino
dalla stazione radio-base, bensì un insieme di cammini multipli dovuti a reiterate diffrazioni, riflessioni,
etc. . . Questi cammini avranno potenze e fasi molto differenti e possono sommarsi sia costruttivamente
che distruttivamente; in quest’utlimo caso, la probabilità di occorrenza di errori a burst è molto elevata.
In entrambi i casi il canale (che sia il supporto di memorizzazione del CD o il canale radiomobile) è
dotato di memoria: molti codici che solitamente funzionano bene potrebbero in tali casi fare male il loro
lavoro e impedire una corretta comunicazione.
Come possiamo fare per tutelarci da questi spiacevoli inconvenienti? La cosa migliore è sparpagliare
i bit secondo un certo criterio (interleaving), per poi ricomporli lato ricevitore in modo da diluire i bit
sbagliati in mezzo a quelli giusti. Fra i vari modi in cui possiamo effettuare l’interleaving esamineremo
quello nel seguente paragrafo (interleaving a blocco).
105
106 CAPITOLO 7. ALTRI ASPETTI RIGUARDANTI I CODICI DI CANALE
ESEMPIO:
Abbiamo un codice BCH di parametri (127,36) e una Brc di 19.200 bit/s. Supponiamo che la durata
dell'errore burst introdotto dal canale sia sempre inferiore o al limite uguale a 250 ms. Come proget-
tiamo l'interleaver ? Quanto ritardo introduce?
A 19.200 bit/s, 250 ms di errore equivalgono a 4.800 bit sbagliati. Consultando le tabelle scopriamo
che la distanza minima del nostro BCH è pari a
dmin = 2t + 1 = 31
Potendo noi tollerare al massimo 15 errori per codeword, il parametro D della matrice di interleaving
dovrà essere almeno pari a:
4800
D≥ = 320
15
Il ritardo introdotto sarà quindi pari a:
2Dn 81280
= = 4, 2 secondi
Brc 19200
Il buon senso vuole che vengano accoppiati codici in grado di completarsi l’un l’altro con le proprie
peculiarità: la NASA, per esempio, utilizza per le applicazioni deep-space un Reed-Solomon (255,233) su
GF(28 ) (ottimo per la correzione degli errori a burst) concatenato a un codice convoluzionale per sfruttare
la decodifica soft. Il codice convoluzionale viene scelto come interno, visto che il Reed-Solomon non è
facile da decodificare in maniera soft.
7.3 Turbo-codici
I Codici Turbo sono una classe di recenti codici di correzione degli errori ad alte prestazioni, che
trovano impiego nelle comunicazioni satellitari nello spazio profondo ed in altre applicazioni in cui i pro-
gettisti puntano ad avere il massimo trasferimento di informazione su una banda limitata in presenza di
un segnale ricevuto molto affetto da rumore. I Codici Turbo sono stati teorizzati da Claude Berrou, Alain
Glavieux e Punya Thitimajshima presentati nel 1993 ad una conferenza dell’IEEE. I codici turbo sono an-
cora ad oggi oggetto di ricerche in numerose università del mondo, allo scopo di raffinarli e di ottenere
implementazioni più efficienti.
106
CAPITOLO 7. ALTRI ASPETTI RIGUARDANTI I CODICI DI CANALE 107
P ( X = + 1 ∣Y ) > P ( X = − 1 ∣Y )
il decisore sceglierà per il bit 0 (valore +1). La stessa cosa può essere vista nel seguente modo:
{
P ( X = + 1 ∣Y ) se sì allora propendi per + 1
> 1? ⇒
P ( X = − 1 ∣Y ) altrimenti scegli −1
In versione logaritmica:
{
P ( X = + 1 ∣Y ) se sì allora propendi per + 1
ln > 0? ⇒
P ( X = − 1 ∣Y ) altrimenti scegli - 1
Così scrivendo, la decisione sarà il segno del nostro logaritmo. Volendo possiamo sfruttare il criterio di
Bayes:
P (Y ∣ X ) P ( X )
P ( X ∣Y ) =
P (Y )
Quindi abbiamo:
P (Y ∣ X = + 1 ) P ( X = + 1 )
⎧ ⎫
{ }
⎨ P (Y ) ⎬ P (Y ∣ X = + 1 ) P ( X = + 1 )
x̂ = sign ln = sign ln =
P (Y ∣ X = − 1 ) P ( X = − 1 )
P (Y ∣ X = − 1 ) P ( X = − 1 )
⎩ ⎭
P (Y )
⎧ ⎫
⎨ P (Y ∣ X = + 1 )
P ( X = +1) ⎬
= sign ln + ln
P (Y ∣ X = − 1 ) P ( X = −1)
⎩| {z } | {z }
⎭
primo contributo secondo contributo
Il primo contributo è imparentato con il rapporto di funzioni di verosimiglianza, mentre il secondo con la
probabilità a priori.
Supponiamo ora che i bit siano equiprobabili (cosicché il secondo contributo svanisce):
{ }
P (Y ∣ X = + 1 )
x̂ = sign ln
P (Y ∣ X = − 1 )
Osserviamo lo schema di codifica/decodifica in figura 7.1: in essa si nota che i due decodificatori, che lavo-
rano con valori soft, sono retroazionati cosicché il risultato del primo decodificatore viene dato al secondo
come probabilità a priori. Vista l’esistenza di questi contributi, che entrano nella catena di decodifica
come informazioni aggiuntive apportate di volta in volta dai vari decoder, viene a cadere l’equiprobabilità
dei simboli. Anche il secondo decoder, comunque, ha qualcosa da dire e lo passa al terzo decoder (che
strutturalmente è uguale al primo) e così via. Se riusciamo ad evitare il feedback positivo (che, come sap-
piamo da Controlli Automatici, nuoce gravemente alla salute del sistema) riusciamo, grazie questa catena,
a raffinare sempre di più la stima e a convergere verso un risultato incredibilmente preciso. I turbo-codici
hanno infatti una capacità di correzione d’errore veramente impressionante: la curva della BER va giù a
strapiombo anche nelle regioni a basso rapporto segnale-rumore (regione ’waterfall’). Purtroppo, questo
avviene solo fino a determinati valori di SNR: andando oltre, la BER smette di calare vigorosamente e,
anzi, tende a non migliorare più di tanto (regione ’error floor’).
107
108 CAPITOLO 7. ALTRI ASPETTI RIGUARDANTI I CODICI DI CANALE
Giusto per capire qualitativamente il principio di questi codici (in realtà molto complessi), esaminiamo
la figura 7.2: supponiamo che y3 sia il bit di parità calcolato a partire da y1 e y2 . Avremo allora che:
7.4.1 QC-LDPC
Fra i codici LDPC si trova la sottofamiglia del QC-LDPC (Quasi-Cyclic Low Density Parity Check): essi
vengono creati affiancando matrici circolanti al fine di creare la matrice di parità del codice H. Le matrici
circolanti hanno la caratteristica di poter essere descritte tramite la loro sola prima riga (detta anche riga
generatrice), in quanto le righe successive sono ottenute dalla prima attraverso shift ciclici. Questo metodo
di costruzione ha due importanti vantaggi:
1 Matrice che presenta un numero di ’1’ molto inferiore rispetto al numero di ’0’.
108
CAPITOLO 7. ALTRI ASPETTI RIGUARDANTI I CODICI DI CANALE 109
∙ viene sensibilmente ridotta la routing complexity delle interconnessioni nei circuiti che implementano
il decoder e l’encoder;
∙ la complessità di codifica è lineare rispetto alla lunghezza del codice (vengono usati degli shift
registers).
109
110 CAPITOLO 7. ALTRI ASPETTI RIGUARDANTI I CODICI DI CANALE
110
Elenco delle figure
111
112 ELENCO DELLE FIGURE
112
Elenco delle tabelle
113