Professional Documents
Culture Documents
Ing. Pazzo
9 settembre 2009
2
Si consiglia di affiancare il materiale presente in questo riassunto agli appunti presi a lezione. Questo
perché (ovviamente!) non si vuole avere alcuna presunzione di esaustività, né di assoluta correttez-
za: 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3 Dunque è tutto perduto? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.4 Il limite di Shannon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5 Antipodal Signalling AWGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.6 Hard decision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.7 Unquantized output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.8 Low SNR region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.9 Trattamento dei segnali passa-banda e water-filling . . . . . . . . . . . . . . . . . . . . . . . . . 63
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!?) . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
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 teoriche
su cui si fonda la scienza dell’informazione. La sua nascita è relativamente recente: essa viene solita-
mente fatta risalire al 1948, anno in cui Claude Shannon pubblicò sul Bell System Technical Journal Una
teoria matematica della comunicazione in cui introduceva per la prima volta in modo sistematico lo stu-
dio 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
Dimostrare che n n
∑ ai log2 ai ≥ ∑ ai log2 bi
i =1 i =1
cioè che: n
b
∑ ai log2 aii ≤0
i =1
Per risolvere questo esercizio sfruttiamo la relazione ricavata nel paragrafo poco sopra e applichiamo le ipotesi:
( )
n n ( ) n n n
b bi
∑ ai log2 aii ⩽ ∑ ai a
− 1 log2 e = log2 e ∑ (bi − ai ) = log2 e ∑ bi − ∑ a i =0
i =1 i =1 | i {z } i =1
|
i =1
{z
i =1
}
bi =0
sicuramente minore di log2
ai
4 Si osservi infatti che:
In χ = 1 le funzioni valgono entrambe 0
Derivata di χ − 1 ⇒ 1
1
⎧
per χ > 1 →
< 1, la funzione ln χ cresce più lentamente di χ − 1 andando nella direzione positiva delle χ
1 ⎨ χ
Derivata di ln χ ⇒
χ 1
⎩ per 0 < χ < 1 →
> 1, la funzione ln χ cala più velocemente di χ − 1 andando nella direzione negativa delle χ
χ
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 contempo-
raneamente 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 sep-
aratamente 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 ) è tempoinvariante.
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 che il risultato non
cambia:
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
( )
H X (k) 1 k Cesà 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.3 è 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;
Un esempio potrebbe essere costituito da una sorgente binaria (bernoulliana) senza memoria e con simboli
equiprobabili.
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
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 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’in-
formazione. 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 invert-
ibile, vedi esempio di seguito); si parla invece di codice univocamente decodificabile (invertibile) se, data una
sequenza qualunque,
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:
ℒ(C ) = E[l ( x )] = ∑ l ( x ) p( x ) (2.12)
x ∈𝒳
Inoltre, si chiama codice a prefisso (o codice istantaneo)4 se nessuna parola di codice C ( x ) è prefisso
di un’altra. Tali codici sono sempre univocamente decodificabili. 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
Il codice 1 non è tuttavia invertibile perché non è univocamente decodicabile : per esempio
4 In quanto la codifica è istantanea.
23
24 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
1001
potrebbe contemporaneamente essere x1 x2 x1 oppure x4 x3 , ma non possiamo saperlo. Come si
può facilmente 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.
code for a given set of codeword 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
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’6 ). 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é
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.
25
26 CAPITOLO 2. CODIFICA DI SORGENTI DISCRETE
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
Se proviamo a costruire il relativo codice a prefisso scopriamo che una possibile soluzione è quella del
codice avente albero come quello in figura 2.3 con probabilità C ( x1 ) = 0, 5; C ( x2 ) = 0, 25; C ( x3 ) =
0, 125; C ( x4 ) = 0, 125.
Dimostrazione (1∘ parte): facciamo l’ipotesi che il codice sia univocamente decodificabile (la disug-
uaglianza di Kraft deve quindi per forza essere rispettata). Possiamo scrivere, usando le definizioni:
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. Prendiamo allora la
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!
ESEMPIO:
Abbiamo una sorgente binaria che emette i due simboli in tabella 2.2. Secondo Shannon-Fano dovrem-
mo usare ben 4 bit d'informazione per la parola meno probabile (principio che a prescindere non è
sbagliato: conviene usare le parole di codice più corte per i simboli più probabili), scelta piuttosto
stupidina8 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
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
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:
2. si uniscono le due minori in un nuovo nodo (unico) e a questo nodo viene associata la somma delle
probabilità;
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. 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
p( x )
x1 0,1
x2 0,9
ESEMPIO:
Sorgente binaria senza memoria con la distribuzione di probabilità mostrata in tabella 2.3. L'entropia
è 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
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 prece-
dente con una cifra binaria (1 oppure 0). Successivamente si codificano le frasi con parole di lunghezza
fissa, che indicano 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).
9 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’op-
eratore 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 essere messe 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 perder-
emo 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 abbia:
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 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 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 )
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 pic-
cola). Possiamo certo provare a spedire più informazione (aumentare H ( X )), ma a patto di accettare una
probabilità d’errore Pe maggiore.
H (W ) = log2 L
3 Di seguito riporto un mio tentativo di calcolo del massimo, tutto da verificare:
{ }
∂ 1 1
pe log2 + (1 − pe ) log2 + pe log2 ( N − 1) =
∂pe pe (1 − p e )
1 pe 1 (1 − p e ) 1
= log2 + pe − log2 + (1 − p e ) + log2 ( N − 1) + pe =
pe ln 2 (1 − p e ) ln 2 ( N − 1) ln 2
1 − pe p2 (1 − p e )2 1
= log2 + e + + log2 ( N − 1) + pe =
pe ln 2 ln 2 ( N − 1) ln 2
(1 − pe ) ( N − 1) 2p2e − 2pe + 1 pe
= log2 + + =
pe ln 2 ( N − 1) ln 2
( 2 )
(1 − p e ) ( N − 1) 2pe − 2pe + 1 ( N − 1) + pe
= log2 +
pe ( N − 1) ln 2
4 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
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:
∙ dalle parole di codice;
∙ dal modo in cui le parole di codice sono accoppiate;
∙ da com’è costituito il decoder (componente duale del codificatore di sorgente).
43
44 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
errore piccola a piacere fino ad una frequenza massima6 attraverso il canale stesso. Questo sorprendente
risultato fu presentato per la prima volta da Claude Shannon nel 19487 e, sostanzialmente, descrive la
massima possibile efficienza di un qualunque metodo di correzione degli errori in funzione del livello di
rumore. La teoria non spiega come costruire un codice ottimo, ma stabilisce solo quali siano le prestazioni
di tale codice ottimo8 .
Formalizzando matematicamente, il teorema sostiene che
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
Mandando Pe a 0 e imponendo n ≫ 1
1
Rc < + Pe Rc + C ⇒ Rc < C
n
6 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.
7 Shannon diede solo una traccia della dimostrazione. La prima dimostrazione rigorosa è dovuta a Amiel Feinstein nel 1954.
8 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
Questo significa che un codice, anche se fortissimo (Pe → 0) e lungo (n ≫ 1), la code-rate non potrà co-
munque mai superare il limite asintotico di Shannon. 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 perdu-
ta, quindi possiamo ridurre la Pe a piacere con tecniche sempre più raffinate (e allungando a dismisura
il codice), 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.
45
46 CAPITOLO 3. LA CODIFICA DI CANALE E LA CAPACITÀ
Non sempre si usano variabili aleatorie discrete e, anzi, le variabili aleatorie diventano continue a causa
di fenomeni fisici come il rumore gaussiano. Per una variabile continua la densità di probabilità è una
funzione continua tale per cui (vedi figura 3.18):
∫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
valor medio: si assegna in pratica al generico campione x̂n la seguente probabilità
∫
P ( x̂n ) = ∆ ⋅ p X ( xi ) = p X ( x ) dx ⇒ ∑ p (x̂i ) = 1 (3.26)
∆ i
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.
∫∞ ∫∞
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
ESEMPIO:
Calcoliamo l'entropia dierenziale per la variabile X uniformemente distribuita su [ a, b]:
∫b
1
∫
h (X) = − p ( x ) log2 p ( x ) dx = − log2 (b − a) dx = log2 (b − a)
b−a
x a
ESERCIZIO:
L'uguaglianza si ha solo se q( x ) = p( x ) ∀ x.
1
∫ ∫ ∫
hgenerica ( X ) = p ( x ) log2 dx ⩽ p ( x ) log2 (b − a) dx = log2 (b − a) p ( x ) dx = log2 (b − a)
p (x)
10 Dimostrazione di mio pugno e senza pretese di correttezza:
∫ ∫ ∫
− p ( x, y) log2 p ( x ∣y ) dxdy ⩽ − p ( x ) log2 p ( x ) dx
x y 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
11 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,
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 otteniamo la figura 4.2. Con
N
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. In figura 4.4 possiamo invece vedere le densità spettrali di potenza.
∫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 trasmes-
si dei vettori, ha comunque senso calcolare la capacità simbolo per simbolo in quanto si dimostra che gli ni
sono indipendenti (vedi paragrafo 4.3) e quindi il canale può essere considerato senza memoria; se supponi-
amo 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+ ) =e
α α B → ∞ N0
x →∞ 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:
Dunque fra campioni non c’è correlazione: questo implica che siano indipendenti! Come però sappiamo
l’informazione trasmessa dipende dall’entropia ed essa è tanto maggiore quanto i campioni sono im-
prevedibili: il massimo risultato si ha quindi nel caso di campioni xi indipendenti. Se quindi prendiamo
un segnale utile molto simile al rumore (cioè gaussiano, visto che la distribuzione gaussiana massimiz-
za l’entropia), e dunque abbiamo indipendenza statistica fra i campioni, massimizziamo 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 sistema 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
56
CAPITOLO 4. IL LIMITE DI SHANNON 57
∙ 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).
57
58 CAPITOLO 4. IL LIMITE DI SHANNON
Il nostro schema diventa quello in figura 4.9, dove il filtro in uscita dal canale rumoroso (il rumore sia
gaussiano, ergodico e bianco) è da considerarsi adattato3 e dunque con risposta impulsiva h(t) pari a
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.
∫∞ ∫∞ ∫∞
y ( t0 ) = y0 = ± Kx (τ ) x (t0 − t0 + τ ) dτ + ν (τ ) h (t0 − τ ) dτ = ±K x2 (τ ) dτ +n (t0 ) = ±KEx + n (t0 )
−∞ −∞ −∞
| {z } | {z }
n(t0 )≡n0 Energia Ex
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
−∞ −∞ −∞ −∞
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:
pe = Pr d = +1 trasmesso un ′ 1′ Pr ′ 1′ + Pr d = −1 trasmesso un ′ 0′ Pr ′ 1′ =
{ } { } { } { }
1( {
Pr d = +1 trasmesso un ′ 1′ + Pr d = −1 trasmesso un ′ 0′
} { })
= =
⎛ 2 ⎞
1⎜ { √ {√ ( {√ { √
⎟ = 1 Pr
} }⎟ } })
= ⎜Pr − Ex + n0 > 0 + Pr E x + n 0 < 0 E x < n 0 + Pr − E x > n 0 =
2 ⎝| {z } | {z }
⎠ 2
soprasoglia sottosoglia
{ √ √ } √ N0 √
1 1 Ex 1 Ex 1 Ex σn2 = 2 1 Ex
= erfc √ + √ = erfc √ = erfc √
2 2 2σn
2 2 2σn
2 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
∫∞ √ ∫∞ ∫∞
(√ )
√ 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)
60
CAPITOLO 4. IL LIMITE DI SHANNON 61
Nel paragrafo precedente abbiamo utilizzato un decisore: l’abbiamo fatto molto a cuor leggero, senza
sottolineare il fatto che, ahimè, la scelta a soglia è molto drastica e - ponendosi come una vera e propria
quantizzazione - ci fa perdere una parte della nostra informazione. Che accade allora se eliminiamo il
decisore? La capacità varia significativamente? Possiamo trarne un significativo vantaggio? Lo schema è
C = h (Y ) − h (Y ∣ X )
Il primo addendo
√ √
√ ) √ ) ( y − Ex )2 ( y + Ex )2
1 ( 1 ( 1 1 − 2 1 1 −
2σn2
p (y) = p y X = Ex + p y X = − Ex = √ e 2σ + √ e =
n
2 | {z } 2| {z } 2 2πσn2 2 2πσn2
distribuzione gaussiana! distribuzione gaussiana!
⎛ √ √ ⎞
( y − Ex )2 ( y + Ex )2
1 1 − 2 − 2
= √ ⎝e 2σn +e 2σn ⎠
2 2πσn2
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 piccolo intervallini ∆ f in cui possiamo considerare circa costante sia la ∣ H ( f )∣ che le densità
63
64 CAPITOLO 4. IL LIMITE DI SHANNON
spettrale 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 G x ( f i ) ∣ H ( f i )∣ G x ( f i ) ∣ H ( f i )∣
= ∆ f log2 ⎜ ⎟ = ∆ f log 1 +
⎜
Ci = Blog2 1 + ⎝1 + 2
N 2∆ 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
⎩
Dunque 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.
Questo ragionamento può essere ripreso pari pari nel caso tempo-discreto. Immaginiamo di avere N
parallelo e sia quello in figura 4.17 il generico canale i-esimo, dove λi è il guadagno in potenza
canali in √
dato che λi è il guadagno in tensione.
La banda viene 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
4 Orthogonal Frequency Division Multiplexing.
65
66 CAPITOLO 4. IL LIMITE DI SHANNON
Massimizziamo quindi C tenendo conto del vincolo sulla potenza e usiamo nuovamente i 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:
k
∙ code-rate il rapporto Rc = . Tanto minore è la code-rate e tanto più ridondante sarà il codice;
n
∙ Eb l’energia per bit d’informazione (nel caso binario 1 bit = 1 Shannon);
∙ 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
Ebc Br E E Br E
= ⇒ bc = b = b Rc
Eb Brc N0 N0 Brc N0
Consideriamo ora tutte le possibili codeword in uscita dal codificatore e immaginiamo di metterle tutte
nell’insieme 𝒞 : tale insieme è quello che in figura 5.2 è indicato in azzurrino. Come si nota, perché un
codice sia sensato deve sussistere un mapping iniettivo fra le parole di lunghezza 2k e quelle di codice
(valide) di lunghezza 2n
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 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
definire 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!
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
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.
72
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 73
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
Questo sistema lineare ha ovviamente una forma matriciale
⋅⋅⋅
⎡ ⎤
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
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)
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
Dunque un qualsiasi vettore del codice 𝒞 , moltiplicato per la matrice di controllo parità trasposta, deve
dare come risultato zero: tale condizione è necessaria e sufficiente e ciò significa che una parola non apparte-
nente al codice 𝒞 , giunta a destinatario e frutto di uno o più errori di trasmissione, se moltiplicata per H⊥
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
[ ] [ ]
] P
GH T = 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.
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
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
Tabella 5.3: Distribuzione dei pesi del codice di Hamming (7,4) e della versione estesa
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
allora la matrice G sarà:
⎡ ⎤
1 0 0 0 1 0 1
[ ] ⎢ 0 1 0 0 1 1 1 ⎥
G= I ∣P = ⎢
⎣ 0
⎥
0 1 0 1 1 0 ⎦
0 0 0 1 0 1 1
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.
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.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)
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
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?
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
⌊ ⌋
ipotesi cm è una parola di codice allora anche ciò che è stato stimato dal decisore (cˆm ) lo dev’essere, se la
parola è stata trasmessa correttamente. Ma qual è la probabilità di effettuare una scelta corretta? Su quale
criterio dobbiamo basarci per sbagliare il meno possibile? Definiamo:
∙ p(ci ∣y) la probabilità (a posteriori) che sia stato trasmesso ci sapendo che è stato ricevuto y.
5 Inoltre, non vi sono interstizi fra le regioni di decisione (vedi paragrafo 5.14.
78
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 79
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
La produttoria possiamo portarla all’esponente (e farla quindi diventare una sommatoria):
n ∑ d H (ri ,ci ) ∑ (1−d H (ri ,ci ))
p(r∣c) = ∏ pdH (ri ,ci ) ⋅ (1 − p)(1−dH (ri ,ci )) = p i ⋅ (1 − p ) i
i =1
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
79
80 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
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⊥ = 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
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
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
r per ottenere ĉm . Si noti che se e non è il pattern di peso minimo, il decodificatore produce una parola di
codice 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
Vogliamo riempire il relativo standard array ; per calcolare la sindrome eettuiamo la seguente oper-
azione:
⎡ ⎤
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
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
protocollo di ritrasmissione automatica come l’ARQ). In tal caso si ha
Pcd + Pmis + Pe = 1
dove Pcd è la probabilità che la parola ricevuta sia adeguatamente interpretata (sia perché è arrivata senza
errori sia perché è stata corretta), Pmis la probabilità di ’cadere in un interstizio’ (e quindi di non saper
decidere) e Pe di interpretare male la parola a causa dei troppi errori. Se il raggio della sfera è t e il numero
di errori è > t usciamo da una regione di decisione e possiamo o finire in un interstizio oppure entrare in
un’altra sfera; se il canale non è invece troppo cattivo, il decodificatore si ricondurrà alla parola a distanza
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 m (1 − p ) n − t −1
t+1
Molto probabilmente, se il decoder fallisce scegliendo una parola (corretta) diversa da quella che è stata
trasmessa, deciderà per la parola a distanza dmin da quella ’vera’. La probabilità di errore per bit sarà
quindi:
numero bit sbagliati
Peb ≈ ⋅ (Probabilità di sbagliare) =
bit totali per codeword
( ) ( )
dmin ∼ n t+1 dmin n 2t + 1
= Pe = p = 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).
83
84 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
Dunque, siccome y è il risultato della somma fra un valore costante (cmk ) ad una variabile aleatoria
gaussiana avente parametri (0, σ2 ), avremo che:
y = 𝒩 (cmk , σ2 ) (5.16)
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 de (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
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
84
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 85
√
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
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 ):
85
86 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
M M
Pr (errore ∣cm ) ⩽ ∑ Pr {d E (cl , y) < d E (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
(5.22)
Esaminando bene l’ultimo termine:
⎧ ⎫
⎨
⎬
Pr ∑ (clk − cmk ) 2
< 2 ∑ νk (clk − cmk )
k k
| {z } | {z }
distanza euclidea d2E (cl, cm ) combinazione lineare di gaussiane (un’altra gaussiana)
⎩ ⎭
La gaussiana di cui si fa riferimento sarà una variabile aleatoria, che chiameremo Z, avente i seguenti
parametri:
⎛ ⎞
⎜ ⎛ ⎞ ⎟
( ) ⎜ ⎟
⎜ ⎜ 1 ⎟ ⎟
Z ∼ 𝒩 0, ∑ 4(clk − cmk ) σ2 2
= 𝒩 ⎜0, 4 ⎝ ∑ ( c − c ) 2⎟
⎜
lk mk
⎜ ⎟
E ⎠
⎟
k 2 bc |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
∑ (clk − cmk )2 < 2 ∑ νk (clk − cmk )
⎜ E l m ⎟ E l m bc
Pr = erfc ⎜
⎜v
⎟ = erfc ⎝ ⎠
k k
2 ⎜u N 0
⎟ 2 4N 0
⎜ u2 ⋅ 2d2E (cl , cm )
u ⎟
⎟
⎝⎷ Ebc ⎠
| {z }
la varianza!
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
86
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 87
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
Quest’ultima espressione è lo union bound sulla probabilità d’errore per la decodifica soft-decision dei codici
a blocco. 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 è grande, nella sommatoria i contributi maggiori verranno dalla parole con distanza più
N0
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
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
87
88 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
Ad d
1 0
7 3
7 4
1 7
seguente:
n ( ) n ( ) ( )
n n n
Pe ⩽ ∑ m
m
p (1 − p ) n−m
= ∑ m
m
p (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.
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 )
6 Dimostrazione:
k−l k n (n − l ) − k (n − l )
< ⇒ <1
n−l n n (n − l )
n−k
<1
n
k
− <0
n
88
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 89
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)
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 D n − 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 forma7 :
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
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 sarà una parola di codice, dunque possiamo proseguire
finché il primo ’1’ in testa non arriva nell’ultima posizione a sinistra, eventualità che si verifica al k − 1
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 )
7 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
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;
∙ se g( D ) è divisore di D n − 1, il codice definito da C ( D ) = g( D ) Q( D ) è ciclico.
Dimostrazione: proviamo a calcolare lo shift ciclico di C ( D ) = g( D ) Q( D ). Otteniamo
C (1) ( D ) = DC ( D ) + Cn−1 ( D n − 1)
Ma ora, visto che per ipotesi g( D ) è un divisore di D n − 1, possiamo effettuare le seguenti sosti-
tuzioni (p( D ) è un polinomio generico):
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.
90
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 91
(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
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
g( D ) = D + 1
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 )
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
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 )
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
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 )
r ( D ) + e( D ) = C ( D ) + e( D ) + e( D ) = C ( D )
Lavorando con i polinomi possiamo fare a meno dell’elefantico standard array, scomodo da consultare.
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 )
93
94 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
e( D ) s( 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
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à.
g( D ) = D11 + D9 + D7 + D6 + D5 + D + 1
94
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 95
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 5.23 tratteremo altri casi di
questo genere.
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
95
96 CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO
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 e lo stesso 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).
96
CAPITOLO 5. I CODICI DI CANALE: CODICI A BLOCCO 97
Risulta interessante notare che le sequenze in uscita hanno la caratteristica di essere pseudo-casuali,
visto che è grossomodo bilanciata fra bit a 0 e bit a 1. Inoltre, si hanno mediamente
∙ etc. . .
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 altrove8 . 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 scrambling9 , per la crittografia o per evitare che lunghe sequenze di 0 e di 1 ostacolino la
sincronizzazione fra sistemi di telecomunicazione).
8 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.
9 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. 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).
6.4.1 Complessità
Sia Nσ il numero di stati del trellis e NT il numero di transizioni da σl a σl +1 . Il quantitativo di memoria
richiesto sarà pari a
1 survivor / stato1 lunghezza di percorso (survivor) / stato
La complessità computazionale sarà invece paragonabile a NT dato che dobbiamo effettuare:
NT sommeNσ comparazioni (6.2)
Dunque la complessità dell’algoritmo di Viterbi è sostanzialmente legata al numero di stati, ovvero a
Nσ = 2k(𝒦−1)
1 Ricordiamo che a 00 corrispondono i valori (+1, +1).
102
CAPITOLO 6. CODICI A TRALICCIO 103
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 piene di 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.
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. 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. La distanza minima del nostro
BCH è pari a
dmin = 2t + 1 = 31
dunque il numero di errori correggibili t è
dmin − 1
⌊ ⌋
t= = 15
2
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
Non so se mi spiego: 4,2 secondi. . . è un'eternità!
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 i 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
X = −1 )
| P (Y ∣{z
P ( X = −1)
⎩ } | {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
lavorano con valori soft, sono retroazionati cosicché il risultato del primo decodificatore viene dato al sec-
ondo 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 sappi-
amo 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 in fun-
zione del rapporto SNR 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
tutt’ora una delle migliori soluzioni in termini di efficienza spettrale; inoltre, uno dei grandi vantag-
gi riscontrabili nell’uso di questa codifica consiste nella possibilità di poter decodificare l’informazione
tramite un algoritmo iterativo (Belief Propagation) avente complessità gestibile e ottime prestazioni. La
matrice H creata descrive interamente il codice, ed è una matrice sparsa1 e quasi-ciclica le cui righe costi-
tuiscono delle equazioni di parità da applicare alle parole ricevute al fine di verificarne la correttezza ed
eventualmente correggerle.
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:
Possiamo quindi avere un’idea di quanto valga un messaggio in base al valore degli altri. Tramite un
meccanismo di scambio di messaggi, la probabilità si aggiorna nei vari passi dell’algoritmo.
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:
∙ 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).
1 Matrice che presenta un numero di ’1’ molto inferiore rispetto al numero di ’0’.
108
Elenco delle figure
109
110 ELENCO DELLE FIGURE
110
Elenco delle tabelle
111