Sei sulla pagina 1di 112

CAPITOLO 1

I sistemi di telecomunicazione

1.0 – Introduzione

Una rete consta di una serie di entità che desiderano comunicare fra di loro tramite un mezzo (ad
es. il mezzo radio, una linea di trasmissione, etc…).
Vi sono diverse discipline che esaminano in dettaglio le dinamiche sottostanti la comunicazione a
distanza: lo studio delle reti di telecomunicazioni, ad esempio, si incentra su com’è strutturato il
percorso1 e su quali sono i suoi connotati, mentre trattare di sistemi di telecomunicazioni significa
esaminare il come si trasmette l’informazione in maniera affidabile e sicura.

La comunicazione può avvenire:


• fra un singolo utente e un altro utente (one-to-one): in tal caso si parla di collegamento punto-
punto. Esempi: unicast; due utenti che si scambiano informazioni condividendo la stessa
banda di frequenza, etc…
• fra un’entità e una moltitudine di utenze (one-to-many): in tal caso si parla di collegamento
punto-multipunto. Esempi: broadcasting televisivo, multicasting2, etc…
• fra una moltitudine di utenze e un’unica entità (many-to-one): in tal caso si parla di
collegamento multipunto-punto. Esempi: accesso simultaneo a un server, etc…
• fra una pluralità di entità e un altro insieme di oggetti (many-to-many): in tal caso si parla di
collegamento multipunto-multipunto. Esempi: reti isofrequenziali (103.3), etc…

Di fondamentale importanza è poi il modello OSI3 della comunicazione con cui si è cercato di
rappresentare e standardizzare la comunicazione fra più terminali: esso è concepito come
successione di sette livelli ciascuno dei quali implementa distinte funzioni di rete e fornisce servizi
ai livelli adiacenti, in relazione ai protocolli che lo determinano. I livelli sono, dal più alto al più
basso: livello di applicazione (1), livello di presentazione (2), livello di sessione (3), livello di
trasporto (4), livello di rete (5), livello di collegamento (6) e livello fisico (7). Noi ci occuperemo
soprattutto dei livelli 6 e 7, cioè quelli inferiori.

1.1 – Parametri di qualità di un collegamento ed efficienza di banda: il limite di Shannon

Supponiamo di avere una banda B centrata ad una frequenza f0 . Ebbene, qual è il legame fra la
larghezza di banda e ciò che si vuole trasmettere? Banalmente, potremmo già rispondere a questo
quesito sostenendo che ad una banda maggiore corrisponderà una maggior mole di informazioni:
in effetti le cose stanno così, tuttavia vogliamo scendere più nello specifico ed esaminare ciò che
accade ragionando in termini di canale di trasmissione, di codifica e di data-rate.
Ponendoci dal punto di vista (economico e non) di chi trasmette il segnale, ad un ipotetico utente
finale che voglia ricevere le informazioni veicolate nella banda di frequenza B sarà necessario

1 Cioè come “rimbalza” l’informazione, identificata nel concetto di pacchetto, opportunamente etichettata e spedita.
2 Simile al broadcasting, ma non tutti gli utenti sono abilitati a ricevere l’informazione che viene trasmessa.
3 OSI = Open System Interconnection.
“vendere” bit/s/Hz. Questa unità di misura è propria di una importante quantità chiamata
efficienza spettrale4,5, che indicheremo con la lettera η .
Come si può determinare l’efficienza spettrale associata ad un servizio?
Per rispondere a quest’altra domanda è necessario coinvolgere i parametri principali che sono in
gioco in qualsiasi trasmissione. Essi sono sostanzialmente due:
• la potenza di trasmissione;
• il livello di rumore associato all’apparato e al canale di trasmissione.
Risulta quindi abbastanza naturale riunire questi due parametri in uno solo, importantissimo,
chiamato rapporto segnale-rumore (o SNR = signal-to-noise ratio). Esso è così definito:
S (potenza del segnale)
SNR =
N (potenza del rumore)
Risulta ovvio il fatto che, per come l’abbiamo introdotta, tale quantità va possibilmente
massimizzata in un collegamento: infatti, più il segnale utile è potente in confronto al rumore e più
siamo tranquilli sul fatto che l’informazione giungerà integra al destinatario.
Il parametro SNR si intreccia con l’importantissima Teoria dell’informazione partorita da Claude
Shannon nel 1948; in una parte di essa6 si sostiene che, se chiamiamo C la capacità del canale di
trasmissione ed Rb la nostra bit-rate:
• con Rb ≤ C posso rendere il collegamento assente da errori7 (e posso quindi rendere Pe , la
probabilità di errore per bit, piccola a piacere);
• con Rb > C non ho scampo: la probabilità d’errore per bit finirà per essere maggiore di
zero.
A questo punto ci chiediamo quanto possa valere C. Questo parametro dipende:
• dalla banda B;
• dal rapporto SNR.
Precisamente, si ha che:
 S
C = B log 2 1 + 
 N
Da questa relazione osserviamo che la capacità C:
• dipende linearmente da B;
• dipende dall’SNR tramite il logaritmo8.
Ovviamente noi vorremmo avvicinarci il più possibile alla capacità del canale: desideriamo, cioè,
utilizzare la bit-rate più alta possibile che la formula di Shannon ci mette a disposizione tenendo
presente che tale valore è, come abbiamo detto, superiormente limitato proprio da C.
Tornando alla nostra formula, se dividiamo da entrambe le parti per B otteniamo:
C  S   bit/s 
= log 2 1 +  
B  N   Hz 

4 Avrò cioè una specie di densità di bit-rate, la quale mi restituisce, se integrata sulla banda messa a disposizione
all’utente finale, una certa quantità di bit al secondo (cioè una bit-rate). L’unità di misura bit/s/Hz è dunque più
bit/s
comprensibile se così rappresentata: .
Hz
5 Tramite il parametro appena introdotto possiamo valutare quanto possa rendere l’investimento compiuto
acquistando la banda di frequenza B. Si noti che valori ordinari di efficienza spettrale non sono più grandi di qualche
unità. Il servizio di UMTS, ad esempio, gode di un efficienza spettrale pari a circa η = 0 ,4 bit/s/H z .
6 Precisamente il secondo teorema di Shannon o teorema della codifica di canale.

7 Si noti che l’unità di misura della capacità C del canale è [bit/s], coerente quindi con la bit-rate.

8 Per aumentare la capacità del canale converrebbe quindi di gran lunga aumentare B più che il rapporto S/N. Tuttavia

B è finita e, soprattutto, molto costosa da acquistare!


Dopodiché esprimiamo il rapporto segnale/rumore in maniera equivalente:
Eb → energia per bit

S Eb ⋅ Rb  Rb = 1 Tb → bit-rate
= 
N N 0 ⋅ B  N 0 → densità spettrale di rumore
 B → banda del segnale

Riconosciamo all’interno di questa
uesta nuova formulazione l’efficienza
l’ spettrale::
S E R E
= b ⋅ b = b ⋅η
N N0 B N0
Sostituiamo quindi nella formula di Shannon:
C  E 
= log 2 1 + b η 
B  N0 
Ora poniamoci nel valore limite (cioè il più alto possibile) di data-rate tale per cui la probabilità di
errore
ore per bit può essere resa piccola a piacere. Sappiamo che tale valore si ha per:
Rb = C
Quindi:
Rb  E 
= log 2 1 + b η 
B  N0 
Riconosciamo che a sinistra dell’uguale compare l’efficienza spettrale:
 E 
η = log 2 1 + b η 
 N0 
ssibile risolvere in forma chiusa questa equazione in η , quindi dobbiamo affidarci al
Risulta impossibile
calcolatore e risolverla per via numerica; in questo modo otteniamo il valore limite dell’efficienza
dell’e
E
spettrale9, il quale può essere graficato in funzione di b :
N0
η

Facciamo qualche osservazione sul grafico10:


• ogni modulazione può essere identificata, nel grafico, con un punto avente precise
coordinate. Tuttavia, solo nel semipiano inferiore11 esistono davvero delle modulazioni:
modulazio

9 Il quale è, lo ricordiamo, legato alla bit-rate


rate massima, coincidente con la capacità di canale C.
y
10 Si noti anzitutto che la scala è strana: sull’asse delle y è logaritmica (e si va come 2 ), sull’asse x la scala è invece
lineare e in dB.
11 Quello che ad esempio contiene il punto (10,1).
oltre il limite di Shannon non è infatti possibile modulare segnali senza che il rumore incida
in maniera irrimediabile;
• esiste un preciso asintoto, posto a -1,6 dB, oltre al quale non si può comunicare;
• all’aumentare del rapporto SNR aumenta (ovviamente) il termine η ;
• più siamo vicini alla curva e più siamo efficienti nella trasmissione: se, ad esempio,
consideriamo la modulazione 2-PSK (detta anche BPSK) ci accorgiamo di essere 10 dB
distanti dal limite (cioè dalla curva del grafico); 10 dB sono parecchi, dunque la BPSK è
altamente inefficiente.
Per avvicinarci al nostro limite due sono le strade che dovremo affrontare:
• scegliere un’opportuna modulazione numerica;
• utilizzare un codice di correzione d’errore.

1.2 – Schema del collegamento

D’ora in poi ci riferiremo allo schema seguente:


• SORGENTE: possiamo avere una sorgente numerica, oppure una sorgente analogica (ma
in questo caso avremo l’accortezza di porla in serie con un CONVERTITORE A/D). Dalla
sorgente numerica (o dalla catena sorgente analogica + A/D converter) usciranno mk bit
d’informazione, i quali hanno valori nell’insieme (0,1). Per definire con quale rapidità
vengono rilasciati questi bit, si utilizzano i parametri di bit-rate ( Rb ) e tempo di bit
(Tb = Rb−1 . )
• CHANNEL CODING (codificatore): il CC è un processo consistente nel mappare
biunivocamente K bit d’informazione in ingresso in N bit d’uscita. Si noti che K è minore12
di N per via del fatto che si aggiunge il cosiddetto bit di parità13 alla sequenza di K bit in
ingresso14. Definiti N e K, si può introdurre il parametro Rc (rate di codifica = K / N); tale
valore quantifica la ridondanza15 dei nostri dati: se è ∼ 1 allora significa che i bit aggiunti
sono molto pochi rispetto al numero di bit totali; se, invece, è < 1 allora il nostro codice è
ridondante16. È importante notare che, per via del fatto che N > R, sarà necessario avere un
incremento della bit-rate in uscita dal codificatore (che chiameremo Re , dove la e sta per
encoded); prendiamo, ad esempio, una codifica avente Rc = 0,5: in questo caso, se
Rb(
entrata )
= 1000 bit/s , allora si dovrà avere Re(
uscita )
= Rb Rc = 2000 bit/s . NOTA: i bit
(cosiddetti “di codifica”) in uscita dal CC sono ancora reali.

12 O al limite è uguale ad N.
13 Il bit di parità è uno dei sistemi più semplici che permettano al ricevitore di verificare l’integrità dell’informazione
ricevuta. Il principio è semplice: se c’è un numero dispari di bit = 1 nei K bit in ingresso allora viene aggiunto un
ulteriore bit a 1, in modo da rendere pari il numero totale di uni nella sequenza (da qui la definizione di “bit di
parità”). Se, in caso contrario, fra i K bit è già presente un numero pari di uni, il bit che verrà aggiunto sarà = 0. Il
risultato di questa operazione è che, comunque vada, avremo K + 1 bit (con un numero pari di 1) in uscita. Se a questo
punto il ricevitore vede un numero totale dispari di bit a 1, allora qualcosa sarà andato storto e bisognerà chiedere una
nuova trasmissione degli stessi dati.
14 O, in alternativa, si potranno utilizzare altre codifiche o codici di correzione; rimarrà costante il fatto che i bit in

uscita dovranno essere di più di quelli in ingesso.


15 Esempio: se K = 4, con l’aggiunta del bit di parità allora N = K + 1 = 5 e quindi Rc = 0,8. Il codice è “leggermente”
ridondante.
16 E maggiormente ridondante tanto più Rc è vicino allo 0.
• DIGITAL MODULATOR:
MODULATOR il DM prende i bit di
codifica e li mappa in una costellazione dello spazio
complesso.. Se prendiamo ad esempio la costellazione
della 4-PSK (che coincide con la 4-QAM,
4 v. figura a
destra) potremo mappare coppie di bit in 4 punti
17

distinti: ognuno di questi punti genera un simbolo in


uscita18 (chiameremo ai i simboli in uscita dal DM). Si
symbol-rate19 Rs in uscita sarà
noti che questa volta la symbol
m volte inferiore20 della bit-rate Re .
• PULSE SHAPING: il pulse shaping consiste nel
modificare la forma d’onda degli impulsi trasmessi:
trasmessi il
suo scopo è quello di rendere i segnali più adatti al
al canale, limitando l’effettiva banda di
trasmissione. Tale
ale processo è effettuato da uno speciale filtro numerico21 che impone un
certo andamento agli impulsi22. Anche questo componente cambia la data-rate, da quella di
simbolo a quella che potremmo definire “di pulse shaping” Fc : il motivo sta nel fatto che
devo
1. Evitare l’ISI23, e dunque devo fare in
modo che le forme d’onda,
d’onda che il
successivo componente (cioè il
convertitore D/A) genererà, siano
nulle in alcuni istanti “speciali”,
“speciali” cioè
in k Ts ( k ∈ ℕ ).
2. Non posso tuttavia affidarmi all’interpolazione mediante i soli istanti k Ts , in quanto
essi determinano infinite forme
d’onda. Abbiamo quindi la
necessità di sovracampionare
sovracamp il
segnale (over
over sampling)
sampling alla
sopraccitata frequenza Fc (v.
figura). Per costruzione, Fc sarà
sicuramente maggiore della
frequenza di simbolo Rs e precisamente sarà OV volte24 più grande
Fc = OV ⋅ Rs
Di conseguenza, il tempo di campionamento sarà pari a
1 1 T
= OV ⋅ ⇒ TC = S
TC TS OV

m
17 Nella modulazione n-QAM,
QAM, così come nella n-PSK, è possibile mappare m-ple ple di bit, dove 2 = n .
18 I simboli sono di natura complessa:: in uscita dal digital modulator avremo quindi una via in fase (reale) e una via in

quadratura (immaginaria). L’intero insieme di simboli possibili costituisce inoltre un alfabeto di cardinalità M, pari a
m
2 = n (v. nota 17).
19 L’unità di misura della symbol rate è il Bode (= 1 simbolo/secondo), poco usata in ambito matematico ma comune fra
gli addetti del settore.
20 m è il numero di bit mappati per volta (v. nota 17).

21 Ad esempio un semplice filtro FIR.

22 Né rettangolare,
angolare, né di durata finita, perché in tal caso non sarebbe a potenza finita.
23 Inter Symbol Interference.

24 Nelle applicazioni reali OV ha valori come 4 ed 8.


Dal PS escono ancora valori complessi che chiameremo xl .
• CONVERTITORE D/A25: prende i campioni in ingresso xl e ne fa l’interpolazione, resa ora
possibile dal sovracampionamento. All’uscita avremo finalmente un segnale tempo-
tempo
continuo così formulato
+∞
x (t ) = ∑ a g (t − iT )
i s
i =−∞

Dove g(t) è un impulso speciale (a “coseno rialzato”) in grado di rispettare


r il teorema di
Nyquist.
• RF FRONT-END:: compie la modulazione armonica per la conversione in radio-frequenza
radio
(cioè nella banda-passante ). 26

• CANALE DI TRASMISSIONE (mezzo radio27): sappiamo che esso è intrinsecamente


passa-banda (proprio
proprio per questo abbiamo
abbiamo modulato il segnale a RF).RF Per mantenere fede al
modello che utilizziamo , sommiamo in questa
28

parte della catena tutto ill rumore AWGN29 indotto


dal canale di trasmissione (e dalla componentistica)
sotto forma di una singola funzione n(t). Il rumore
puòò essere dannosissimo, in quanto è in grado di
creare fraintendimenti nell’interpretazione dei
simboli trasmessi: se infatti mappiamo tali simboli
in una costellazione30, il rumore agisce come vettore
(aleatorio) additivo e “sposta” pericolosamente la
collocazione
cazione del simbolo ricevuto31.
• CONVERTITORE A/D:: effettua il passaggio dal mondo dei segnali a quello dei simboli
numerici.
• MATCHED FILTER (filteringfiltering): tale filtraggio si ottiene correlando un segnale conosciuto
(template) con un segnale non conosciuto, in n modo da scovare la presenza di primo
all’interno del secondo. Da tale filtro escono simboli complessi aˆ n (il più possibile simili a
an ).
• DIGITAL DEMODULATOR: è il componente duale al modulatore. Alla sua uscita
us
disponiamo dei simboli reali bˆn (il più possibile simile ai bn ).

25 La serie “Pulse Shaper + D/A Converter” può essere sostituita con un unico componente chiamato
chiama modulatore PAM.
Nella pratica, tuttavia, questo componente non viene mai nominato: esso ha una valenza puramente didattica.
26 Ricordiamo tuttavia che possiamo lavorare con l’equivalente
l’ passa-basso i(t) di un segnale a radio frequenza s(t)
{
s ( t ) = R e i ( t ) e j 2 π f0 t }
il quale ci semplifica la vita perché, “pagando il prezzo” del passaggio nel campo complesso, possiamo lavorare coi
segnali nel piano di Gauss (Re-Im)
Im) e compiere con grande eleganza calcoli altrimenti molto difficili.
27 Qui parliamo specificatamente
tamente di mezzo radio, ma ovviamente possono esistere altri canali di trasmissione (come ad
esempio un cavo coassiale, il quale è invece di natura passa-basso).
passa
28 Si è visto nel corso di Comunicazioni Elettriche L-B
L B che il ricevitore funziona anche da filtro
fil ed elimina parte del
rumore, il quale per sua natura ha una banda infinita (in pratica dell’ordine dei THz). È quindi errato porre il rumore
a valle del ricevitore, perché in tal caso si ignora il filtraggio di quest’ultimo, così come è sbagliato sommare
somma la
componente di disturbo a monte del trasmettitore in quanto, così facendo, si trascurerebbe la distorsione indotta dal
canale di trasmissione (che in certi casi è molto, molto forte!).
29 Additive White Gaussian Noise = rumore additivo gaussiano bianco.
bianco
30 L’esempio mostrato in figura concerne la modulazione 4-PSK
4 (Phase Shift Keying)
31 È quindi necessario adottare un criterio di scelta, che ci permetta di interpretare l’informazione ricevuta con la

minor probabilità possibile di sbagliare (vedremo che tale


t criterio è quello minima distanza euclidea).
euclidea
• DECODER: trasforma i simboli bˆn nei bit uˆ k , utilizzabili dall’utente finale. Con la
probabilità di errore per bit32 possiamo statisticamente stimare quanto i bit uˆ k somiglieranno
ai bit uk . Chiaramente, la probabilità d’errore diminuisce se aumentiamo il rapporto SNR: è
infatti più difficile sbagliare, se il segnale utile è molto robusto.

1.3 – Energia di un segnale e caratterizzazione del rumore

Siano x(t) e y(t) due segnali complessi definiti su un periodo T. Si definisce prodotto interno fra
queste due funzioni la quantità
x , y = ∫ x ( t ) y * ( t ) dt
T

Si dice poi che x(t) e y(t) sono fra loro ortogonali [e si scrive x (t ) ⊥ y (t ) ] se il prodotto interno è
nullo:
x , y = 0 ⇒ x (t ) ⊥ y ( t )

Definito il prodotto interno, è facilissimo esprimere l’energia di un segnale; essa è pari a:


E x = x , x = ∫ x ( t ) x * ( t ) dt = ∫ x ( t )
2
dt
T T

ESEMPIO: segnale sinusoidale33 x (t ) = 2P cos ( 2π f0t ) , definito su t ∈ 0,T  , con T ≫ 1 .


(34)
f0
Calcoliamo l’energia:
T T
1 1 
Ex = ∫ 2P cos2 2π f0t dt = 2P ∫  + cos ( 2π ( 2 f0 ) t )  dt (35, 36) = PT
0  
0
2 2
Volendo un segnale sinusoidale ad energia unitaria, questa deve quindi esserne l’espressione:
2
x (t ) = cos2π f0t
T
Infatti:
1
P=1  Ex = T =1
T

Passiamo ora alla caratterizzazione del rumore, gaussiano, che chiameremo n(t):
n (t ) ∼ N  0, 0 
N
 2

32 Il rumore è aleatorio e i fenomeni di disturbo sono assolutamente imprevedibili quindi non possiamo, a priori,
sapere quanti bit sbagliati ci saranno nell’informazione ricevuta. Nel caso generale possiamo tuttavia fare una stima
probabilistica, tanto più verosimile quanto è elevato il numero di bit (legge dei grandi numeri).
33 Il segnale è reale, il ché significa che è un caso particolare di segnale complesso (avente parte immaginaria nulla): il

procedimento che vedremo fra poco è infatti utilizzabile con segnali complessi così come con segnali reali.
34 Significa che all’interno dell’intervallo t è presente un numero molto elevato di periodi del coseno. Questa scelta

influenzerà moltissimo il risultato di un integrale che vedremo fra poco.


1
35 Trigonometria: cos 2 α =
2
(1 + cos 2α ) .
36Siccome il numero di periodi del coseno, durante T secondi, è molto alto, il suo integrale calcolato su T va a zero; ciò
accade in quanto le aree “tracciate” dalla funzione coseno e poste nel semipiano superiore sono praticamente nello
stesso numero di quelle (simmetriche) poste nel semipiano inferiore.
Tale rumore ha una densità spettrale di potenza37 pari a
1 N
Gn ( f ) = KTsist = 0  W  (38)
2 2  Hz 
Dove:
• K è la costante di Boltzmann 1,38 ⋅10−23 J
K
• Tsist è la temperatura equivalente di rumore del sistema39

1.4 – Le modulazioni
azioni e il limite di Shannon (complementi del paragrafo 1.1)

In base a quanto appena detto, possiamo scrivere in questo modo il rapporto segnale rumore40:
Eb → energia per bit

S Eb ⋅ Rb  Rb = 1 Tb → bit-rate
= 
N N 0 ⋅ B  N 0 → densità spettrale di rumore
 B → channel bandwidth

Integrando le considerazioni appena fatte con quelle del primo paragrafo di questo capitolo, la
potenza del segnale S può essere scritta in vari modi:
• attraverso l’energia media per bit
E
S = b = Eb Rb
Tb
• attraverso la rate di codifica e il parametro m41
E 1 1
S= s
Rc m Tb

Per accorgersi di quanto scritto basta


bast esaminare lo schema
affianco: nella prima riga abbiamo graficato i bit uscenti dalla
sorgente (che hanno energia Eb ); nella seconda, invece, sono
rappresentati i bit di codifica (con aggiunta di bit di parità,
rate di codifica Rc = 0,5 ): ci accorgiamo immediatamente che per ogni bit “utile” l’energia
associata è esattamente la metà (v. figura) di quella del caso precedente; nell’ultima riga sono
infine in gioco i simboli Qs , i quali verranno
verranno trasmessi utilizzando modulazione 16-QAM
16 (m = 4):
questa volta, l’energia per simbolo è quattro volte Eb .

37 La potenza del rumore n(t) dovrebbe teoricamente essere infinita; in realtà noi riusciamo sempre a quantificarla,
visto che scegliamo
cegliamo di considerare il rumore all’interno della banda di frequenza (limitata) entro la quale lavora il
sistema. Ciò significa anche che maggiore è la banda di lavoro e più grande sarà la quantità di rumore “intercettato”;
individuare la banda di lavoro è quindi un problema fondamentale e molto delicato.
38 La densità spettrale di potenza è quindi “piatta”; sperimentalmente (e per ragioni legate alla fisica quantistica)

sappiamo che tale densità è in realtà maggiore di zero solo fino a frequenze dell’ordine
dell’ordine dei THz. Dunque, tale modello
è unicamente valido per la propagazione radio, e non per la propagazione ottica.
39 Cioè quella (virtuale) che il sistema dovrebbe avere per imputare unicamente all’effetto Johnson tutto il rumore

generato dalla circuiteria del sistema.


40 Ora capiamo meglio il significato del denominatore (è l’integrale effettuato sulla densità spettrale di potenza): tra

l’altro, come mai abbiamo N 0 e non 2N 0 ? Perché abbiamo N 0 2 in fase e N 0 2 in quadratura: tali componenti si
riferiscono a quantità fra loro ortogonali, quindi le loro potenze si sommano. Non tragga poi in inganno il termine
channel bandwidth:: non si tratta dell’intera banda dell’applicazione,
dell’applicazione, ma della banda del singolo servizio.
m
Nella modulazione n-QAM,
41 QAM, così come nella n-PSK, è possibile mappare m-ple
ple di bit, dove 2 = n (nota 17). Inoltre,
m è il numero di bit che servono per ogni simbolo.
Uguagliando le espressioni
Eb Es 1 1
S= = Eb Rb S=
Tb Rc m Tb
si ottiene:
Es 1 1
Eb Rb =  Es = Rc Ebm
Rc m Tb
Che in dB diventa42:
10 log10 Es = 10 log10 ( Rc Ebm )
Es dB  = Rc dB  + Eb dB + m dB
Ora possiamo capire meglio il seguente grafico, già esposto in precedenza:
precedenza:

Si capisce bene che se aumenta m, e quindi la modulazione ha tanti punti, aumentaau anche l’energia
necessaria per la trasmissione: in tal caso ci troviamo in alto rispetto all’asse y, nella zona chiamata
a banda limitata.. Modulazioni complesse, infatti, richiedono un altissimo SNR (e di conseguenza
tanta energia), ma fanno risparmiare are molta banda43.
Se, invece, siamo nel semipiano inferiore (bassissime y), ), ci troviamo in una situazione
diametralmente opposta (zona limitata): utilizziamo pochissima energia per la
zona a potenza limitata):
trasmissione, ma usiamo molta banda . 44

Questo ci fa capire che la chiave di volta per raggiungere il limite di Shannon è quella di scegliere
una adeguata codifica di canale.. Di questo, per l’appunto, ci occuperemo in seguito.

42 Il che significa che, con la codifica scelta


Rc [dB] ≈ − 3 dB m [dB] ≈ 6 dB
e dunque l’apporto di energia necessario è aumentato di 3 dB. Altre codifiche avrebbero dato risultati un po’ migliori.
43 È questo il caso della telefonia mobile. La banda costa tantissimo e gli utenti sono molti, quindi la banda dev’essere

ottimizzata al massimo (il tutto, ovviamente, a scapito della durata della batteria del telefonino).
44 Questa zona concerne applicazioni come la trasmissione dallo spazio profondo: i satelliti o le sonde inviate sui

pianeti del sistema solare non possono permettersi di sprecare troppo la batteria, tuttavia possiamo
p disporre di una
grande porzione di banda e accontentarci di tempi di trasmissione molto lunghi.
CAPITOLO 2
Analisi approfondita delle modulazioni numeriche

2.1 – Rappresentazione del segnale su basi


b ortonormali

Consideriamo un set di funzioni:


ψ i (t ) definite su T (1) con i = 1, 2, …, N
Due funzioni ψ j (t ) e ψ k (t ) di tale set si dicono ortonormali se
1 se j = k →
ψ j (t ) ,ψ k (t ) = ∫ψ j (t )ψ k* (t ) dt = 
energia unitaria (normalizzazione in ene
energia)

T 0 se j ≠ k → ortogonalità

Quindi,, per soddisfare le condizioni di ortonormalità, le {ψ i (t )}


N
devono essere tutte fra loro
i =1

ortogonali e ad energia unitaria2. Per le proprietà appena esposte, tale insieme di funzioni
determina uno spazio N-dimensionale
dimensionale3 (in particolare, introducendo un po’ di terminologia, si
dice che lo span di queste funzioni è tale spazio N -dimensionale).
Se una generica funzione del tempo Y (t ) ha (anch’essa) supporto temporale in T e appartiene allo
spazio individuato dalle funzioni {ψ i (t )}
N
, allora essa può essere così descritta:
i =1
N
Y ∈ span {ψ i }  Y (t ) = ∑ ciψ i (t ) con ci , ma anche ψ i (t ) , appartenente a ℂ
i =1

In virtù di tale combinazione lineare, è possibile effettuare una corrispondenza biunivoca fra una
qualsiasi funzione avente le caratteristiche di Y e un vettore N-dimensionale
dimensionale composto dai
coefficienti della combinazione lineare di cui sopra:
Y (t ) ⇔ Y ≡ c1 , c2 , ..., cN 
ESEMPIO:
Prendiamo due funzioni ψ 1 (t ) e ψ 2 (t )

1 T è il supporto temporale delle nostre funzioni; non ci interessa dunque il loro comportamento fuori dall’intervallo
t ∈ 0,T  [in altre parole, consideriamo nulle le ψ i (t ) all’esterno di t].
2 Si presti attenzione alla condizione di energia unitaria:
ψɶ k (t ) : ψɶ k ,ψɶ k = Ek ≠ 1 non normalizzato
ψɶ k (t ) 1 Ek
ψ k (t ) =
( Ek ) ∫
: ψ k ,ψ k = ψɶ2 k (t )ψɶ k* (t ) dt = Ek
= 1 normalizzato
Ek
T

Per normalizzare una funzione bisogna dividere essa stessa per la radice quadrata della sua energia nel caso non
normalizzato.
3 Quindi, ad esempio, se N = 2 abbiamo due funzioni ψ 1 (t ) e ψ 2 (t ) , ortonormali, il cui span è lo spazio
bidimensionale (si pensi ai due assi ortogonali xy descriventi il piano cartesiano). Ogni punto I su tale spazio può
essere individuato da un vettore  c1 , c2  , dove c1 , c 2 sono i coefficienti moltiplicativi che bisogna porre
rispettivamente davanti a ψ 1 (t ) e ψ 2 (t ) in modo che il vettore individuante P sia pari a
v = c1 ψ1 (t ) + c2 ψ 2 (t )
Vedremo meglio più avanti questo aspetto.
Notiamo immediatamente che fra le nostre due funzioni non vi è sovrapposizione temporale4. Un
po’ meno evidente è che tali funzioni hanno anche energia unitaria, ma si verifica senza tanti
sforzi che è così:
2 2 2T
ψ 1 (t ) ,ψ 1 (t ) = ∫ψ 1 (t )ψ 1* (t ) dt = ∫ dt = =1
T T
T T T 2
2 2 2 T
ψ 2 (t ) ,ψ 2 (t ) = ∫ψ 2 (t )ψ 2* (t ) dt = ∫ dt =  T −  = 1
T T
T T T 2
Combinando queste due funzioni
posso crearne altre due nuove (di
durata T). Nel
el primo caso
c1 = 1 c2 = 1
e quindi si genera un impulso
rettangolare di durata T (5); nel secondo
caso, invece,
c1′ = 1 c2′ = −1
quindi la funzione generata è quella in
basso. A fianco di quest’ultima
vediamo come le funzioni possano
essere rappresentate nel piano
individuato da ψ 1 (t ) e ψ 2 (t ) . Ponendo
infatti i coefficienti c1 e c1′ sull’asse
relativo a ψ 1 (t ) , e i coefficienti c2 e c2′ sull’asse di
ψ 2 (t ) , subito otteniamo il vettore y per la prima
funzione “composta” e z per la seconda.
Non tutte le forme d’onda, d’onda ovviamente, possono
essere rappresentate tramite le sole funzioni
ψ 1 (t ) e ψ 2 (t ) : alcune6, infatti,
infatti fuoriusciranno dal
piano ψ 1 (t )ψ 2 (t ) , e cioè dallo span delle suddette due
funzioni. Nella figura qui a sinistra vediamo infatti
un vettore r che è perfettamente rappresentabile
nello spazio tridimensionale creato dalle tre funzioni
ortogonali ψ 1 (t ) , ψ 2 (t ) e ψ 3 (t ) , ma che non è
possibile descrivere in maniera esatta soltanto con ψ 1 (t ) e ψ 2 (t ) : è al limite possibile ignorare la
componente ψ 3 (t ) [ottenendo di fatto il vettore r̂ , il quale giace sul piano ψ 1 (t )ψ 2 (t ) e che

4 È questa la più banale tipologia di ortogonalità.


5 La prima funzione arriva a T/2,
2, la seconda prosegue fino a T.
6 Moltissime, in realtà. Per tali funzioni, ψ 1 (t ) e ψ 2 (t ) non costituiscono una base completa.
rappresenta la proiezione di r sul piano] ma in questo modo si commette un errore. Anche l’errore
può essere rappresentato con un vettore: precisamente, tale errore è il vettore r - r̂ (v. figura).

2.2 – L’errore di proiezione

A questo punto ci si apre una serie di questioni davanti: possiamo ad esempio chiederci come fare
a valutare l’errore che si compie descrivendo un segnale x(t) (7) con alcuni coefficienti assegnati ad
una base ortonormale8 {ψ i (t )} . In pratica ci chiediamo:
N

i =1

è possibile descrivere x con una combinazione lineare di {ψ i (t )} ? Come trovo i relativi


N

i =1

coefficienti?
?
x = c1 , c2 , ..., cn 
• che errore commetto?
e=?
• come faccio a commettere il minore errore possibile? E, in particolare, come faccio a
minimizzare il quadrato del modulo dell’errore (cioè l’energia dell’errore)9?
Come abbiamo fatto poco fa, definiamo così l’errore:
e (t ) = x ( t ) xˆ (t )
N



 xˆ (t ) = ∑ ciψ i (t )
i =1
segnale descrizione del segnale
(esatto) tramite coefficienti
( proiezione sulla
base {ψ i (t )} )
N
i =1

Scriviamo la definizione dei coefficienti ci (10):


T
ci = x , ψ i = ∫ x (t )ψ i* (t ) dt
0

Definiamo poi l’energia dell’errore e (quella che vogliamo minimizzare):


T
E e = e, e = ∫ e ( t )
2
dt
0

Vogliamo dimostrare i seguenti risultati:


1. l’energia dell’errore è così esprimibile:
N

∑c
2
Ee = Ex −
  i =1
i
energia energia del  
dell'errore segnale coefficienti
originario del segnale
proiettato

2. se l’energia dell’errore è nulla allora


a. la base è completa per il segnale x(t);
b. x(t) ha una dimensionalità M al più uguale al numero delle funzioni della base, e
cioè N;
N
c. l’energia del segnale utile è pari a Ex = ∑ ci
2
(11)

i =1

7 Definito su T.
8 Se la base è incompleta non c’è scampo e l’errore si compie in ogni caso; se la base è completa, invece, possiamo sì
effettuare la operazione senza commettere tale errore, ma soltanto in un caso ideale (o se è possibile agire per via
analitica): se effettuiamo delle misurazioni una componente intrinseca d’errore c’è sempre, come la fisica insegna.
9 MMSE = Minimum mean square error.

10 Tali coefficienti li troviamo proiettando il segnale sulla base ortonormale.


Il punto 1 è il più laborioso da dimostrare: poi, dimostratolo, tutte le considerazioni che abbiamo
raccolto nel punto 2 verranno da sé e non necessiteranno di ulteriori dimostrazioni; iniziamo con
l’esplicitare la già vista definizione di proiezione del segnale su base ortonormale (scritta come
opportuna combinazione lineare di coefficienti ci ) e la relazione che intercorre fra errore12, segnale
esatto e segnale proiettato
e (t ) = x ( t ) xˆ (t )
N



 xˆ (t ) = ∑ ciψ i (t )
i =1
segnale descrizione del segnale
(esatto) tramite coefficienti
( proiezione sulla
base {ψ i (t )} )
N
i =1

L’energia di e(t) può essere scritta come:


T
Ee = ∫ x (t ) − xˆ (t )
2
dt
0

Sviluppando il prodotto otteniamo:


 
T T

{ }
Ee = ∫ x (t ) + xˆ (t ) − 2 Re x (t ) xˆ * (t ) dt = Ex +Exˆ − 2 Re  ∫ x (t ) xˆ * (t ) dt  = Ex +Exˆ − 2 Re { x , xˆ }
2 2

0
 
energia Ex energia Exˆ
 0 
A questo punto, per minimizzare l’errore, possiamo agire sul termine 2 Re { x , xˆ } . Esplicitiamolo:
*
N  = x ,ψ i
∑  ciψ i (t ) 

 i =1 
T  T N N T N
x , xˆ = ∫ x (t ) xˆ * (t ) dt = ∫ x (t ) ∑ ci*ψ i* (t ) dt = ∑ ci* ∫ x (t ) ψ i* (t ) dt = ∑ ci* x , ψ i
0 0 i =1 i =1 0 i =1

Adesso, tramite funzioni base e relativi coefficienti, esprimiamo il termine Ex̂ , e cioè l’energia del
segnale ricavato proiettando x(t) sulla base ortonormale:
T T N N N N T
Exˆ = xˆ , xˆ = ∫ xˆ (t ) xˆ (t ) dt = ∫ ∑ ciψ i (t )∑ c ψ
* *
j
*
j (t ) dt = ∑∑ c c ∫ψ i (t )ψ j* (t ) dt
*
i j
0 0 i =1 j =1 i =1 j =1 0

Notiamo immediatamente che, in virtù dell’ortogonalità del set di funzioni {ψ i (t )} :


N

i =1
T
 1 → per ogni i = j
∫ψ (t )ψ (t ) dt = 0 → per ogni i ≠ j
*
i j
0

Possiamo quindi eliminare una delle due sommatorie e trasformare tutte le j in i:


N N

∑ ci ci* = ∑ ci
2
Exˆ = (13)

( j = )i =1 i =1

Ora possiamo mettere tutto dentro la relazione originaria:


N 
Ee = Ex +Exˆ − 2 Re { x , xˆ } = Ex +∑ ci − 2 Re ∑ ci* x , ψ i  = Ex +∑  ci − 2Re {ci* x , ψ i } =
N N
2 2

i =1  i =1  i =1
 

= Ex +∑  ci − 2Re {ci* x , ψ i }
N
2

i =1
 
Giunti a questo punto utilizziamo un piccolo trucchetto e completiamo lo sviluppo del quadrato
(del quale compaiono 2 membri su 3 sotto il simbolo di sommatoria):

11 È questa la generalizzazione del caso della trasformata di Fourier: i coefficienti della serie di Fourier, infatti, sono
delle proiezioni del segnale sulle funzioni esponenziali.
12 A tutti gli effetti è un segnale, visto che nasce come risultato della sottrazione fra due segnali.

13 In quanto

2
( a + jb )( a + jb )* = ( a + jb )( a − jb ) = a 2 +b2 =  a 2 + b2  = a + jb
2
 
 
  N  
Ee = Ex +∑  ci − 2 Re {ci* x , ψ i } + 
N
x , ψ i − x , ψ i  = Ex + ∑  x , ψ i − ci − x , ψ i
2 2 2 2 2

i =1
    i =1     
 
completamento del quadrato 
 abbiamo
il quadrato ch
che
creato 
OSSERVAZIONI:
• il termine Ex è l’energia del segnale esatto: non possiamo certamente agire su questo
parametro;
N


2
• anche il termine x ,ψ i non si può minimizzare, perché riguarda il segnale x(t) e la
i =1

base che abbiamo scelto per ipotesi (ee che certamente non possiamo cambiare giunti a
questo punto);
• posso
so cercare di portare a zero il termine appena creato, ovvero
N

∑ 
2
x ,ψ − c i i
i =1  
il quadrato che
abbiamo creato

L’unico modo per farlo è quello di imporre:


ci = x , ψ i per ogni i
Così facendo il termine di cui sopra scompare.

Fatte queste considerazioni e imposto che


N

∑ 
2
x ,ψ − c = 0 i i
i =1  
il quadrato che
abbiamo creato

quel che rimane è:


N
Ee = Ex − ∑ x , ψ i
2

i =1

Se ora guardiamo bene ci accorgiamo che, per costruzione del nostro problema (l’abbiamo detto
all’inizio di questo paragrafo), sussiste questa equivalenza:
N N

∑ = ∑ ci = x
2 norma al quadrato del vettore x (che può
x,ψ i
2 2

i =1 i =1
essere rappresentato nello span delle funzio
funzioni base)
N

∑c
2
D’altronde i è anche l’energia Ex̂ della nostra rappresentazione (proiezione). Quindi:
i =1

Ee = Ex − Exˆ

2.3 – Esempio: i coefficienti di Fourier

Nel caso della trasformata di Fourier le funzioni base sono

t
1 j 2π i
ψ i (t ) = e T
definite con T, con i = 1, 2, …, N (14)
T

14Si dice che queste funzioni sono in relazione armonica fra loro. Salta subito all’occhio questa caratteristica di tali
funzioni:
• per i = 1  frequenza = 1 / T
• per i = 2  frequenza = 2 / T
• per i = 3  frequenza = 3 / T
• etc…
Se quindi abbiamo un segnale x(t),
x anch’esso definito su T,, possiamo trovare i coefficienti di
Fourier ci tramite la seguente proiezione:
T t
1 − j 2π i
ci = x , ψ i =∫ x (t ) e
T 0
dt T

A questo punto capiamo meglio il significato della serie di Fourier: nel caso generale, la
rappresentazione di Fourier è esatta15 quando consideriamo una combinazione lineare degli
infiniti termini16 esponenziali che hanno la forma sopradescritta.
sopradescritta. Ovviamente, siccome facciamo i
calcoli con i mezzi limitati della realtà fisica, che è ben lontana dalla perfezione dell’astrazione
matematica, siamo costretti a prendere un numero finito (anche molto grande, gran ma finito) dei
coefficienti di questa serie: questo significa che stiamo facendo una proiezione su un numero
(altrettanto) finito di basi; di conseguenza, stiamo commettendo un errore. Ecco quindi che forma
ha il segnale x(t) nella sua versione “proiettata”,
“proiet riferita ad un numero N di funzioni base:
N N t
1 j 2π i
xˆ (t ) = ∑ ciψ i (t ) = ∑ ci e T (sviluppo in serie di Fourier) (17)
i =1 T i =1
Con questo retroterra teorico possiamo passare dalla “vecchia” rappresentazione (in ( frequenza),
che ci dà informazioni sullo spettro … 18

… alla nuova rappresentazione vettoriale:


vettoriale

15 E quindi è assolutamente equivalente al segnale x(t) che esaminiamo.


16 Chiaramente, non è sempre così: in alcuni casi “buoni”, molto particolari, i coefficienti di Fourier sono finiti.
17 Il termine 1 T viene posto in virtù del fatto che vogliamo normalizzare in energia. Verifichiamo infatti che
abbiamo normalizzato la base dimostrando che quest’ultima soddisfa la definizione di ortonormalità:
T T t t T T
1 j 2π i 1 − j 2π k 1 1 j 2π i
t
− j 2π k
t
1 j 2π (i −k) Tt
ψ i ,ψ k = ∫ψ i (t )ψ k* (t ) dt = ∫ dt = ∫
T ∫0
e T
e T
e T
e T
dt = e dt
0 0 T T 0 T T
T
j 2π (i − k )
t
0 per i ≠ k
∫e
0
T
dt = 
T per i = k
Di conseguenza:
T
1 j 2π (i −k) Tt 1
ψ i ,ψ k =
T ∫0
e dt = T = 1
T
18Nota che in questo caso ogni riga – legata al suo coefficiente – si riferisce a una diversa funzione base (e quindi a una
diversa dimensione, visto che il set di funzioni base è ortonormale). Questo significa anche che un segnale ha tante più
dimensioni quanto più larga è la sua banda.
2.4 – La procedura di Gram-Schmidt

La procedura di Gram-Schmidt è uno strumento matematico utile a trovare una base ortonormale
in grado di descrivere un insieme di segnali definito per ipotesi: illustriamolo, agendo passo per
passo. Anzitutto l’ipotesi: abbiamo una serie di funzioni, definite su T, che chiamiamo
sl (t ) con l = 1, ..., M
Esiste una base ortonormale per l’insieme {sl (t )} ?
M

l =1

PASSO 1
Associamo la prima funzione della futura nostra base ortonormale alla prima funzione19 del set
{s (t )}
M
l , provvedendo naturalmente alla normalizzazione in energia:
l =1
prima funzione
del set {sl (t )}
M

 l =1

s1 (t ) s1 (t )
ψ 1 (t ) = =
 s1 , s1 E s1
prima funzione
della base 
 
ortonormale normalizzazione
in energia

PASSO 2
Proiettiamo la seconda funzione sulla prima base ortogonale:
s2,1 = s2 ,ψ 1

{s (t )}
M
Dopodiché scegliamo la seconda base togliendo, dalla seconda funzione del set l , la
l =1

proiezione di cui sopra. In questo modo “depuriamo” la futura seconda base da qualsiasi
componente che possa essere riferita alla prima e, di conseguenza, imponiamo l’ortogonalità20.
futura seconda funzione prima funzione
del set {sl (t )}
della base ortonormale M
(non ancora normalizzata)
  l =1

φ2 (t ) = s2 (t ) − s2,1ψ 1 (t )
Allora:
• se φ2 (t ) = 0 allora significa che le funzioni s1 (t ) e s2 (t ) potevano essere descritte dalla sola
base ψ 1 (t ) , quindi procediamo, nello stesso modo appena visto e con la funzione successiva
(l = 3), alla ricerca della seconda funzione base;
• se φ2 (t ) ≠ 0 allora abbiamo trovato la nostra seconda funzione base, che però dovremo
normalizzare in energia
φ 2 (t )
ψ 2 (t ) =
φ2 ,φ2

PASSO 3
Proiettiamo la terza funzione del set {sl (t )}
M
nelle due basi trovate nei passi 1-2:
l =1

19 In questo esempio scegliamo la prima funzione, cioè quella con l = 1, ma non esiste alcuna ipotesi sull’ordine con cui
esaminiamo le funzioni s, sia in questo passo che in quelli successivi. Questo significa, tra l’altro, che la procedura di
Gram-Schmidt può essere applicata in molti modi diversi, i quali generano – alla fine della procedura – tante basi
differenti ma tutte ugualmente valide.
20 Abbiamo imposto l’ortogonalità ma non ancora la normalizzazione in energia (si veda in seguito).
s3,1 = s3 ,ψ 1 s3,2 = s3 ,ψ 2

A questo punto, similmente a quanto abbiamo fatto prima, troviamo la futura terza funzione base
depurando la terza funzione del set {sl (t )}
M
delle componenti di sé stessa sulle prime due basi
l =1

trovate (le proiezioni di cui sopra):


φ3 (t ) = s3 (t ) − s3,1ψ 1 (t ) − s3,2ψ 2 (t ) = s3 (t ) − ( s3,1ψ 1 (t ) + s3,2ψ 2 (t ) )
  
combinazione lineare

Ora:
• se φ3 (t ) = 0 allora significa che la funzione s3 (t ) poteva essere descritta dalle sole basi
ψ 1 (t ) e ψ 2 (t ) , quindi procediamo, nello stesso modo appena visto e con la funzione
successiva, alla ricerca della terza funzione base;
• se φ3 (t ) ≠ 0 allora abbiamo trovato la nostra terza funzione base, che però dovremo
normalizzare in energia prima che lo diventi a tutti gli effetti
φ 3 (t )
ψ 3 (t ) =
φ3 ,φ3

PASSO 4
Iteriamo il passo precedente fino all’esaurimento del set {sl (t )}
M
per, avere, in generale:
l =1

φh (t )  h −1 
ψ h (t ) = dove φh (t ) = slgenerica (t ) −  ∑ sliψ i (t ) 
φh ,φh 
i =1
 
combinazione lineare
calcolata con le basi
trovate precedentemente

Esaminate tutte le funzioni (l’indice di l è arrivato ad M (21)), la procedura termina e sicuramente


abbiamo la base cercata. La base {ψ i (t )}
N
sarà costituita da N funzioni22:
i =1

• se N = M allora tutte le funzioni s erano già in partenza tutte ortogonali e quindi tutte le
proiezioni sono nulle;
• se N < M allora non tutte le funzioni s erano ortogonali fra di loro23.

2.5 – Esempio di applicazione della procedura di Gram-Schmidt

Supponiamo di avere le seguenti funzioni s, definite su T, con T ≪ 1 (24) ed l = 1, 2, 3, 4:


f0
 π
sl (t ) = V0 cos  2π f0t + ( l − 1 ) 
 2
Sviluppando questa forma con i relativi indici l otteniamo : 25

M, lo ricordiamo, era il numero di funzioni presenti nel set {sl (t )}l =1 .


M
21

22 N è anche la dimensionalità della base. Perché insistere tanto nella distinzione tra cardinalità M e dimensionalità N? Il
motivo è che avere una alta cardinalità e una bassa dimensionalità significa poter “incasellare” tante funzioni in una
banda ristretta. Ad esempio una 256-QAM è una modulazione molto compatta, ad altissima efficienza e molto
economica dal punto di vista della banda, visto che ha dimensionalità 2 (e infatti gli assi corrispondenti alle funzioni
base sono soltanto due, uno in fase e uno in quadratura) e cardinalità 256.
23 E tante meno funzioni erano ortogonali quanto N è inferiore ad M.

24 E quindi il supporto temporale T è molto più lungo del periodo del coseno presente all’interno delle funzioni s.

25 Facilissimo è verificare che, in questo caso, la cardinalità del nostro insieme di funzioni è pari a 4.
l=1  s1 (t ) = V0 cos ( 2π f0t )
 π
l=2  s2 (t ) = V0 cos  2π f0t + 
 2
l=3  s3 (t ) = V0 cos ( 2π f0t + π )
 3π 
l=4  s4 (t ) = V0 cos  2π f0t +
 2 

PASSO 1
Prendiamo la prima funzione s [e cioè s1 (t ) = V0 cos ( 2π f0t ) ], normalizziamola in energia e
“promuoviamola” automaticamente a prima funzione base:
V cos ( 2π f0t )
ψ 1 (t ) = 0
Es1
Siccome possiamo esplicitare Es1 [l’energia della funzione s1 (t ) ]…
T
V02
Es1 = ∫ s1 (t )
2
dt = T
0
2
… l’espressione della prima base diventa:
V cos ( 2π f0t ) 2
ψ 1 (t ) = 0 = cos ( 2π f0t ) (26)
2
V0 T T
2

PASSO 2
Prendiamo ora la seconda funzione del set s e proiettiamola sulla prima base:
T T
 π 2
s2,1 = s2 ,ψ 1 = ∫ s2 (t )ψ 1* (t ) dt = ∫ V0 cos  2π f0t +  ⋅ cos ( 2π f0t ) dt =
0 0  2  T
T T
cos ( 2π ( 2 f0 ) t ) dt = 0 (27)
2 2 1
∫ sin ( 2π f0t ) cos ( 2π f0t ) dt = V0
T ∫0 2
= V0
T0
Siccome tale proiezione non esiste, deduciamo che le due funzioni sono ortogonali28. Abbiamo così
trovato, senza colpo ferire, la nostra seconda funzione base, che sarebbe la s2 (t ) normalizzata in
energia:
V0 sin ( 2π f0t ) 2
ψ 2 (t ) = = sin ( 2π f0t )
V0π T
2

PASSO 3
Lanciamoci ora nella ricerca della terza funzione base: prendiamo la s3 (t ) e proiettiamola sulla
ψ 1 (t ) :
T T
2
s3,1 = s3 ,ψ 1 = ∫ s3 (t )ψ *
1 (t ) dt = ∫ V0 cos ( 2π f0t + π ) cos ( 2π f0t ) dt =
0 0
T

26 Il risultato di questa operazione è la già vista funzione coseno normalizzata in energia.


27 Il termine 1 2 cos ( 4π f0t ) va a zero perché il termine sinusoidale ha un periodo 1 f molto inferiore all’intervallo T di
0
integrazione (e quindi i lobi “positivi”, ovvero quelli sopra l’asse t, si compensano con quelli “negativi”).
28 D’altronde è notorio che le funzioni seno e coseno sono fra loro ortogonali, quindi il risultato era prevedibile.
se ne va perché è ad alta frequenza


2 ( 0 0 ) ( 0
T cos 2π f t + π − 2π f t + cos 2π f t + π + 2π f t
0 )
= V0
T ∫
0
2
dt =
dt (29)

T
2 1 1 2 T
= V0 ∫ − d t = − V0
T 0 2 2 T
T = −V0
2
Questa volta il risultato non è “banale” e non abbiamo immediata ortogonalità. La situazione,
fin’ora, può essere riepilogata nel seguente schema:
schema
Ovvero, abbiamo subito trovato la prima
2 V0T T
s1,1 = = V0 base. Il risultato della formula è il valore
T 2 2 del relativo coefficiente.
Abbiamo trovato la seconda base, perché la
s2,1 = 0 2 V0T T funzione s2 ( t ) è ortogonale alla prima.
s2,2 = = V0
T 2 2 Trovato anche il coefficiente s2,2 .
Esiste un coefficiente s3,1 quindi esiste una
componente di s3 (t ) su s1 (t ) . Ora la
2 V0T T
s3,1 =− = −V0 s3,2 = ? φ3 = ? domanda è: esiste una componente di
T 2 2 s3 ( t ) su s2 (t ) ? E, se esiste la base ψ 3 (t ) ,

qual è la componente di s3 (t ) su tale base?

Calcoliamo la proiezione di s3 (t ) sulla seconda base:


stessi calcoli
di prima...
T
2 
s3,2 = s3 ,ψ 2 = ∫ V0 cos ( 2π f0t + π ) ⋅ sin ( 2π f0t ) dt = ... =0 (ortogonali)
0
T
Vediamo ora se, sottraendo da s3 (t ) la proiezione di essa stessa sulla prima base30, rimane
qualcosa oppure il risultato è nullo. Se sussiste quest’ultima eventualità allora significa che tutta
quanta s3 (t ) può essere rappresentata con la sola base ψ 1 (t ) .
Procediamo:
è nullo


T 2
φ3 = s3 (t ) − s3,1ψ 1 (t ) − s3,2ψ 2 (t ) = V0 cos ( 2π f0t + π ) + V0 cos ( 2π f0t ) =
2 T
= −V0 cos ( 2π f0t ) + V0 cos ( 2π f0t ) = 0
Quindi s3 (t ) sta tutta sullo span di ψ 1 (t ) e siamo, con
le basi, ancora fermi a quota due.
A questo punto passiamo al…

PASSO 4

ultima funzione da esaminare: s4 (t ) . Può


Rimane un’ultima
essa essere descritta dalle sole ψ 1 (t ) e ψ 2 (t ) o dobbiamo
mo introdurre una nuova base ψ 3 (t ) ?

29 Abbiamo applicato la formula di Werner:


1
 cos (α + β ) + cos(α − β ) 
cos α cos β =
2
30 La componente di s ( t ) sulla seconda base è nulla, come abbiamo appena verificato, quindi c’è bisogno di sottrarla.
3

Se tale proiezione s3,2 ψ 2 fosse invece esistita, avremmo dovuto toglierla da s3 (t ) .


Proiettiamo s4 (t ) sulle ψ 1 (t ) e ψ 2 (t ) :
T T
 3  2 2  3 
s4,1 = s4 ,ψ 1 = ∫ V0 cos  2π f0t + π  ⋅ cos ( 2π f0t ) dt = V0 ∫ cos  2π f0t + π  cos ( 2π f0t ) dt =
0  2  T T0  2 
=0
 
se ne va (alta frequenza)



T
2 1   3π   3π  
π
T ∫0 2 
= V0  cos  4 f t + + cos  2   dt = ... = 0
2 
0
  
 
 3π 
T T
 3  2 2 1
s4,2 = s4 ,ψ 2 = ∫ V0 cos  2π f0t + π  ⋅ sin ( 2π f0t ) dt = ... = V0 ∫ sin   dt =
0  2  T T 02  2 
2 T T
= −V0
dt = −V0
T 2 2
Quindi s4 (t ) sicuramente non sta sullo spazio di ψ 1 (t ) mentre ha una componente su quello
3 se caviamo da s4 (t ) la componente su ψ 2 (t )
ψ 2 (t ) . Ripetiamo quindi il ragionamento del passo 3:
(appena scoperta) rimane qualcosa? Se sì, allora le funzioni-base
funzioni base diventano tre; altrimenti
possiamo descrivere s4 (t ) con la sola ψ 2 (t ) .
è nullo


 3π  T 2 
φ3 = s4 (t ) − s4,2ψ 2 (t ) − s4,1ψ 1 (t ) = V0 cos  2π f0t +  −  −V 0 sin ( 2π f0t ) =
 2  2 T 
= −V0 sin ( 2π f0t ) + V0 sin ( 2π f0t ) = 0

La procedura di Gram-Schmidt
Schmidt può dirsi terminata; conclusioni:
• s1 (t ) , normalizzata in energia, diventa la prima base;
• s2 (t ) è ortogonale a s1 (t ) , quindi (sempre normalizzata) diventa la seconda base;
• s3 (t ) può essere descritta dalla base “nata”
da s1 (t ) ;
• s4 (t ) può essere descritta dalla base “nata”
da s2 (t ) .
In breve:
• la cardinalità è pari a 4, ma la
dimensionalità N è 2;
 2
ψ 1 = cos ( 2π f0t )
 T
• le funzioni-base sono 
ψ = 2 sin 2π f t
 2 ( 0)
T
• in
n figura sono riportati i coefficienti s1 , s2 , s3 , s4 i quali, moltiplicati per le corrispondenti
basi, delineano una costellazione
costellazione che riconosciamo essere quella della 4-PSK.
4 Interessante è
notare che le stesse considerazioni fatte per le basi e per le funzioni s valgono anche per
l’energia delle varie forme d’onda. L’energia della forma d’onda s3 (t ) , infatti, può essere
scritta calcolando il modulo al quadrato dei coefficienti e sommandoli:
2
2 2  T  T
Es3 = s3,1 + s3,2 = + 0 = V02
 2 0 
V
  2
Questo ci suggerisce il profondo legame che vi è fra le coordinate dei coefficienti e l’energia
delle forme d’onda: più sono lontani i punti e più
più energetiche saranno le forme d’onda.

2.6 – Mappatura di seno e coseno: il principio delle modulazioni

Nell’esempio precedente abbiamo definito quattro forme d’onda sinusoidali, che possono essere
sinteticamente scritte in questo modo:

sl (t ) = V0 cos 2π f0t +
( l − 1) π  l = 1,2,3,4

 2 
Abbiamo scoperto che tali funzioni possono essere rappresentate nello spazio bidimensionale
descritto dalle due funzioni sinusoidali31:
2
ψ 1 (t ) = cos ( 2π f0t )
T
2
ψ 2 (t ) = sin ( 2π f0t )
T
La costellazione che ne deriva ha la forma individuata a
sinistra. Le coordinate vengono ngono riportate nella tabella sotto:

Lungo la prima base ψ 1 (t ) Lungo la seconda base ψ 2 (t )


2 V0T s1,2 = 0
s1,1 =
T 2
s2,1 = 0 2 V0T
Ora che abbiamo questa base s2,2 =
T 2
possiamo descrivere in maniera
2 V0T s3,2 = 0
agile (e attraverso i coefficienti s3,1 = −
appena esposti) ogni funzioneione T 2
sinusoidale. Ad esempio, volendo s4,1 = 0 2 V0T
s4,2 = −
esprimere la funzione z(t) T 2

(
z (t ) = V0 cos 2π f0t + π
4 )
+ V0 sin 2π f0t + π
4 ( )
potre
potremmo farlo sommando vettorialmente i vettori s1 e s2
z = s1 + s2
 2 V0T 
s1 =  ,0 
 T 2 
 
 2 V0T 
s2 =  0, 
 T 2 

Tra l’altro, nello stesso modo, possiamo scrivere comodamente i
segnali che usualmente trattiamo nelle modulazioni, visto che a tutti
gli effetti sono segnali derivati da una combinazione lineare di forme
d’onda sinusoidali32. Infatti si ha
x (t ) = ∑ ( ak cos ( 2π f0t ) + bk sin ( 2π f0t ) )
k

e con k = ±1, ±3 otteniamo, ad esempio, la


l modulazione 16-QAM
QAM (vedi figura a destra).

31 Quindi M = 4, N = 2 e, come al solito, t ∈ 0,T  e T ≫ 1 f .


0
32 In virtù del fatto che devono essere ad alta frequenza e di natura passa-banda.
passa
In definitiva, con la nostra base possiamo esprimere tutti i tipi di modulazione QAM e PSK33: il
primo caso l’abbiamo
’abbiamo trattato a sufficienza, ed è facile
arrivare agli stessi risultati per quanto riguarda i punti
pu delle
costellazioni di modulazioni in fase. fase In quest’ultimo caso,
infatti, le forme d’onda possono essere scritte in questo modo:
x (t ) = V0 ∑ cos ( 2π f0t + α k )
k

Risulta chiaro che i punti della relativa costellazione si


trovano su una circonferenza centrata nell’origine e di raggio
V0 ; dunque, se chiamiamo α l’angolo di sfasamento,
possiamo individuare le coordinate del punto della costellazione tramite i due termini
ak = V0 cos α k bk = V0 sin α k
E quindi,, siccome compaiono termini sinusoidali, le nostre due solite basi sono ancora una volta
sufficienti per descrivere la modulazione
dulazione PSK.

Insomma,, ricapitolando, questo è il principio delle modulazioni: alcuni simboli (appartenenti ad


un alfabeto M avente cardinalità 2n ) entrano in un digital modulator34, il quale dà in uscita una
forma d’onda x(t). Ad ognuno degli M simboli possiamo associare una funzione dell’insieme:
{sl (t )} con l = 1, 2, ..., M
Si ha:
m1 ⇔ s1 (t )
m2 ⇔ s2 (t )

mM ⇔ sM (t )
Questo è il risultato della modulazione35:

In definitiva, abbiamo una rappresentazione alternativa del nostro segnale36 (effettuata tramite le
forme d’onda s):

33 Con una base unidimensionale (e quindi anche con una base bidimensionale) possiamo rappresentare qualsiasi
modulazione ASK/PAM. Per le FSK servono invece basi con dimensionalità molto maggiore.
34 Questo ad ogni tempo di simbolo, cioè ogni T = R −1 secondi.
s s
Un esempio con le funzioni del paragrafo 2.5:
35

M = 4, n = 2
N=2
m1 → s1 ( t ) =V0 cos ( 2π f0t )

m2 → s2 (t ) = V0 cos ( 2π f0t +π 2 )

m3 → s3 ( t ) = V0 cos ( 2π f0t +π )

m4 → s4 (t ) = V0 cos ( 2π f0t + 3π 2 )
36 Che è molto familiare dal corso di Comunicazioni Elettriche
Elettrich L-B.
+∞
x (t ) = ∑ s (t − kT )
ik s
i =−∞

Come sappiamo, ogni funzione sik può essere scomposta come combinazione lineare di termini di
una base ortonormale:
+∞ +∞
x (t ) = ∑ ∑s k ,h ψ h (t − kTs )
k =−∞ h =−∞

In questa relazione:
+∞
• la sommatoria ∑
k =−∞
(in k) è legata alla dipendenza temporale di ψ (e di x): grazie ad essa

scorriamo tutto l’asse dei tempi;


+∞
• la sommatoria ∑
h =−∞
(in h) corre sulle funzioni base e ne fa la combinazione lineare.

Possiamo quindi fare un piccolo schema del modulatore37, per vedere graficamente i vari passaggi.

Vediamo
diamo ora, singolarmente, le varie modulazioni.

Pulse Amplitude Modulation)


2.7 – PAM (Pulse Modulation

L’impulso campione contenuto all’interno del modulatore è g (t )


g(t); esso ha durata Ts e forma
 1 (38 )
 t ∈ 0,Ts  38
g (t ) =  Ts

0 altrove
Supponiamo che la cardinalità M del nostro insieme di funzioni
sia pari a 4(39).
I simboli hanno quest’espressione:
ak ∈ 2i − ( M + 1)  i = 1, ..., M
i =1 ak = 2 − M − 1 = −3
i=2 ak = 4 − M − 1 = −1
i=3 a k = 6 − M − 1 = +1
i=4 ak = 8 − M − 1 = +3

37 I simboli ak entrano nel mapper,, il quale – appunto – “mappa” il simbolo in arrivo sui coefficienti della
combinazione lineare che mi servono per generare la forma d’onda.
38 In questo modo abbiamo normalizzato in energia, la quale è l’area del rettangolo avente base T e altezza 1/ T .
s s
39 Questo significa che, ad ogni tempo di simbolo, possiamo trasmettere 2 bit. Con due bit (n
( = 2), infatti, possiamo
rappresentare 2n = 4 simboli (e 4 è la cardinalità del nostro insieme di funzioni).
Le forme d’onda possibili hanno questa struttura:
x (t ) = ∑ ak g (t − kTs ) Rs−1 = Ts
k

E quindi, prese singolarmente, esse sono:


−3 g ( t ) , − g ( t ) , + g ( t ) , + 3 g ( t )
È facile vedere che possiamo rappresentarle con una base ortonormale.
ortonormale Volendo applicare la
procedura di Gram-Schmidt,
Schmidt, prendiamo come prima funzione
g (t )
g (t )  normalizzata in energia  ψ 1 (t ) =
Eg
Altre funzioni base, oltre a questa, non ve ne sono in quanto la modulazione è monodimensionale.
Visto che siamo stati furbi e nel primo passo della procedura di Gram-Schmidt
Gram Schmidt abbiamo scelto, fra
le nostre funzioni, quella col coefficiente +1, ora abbiamo immediatamente a disposizione i
coefficienti (e cioè i simboli) che, moltiplicati per ψ 1 (t ) , restituiscono le quattro funzioni scritte
sopra40:
s11 = −3 s21 = −1 s31 = 1 s41 = 3

A questo punto è facile


le anche calcolare l’energia delle varie forme d’onda:
Es1 = ( −3 ) = 9 E s 2 = ( −1 ) = 1 Es3 = (1 ) = 1 Es 4 = ( 3 ) = 9
2 2 2 2

In questo caso, si vede benissimo, l’energia per simbolo non è costante41.

2.8 – ASK (Amplitude Shift Keying)


Keying

Prendiamo, come al solito, un impulso g(t) rettangolare e normalizzato di durata Ts . Il nostro


alfabeto M ha cardinalità M = 2m :
M = {m1 , m2 , ..., mM }
e i simboli che vogliamo trasmettere sono sempre
ak ∈ 2i − ( M + 1)  i = 1, ..., M
La seguente è invece la forma del segnale che vogliamo mandare nell’etere:
α=0
(comodità)
x (t ) = ∑ ak g (t − kTs ) cos ( 2π f0t + α ) = ∑ s (t − kT )
ik s
k    k
   portante
impulso

In tale relazione,

s1 (t ) = −3 g (t ) cos ( 2π f0t )



s2 (t ) = − g (t ) cos ( 2π f0t )
sik = 
s3 (t ) = g (t ) cos ( 2π f0t )

s4 (t ) = 3 g (t ) cos ( 2π f0t )

40Sono esattamente quelli che moltiplicano le g(t).


41Avessimo avuto solamente le funzioni –g(t) e +g(t) (caso M = 2), l’energia per simbolo sarebbe stata costante è pari a
1, cioè pari all’energia dell’impulso campione contenuto nel modulatore.
Sempre per via del coefficiente unitario che moltiplica g(t), e della maggiore comodità che ne
consegue, scegliamo s3 (t) come funzione base ψ 1 (t ) rispetto alla quale riscalare tutto in energia:
Ts Ts Ts
1 1 1 1 1 1 1
Es3 = s3 , s3 = ∫ g (t ) cos ( 2π f0t ) dt = ∫ cos ( 2π f0t ) dt = cos ( 2π 2 f t )
∫ 2 +  dt = Ts =
2 2 2
0
0
Ts 0
Ts 0
2   2 Ts 2
come al solito se ne va
perché il coseno ha un
periodo ≪ Ts

1
A questo punto, per normalizzare in energia, è necessario dividere tutte le funzioni per . Ecco
2
che aspetto hanno le forme d’onda dopo questa operazione:
s1 (t ) = −3 2 g (t ) cos ( 2π f0t ) = −3ψ 1 (t )

s2 (t ) = − 2 g (t ) cos ( 2π f0t ) = −ψ 1 (t )
sik = 
s3 (t ) = 2 g (t ) cos ( 2π f0t ) = ψ 1 (t )

s4 (t ) = 3 2 g (t ) cos ( 2π f0t ) = 3ψ 1 (t )
Dunque, ecco la forma dell’oscillazione modulata una volta effettuata la normalizzazione:
x (t ) = ∑ sik (t − kTs ) = ∑ 2ak g (t − kTs ) cos ( 2π f0t ) = ∑ akψ (t − kTs )
k k k

Si vede bene che tutte le funzioni sono combinazioni lineari di ψ 1 (t); inoltre, i punti della
costellazione sono chiaramente uguali a quelli della modulazione PAM42.

2.9 – PSK (Phase Shift Keying)

Ancora una volta consideriamo un impulso g(t) rettangolare con supporto Ts . Il nostro alfabeto
M ha cardinalità M = 2m :
M = {m1 , m2 , ..., mM }
e i simboli che vogliamo trasmettere sono sempre
ak ∈ 2i − ( M + 1)  i = 1, ..., M
Ogni simbolo – chiaramente – è messo in corrispondenza biunivoca con una particolare entità m
appartenente all’alfabeto M .

Questa è la forma del vettore che indica ad un qualsiasi istante t un punto della costellazione:
N
si (t ) = ∑ sihψ h (t ) i = 1, ..., M
h =1

Dopo aver normalizzato in energia nel solito modo, così viene espressa una generica forma d’onda
corrispondente ad uno degli M simboli a disposizione:
 π 
si (t ) = 2 g (t ) cos  2π f0t − mi mi = 2i − ( M + 1) ≡ ak di prima
 M 
Questa volta possiamo prevedere di avere un numero N superiore ad uno43 di funzioni base dato
che vi sono più possibili fasi assumibili dal coseno. Se proviamo infatti ad esaminare qualche
forma d’onda (ipotizziamo M = 8):
 1 
s4 (t ) = 2 g (t ) cos  2π f0t − π  m4 = −1
 8 

42 La modulazione ASK e la PAM, infatti, si equivalgono in tutto e per tutto, compreso nelle prestazioni.
43 Ma sempre e comunque inferiore ad M.
 1 
s5 (t ) = 2 g (t ) cos  2π f0t + π  m5 = 1
 8 
….
 7 
s8 (t ) = 2 g (t ) cos  2π f0t + π  m8 = 7
 8 
capiamo che il solo coseno calcolato in 2π f0t non basta per definire
le coordinate dei punti, che sono invece posti lungo la
circonferenza
conferenza che il coseno (con l’aiuto di una seconda funzione!)
disegna “correndo” lungo tutte le sue fasi da 0 a 2π , come si vede
in figura a fianco. Operando intuitivamente e senza rifare calcoli
che abbiamo già fatto, scriviamo immediatamente
immediatamente la nostra base, composta da una funzione
coseno e una funzione seno: con esse sarà in seguito possibile tracciare la nostra (per l’appunto bi-
bi
dimensionale) circonferenza.
ψ 1 (t ) = 2 g (t ) cos ( 2π f0t )
BASE → 
ψ 2 (t ) = 2 g (t ) sin ( 2π f0t )
A questo punto, effettuando il prodotto interno fra le forme d’onda s e le funzioni base ψ ,
possiamo trovare le proiezioni sugli assi (= funzioni base) dei punti della modulazione e dunque le
loro coordinate. Vediamo qual è, ad esempio,
esempio, la componente sulla base coseno della forma d’onda
s8 (t ) :
Ts
 7 
s81 = s8 ,ψ 1 = ∫ 2 g (t ) cos  2π f0t + π  ⋅ 2 g (t ) cos ( 2π f0t ) dt =
0  8 
trigonometria!


Ts Ts
2  7  2 1 7  1 7  7
= ∫ cos  2π f0t + π  cos ( 2π f0t ) dt = ⋅ ∫ cos  π  dt = Ts cos  π  = cos π
Ts 0  8  Ts 2 0 8  Ts 8  8
D’altronde, questo risultato era più che prevedibile ragionando con la trigonometria: possiamo
quindi evitarci la fatica di ripetere il ragionamento per trovare s82 facendo interminabili integrali.
Il risultato è immediato:
7
s82 = s8 ,ψ 2 = sin π
8

L’energia di ogni forma d’onda, e quindi di ogni simbolo, è come al solito…


N
si , si = Esi = ∑ sih = si
2 2

h =1

… e dunque è pari alla norma al quadrato del vettore indicante la posizione del punto nella
costellazione. D’altronde, siccome abbiamo normalizzato in energia,
energia, i punti si trovano su una
circonferenza di raggio unitario e avranno tutti la stessa energia. La geometria ci viene quindi in
aiuto e ci suggerisce che, in questo caso

raggio ( norma ) costante ⇒ energia co


costante
stante

Volessimo aumentare M (e quindi la cardinalità della nostra PSK), l’energia delle forme d’onda
rimarrebbe sempre la stessa, solo diminuiremmo la distanza fra un punto e l’altro perché
dovremmo far stare più punti tutti assieme nella circonferenza. Questo renderebbe la
modulazione
one meno robusta, in quanto avere punti più ravvicinati significherebbe avere più alte
possibilità di sbagliare, a parità di SNR, rispetto a una PSK con M inferiore44.

È interessante esaminare, per quanto riguarda la Phase Shift Keying,, un aspetto riguardante
riguarda gli
amplificatori ad alta potenza . Siccome i simboli di tale modulazione sono tutti alla stessa energia,
45

il nostro amplificatore lavorerà sempre nello stesso punto. Questo aspetto rappresenta un
vantaggio in sede di progetto, in quanto posso strutturare
strutturare il collegamento ad-hoc e andarmi a
collocare nella zona in cui l’amplificazione è più efficiente46.

Qui l’amplificatore In tal punto l’amplificatore


lavora peggio lavora meglio e qui,
dunque, vorrò trovarmi
quando modulerò!

Possiamo anche pensare ad un compromesso fra:


• efficienza della modulazione ( ∝ numero di punti della costellazione, e aumenta con l’SNR);
• efficienza dell’amplificatore (energie dei simboli non troppo diverse per poter lavorare
costantemente vicini alla saturazione).
Nella figura a sinistra – ad esempio – è rappresentata una
costellazione avente due livelli energetici (uno interno, ad energia
minore, e uno esterno, ad energia maggiore);
maggiore) ogni livello energetico
consta di 4 punti per un totale di 8. Questo rende leggermente più
difficile la progettazione dell’HPA; tuttavia, il fatto di avere due
livelli energetici rappresenta un buon compresso in quanto ci
permette di distanziare di più i punti e di irrobustire la trasmissione
(mentre se avessimo avuto un’unica circonferenza su cui far
convivere otto punti la resistenza al rumore sarebbe subito crollata).

44 La PSK e la ASK si comportano in maniera diversa, sotto il punto di vista della robustezza, al variare di M;
aumentando la cardinalità di una modulazione ASK, caratterizzata dalle seguenti funzioni (normalizzate in energia
rispetto alla funzione base scelta con la procedura di Gram-Schmidt)
Gram
s ( t ) = 2mi g (t ) cos ( 2π f0t )
i
la distanza fra i simboli aumenta e quindi la modulazione diventa:
• più robusta;
• più dispendiosa dal punto di vista energetico.
ESEMPIO:
Es1 = 9 Es1 = 49
 
E = 1 ...  molta energia spesa e punti più distanti
M = 4 →  s2 M =8→
 Es3 = 1 ...
E = 9 Es 8 = 49
 s4
Per la PSK avviene l’opposto; all’aumentare di N:
• non varia il dispendio di energia;
• la modulazione diventa meno robusta.
45 High Power Amplifier = HPA.

46 Viceversa, le modulazioni ad inviluppo non costante non riescono a sfruttare questa agevolazione.
Quadrature amplitude modulation)
2.10 – QAM (Quadrature

Con la modulazione in quadratura di fase possiamo modulare in un


unico segnale due flussi separati di dati (figura a sinistra), oppure
o
agire allo stesso modo ma suddividendo un unico flusso in due
tramite un convertitore S/P (figura
a destra47). Possiamo immaginare
che la modulazione QAM sia S/P
formata da due modulazioni ASK
fra loro ortogonali: una che
“corre” lungo l’asse stabilito dalla
dall prima base, l’altra che ha
come riferimento l’asse ortogonale al primo.
primo
Se la cardinalità dell’insieme M è M, potrò quindi avere M 2
forme d’onda48:
si (t ) = 2m j cos ( 2π f0t ) + 2ml sin ( 2π f0t )
i = 1, 2, ..., M 2 j, l = 1, 2, ..., M
Senza inutilmente perderci nella solita procedura di Gram-Schmidt Schmidt (l’abbiamo già fatta svariate
volte), intuiamo immediatamente che le nostre funzioni base non possono essere altro se non49:
ψ 1 (t ) = 2 g (t ) cos ( 2π f0t )
BASE → 
ψ 2 (t ) = 2 g (t ) sin ( 2π f0t )

Questa è la nostra costellazione (caso M = 4  M 2 = 16 )

Si nota immediatamente che i punti sono tutti alla stessa distanza fra
loro; tuttavia la distanza dei puntii più vicini al centro (intersezione fra
gli assi) è maggiore rispetto al caso PSK50:

PSK
I punti stanno su una circonferenza di raggio unitario: distanza
dal centro = 1 (energia = 1).

QAM
La proiezione sugli assi dei (quattro) punti
punt più vicini al centro, e
non la distanza da esso, è – per entrambi gli assi – pari ad 1. La
ro è quindi maggiore e pari a 1 + 1 = 2 .
distanza dal centro

Il “problema” (se di problema si tratta) si risolve comunque in maniera immediata, riscalando


opportunamente le forme d’onda.

47 In tal caso, come viene indicato a fianco della figura, la rate dei due flussi creati a partire da uno solo dimezza
rispetto al flusso di dati originario.
48 Quelle indicate sono già state normalizzate in energia.

49 La modulazione è ancora una volta bidimensionale (similmente alla PSK e a differenza della PAM e della ASK, che

sono monodimensionali); possiamo quindi utilizzare le due basi ortogonali “per eccellenza”:
eccellenza”: il seno e il coseno.
50 Quindi, a rigore, è scorretto dire che la 4-QAM
4 coincide con la 4-PSK:
PSK: in entrambi i casi i punti stanno sì su una
circonferenza, ma nel primo caso il raggio è 2 e nel secondo è 1.
Un’osservazione interessante che possiamo
fare sulla costellazione QAM è la seguente:
esistono punti (quelli interni) aventi un
numero alto o di adiacenze (8 punti vicini,
vicini se
consideriamo anche quelli lungo le
diagonali); altri
ltri (quelli esterni) confinano
con un minor numero di punti (alcuni 3 –
quelli all’angolo – altri 5).
I punti della costellazione, dunque, non
sono tutti “equi-sicuri”:
sicuri”: alcuni, quelli con
meno adiacenze, lo sono di più degli altri.

Il DVB-T(51) sfrutta tutto ciò adottando


una politica particolare: se prendiamo
come esempio la 16-QAM,
QAM, si sceglie di
distanziare molto dal centro le
“quadruple” di bit appartenenti a
ciascun quadrate, come è mostrato in
figura affianco. In questo modo
abbiamo messo al sicuro i primi due
bit sui quattro codificanti i 16 simboli
imboli
(e a questo punto è estremamente
difficile sbagliare quadrante, a meno
di non avere una componente d’errore davvero massiccia: siccome i primi due bit di cui
parlavamo poco fa sono quelli che indicano il quadrante, allora significherà che essi sono molto
protetti); inoltre abbiamo limitato le adiacenze a 3 per ogni punto (sempre se consideriamo anche i
punti che si trovano nelle direzioni “diagonali”).. Gli ultimi due bit, quelli che – sempre
nell’esempio 16-QAM – ci aiutano a distinguere fra i quattro punti presenti all’interno di ciascun
quadrante, sono detti meno prioritari in quanto sono meno sicuri.
Una modulazione di questo tipo, privilegiante alcune unità informative rispetto ad altre, è detta
modulazione gerarchica.

Altri possibili casi particolari:


• costellazioni scavate.. Si ricavano “ritagliando” un insieme di punti adiacenti a partire da una
modulazione più grande52 (esempio in figura,
figura, “ritagliato” da una 64-QAM).
64

51 Digital Video Broadcasting – Terrestre,, detto anche più comunemente Digitale Terrestre.
52 Perché farlo? Perché magari il canale funziona meglio così.
• modulazione A-PSK (Amplitude Keying 53: è in realtà un caso particolare di
Amplitude Phase Shift Keying)
costellazione scavata in una 16-QAM,
16 , ma che preferiamo vedere come la composizione
composizi fra
una 4 – PSK e una 8 – PSK concentriche (v. figura).

Frequency Shift Keying)


2.11 – FSK (Frequency Keying 54

Con la FSK andiamo oltre le due dimensioni; in questo tipo di modulazione, infatti N = M e tutte
le forme d’onda sono fra loro ortogonali55:
si (t ) : si , s j = 0 ∀ i, j i ≠ j
Questo è l’aspetto della forma d’onda:
 
 
si (t ) = 2 g (t ) cos  2π f0t + 2 π∆fit
  per i = 1, 2, …, M
 spostamento 
 in frequenza 

Possiamo graficare un esempio tridimensionale (M( = N = 3). Come si vede nella figura a lato, ad
ogni funzione base è associata una e una sola forma d’onda,
le quali finiscono quindi per essere tutte fra loro ortogonali.
In altre parole:
s1,1 = s1 ,ψ 1 = Es1
s1,2 = s1 ,ψ 2 = 0
s1,3 = s1 ,ψ 3 = 0

s2,1 = s2 ,ψ 1 = 0
s2,2 = s2 ,ψ 2 = Es 2
s2,3 = s2 ,ψ 3 = 0

53 Viene utilizzata da Sky per la trasmissione satellitare televisiva (DVB-S).


(DVB
54 Detta anche OFSK – Orthogonal Frequency Shift Keying.
Keying
55 La condizione di ortogonalità deriva dalla scelta di un particolare ∆f (vedi sotto) e dal fatto che la spaziatura in

frequenza è la metà della frequenza di simbolo.


s3,1 = s3 ,ψ 1 = 0
s3,2 = s3 ,ψ 2 = 0
s3,3 = s3 ,ψ 3 = Es3
Le funzioni base56 sono dunque:
s (t ) s2 (t ) s3 (t )
ψ 1 (t ) = 1 ψ 2 (t ) = ψ 3 (t ) =
Es1 Es2 Es 3
Facciamo l’ipotesi che l’energia delle varie forme d’onda associate ai simboli sia uguale:
Es1 = Es 2 = Es3 = Es
È intuitivo capire che aumentando questa energia Es aumentiamo anche la distanza fra i punti
della costellazione e, quindi, anche la robustezza di quest’ultima ai rumori. Purtroppo, ahimé, a
una robustezza così solida57 fa da contraltare un massiccio uso della banda a disposizione: per
questo, tale tipo di modulazione è usato per la trasmissione dallo spazio profondo (la banda a
disposizione è molto ampia) o su cavo, oppure per trasmissioni wireless a bassa potenza su area
personale58 (es. Bluetooth).

Vogliamo ora trovare un vincolo matematico che ci assicuri l’ortogonalità. Troviamolo


calcolandoci quanto vale la proiezione di una generica forma d’onda su un'altra:
Ts

si , s j = ∫ 2 g (t ) cos ( 2π f0t + 2π∆fit ) ⋅ 2 g (t ) cos ( 2π f0t + 2π∆fjt ) dt =


0
Ts
2
=
Ts ∫ cos ( 2π f t + 2π∆fit ) ⋅ cos ( 2π f t + 2π∆fjt ) dt =
0
0 0

 
T
 
2 s1 
= ∫  cos ( 2π∆f ( i − j ) t ) + cos ( 4π f0t + 2π∆f ( i + j ) t )  dt =
Ts 0 2    
se ne va per il solito motivo (coseno ad 
 alta frequenza rispetto ad 1 
 Ts

1 sin ( 2π∆frTs ) sin ( 2π∆frTs )
Ts
1  
= ∫ cos  2π∆f r t  dt = − sin ( 0 ⋅ ... ) =
Ts 0  i− j  Ts 2π∆fr 2π∆frTs
Ora:
• se r = 0 tale quantità è uguale ad 1 (limite della funzione sinc);
• se r ≠ 0 , come facciamo a imporre che la sinc vada a zero? È sufficiente imporre che la
quantità sotto parentesi sia pari a kπ per far andare in seno (e quindi tutto il termine) a 0.
2π∆frTs = kπ
k
2∆frTs = k ⇒ ∆fr =
2Ts
Se poniamo k =1 e r = 1, in modo da ottenere la minima spaziatura in frequenza fra le varie
forme d’onda, allora capiamo che la condizione per l’ortogonalità e quella di avere una
1
∆fmin =
2Ts

56 Come al solito dobbiamo ricordarci di normalizzarle in energia. Ok, è vero, sono insistente.
57 La norma, cioè la distanza, che intercorre fra i vari punti è da calcolarsi in uno spazio tridimensionale, che è
certamente più “profondo” di uno bi-dimensionale (e quindi, più sicuro).
58 PAN = Personal Area Network. Reti a bassissima potenza ( basso SNR!  necessità di maggiore robustezza 

modulazione FSK) e a raggio di qualche decina di metri al massimo.


a patto, chiaramente, che tutte le forme d’onda sia
sia in fase l’una con l’altra59.

Sfruttando il principio della FSK si può implementare anche la OFDM (Orthogonal


( Frequency
Division Multiplexing );; per realizzarla si prende un certo numero di portanti e si fa trasportare a
60 61

ciascuna un segnale modulato (generalmente con una 16-QAM16 o 4-PSK).


Schema:

I coefficienti ak in un mapper Vengono Si passa tutto Si applica la Si trasmette, dopodiché, all’uscita


(bidimensionale, cioè per una generati a un convertitore OFDM si riconverte tutto in serie con un
modulazione bidimensionale) i simboli serie/parallelo (es. 8192 portanti) convertitore duale al precedente.

Siccome
me si è effettuata la modulazione mantenendo
mantenendo ben ortogonali le forme d’onda, possiamo
trasmetterle tutte contemporaneamente, tanto siamo sicuri che in frequenza esse non si
sovrapporranno.

2.12 – Analisi prestazionale

Per confrontare fra loro le modulazioni è necessario introdurre alcuni parametri.


• π i = Prob {mi }  probabilità di avere il simbolo mi appartenente all’alfabeto M .
Chiaramente si ha il seguente corollario62:
M

∑π
i =1
i =1 0 ≤ πi ≤ 1

• Baricentro
aricentro della costellazione:
M
b = ∑ siπ i
i =1

Si noti che tale termine non è semplicemente un baricentro geometrico in quanto tiene
anche conto della probabilità (e pesa di conseguenza le s).
• Energia media statistica:
M
Estat = ∑ si π i
2

i =1

Il termine “statistica” compare


compare per via del fatto che le energie vengono pesate in base alla
relativa probabilità d’uscita della forma d’onda. Maggiore è questo termine e più energia
spenderemo mediamente per modulare.

59 Altrimenti ci troviamo nel caso di FSK non coerente, con spaziatura 1T e fasi iniziali eterogenee.
s
60 Meccanismo utilizzato per il Wi-Max,
Max, standard 802.11n, per la LTE (Long
(Long Term Evolution),
Evolution etc….
61 Generalmente una potenza di 2: 1024, 2048, 4096, etc…
62 Se nulla viene specificato si sottintende che la distribuzione di tale probabilità sia uniforme sull’insieme dei simboli

e che si abbia, cioè


πi = 1
M
• Potenza
otenza media (statistica): in maniera molto elementare
E
Pstat = stat
Ts
• Potenza utile:
2
1 M b
∑s − b πi = P −
2
Pu = i
Ts i =1 T
La potenza
nza utile è associata alla differenza fra la posizione del punto della costellazione e il
baricentro. Per comprendere cosa sia, si guardi la figura sottostante: immaginiamo di avere
una stranissima costellazione della quale fanno parte tali punti…

2
ali sono molto distanti dal centro ( si − b , si molto grande ). Con questa
… i quali
modulazione spendiamo tantissima energia inutile:
inutile quest’ultima – infatti – è alta (perché i
punti sono molto distanti dal centro e quindi serve molta energia per le forme
form d’onda) ma
non ha influenza positiva sull’SNR (visto
visto che i due punti sono molto vicini fra loro ed è
facile cadere in errore).. Molto più preferibile era una costellazione avente lo zero
dell’energia lungo la congiungente i due punti (e magari esattamente in mezzo):
mezzo)

Quando il baricentro è nullo (come in questo caso, se i due punti hanno uguale probabilità
di “uscire”) si ha che tutta la potenza media è utile (cioè serve a distanziare i punti fra loro e
ad alzare l’SNR) e la costellazione si dice a minima energia.
• Efficienza dimensionale:: indica quanto siamo efficienti a sfruttare la dimensionalità dello
spazio. È pari a
log 2 M numero di bit per simbolo
ρM = =
N dimensionalità della modulazione
Maggiore è questo indicatore e più bit riusciamo ad “impaccare” nelle dimensioni che
abbiamo a disposizione.
• Efficienza nella distribuzione delle distanze:
distanze: ha la seguente forma

( 2)
2
D
D2
ρD = =
Estat 4 Estat
D = min si − s j  distanza minima (euclidea) fra due punti della costellazione. Avendo
i,j

un’alta efficienza nella distribuzione delle distanze, posso dire di spendere poca energia (
Estat basso) per mantenere i punti lontani fra loro (D alto).
• PAR – Peak to Average Ratio (o fattore di picco):: maggiore è tale fattore di picco e tanto
più grande sarà il valore massimo dell’energia rispetto al valore medio statistico della
stessa. Per accorgersi di questo basta
b guardare l’espressione del PAR:
max ( Esiπ i M )
forme d'onda
equiprobabili max Esi Energia della forma d'onda più energetica
fp = i
= i
=
Estat Estat Energia media statistica

• (Efficienza nella) distribuzione dell’energia:


1 Estat
ρe = 2 =
fp max ( Esiπ i M )
i

Tanto maggiore è questa efficienza e tanto più distribuite sono le energie fra i vari simboli.
Esaminiamo i casi estremi:
o ρ e = 1  tutti i simboli (e quindi tutte le forme d’onda) hanno la stessa energia;
o ρe ∼ 0  l’energie associate ai vari simboli sono fra loro diversissime (c’è un
massimo enorme rispetto alla media).

Calcoliamo ora questi valori per le nostre modulazioni63, quindi passiamo all’analisi prestazionale.

PAM/ASK64 (esempio: 4-ASK)

Sappiamo che per tali due modulazioni abbiamo energie differenti per ogni simbolo:
si = Es mi mi = 2i − M − 1
Quindi, nel caso M = 4, queste sono le coordinate dei simboli sulla retta individuata dalla funzione
base (abbiamo effettuato la procedura di Gram-Schmidt utilizzando la forma d’onda relativa ad
mi = 1 , per comodità).
Il baricentro
M
b = ∑ siπ i
i =1

è chiaramente nullo, perché queste sono le quantità si :


s1 = −3 Es mi s2 = − Es s3 = Es s4 = 3 Es
Si nota perfettamente la simmetria della costellazione, che ha due punti nel semiasse negativo di
ψ 1 (t ) = 2 g (t ) cos ( 2π f0t ) e altri due punti (simmetrici rispetto a questi) nella parte positiva
dell’asse.
Calcoliamo ora l’energia (statistica) media:
M
1
Estat = ∑ si π i = ( 9 + 1 + 1 + 9 ) Es = 5Es (65)
2

i =1 4
E quindi la potenza media (statistica):
E
Pstat = stat = 5Estat Rs Rs = symbol-rate
Ts
Passiamo poi alla potenza utile:
2
1 M b
∑s − b πi = P −
2
Pu = i =P
Ts i =1 T
E poi all’efficienza dimensionale…
log 2 M 2
ρM = = =2
N 1

63 Considereremo tutti i simboli equiprobabili.


64 Le loro costellazioni sono identiche, quindi tanto vale fare un’unica analisi.
65 Si ricordi che l’energia cresce molto più rapidamente rispetto a quanto cresca l’efficienza spettrale.
… all’efficienza nella distribuzione delle distanze…

(D 2) ( )
2 2

D2 2 Estat 1
ρD = = = = (piuttosto bassa!)
Estat 4 Estat 4 ⋅ ( 5Estat ) 5
… al fattore di picco…
max Esi 9
fp = i
=
Estat 5
… e, infine, alla distribuzione delle energie:
1 Estat 5
ρe = 2 = =
fp max ( Esiπ i M ) 9
i

PSK (esempio: 4-PSK)

Partiamo calcolando il baricentro


M
b = ∑ siπ i
i =1

il quale è chiaramente nullo, vista la simmetria della costellazione.


Calcoliamo ora l’energia (statistica) media:
M
1
Estat = ∑ si π i = (1 + 1 + 1 + 1) Es = Es (66)
2

i =1 4
E quindi la potenza media (statistica):
E
Pstat = stat = Estat Rs = Es Rs Rs = symbol-rate
Ts
Passiamo poi alla potenza utile:
2
1 N b
∑s − b πi = P −
2
Pu = i =P
Ts i =1 T
E poi all’efficienza dimensionale…
log 2 M 2
= =1 ρM =
N 2
… all’efficienza nella distribuzione delle distanze…
2
 distanza fra due punti qualsiasi


 π  
 2 Estat cos   
( D )  4 
2

D2   π
ρD = 2 = =   = cos2 (dipende da M )
Estat 4 Estat 4 ⋅ Estat 4
… al fattore di picco…
max Esi
fp = i
=1
Estat
… e, infine, alla distribuzione delle energie:
1 Estat
ρe = 2 = =1
fp max ( Esiπ i M )
i

66 Risultato prevedibilissimo perché tutti i punti stanno a distanza Es dal centro.


QAM (es. 16-QAM67)

Il baricentro è ancora nullo per evidenti ragioni di simmetria.


energia media statistica è un pelo più complessa da calcolarsi
L’energia calco per
via del fatto che esistono quattro “famiglie” di punti ad energia
diversa:
Punti magenta68  ±3 Es , ± 3 Es  Energia69 = 18 Es
 
Punti rossi  ± Es , ± 3 E s  Energia = 10 Es
 
Punti azzurri  ± Es , ± Es  Energia = 2 Es
 
Punti verdi  ±3 Es , ± Es  Energia = 10 Es
 
Facendo la somma, otteniamo
M 4 ( 2 + 18 + 10 + 10 ) Es
Estat = ∑ si π i =
2
= 10Es
i =1 16
Da cui ricaviamo la potenza media statistica:
statistica
E
Pstat = stat = Estat Rs = 10Es Rs
Ts
Potenza utile (al solito, il baricentro è nullo):
nullo)
2
1 M b
∑s − b πi = P −
2
Pu = i =P
Ts i =1 T
efficienza dimensionale…
Proseguiamo ora passando all’efficienza
log 2 M QAM 1 1
ρM = = log 2 M QAM = log 2 M ASK
2
= log 2 M ASK
N 2 2
efficienza nella distribuzione delle distanze…
… all’efficienza distanze

( D ) ( )
2 2

D 2 2 Es 1
ρD = 2 = = =
Estat 4 Estat 4 ⋅ (10Es ) 10
… al fattore di picco…
18Es 9
fp = =
10Es 5
… e, infine, alla distribuzione delle energie:
energie
1 Estat 5
ρe = 2 = =
fp max ( Esiπ i M ) 9
i

FSK

Per la FSK si ha M = N = 4, e le quattro forme d’onda giacciono su funzioni base diverse:


s1 = ( Es ,0,0,0 ) s2 = ( 0, Es ,0,0 ) s3 = ( 0,0, Es ,0 ) s4 = ( 0,0,0, Es )

67 In questo caso M = 16, N = 2


68 Questi punti ad alta energia sono fastidiosi in termini di fattore di picco, come vedremo. È poi interessante notare
che la famiglia di punti magenta, assieme a quella dei punti azzurri, costituisce – presa singolarmente – la
costellazione di una 4-PSK.
69 Per ciascun punto.
Questa volta il baricentro non è nullo, ma si trova sulla diagonale dell’ipercubo giacente nelle
quattro dimensioni di cui sopra:
b=
1
4
(
E s , Es , Es , E s )
Calcoliamo quindi l’energia (statistica) media:
M
1
Estat = ∑ si π i = (1 + 1 + 1 + 1) Es = Es
2

i =1 4
E quindi la potenza media (statistica):
E
Pstat = stat = Estat Rs Rs = symbol-rate
Ts
Passiamo poi alla potenza utile:
2
1 M b
∑s − b πi = P −
2
Pu = i
Ts i =1 T
E poi all’efficienza dimensionale…
log 2 M log 2 M 1
ρM = = = (scarsissima!)
N M 2
… all’efficienza nella distribuzione delle distanze…

( D ) ( )
2 2

D 2 2E s 1
ρD = 2 = = =
Estat 4 Estat 4 ⋅ Es 2
… al fattore di picco…
max Esi
fp = i
=1
Estat
… e, infine, alla distribuzione delle energie:
1 Estat
ρe = 2 = =1
fp max ( Esiπ i M )
i

Ora raggruppiamo tutti questi risultati in una tabella e diamo un giudizio (a scelta fra negativo,
medio, positivo) a ciascun parametro di ogni modulazione:
ASK/PAM PSK QAM FSK
Baricentro Nullo Nullo Nullo Diverso da zero
2
Energia statistica Cresce con M Non aumenta con M Cresce molto con M
POSITIVO
media70 NEGATIVO POSITIVO MOLTO NEGATIVO
Efficienza Cresce con log 2 M
MEDIO MEDIO NEGATIVO
dimensionale71 MEDIO
Efficienza nella 1 Cala con l’aumentare
Cala con
distribuzione M di M NEGATIVO NEGATIVO
delle distanze72 NEGATIVO NEGATIVO
Cresce con M Non cresce con M
Fattore di picco73 NEGATIVO POSITIVO
NEGATIVO POSITIVO
A questo punto sorge spontanea una domanda; a vedere questa tabella sembra che la PSK sia la
modulazione migliore di tutte e che la QAM sia quella coi connotati più sfavorevoli: ma è davvero

70 Vogliamo minimizzarla.
71 Vogliamo massimizzarla.
72 Vogliamo massimizzarla.

73 Vogliamo minimizzarlo.
così drastico e definitivo il giudizio che con questa tabella abbiamo voluto dare alle nostre
modulazioni? In realtà no, perché mancano importantissimi parametri:
• l’efficienza spettrale, che è un punto di forza della fin’ora bistrattata QAM;
• la robustezza rispetto agli errori, che è un indicatore importantissimo!

Prima di dire l’ultima parola dovremo quindi ulteriormente approfondire questi due aspetti.
CAPITOLO 3
La Teoria
eoria della decisione e il ricevitore ottimo

3.1 – Il problema della corretta interpretazione del decoder

Nei sistemi di telecomunicazioni il detector (lato RX) è un componente importante perché ha la


fondamentale responsabilità di rilevare
rileva e interpretare il segnale ricevuto. Purtroppo, il rumore
incide in maniera determinante sulla corretta interpretazione di ciò che giunge a tale componente
della catena di trasmissione:: se poi abbiamo l’aggravante
di trovarci a SNR basse, il caso è particolarmente
parti critico in
quanto la potenza del segnale utile inizia ad essere
confrontabile con la potenza del rumore.
In figura vediamo la situazione “estrema” di SNR a 0 dB:
in questa condizione, la potenza del segnale utile è
esattamente uguale a quella del
el rumore e il segnale ricevuto
(formato dalla sovrapposizione dei due) è indistinguibile
in tutto e per tutto1.
Dobbiamo quindi trovare una regola di interpretazione
per il segnale ricevuto che ci permetta di fare i conti con
rumori anche non trascurabili e che ci renda in grado di fare la scelta migliore.

Già a questa prima considerazione ci troviamo davanti a un bivio. È meglio


• osservare l’andamento del segnale per un tempo abbastanza lungo, in modo da avere più
informazioni e aiutarci, con esse, a decodificare
deco meglio2...
• … oppure decidere simbolo per simbolo e guadagnare in reattività?
È meglio, in altre parole, prendere una decisione secca o aspettare di ricevere una sequenza?

Senza, per ora, rispondere a questo quesito in questa sede esamineremo il primo caso, quello di
decisione simbolo per simbolo3.

3.2 - Terminologia

Esaminiamo la “catena di decisione” che si


instaura in un sistema di telecomunicazioni:
• SORGENTE:: emette simboli indipendenti
mi con probabilità a priori π i ;

1 Eppure il limite teorico di Shannon (cioè l’asintoto nel grafico efficienza spettrale/SNR) è di -1,6 dB di SNR: la teoria
ci dice ovvero che è “possibile”
ibile” modulare anche con SNR inferiori a zero se ci accontentiamo di un’efficienza spettrale
molto bassa!
2 Nel linguaggio comune, ad esempio, gli esseri umani adottano esattamente questo comportamento: ricevendo

simbolo per simbolo (ovvero una lettera alla


a volta)
Es. “A” …. “C”….  simboli
non capiamo nulla. Ricevendone più di uno, invece, comprendiamo la profonda correlazione che vi è fra le lettere,
cioè i simboli, e riusciamo a intendere il significato dell’informazione:
Es. ACQUA
3 Per l’altro bisogna
ogna attendere la laurea specialistica. Ciò significa che non abbiamo nessunissima fretta….
• MAPPER: mappa questi simboli e genera una forma d’onda si (t ) ;
• TRANSIZIONE PROBABILISTICA T: è un processo aleatorio in tutto e per tutto. Nel
nostro caso tale processo la trasmissione dei dati (ad esempio nel mezzo radio, dove
possono insorgere errori in maniera, appunto, probabilistica);
• OSSERVAZIONE: ricevuta l’informazione r(t), contenente sia il segnale utile che il rumore,
la proiettiamo su una base ortonormale e otteniamo
r = si + n = segnale utile + rumore
• ELABORAZIONE: passiamo il vettore r al decisore;
• DECISIONE: decidiamo per un certo simbolo Λ ( r ) = m
ˆ i , che speriamo sia uguale a mi .

In tutta questa catena di passaggi di grandissima utilità è la potente Teoria della decisione, branca di
studi nata non specificatamente per il campo delle Telecomunicazioni perché utilizzata in
tantissimi campi (economica, medicina, statistica…).
Per esemplificare il tutto, facciamo nostro un esempio ispirato alla cosiddetta radaristica:
supponiamo, appunto, di trovarci ad avere a che fare con un radar in grado di percepire o meno la
presenza di un bersaglio (target). Chiaramente, siccome nella trasmissione radar (come in ogni tipo
di trasmissione) possono esservi errori e disturbi, anche in questo caso avremo una transizione
probabilistica. In questo caso la decisione è di tipo binaria, dato che abbiamo solo due ipotesi (“bit =
0”  assenza di segnale/assenza di target, ”bit = 1”  presenza di segnale/presenza di target).
Specificando meglio la simbologia:
• H 0  ipotesi “assenza di segnale”  r = n (no eco: riceviamo solo il rumore di fondo)
• H1  ipotesi “presenza di segnale”  r = s + n (eco: riceviamo un segnale disturbato dal
rumore di fondo).

Ora, se chiamiamo H i l’ipotesi che si è veramente verificata e Hˆ i l’ipotesi per la quale optiamo in
base alle informazioni ricevute, possiamo definire alcune eventualità:
• { }
H 0 , Hˆ 0 = scarto corretto (non c’è segnale ed effettivamente non vi è alcun target), detto
anche correct rejection;
• { 0 }
H , Hˆ = false alarm, cioè falso allarme: viene segnalato un target che in realtà non c’è;
1

• {H , Hˆ }
1 0 = missed detection, cioè mancata rilevazione di un target che invece è davvero
presente;
• { 1 1 }
H , Hˆ = correct detection: viene effettivamente rilevata la presenza ti un target che vi è sul
serio.

Ad ognuna di queste situazioni viene associato un costo4:


• costo correct rejection: c00
• costo false alarm: c01
• costo missed detection: c10
• costo correct detection: c11

Si definisce rischio di Bayes5 la seguente quantità:

4 Non necessariamente un costo economico o computazionale: nel nostro esempio, se applichiamo la radaristica alla
rilevazione di aerei per il trasporto passeggeri, il costo potrebbe essere anche umano e di immagine.
{ } { } { }
R = c00 ⋅ Prob H 0 , Hˆ 0 + c01 ⋅ Prob H 0 , Hˆ 1 + c10 ⋅ Prob H1 , Hˆ 0 + c11 ⋅ Prob H1 , Hˆ 1 { }
In pratica, tale quantità moltiplica i costi delle singole situazioni per la probabilità che tali
situazioni si verifichino davvero. Tutto, in pratica, dipende dalla transizione
transizione probabilistica T.

3.3 – Un primo criterio di decisione:


decisione il rapporto di verosimiglianza

Definiamo uno spazio rn detto “dei possibili osservati”,


osservati”, contenente tutte le possibili informazioni
ricevibili:

Come si vede dalla figura, in base ai dati che riceviamo possiamo poi prendere diversi tipi di
decisione (le ipotesi di cui parlavamo nel paragrafo precedente); quindi, in pratica, possiamo
dividere lo spazio dei possibili osservati in base a come decideremo di reagire nei confronti
con delle
osservazioni effettuate :
6

• per ogni vettore che cade nell’area Z decidiamo per H  ∀r = r ∈ Z ⇒ Hˆ ;


0 0 n n 0 0

• per ogni vettore che cade nell’area Z1 decidiamo per H1  ∀rn = rn ∈ Z1 ⇒ Hˆ 1 .


Si noti che, così facendo, prendiamo una hard decision7: abbiamo decisioni precise, senza mezze
misure e gradazioni intermedie.
Con questa rappresentazione insiemistico-spaziale
insiemistico spaziale fatta di aree di decisione, possiamo esprimere
la probabilità di prendere una determinata decisione in questo modo8:
• probabilità di correct detection:
detection PD = Prob  Hˆ 1 H1  = ∫ ...∫ Probr H1 ( r H1 ) dr
   
decidiamo per H1   Z1
Densità di probabilità di
 quando il vettore  Il vettore r data l'ipotesi H
 sta in Z1  deve stare (stiamo calcolando1la
in Z1 probabilità cumulativa)

• probabilità di false alarm: { }


PFA = Prob Hˆ 1 H 0 = ∫ ...∫ Probr H0 ( r H 0 ) dr
Z1

• probabilità di missed detection:


detection { }
PMD = Prob Hˆ 0 H1 = ∫ ...∫ Probr H1 ( r H1 ) dr
Z0

• probabilità di correct rejection:


rejection { }
PS = Prob Hˆ 0 H 0 = ∫ ...∫ Probr H0 ( r H 0 ) dr
Z0

5 O, anche, costo di Bayes.


6 Dobbiamo però fare due ipotesi:
• le aree di decisione devono essere disgiunte: Z1 ∩ Z 0 = ∅ ;
1
• spaz di decisione: ∪ Z i = Z .
l’unione di tutte le aree di decisione deve restituire l’intero spazio
i=0
7 Contrapposto a soft decision. Se infatti M’ è il numero di zone di decisione e M il numero di ipotesi, allora:
• se M’ = M allora siamo in regime di hard decision;
• se M’ > M allora siamo in regime di soft decision (esistono delle intersezioni fra gli insiemi e, quindi, delle zone
intermedie).
Chiaramente non può esistere il caso M’ < M.
8 In pratica, calcoliamo la probabilità che, dato che si è verificato una certa ipotesi H,, il vettore cada nello spazio Z e
i

che, quindi, si decida per Hˆ j .


Evidentemente si ha:
• PD + PMD = 1 visto che Z0 + Z1 = 1 ;
• PS + PFA = 1 idem.

Il nostro obiettivo è:
• massimizzare la PD e la PS , cioè la probabilità di prendere una decisione corretta nei
confronti di ciò che è davvero successo;
• minimizzare la PMD e la PFA , cioè la probabilità di prendere la decisione opposta a quella
che si dovrebbe in realtà attuare.

Per fare questo potrei pensare di lavorare sulla probabilità: tale considerazione cade però
immediatamente in virtù del fatto che le varie probabilità sono qualcosa che non dipendono da
noi, ma dalla transizione e dall’ambiente circostante9.
Posso allora modificare la soglia S sopra (o sotto) la quale decido per rilevazione (o non
rilevazione), e di conseguenza modificare le aree di decisione. Potrei quindi pensare di ingigantire
Z1 , l’insieme all’interno del quale decidiamo per H1 (“c’è un target”): in questo modo si
massimizza PD , che è la probabilità di fare qualcosa di corretto (rilevare qualcosa quando questo
“qualcosa” c’è davvero)… ma allo stesso tempo si massimizza anche PFA , ovvero la probabilità di
segnalare qualcosa che non c’è. Questo esempio ci dimostra che “segnalare di più” non garantisce
una maggiore qualità delle rilevazioni: vi è infatti l’effetto collaterale “Pierino e il lupo” per il
quale si segnala spessissimo (ed erroneamente) un avvistamento quando esso non c’è.
Dobbiamo quindi lavorare più attentamente su rischi e costi10.

Per farlo, anzitutto esprimiamo le probabilità in maniera diversa sfruttando il Teorema di Bayes:
{ } {
• Prob H 0 , Hˆ 0 = Prob Hˆ 0 H 0 ⋅ Prob {H 0 } = PS ⋅ π 0
     }
Probabilità che sia stato Probabilità di Probabilità Probabilità
Probabilità di decidere Hˆ 0 di scarto a priori
trasmesso H 0 e che si una volta che siamo sicuri ricevere H 0
decida per Hˆ 0 di aver ricevuto H 0

• { } {
Prob H1 , Hˆ 0 = Prob Hˆ 0 H1 ⋅ Prob {H1 } = PMD ⋅ π 1}
• Prob {H , Hˆ } = Prob {Hˆ
0 1 1 H } ⋅ Prob {H } = P ⋅ π
0 0 FA 0

• Prob {H , Hˆ } = Prob {Hˆ


1 1 1 H } ⋅ Prob {H } = P ⋅ π
1 1 D 1

Ricordiamoci quindi del costo di Bayes e sostituiamo11:


{ } { }
R = c00 ⋅ Prob H 0 , Hˆ 0 + c01 ⋅ Prob H 0 , Hˆ 1 + c10 ⋅ Prob H1 , Hˆ 0 + c11 ⋅ Prob H1 , Hˆ 1 = { } { }
= c00 ⋅ PS ⋅ π 0 + c01 ⋅ PFA ⋅ π 0 + c10 ⋅ PMD ⋅ π 1 + c11 ⋅ PD ⋅ π 1
A questo punto scegliamo di portarci su un’unica area di decisione e riscriviamo tutto per avere
un unico integrale su Z0 . Grazie alle ipotesi fatte (v. nota 6) possiamo infatti sfruttare il principio:
"integrale su Z1 " = 1 − "integrale su Z0 "

9 L’unico modo per influenzare le probabilità sarebbe, a dirla tutta, quello di comprare un’attrezzatura più sofisticata,
che sia in grado di minimizzare l’errore di trasmissione, oppure quello di installare più radar. Ma chiaramente sono
tutti sofismi: in linea di principio la probabilità è “natura”, qualcosa che ci piomba addosso e di immodificabile.
10 Contrariamente alle probabilità, i costi non hanno nulla di aleatorio: li assegniamo noi.

11 Non si deve fare confusione fra:

• { }
Prob H i ,Hˆ j  probabilità che si decida per Hˆ j se accade H i (ma non è detto che avvenga);

• Prob {Hˆ H }  probabilità che si decida per H j una volta che siamo sicuri che sia avvenuto H i .
ˆ
j i
Dunque le relazioni…
PD + PMD = 1
PS + PFA = 1
…possono diventare:
PD = 1 − PMD
PFA = 1 − PS

Sostituendo:
R = c00 ⋅ PS ⋅ π 0 + c01 ⋅ (1 − PS ) ⋅ π 0 + c10 ⋅ PMD ⋅ π1 + c11 ⋅ (1 − PMD ) ⋅ π1 =
= ( c00 ⋅ PS ⋅ π 0 ) + ( c01 ⋅ π 0 ) − ( PS ⋅ c01 ⋅ π 0 ) + ( c10 ⋅ PMD ⋅ π1 ) + ( c11 ⋅ π1 ) − ( c11 ⋅ PMD ⋅ π1 )
Compaiono immediatamente due termini che risultano essere indipendenti dalla probabilità:
k = c01 ⋅ π 0 + c11 ⋅ π 1 (quantità costante)
R = ( c00 ⋅ PS ⋅ π 0 ) − ( PS ⋅ c01 ⋅ π 0 ) + ( c10 ⋅ PMD ⋅ π1 ) − ( c11 ⋅ PMD ⋅ π1 ) + k =
= PS ⋅ π 0 ( c00 − c01 ) + PMD ⋅ π1 ( c10 − c11 ) + k
Facciamo ora l’ipotesi, ragionevolissima se non scontata, che il costo di una decisione sbagliata sia
maggiore di quello di una decisione giusta:
c00 < c01 c11 < c10
Di conseguenza:
• PS ⋅ π 0 ( c00 − c01 ) è una quantità negativa  cambio di segno: PS ⋅ π 0 ( c01 − c00 ) ;
• PMD ⋅ π 1 ( c10 − c11 ) è una quantità positiva.

Riscrivendo ulteriormente:
R = k + PMD ( c10 − c11 ) π1 − PS ( c01 − c00 ) π 0
A questo punto esplicito le probabilità in questione con gli integrali definiti precedentemente:
R = k + ∫ Pr H1 ( c10 − c11 ) π 1 dr − ∫ Pr H0 ( c01 − c00 ) π 0 dr
Z0 Z0

Ora siamo in grado di procedere alla minimizzazione del rischio R:


R = k + ∫ Pr H1 ( r H1 ) ⋅ ( c10 − c11 ) ⋅ π1 − Pr H0 ( r H 0 ) ⋅ ( c01 − c00 ) ⋅ π 0 dr
Z0

A questo punto la questione è di determinazione della partizione:


• se si ha che Pr H1 ( r H1 ) ⋅ ( c10 − c11 ) ⋅ π1 > Pr H0 ( r H 0 ) ⋅ ( c01 − c00 ) ⋅ π 0 allora deciderò per Ĥ1
perché è alto il rischio di stare in Z0 .
• se si ha invece che Pr H1 ( r H1 ) ⋅ ( c10 − c11 ) ⋅ π1 < Pr H0 ( r H 0 ) ⋅ ( c01 − c00 ) ⋅ π 0 allora, viceversa,

deciderò per Ĥ 0 .

Ora abbiamo un primo vero criterio di decisione Λ ( r ) : infatti


scelgo
per H1

{P ( r H ) ⋅ ( c − c11 ) ⋅ π1 } > {P (r H ) ⋅ (c − c00 ) ⋅ π 0 }


<
r H1 1 10 r H0 0 01

scelgo
per H 0

Le due quantità sono entrambe maggiori di zero quindi posso dividere per ottenere:
queste quantità dipendono
rapporto di verosimiglianza soltanto dai parametri che
likelyhood ratio scelgo
  per H1
ho a disposizione

Pr H1 ( r H1 ) > ( c01 − c00 ) ⋅ π 0
Λ (r ) =
Pr H0 ( r H 0 ) ( c10
− c11 ) ⋅ π 1
<
   scelgo   
quantità che per H 0 quantità che non
dipendono da r dipendono da r

In altre parole, e nel caso generale12, si ha questo risultato13:


  M −1

Hˆ i : H i = arg  max  Pr H k ( r H k ) ⋅ ∑ ( ckj − ckk ) π k  
 k 
  j = 0, j ≠ k 
Questo rapporto può essere espresso anche in versione logaritmica:
λ ( r ) = ln Λ ( r )
Log likelyhood ratio (LLR)14

OSSERVAZIONI:
1. Perché nell’LLR compare il logaritmo naturale? Nel caso di AWGN la densità di probabilità
in gioco nella transizione probabilistica T è di tipo gaussiano, cioè compare il termine e −... .
Dunque la likelyhood ratio è un rapporto fra densità di probabilità gaussiane (e di
conseguenza esponenziali): il logaritmo naturale, quindi, si “mangia” il termine
esponenziale lasciando soltanto la quantità in cui compaiono il valor medio e la varianza.
2. Questa teoria è del tutto indipendente da ciò che c’è sotto ed è applicabile a qualsiasi
campo.

3.4 – Esempio del calcolo del rapporto di verosimiglianza

Definiamo le seguenti due ipotesi:


• H 0  non trasmetto nulla (cioè trasmetto 0);
• H1  trasmetto la forma d’onda monodimensionale s(t) in un tempo T.
Ricordando tutti i ragionamenti fatti nel capitolo scorso, specifichiamo:
s (t )
• la funzione base ψ 1 (t ) = (normalizzata in energia);
Es
• la forma d’onda s (t ) = 2 g (t ) cos ( 2π f0t ) .
Questa è dunque una raffigurazione della nostra funzione

0 Es ψ1

12 In questo caso generale abbiamo più ipotesi; facciamo un esempio con M = 4. I costi incriminati sono:
c00 , c01 , c02 , c03
E i costi relativi:
c01 − c00 , c02 − c00 , c03 − c00 schema: (costo scelta sbagliata) – (costo scelta giusta)
Da qui la scrittura:
M −1

∑ (c
j =0, j ≠ k
kj − ckk ) π k

13 Il risultato in pratica dice: di tutte le ipotesi a disposizione si scelga quella che massimizza la verosimiglianza, cioè
quella per la quale è più probabile che lì vada a cadere il vettore r.
14 Ovvero rapporto di verosimiglianza logaritmico.
Dopo la transizione probabilistica attraverso il canale AWGN, ecco quello che riceviamo:
H 0 rɶ (t ) = nɶ (t )

H1 rɶ (t ) = s (t ) + nɶ (t )
Il rumore nɶ (t ) ha dimensionalità infinita essendo un segnale a banda gigantesca;
giga dunque,
purtroppo, ci fa uscire dalla base ψ 1 . Risulta tuttavia inutile e superfluo andare a esaminare la
dimensioni diverse da ψ 1 : prendiamo, del vettore, la sola componente che giace su ψ 1 e le altre
(infinite) componenti del rumore le scartiamo perché non ci interessano; possiamo così, in linea di
principio, “filtrare” il rumore nella banda del segnale e distinguerne due tipi15:
nɶ (t ) = n (t ) + nI (t )
 
disturbo disturbo "irrilevante"
che influsice che non considero
davvero

Nello spazio di ψ 1 abbiamo un vettore:


r=n nell’ipotesi H 0
r = n+s nell’ipotesi H1
Per trovare la componente “utile” del rumore sulla nostra base, effettuiamo quindi
qu l’adeguato
filtraggio:
ni = n,ψ 1 = ∫ nɶ (t )ψ i* dt
T

Una volta che ci siamo ricondotti all’unica nostra dimensione,


dimensione, così cambia lo scenario:
r=n nell’ipotesi H 0
r = n + s = ni + Es nell’ipotesi H1

Calcoliamoci ora la densità di probabilità nel caso in cui si è trasmesso H 0 :


r2

Pr H0 ( r H 0 ) =
1 −
2σ 2
e  valor medio: nullo
2πσ 2
E, quindi, nel caso di presenza di segnale – cioè riferendoci all’ipotesi H1 :
(r − )
2
Es

Pr H1 ( r H1 ) =
1 −
2σ 2
e  valor medio: Es
2πσ 2

Scriviamo così il nostro criterio di decisione:


(r − )
2
Es
− scelgo
1 (r − )
2
2σ 2 Es per H1
Pr H1 ( r H1 )
e
> (c − c00 ) ⋅ π 0

2πσ 2 e 2σ 2
Λ (r ) = = = 01

Pr H0 ( r H 0 ) < (c − c11 ) ⋅ π 1
2 2
r r
1 − − 10
2σ 2 2σ 2
e e scelgo
2πσ 2 per H 0

Il rapporto di verosimiglianza logaritmico (LLR) diventa invece:

(r − )
2
Es + r2 > π 0 ( c01 − c00 )
λ ( r ) = ln Λ ( r ) = − ln
2σ 2
< π1 ( c10 − c11 )

15Il disturbo cosiddetto irrilevante è, più specificatamente, la componente del rumore nell’iperspazio ortogonale allo
spazio del segnale utile.
3.5 – Il criterio MAP ed ML

È il momento di fare l’ipotesi semplificativa di considerare i costi uguali nei due casi16:
sbagliato 1 = sbagliato 2 ⇒ c01 = c10

corretto 1 = corretto 2 ⇒ c00 = c11

Fatto questo, così si semplifica il nostro rapporto di verosimiglianza17:


scelgo
per H1

Λ (r )
> π0
 probabilità a priori
< π1
scelgo
per H 0

Se poi imponiamo che il costo della decisione corretta sia nullo e che quello della decisione
sbagliata sia pari ad uno, otteniamo il cosiddetto criterio MAP, di cui vedremo fra poco il
significato profondo:
c11 = c00 = 0

c10 = c01 = 1
Così diventa il rischio di Bayes:
 k

R = c01 ⋅ π 0 + c11 ⋅ π1 + PMD ( c10 − c11 ) π1 − PS ( c01 − c00 ) π 0

=0

{ }
= π 0 + Prob Hˆ 0 H1 ⋅ π 1 − Prob Hˆ 0 H 0 ⋅ π 0 { }
Poi, siccome sappiamo che:
PS + PFA = 1
PS = 1 − PFA
E cioè:
{ }
Prob Hˆ 0 H 0 = 1 − Prob Hˆ 1 H 0 { }
Sostituiamo…
{ } { }
R = π 0 + Prob Hˆ 0 H1 ⋅ π 1 − Prob Hˆ 0 H 0 ⋅ π 0 = π 0 + Prob Hˆ 0 H1 ⋅ π1 − 1 − Prob Hˆ 1 H 0 { } ( { }) ⋅ π 0 =


{
= Prob Hˆ 0 H1 ⋅ π 1

 probabilità
} + Prob {Hˆ H } ⋅
  1 0 π0

= Pe (probabilità d'errore)
probabilità di sbagliare probabilità di sbagliare probabilità
che sia che sia
un 1 con uno 0 uno 0 con un 1
uscito un 1 uscito uno 0

… e scopriamo una cosa davvero interessante: il rischio di Bayes, sotto le ipotesi fatte poco fa, è
semplicemente la probabilità d’errore! Dunque applicare il criterio MAP significa rendere minima
la probabilità media d’errore Pe .

Con le semplificazioni che abbiamo fatto abbiamo ottenuto quindi il seguente risultato:
scelgo scelgo
per H1 per H1
Pr H1 ( r H 1 ) > π0 > π0
Λ MAP ( r ) =  in forma logaritmica  λMAP ( r ) = ln ( Λ MAP ( r ) ) ln
Pr H 0 ( r H 0 ) < π1 < π1
scelgo scelgo
per H 0 per H 0

16 D’altronde questa è un’ipotesi molto sensata: prendere un 1 per uno 0 è altrettanto dannoso che prendere uno 0 per
un 1.
17 A questo punto potremmo assegnare un costo qualsiasi per la scelta sbagliata e per la scelta giusta, tanto nel test

questi due parametri non compaiono.


Ora vogliamo capire dove sta il significato profondo del criterio MAP; facendo qualche
moltiplicazione18, per portare da una parte all’altra alcuni termini, si ha:
H1

Pr H1 ( r H1 ) π 1
>P r H π
( )
<
r H0 0 0

H0

Se ora applichiamo formula di Bayes per lo studio della probabilità a posteriori19


PX Y ( X Y ) P (Y ) = PY X (Y X ) P ( X )
otteniamo:
P ( r H )π
1 1
H1 P ( r H0 )π 0
>
r H0
 
r H1
 
PH1 r ( H1 r ) P ( r ) PH0 r ( H 0 r ) P ( r )
<
H0
H1

PH1 r ( H1 r )
>P H r
( )
<
H0 r 0

H0

Proprio per il fatto di aver applicato Bayes (che è un criterio a posteriori), questo criterio di
confronto fra due densità di probabilità è detto MAP (Maximum A Posteriori) e, per le sue
caratteristiche, è effettuabile solo una volta che si è ricevuto il vettore. Il criterio MAP, in pratica,
sceglie a favore dell’ipotesi a maggiore probabilità condizionata al vettore osservato.

Il criterio MAP evolve nel criterio ML (Maximum Likelyhood) se, oltre all’ipotesi
c11 = c00 = 0

c10 = c01 = 1
consideriamo l’uscita di un bit a 1 e di un bit a 0 equiprobabili:
π1 = π 0 = 1
2
Ecco come diventa il termine Λ :
scelgo
H1 per H1
Pr H1 ( r H 1 ) > >
Λ ML ( r ) = 1  in forma logaritmica  λ ML ( r ) = ln ( Λ ML ( r ) ) 0
Pr H 0 ( r H 0 ) < <
H0 scelgo
per H 0

Vediamo cosa succede ad applicare il criterio ML logaritmico all’esempio del paragrafo 3.4;
assumiamo dunque – oltre a tutte le ipotesi fatte in precedenza – che il verificarsi dell’ipotesi H 0
sia equiprobabile al verificarsi dell’ipotesi H1 (canale simmetrico) e applichiamo la formula
 (r − ) 
2
Es
− scelgo
 1   (r − Es )
2

( ) >
2σ 2 2 per H1
 Pr H ( r H 1 ) 
e −
 2πσ 2   2σ 2  r2 r − Es
λ ML ( r ) = ln  1
 = ln   = ln  e = − 0
 Pr H ( r H 0 )   2σ 2 2σ 2
  <
r2 r2
1 −  −
 0   e 2σ 2
  e 2σ
2

 2πσ 2    scelgo
per H 0
 

18 Ricordiamo che tutte le quantità in gioco sono quantità positive e, di conseguenza, i segni di disuguaglianza non
cambiano.
19 Ovvero lo studio della probabilità di realizzazione di un dato evento sapendo già che alcune condizioni si sono

verificate.
H1

>0
( )
2
r 2 − r − Es = r 2 − r 2 + 2r Es − Es
<
H0
H1 H1

2r − Es
>0 ⇒ r
> Es

<
H0
<
H0
2

Sorpresa! Questo criterio si traduce in tal modo:

Es
• se sei più vicino a 0 che ad 1, cioè se stai “a sinistra” di (verso valori bassi), propendi
2
per Ĥ 0 , e decidi che ciò che ti è stato trasmesso sia uno 0;
Es
• se sei più vicino ad 1 che a 0, cioè se stai “a destra” di (verso valori alti), decidi per
2
Ĥ1 , e dai per assodato chee ciò che ti è stato trasmesso sia un 1.
Tutto qui? Sì: il fantasmagorico criterio di maggiore verosimiglianza altro non è che un “banale”
criterio di maggiore vicinanza geometrica (cioè euclidea)20.

E che cosa accade se il canale non è simmetrico, ovvero se gli 0 non sono equiprobabili rispetto
agli 1? È presto detto; facciamo un passo indietro e modifichiamo il termine a destra dei segni di
disuguaglianza (non più zero, ma il rapporto fra probabilità a priori presente nel criterio MAP):

( ) > ln π
2 H1

r 2 r − Es
λMAP = − 0

2σ 2 2σ 2
< π1
H0
H1 H1

> 2σ π0 > 2σ π0
( )
2 2
r 2 − r − Es 2
ln 2r − Es ln
< π1 < E s
π1
H0 H0
la soglia
di prima

H1  
una correzione

r
> Es +
σ2
ln
π0
< 2 Es π1
H0

Esaminiamo ora insieme questo risultato.

20 Si noti che la potenza del rumore, incarnata dalla varianza, è stata semplificata e non compare più: in effetti,
qualsiasi sia l’incidenza del rumore, è sempre più probabile che, se ci troviamo più vicini (nel senso geometrico
geome
appena esposto) allo 0, la trasmissione sia stata proprio di uno 0 (stessa cosa mutatis mutandis con gli 1). Magari tale
probabilità è solo leggerissimamente maggiore rispetto a quella riferita al bit “più lontano”, anche solo di un
infinitesimo: ad esempio, per potenze molto alte di rumore questa probabilità calerà fino al valore limite 0,5;
nell’ipotesi assurda di avere un rumore cenatinaia di volte più potente del segnale utile, diventa praticamente
indifferente prendere uno zero o un uno, ma c’è sempre
s un ε di probabilità in più che il bit trasmesso sia quello al
quale ci troviamo più vicini.
Qui la varianza è in bella mostra, contrariamente al caso ML (v. nota 20), ed effettivamente essa
serve a pilotare l’entità di una correzione di soglia, che diventa sempre più influente tanto maggiore
è la potenza del rumore (cioè tanto maggiore è σ 2 e minore, di conseguenza, l’SNR). Ecco le
informazioni che ci giungono da questa nostra disequazione:
• se il rumore non è tanto potente ( σ 2 trascurabile), o se il segnale è molto potente rispetto al
σ2
rumore ( Es grande, trascurabile) ignora la correzione e riusa il criterio ML;
Es
• se il rumore inizia a farsi sentire, o se l’SNR non è molto alto, non fidarti troppo di quello
che ricevi e attingi all’informazione aggiuntiva – e non inquinabile dal rumore – che ti dà la
probabilità a priori: sposta la soglia (che nel caso MAP era Es / 2) verso il bit più probabile21.

3.6 – Esempio col codice bipolare

Supponiamo che il canale sia simmetrico: applicheremo dunque il criterio ML. Ecco le ipotesi:
• H 0  trasmetto s0 (t ) = − Es g (t ) ;
• H1  trasmetto s1 (t ) = Es g (t ) .
Quindi possiamo graficare così lo spazio (monodimensionale) che ci interessa:

i
ψ1
− Es 0 Es
Quali sono le possibili situazioni osservabili lato RX?
• si è verificato H 0  r = − Es + n ;
• si è verificato H1  r = Es + n .
Esprimiamo quindi le probabilità per i possibili valori di r in base alle ipotesi di trasmissione:

• Probr H1 ( r H1 ) =
1
 r − E 2 
exp −
s
; ( )
2πσ 2 
 2σ 2


• Probr H0 ( r H 0 ) =
1
 r + E 2 
exp −
( s ) . ML!
2πσ 2 
 2 σ 2

 ( r − Es ) 
2

− scelgo
 1   ( r − Es )
2

( ) − (r − ) >
2σ 2 2 per H1
 Pr H ( r H1 ) 
e −
2
 2πσ 2  e 2σ 2  r + Es Es
λ ( r ) = ln  1
 = ln   = ln  = 0
 Pr H ( r H 0 )  ( r + Es )   − ( r + Es ) 2σ 2 2σ
 <
2 2 2

 0   1 −
  e 2σ 2 
e 2σ
2

 2πσ 2    scelgo
per H 0
 
scelgo scelgo

(r + ) − (r − ) >
2 2 per H1 per H1
Es Es
0
r 2 + Es + 2r Es − r 2 − Es + 2r Es > 0
2σ 2
< 2σ 2
<
scelgo scelgo
per H 0 per H 0

21Se piazzassimo la soglia in mezzo come prima, infatti, non terremmo conto del fatto che – nel caso MAP – è più
probabile ricevere una determinata informazione rispetto a un’altra, e che tale probabilità a priori può aiutarci a
scegliere l’ipotesi corretta con maggiore successo indipendentemente da ciò che è accaduto nella transizione
probabilistica T.
H1

2r Es >0
σ 2
<
H0

Che molto semplicemente diventa:


H 1

r
> 0
<
H 0

Quindi questa è la situazione:


ˆ
scelgo l'ipotesi H0 ˆ
scelgo l'ipotesi H1
   

− Es 0 Es ψ1
Ed effettivamente è proprio ciò che ci aspettavamo: la soglia è lo 0 in quanto è il punto
equidistante
te fra i valori del segnale utile corrispondenti ai due bit 0 e 1 e, quindi, alle due ipotesi
H 0 e H1 .

Il ragionamento può essere ripetuto con altre modulazioni e altre codifiche: sta di fatto che, per
una modulazione
odulazione monodimensionale di cardinalità 2, se diamo per assodato di poter soddisfare le
ipotesi che portano al caso ML, la soglia di discrimine fra la scelta delle (ovviamente due) ipotesi è
sempre il punto medio fra le due coordinate corrispondenti alle alle relative forme d’onda. Quindi, il
criterio è sempre di massima vicinanza euclidea.
euclidea

Chiaramente, l’errore è sempre dietro l’angolo:


sempre considerando il canale come AWGN, e
dunque modellabile con le densità di probabilità
gaussiane, possiamo dire che la probabilità di fare la
scelta sbagliata (nonostante si sia utilizzato un criterio
a massima verosimiglianza) è:
1 1
⋅ erfc (...) (22)
2 2

3.7 – Massima verosimiglianza nei problemi con un alfabeto di M simboli

Ipotizziamo di avere:
• un alfabeto di M simboli, ognuno con probabilità π i (con i = 1, 2, …, M);
• M ipotesi H i di trasmissione/presenza dell’i-esimo
dell’ simbolo;
• un insieme di costi cij (costo della decisione Hˆ j quando si è verificata H i );
• le probabilità Pij di decidere per Hˆ j quando è vera H i ;
• le densità di probabilità Probr Hi ( r H i ) riferite al vettore r osservato nello spazio di
riferimento, nel caso in cui sia vera H i .

In questo caso, il rischio di Bayes ha questa forma23:

22Un primo fattore ½ è dovuto al fatto che prendiamo solo una delle due codette della campana di Gauss; l’altro,
invece, è dovuto alla probabilità a priori.
M M
R = ∑∑ Pij ⋅ cij ⋅ π i
i =1 j =1

Possiamo, se vogliamo, invertire l’ordine delle sommatorie:


M
M  M
R = ∑  ∑ Pij ⋅ cij ⋅ π i  = ∑ β j
 
j =1 i =1
 j =1
costo della
Quanto pago se ho trasmesso decisione
il simbolo i ... j -esima



... nel caso prendessi la decisione j ?

Siamo alle solite: quand’è che minimizziamo il rischio di Bayes R?


Beh, quando optiamo per la decisione che contribuisce meno di tutte alla sommatoria, cioè la
decisione Hˆ tale per cui
k

k = arg min {β j }
j

Se invece di tenere fissa la scelta j (e dunque di scorrere tutte le possibili ipotesi di trasmissione i)
facciamo il contrario, e quindi diamo per buono di aver scelto per j e esaminiamo cosa succede in
base al simbolo trasmesso, vediamo lo stesso problema da un punto di vista diverso. Nel caso
precedente guardavamo quale scelta era migliore già sapendo cosa era stato trasmesso e sapendo
quali costi avevano le varie decisioni; in questo secondo caso – invece – osserviamo cosa succede
in base all’avvenuta trasmissione dei vari simboli. Il rischio di Bayes risulta minimo per la
decisione Hˆ che è associata a quell’area di decisione che massimizza, in i (cioè in base al simbolo
k

trasmesso), la densità di probabilità che il vettore si trovi proprio in tale area:


{ }
k = arg max Probr Hi ( r H i ) ⋅ π i = arg max ProbHi r ( H i r )
i i
{ }
In questo modo abbiamo espresso il criterio MAP per una codifica con alfabeto ad M simboli.
Chiaramente ne esiste anche una versione logaritmica (log MAP):
{ }
k = arg max ln Probr Hi ( r H i ) + ln π i = arg max ln ProbHi r ( H i r )
i i
{ }
Imponendo invece le seguenti ipotesi
1
cij = 1 ∀ i ≠ j , cii = 0 , πi =∀i
  M
per ogni scelta sbagliata per ogni scelta 
noi paghiamo il costo 1 giusta non paghiamo la distribuzione di probabilità
nulla riguardante l'uscita dei simboli
è uniforme

ci riconduciamo invece al caso ML, per il quale si ha il seguente risultato


{
k = arg max Probr Hi ( r H i )
i
}
e del quale esiste la versione logaritmica (log ML):
{
k = arg max ln Probr Hi ( r H i )
i
}
3.8 – Un esempio di applicazione per il criterio di decisione nel caso di alfabeto M-ario

Consideriamo M segnali (corrispondenti ad M simboli) immersi nel rumore e una modulazione


M-aria con dimensionalità N ≤ M ; Ts sia il tempo di simbolo ed si (t ) le forme d’onda.

23Il significato dei termini sotto la sommatoria è il seguente: anzitutto, dato per assodato che si è trasmesso un certo
simbolo i (è presente la probabilità a priori), calcoliamo la probabilità di propendere per una certa decisione j; fatto
questo, moltiplichiamo il tutto per il costo di tale decisione presa. Dunque complessivamente, fatta la sommatoria,
abbiamo davvero il rischio di Bayes perché andiamo a sommare tutti i costi di tutte le possibili scelte che possiamo
compiere.
Mappando tali forme d’onda su una base ortonormale {ψ h (t )}
N
otteniamo i seguenti coefficienti,
h =1

che possiamo inserire in un vettore:


si = si1 , si 2 , ..., sih 

Sia ν (t ) il rumore termico gaussiano bianco avente densità spettrale di potenza


N0
. Come
2
abbiamo già fatto in passato, possiamo scomporre il rumore in due parti:
ν ( t ) = n ( t ) + nI ( t )
In questa relazione:
N
• n (t ) = ∑ nhψ h (t ) è il cosiddetto rumore rilevante, quello che si ricava proiettando ν (t ) (che
h =1

ha dimensionalità infinita) sulla nostra base ortonormale (che invece ha dimensionalità N).
Questa componente di rumore è quella fastidiosa, che crea errori di interpretazione (lato
decoder) e che vogliamo evitare/minimizzare. Come si vede dalla sommatoria, abbiamo h
coefficienti nh (uno per ogni base ψ h (t ) ), i quali possono essere schematizzati con una
notazione vettoriale:
n = n1 , n2 , ..., nh 
Su ogni dimensione, e quindi per ogni coefficiente nh appartenente al vettore n, abbiamo
una distribuzione di probabilità gaussiana e tutte le distribuzioni sono fra loro
indipendenti. A causa di ciò, per tali v.a. nh si ha che indipendenza comporta
incorrelazione24. Si ha infatti:
N0 per h = k

E nh ⋅ nk  =  2 (incorrelazione)
0 per h ≠ k
Ciò è dimostrabile; se infatti applichiamo la definizione
variabile τ
  
variabile t
  
 
E nh ⋅ nk  = E ∫ n (t )ψ h (t ) dt ⋅ ∫ n (τ )ψ k (τ ) dτ  = E  ∫ ∫ n* (τ )ψ k (τ ) n (t )ψ h* (t ) dt dτ  =
 * *
Ts  Ts Ts 
 Ts

N0
= ∫ ∫ E n* (τ ) n (t )  ψ k (τ )ψ h* (t ) dt dτ = ∫ ψ k (τ )ψ h* (t ) dt
 2 Ts
Ts Ts
(sono completamente scorrelati) 
N0 Il delta di Dirac porta a zero l'integrale
= δ ( t −τ ) in dτ . N 0 2 è una costante e porto fuori.
2

L’integrale rimasto è ora pari ad 1 quando h = k (altrimenti, per h diverso da k, è nullo) a


causa dell’ortonormalità della base. Siamo quindi giunti in fondo alla nostra dimostrazione.
nI (t ) è il rumore irrilevante, quello che non è rappresentabile con la base {ψ h (t )}
N
• e che
h =1

quindi ci lascia totalmente indifferenti.


Quindi la forma d’onda ricevuta, una volta sommato il rumore, ha quest’aspetto:
rɶ (t ) = si (t ) + n (t )
In forma vettoriale (esprimendo cioè i coefficienti della base ortonormale), tale equazione diventa:
r = si + n = r1 , r2 , ..., rh 
Di conseguenza, per ogni coefficiente appartenente al vettore r, si ha:
 N   N 
rh = sih + nh con nh ∼ N  0, 0  (e dunque rh ∼ N  sih , 0  )
 2   2 

24 È un risultato che vale solo per le v.a. gaussiane. In generale la seguente corrispondenza non sussiste:
indipendenza ⇔ incorrelazione NO! Solo per le v.a. gaussiane.
Il tutto per poter finalmente esprimere la densità di probabilità per ogni componente, che è pari a:

( rh −sih )2 ( rh −sih )2

Probrh Hi ( rh H i ) =
1 2
N0
1
e 2
= e N0

N0 π N0

2
Esempio grafico con N = 2:

Mettendo insieme tutte le componenti, e ricreando – di fatto – il vettore r, otteniamo tale


probabilità per tale intero vettore.
Probr Hi ( r H i ) = Probr Hi ( r1 , r2 , ..., rh  H i )
Si tratta di un probabilità congiunta fra le varie componenti del rumore: ciò significa che
teoricamente, per calcolarla, dovremmo sapere contemporaneamente il valore di tutte le
proiezioni del rumore sulle varie
arie basi. È un’impresa immane, sennonché le nostre variabili sono
indipendenti e – solo e unicamente per via del fatto che sono gaussiane – possiamo scomporre la
relazione scritta sopra in un prodotto:

( rh −sih )2
Probr Hi ( r1 , r2 , ..., rh  H i ) = ∏ Probrh Hi ( rh H i ) = ∏
N N
1 N0
e
h =1 h =1 π N0
La produttoria può essere portata all’esponente (e trasformata in una sommatoria25):
N
( rh −sih )2 N
( rh −sih )2
 −∑ ∑
N


Probr Hi ( r1 , r2 , ..., rh  H i ) = (π N 0 ) 2  e h =1
1 N
= (π N 0 ) e
N0 h =1
N0
2

 
"Portato fuori"
dalla produttoria

Ora, se passiamo attraverso il logaritmo naturale, l’equazione soprascritta diventa:


ln Probr Hi ( r1 , r2 , ..., rh  H i ) = ln π N 0 −
N 1 N
∑ ( rh − sih )
2

2 N 0 h =1
N

∑ (r − sih )
2
Il termine h (v. figura26) rappresenta
h =1

una distanza (al quadrato),


quadrato) cioè quella ricavabile
sottraendo il vettore si dal vettore r : è un po’
difficile da “vedere” se scritta in tale forma, ma è
soltanto perché la sottrazione fra vettori di cui
parliamo è scomposta nelle varie componenti (da
1 a h).
N

∑ (r − sih ) = r − si
2 2 2
h = n = di2
h =1

25 Per una nota proprietà del prodotto fra potenze.


26 In figura compare il vettore n perché chiaramente la differenza fra s ed r è dovuta al rumore!
Ecco che posso esprimere in un altro modo il mio rapporto log MAP:

i
{ } i
N
k = arg max ln Probr Hi ( r H i ) + ln π i = arg max  ln π N 0 −
2
1
N0
2
r − si 

Operiamo ora un cambio di segno (attenzione all’operatore max che diventa min!) e scartiamo
tutte quelle cose che è impossibile minimizzare, come abbiamo già fatto nel passaggio precedente
con la probabilità a priori π i :

{
k = arg min r − si
i
2
} = arg min {d }
i
2

Risulta quindi che l’unica cosa sulla quale posso agire (cioè quella che si può lasciare in pasto
all’operatore min) è la distanza euclidea fra il punto indicato dal vettore r e quello indicato dal
vettore s.

In sintesi, prendiamo la decisione (euclideicamente) più vicina;


vicina; come già una volta siamo stati in
grado di verificare, per attuare un criterio di massima somiglianza non facciamo altro che
minimizzare la distanza.

3.9 – Le partizioni:: qualche esempio.

Il criterio a minima distanza euclidea ci spinge a definire un partizionamento nello spazio dei
segnali, cioèè nello schema in cui si vanno a disegnare le costellazioni relative alle modulazioni.

ESEMPIO 1, caso 4-PSK (o 4-QAM)


QAM)

Dividiamo lo spazio in quattro parti (che, guarda caso, sono i quattro quadranti del sistema
cartesiano ortogonale); ogni quadrante diventa
diventa quindi una partizione, cioè un’area di decisione.
Ciò significa che se il vettore r sta nel quadrante x, allora la minima distanza si ha per forza nei
confronti del simbolo s per il quale si deciderà (ipotesi Hˆ )27.
x x

4 simboli
4 partizioni

27
L’unico caso molto pericoloso (ma anche molto scalognato) è quello per il quale il vettore r sta piuttosto vicino
all’origine degli assi. In tal caso, infatti, siamo poco distanti rispetto a tutte e quattro le aree e la scelta di massima
verosimiglianza/minima distanza – pur rimanendo la più probabile in assoluto (e quindi quella che attueremo) – è
rischiosa perché il rumore può plausibilmente averci portato in quella zona da uno qualsiasi dei quattro punti della
costellazione.
ESEMPIO 2, caso 16-QAM

In questo caso abbiamo 16 regioni di decisione:


• 4 di esse (quelle interne), sono più
piccole delle altre, oltre ad essere
adiacenti ad un numero molto alto di
regioni vicine: questo, ahimè, fa sì che i
punti che a loro fanno capo siano più
deboli;
• 8 regioni (quelle esterne, ma non
agli angoli) sono più grandi lungo una
dimensione, ma ancora strette lungo
l’altra. Ciò le rende comunque i loro punti
più sicuri rispetto al caso precedente;
• le 4 regioni agli angoli sono le più
sicure in assoluto in quanto si estendono
in maniera indefinita verso i valori alti e
hanno meno contiguità con le regioni
limitrofe.

ESEMPIO 3, caso 2-FSK

In questo caso le zone di decisione hanno estensione


este
infinita e il limes che le demarca è la bisettrice del
quadrante raffigurato nell’immagine affianco. Al di sotto
della bisettrice siamo nel semipiano che fa capo alla forma
d’onda s2 ; l’altro semipiano (quello superiore) costituisce
cost
invece l’area decisionale di s1 .
Dal punto di vista delle aree di decisione questa
modulazione è abbastanza sicura, e lo è anche
aumentando – eventualmente – le dimensioni.

ESEMPIO 4, caso 8-PSK

In questo caso le regioni di decisione sono tutte


uguali. Capiamo bene che, se aumentiamo la
cardinalità della modulazione, la situazione
diventa molto pericolosa in quanto le partizioni,
pur continuando ad essere indefinitamente
estese, si infittiscono molto fra loro nei valori
bassi.
assi. Un rumore anche debole può indurre
quindi una pericolosissima variazione di fase e
far sbagliare il decodificatore che – in buona fede
– si è affidato al criterio di massima vicinanza
euclidea.
3.10 - Il decodificatore in dettaglio: circuiti per l’attuazione
l’attuazione dei criteri MAP/ML

2
Un possibile circuito per il calcolo del vettore r e della distanza r − si è il seguente.
La forma d’onda ricevuta viene passata
(in parallelo) a prodotto con ogni
funzione della base ortonormale
ψ 1 (t ) {ψ (t )}
N
h , dopodiché viene integrata28

h =1

su Ts e campionata. Da questa
operazione nascono le componenti del
vettore r riferite a ciascuna funzione
ψ N (t ) base della nostra base ortonormale.

Queste componenti vengono date in pasto ad un circuito che è in grado di elaborare i dati
seguendo un criterio a minima distanza euclidea. In questo modo possiamo scegliere una delle
ipotesi Hˆ riferite ad uno degli M simboli.
k

Questo circuito è detto di integrate&dump (“integro e scarico”, riferendosi allo svuotamento


dell’integratore); non è l’unico sistema, come vediamo immediatamente dopo qualche passaggio
matematico:
N N N

∑ ∑ 2∑ rh ⋅ sih
2 2 2
r − si = r + si − 2r ⋅ si = rh2 + sih2 −
h =1
 h =1
 =1
h 
= Er cioè = Esi cioè ragionando componente
l'energia del l'energia del per componente
segnale ricevuto segnale trasmesso

Da cui ricaviamo il criterio


riterio di decisione:
 N

H k : k = arg min Er + Esi − 2∑ rh ⋅ shi 
k
 h =1 
N
Il termine ∑r
h =1
h
2
= Er è irrilevante ai fini della decisione (ci viene dato e non possiamo certamente

agirvi), quindi possiamo trascurarlo. Anche Es , a dirla tutta, è costante ma non possiamo
eliminarlo perché entra in gioco nel termine sotto la sommatoria.
sommatoria
Ci rimane:
 N
  E N

H k : k = arg min Es − 2∑ rh ⋅ shi  = arg max − s + ∑ rh ⋅ shi  = (29)
k
 h =1  k
 2 h =1 
 proiezione → =2 r ,si

 Es  
= arg max − + 2 ∫ r (t ) si (t ) dt 
k  2 Ts 
Dunque un criterio con il minimo (riferito alla distanza) diventa un n criterio che lavora con un
massimo (riferito alla correlazione).

Anche questo procedimento può essere implementato in un circuitino integrate&dump (si guardi la
figura seguente).

28 Abbiamo in pratica proiettato la funzione r(t) su ciascuna base. In questo modo troviamo le componenti che ci
servono.
29 Attenzione al cambio
bio d’operatore dovuto al cambio di segno!
L’approccio è sempre quello della volta
scorsa, ma questa volta non lavoriamo
lavo
sul segnale ricevuto proiettandolo sulle
varie basi, bensì lavoriamo con le
funzioni base (le s) e con la loro energia.
Alla fine, invece del circuito calcolante la
minima distanza, poniamo un apparato
che scelga la massima fra tutte le quantità
calcolate.

A questo punto, quale circuito scegliere?


Come per ogni cosa, dipende dai casi;
prendiamo in considerazione la scelta di
trasmettere con una modulazione 64- 64
ASK:
• con il circuito precedente devo effettuare soltanto 2 operazioni30 perché la base è unica;
un
• nel secondo caso (cioè quest’ultimo) devo effettuare 65 operazioni31.
Si sceglie quindi una delle due alternative in base alla cardinalità della modulazione (influisce su
quante forme d’onda devo passare ai moltiplicatori nel secondo circuito) e in base bas alla sua
dimensionalità (influisce sul numero di moltiplicatori, ai quali devo passare le funzioni base, nel
primo circuito).

Dimostriamo ora che l’operazione d’integrazione effettuata dall’integrate&dump

N
corrisponde davvero alla ricerca del termine ∑r
h =1
h ⋅ shi = r ⋅ s :
scomposizione scomposizione
in componenti: in componenti: Risultato:


r (t )


si (t )
{== 10 sese kk =≠ ll

N N N N

∫ r ( t ) si ( t ) d t = ∫ ∑ rh ( t )ψ h ( t ) ∑ sil ( t )ψ l ( t ) d t = ∑∑ rh (t ) sil (t ) ∫ ψ h (t )ψ l (t ) dt =
Ts Ts h =1 l =1 h =1 l =1 Ts
N
= ∑ r (t ) s (t ) = r ⋅ s
h =l =1
h il

Ci rimane da esaminare una terza ipotesi, la quale coinvolge i filtri.


Ricordiamo il significato di risposta impulsiva h(t) di un filtro, che è – ovvero – l’anti-trasformata
della funzione di trasferimento del filtro stesso:
h (t ) 
F
→H (f )
Ora, creiamo un filtro la cui risposta impulsiva sia pari ad una delle funzioni base, traslata della
sua durata e “ribaltata”:
 "traslata"

h (t ) = si  Ts  − t
 
 "ribaltata" 

30 Proiezione (1) + scelta del minimo (1).


31 Integrate&dump (64) + scelta del massimo (1).
La scelta sembra essere senza senso; tuttavia, avendo un filtro del genere, l’uscita nel dominio dei
tempi sarà pari a:
+∞
r (t ) ⊗ h (t ) = ∫ r (τ ) h (t − τ ) dτ
−∞

(convoluzione)
Se ora leggo questa quantità all’istante t = Ts , e limito l’integrale
egrale al solo intervallo di definizione
Ts , ottengo:

r (t ) ⊗ h (t ) = r (t ) ⊗ si (Ts − t ) = ∫ r (τ ) si (Ts − (Ts − τ ) ) dτ = ∫ r (τ ) si (Ts − Ts + τ ) dτ =


Ts Ts

= ∫ r (τ ) si (τ ) dτ
Ts

Dunque, in definitiva, in uscita dal filtro ho la proiezione della funzione d’ingresso su una
funzione base si (alla quale si è adattato tale filtro).
Cosa accade se la funzione r(t) è proprio si (t ) ? Il filtro la “riconosce” accorgendosi che la
somiglianza fra i due segnali (quello in ingresso e quello “dentro” al filtro – che sono a tutti gli
effetti gli stessi a meno di errori) è tale che la correlazione fra loro schizza al massimo.

Un filtro adattato di questo tipo è bravissimo a riconoscere il segnale al quale è adattato, anche se
questo è immerso nel rumore32; inoltre abbiamo il vantaggio di non dover per forza localizzare
temporalmente dove sta il segnale che vogliamo ricevere e decodificare. Il mio segnale, infatti, può
anche essere non allineato: ci pensa il filtro a riconoscerlo.
Ovviamente, se abbiamo n ipotesi (cioè le Ĥ ), abbiamo bisogno di n filtri.

Come influisce l’aggiunta del filtro sul SNR?


Ricordiamo che:
r (t ) = s (t ) + n (t )
E che dunque la convoluzione è fra:
r (t ) ⊗ h (t ) = s (t ) + n (t )  ⊗ h (t ) = s (t ) ⊗ h (t ) + n (t ) ⊗ h (t )
 
contributo del contributo del
segnale utile rumore

Se passiamo attraverso la trasformata di Fourier:


• contributo del segnale utile s (t ) ⊗ h (t ) 
F
→ S (f )H (f )
• contributo del rumore n (t ) ⊗ h (t ) 
F
→ N (f )H (f )
Ora possiamo esprimere l’SNR effettuando
effettuando l’integrale sulla densità spettrale di energia:
energia

∫ S ( f ) df ∫ H ( f ) df
2 2

∫ S ( f ) H ( f ) df ∫ S ( f ) H ( f ) df
2 2
Schwartz
SNR = = ≤
∫ N ( f ) H ( f ) df
2
N0 N0
∫ H ( f ) df ∫ H ( f ) df
2 2

2 2

32 Purché l’SNR abbia valori dignitosi.


∫ S ( f ) df
2
Eb
SNR ≤ =
N0 N0
2 2
Se poi utilizzo un filtro non distorcente, che abbia cioè tale forma p per la funzione di
trasferimento…
 indotto dal 
"ribaltamento"
ritardo Ts
    
coniugio

H (f ) = α  t  (33)
 S (f )e h (t ) = α s Ts
− j 2π fTs F −1
*
 → −
costante
  
 indotto
ritardo 
 dal fasore 
 
… allora possiamo trasformare la relazione di prima in un’uguaglianza:
Eb Eb
SNR ≤ 
non distorcenza
→ SNR =
N0 N0
2 2
Quindi:
• un filtro non adattato, che non ha cioè una risposta impulsiva del tipo h (t ) = α s (Ts − t ) , fa
NR (come dimostra il segno ≤ introdotto dalla disequazione di Schwartz);
calare l’SNR
• un filtro adattato (matched filter massimizza l’SNR.
matched filter)
L’idea, a questo punto, è quella di sostituire la cascata
modulatore a prodotto + integratore (integrate&dump)
e&dump)
con un filtro adattato avente riposta impulsiva:
• ψ i (Ts − t ) ‒ ci riferiamo quindi alla base ortonormale ‒ per quanto riguarda il primo
circuito (v. figura sottostante);
sottostante)
• si (Ts − t ) ‒ ci riferiamo quindi alle funzioni base ‒ per quanto concerne il secondo circuito.
circuito
Quindi, ad esempio, questo diventa lo schema:

3.11 - Analisi prestazionale dei ricevitori34

Come abbiamo detto, il decisore lavora basandosi su un criterio a minima distanza euclidea.
Riassumendo, abbiamo detto che la probabilità d’errore per simbolo Pes è pari a
Pes = 1 − Pc
essendo Pc la probabilità di decisione corretta, la quale è a sua volta pari a
decidere per l'ipotesi i -esima una volta criterio della minima
che è stato trasmesso l'i-esimo simbolo
 decisione
regione di
giusta   distanza euclidea

 
( )  
= ∑ π i Prob  r ∈ Zi si  = ∑ π i Prob {di < d j , ∀j ≠ i si }
m m m
Pc = ∑ π i Prob Hˆ i si
i =1 i =1 i =1

33 Si noti che la forma della risposta impulsiva è la stessa che avevamo esaminato poco
poco fa (solo, ricavata per un’altra
via).
34 Precisiamo che i nostri ricevitori analizzano simbolo per simbolo e vengono, per questo, chiamati coerenti.

Ipotizziamo inoltre di conoscere l’intero spazio dei segnali.


tre che la distanza di si calcola così:
Ricordiamo inoltre
di = r − si
Premessa:
Premessa utilizzeremo la
codifica di Gray,
Gray la quale ha la
caratteristica di far differire i
simboli adiacenti per un solo
bit. Si faccia riferimento alla
figura, che
c riporta un esempio
con una costellazione 4-PSK:
4
utilizzando la codifica naturale
(quella non fra parentesi),
risulta possibile sbagliare più
di un bit alla volta. Con la
codifica di Gray (quantità fra
parentesi), invece, sbagliare
area di decisione con una
contigua provoca al massimo lo
sbaglio di un singolo bit.
La scelta di questo tipo di codice è fondamentale, in quanto ci rende possibile esprimere in questo
modo la probabilità d’errore per bit:
1
Peb = P
log 2 M es
In caso contrario, usando cioèoè la codifica naturale35,
avremmo dovuto gestire anche una quantità Eij che tenesse
conto dei bit errati corrispondenti alla scelta di Hˆ j dato che
si è verificata H i .
tesi che l’SNR sia tale da rendere
Facciamo poi l’ipotesi
trascurabile l’evento “errore non adiacente” (v. figura
affianco)36.

Esaminiamo ora una modulazione alla volta.

2-ASK

Nel caso 2-ASK


2 ASK abbiamo due forme d’onda (e quindi anche due
simboli, in quanto la cardinalità è M = 2) e uno spazio
monodimensionale (N ( = 1). Poniamo per ipotesi che l’uscita
simboli sia modellata con una densità
densità di probabilità uniforme.

Supponiamo poi che le forme d’onda abbiamo le seguenti


coordinate sulla retta che rappresenta la nostra
n base ortonormale
[costituita dalla sola funzione ψ 1 (t ) ]:
s1 = − Es s2 = Es

35 O, comunque, un’altra qualsiasi codifica che non avesse l’importante proprietà della codifica di Gray.
36 Se l’SNR fosse troppo basso non potremmo legare in alcun modo la probabilità di errore per simbolo e per bit.
Come abbiamo già verificato altre volte, la questione consiste nel il verificare se il vettore ricevuto
r indica un punto più vicino ad s1 o ad s2 , tenendo presente che la soglia che delimita le due
scelte è lo 0 (punto medio fra − Es e Es ). Quindi si hanno
nno le seguenti probabilità di sbagliare:

{ } {
Prob {r > 0 s1 } = Prob Hˆ 2 H1 = Prob − Es + n > 0 = Prob n > Es } { }
Prob {r < 0 s } = Prob {Hˆ
2 1 H } = Prob {
2 }
Es + n < 0 = Prob n < − { E }
s

Siccome il nostro rumore n(37) è modellabile come gaussiano, entrambe queste quantità sono
esprimibili con la funzione erfc:
 Es 
{ }
Prob n > Es = Prob n < − Es = erfc 
1
2
{
 N  }
 0 

Si vede bene dalla seguente immagine:


1  Es 
queste due codette hanno area 2 ⋅ erfc 
2  N 
 0 

errore! errore!

(trasmesso s2 ma il (trasmesso s1 ma
rumore ci porta in s1 ) il rumore ci porta in s2 )

Non è finita: dobbiamo anche ricordarci del fatto che la probabilità di trasmettere s1 (così come
quella di trasmettere s2 ) è pari a 1/2. Quindi:
due probabilità
a priori
 definizione
 
codette
1  Es   1  
Es
Pes = 2 ⋅ 1  erfc    = erfc  
2 2  N  2  N0
 0   
 
 
Ora possiamo trovare la probabilità d’errore per bit utilizzando la formula scritta in precedenza:
1 1 1  Es  1  Es 
Peb = Pes = erfc   = erfc 
log 2 M log 2 M 2  N  2  N 
   0   0 
=1

M-ASK

37La quantità n è in realtà solo il cosiddetto rumore influente, cioè quella parte di rumore n(t) proiettata sulla base (in
questo caso monodimensionale) che descrive il nostro spazio; il rumore ininfluente non lo consideriamo perché tanto
non ha effetto sulla bontà della nostra ricezione.
Abbiamo dunque M simboli, pur continuando a mappare tutto quanto su una singola dimensione.
Anche questa volta la probabilità a priori d’uscita dei vari simboli è uniformemente distribuita.
Come si vede dalla figura, è necessario discriminare fra i simboli “interni” e quelli “esterni”
“e della
costellazione (cioè quelli di bordo, che nel nostro caso sono a coordinate −5 Es e 5 Es ); infatti:
• per i simboli esterni dobbiamo considerare le seguenti codette:

Che si quantificano ciascuna così:


cos
 Es 
Probe sm ( e sm ) =
1
erfc 
 N 
i = 1, M
2  0 

L’altra codetta (quella simmetrica) non la calcoliamo perché non vi sono simboli limitrofi in
quella direzione e non vi è, dunque, pericolo di sbagliare.
• per i simboli interni l’espressione della probabilità è
diversaa perché le aree da considerare sono due invece che
una. Si veda infatti la figura a lato: il vettore ricevuto
contenente il simbolo che “risiede” in 3 Es , se affetto da
un disturbo molto potente, può infastidire le forme
d’onda rappresentate
esentate dai punti Es e 5 Es . Dunque
l’1/2 presente nella formula dell’erfc se ne va e rimane:
 Es 
Probe sm ( e sm ) = erfc 
1
 N 
i = 2, 3, …, M‒1
2  0 

Facciamo ora il resoconto totale:


2 1  Es  M −2  Es  M − 1  Es 
Pes = ⋅ erfc   + erfc   = erfc 
M 2  N  M  N  M  N 
  0    0   0 
probabilità   probabilità   
che escano 2 simboli che escano M −2 simboli
simboli esterni esterni simboli interni interni

Come si vede, questa probabilità d’errore è espressa in funzione dell’energia della forma d’onda e
del rumore (è presente un rapporto SNR a tutti gli effetti).

Ora posso usare la formula che mi mi trasforma la probabilità d’errore per simbolo in probabilità
d’errore per bit:
1 M −1  Eb 
Peb = Pes = erfc  log 2 M 
log 2 M M log 2 M  N 
 0 
Abbiamo finito? No: in realtà dobbiamo tenere conto anche dell’energia media trasmessa dalla
costellazione. Con il variare di M, infatti, varia anche l’energia media trasmessa da una
costellazione ASK38: se abbiamo infatti M = 64 simboli, allora quelli più esterni avranno un’energia
molto maggiore39 di quella che abbiamo nel caso M = 4!

38 Cosa che non accadrebbe, invece, per una costellazione


cost PSK.
39Per non parlare di tutti i simboli interni, che non solo sono di più, ma sono anche mediamente molto più energetici
nel primo caso che nel secondo.
Se vogliamo fare un confronto corretto con altre modulazioni, dobbiamo
dobbiamo quindi in qualche modo
introdurre questo parametro.
Si dimostra che, nel caso i punti siano distanziati di 2 Es ciascuno40, l’energia media è:
M 2 −1
Em = Es
3
Facendo la formula inversa41:
3Em
Es =
M 2 −1
Ora possiamo sostituire e otteniamo la probabilità d’errore per bit in funzione dell’energia media
per simbolo:
M −1  Es  M −1  Eb  M −1  Em 3log 2 M 
Pes = erfc   = erfc  log 2 M  = erfc  
 N  M log M  N  
 N0 M − 1 
2
M  0  2  0  M log 2 M

M2-QAM

Come esprimiamo, in questo caso, la probabilità di fare


un errore di decisione nei confronti del simbolo s1 ?
Beh, così42,43:
Probe s1 ( e s1 ) =
che per la base ψ1 la distanza
del vettore dal simbolo corretto 
 almeno
sia maggiore di quella da
un simbolo scorretto sbagliamo su ψ 2

     
= Prob  r1 − s11 > r1 − si1 , r1 − s11 > r1 − si1 , ∀i ≠ 1
  
sbagliamo su ψ1
   
che per la base ψ 2 la distanza

 del vettore dal simbolo corretto 
 sia maggiore di quella da
almeno un simbolo scorretto 
Come messo in evidenza nella nota 42, possiamo
esprimere questa probabilità d’errore in maniera astuta; astuta
se chiamiamo in fatti PeM-ASK la probabilità d’errore che si avrebbe considerando una singola
dimensione (e quindi “degenerando” nel caso ASK), possiamo dire che la probabilità d’errore in
2
questo caso (che chiamiamo PeM -QAM
) è pari a:

40 Se la distanza fra i simboli è diversa e pari a d Es , l’energia media diventa:


M 2 − 1 dmin
2
Em =
Es
3 4
41 Notiamo anche da questa formula che, all’aumentare di M e a parità di energia media, cala l’energia di ogni simbolo

e quindi diminuisce l’SNR e – di conseguenza – aumenta la probabilità di sbagliare.


42 Da questa espressione
ressione si capisce meglio anche il senso della frase “la modulazione QAM è la composizione di due
modulazioni ASK poste ortogonalmente fra loro”. È infatti lampante che, in questo caso, dobbiamo considerare
singolarmente entrambe le direzioni (cioè le dimensioni)
dimensioni) lungo le quali può agire il rumore.
43 Possiamo anche, già che ci siamo, scrivere in maniera
maniera “estesa”la probabilità di prendere una decisione corretta (e
M 2 -QAM
cioè 1 ‒ Pe ):
che per la base ψ 1 la distanza
 del vettore dal simbolo corretto 
 sia minore di quella da
tutti i simboli scorretti ci azzecchiamo su ψ 2

     
Probc s1 ( c s1 ) = Prob  r1 − s11 < r1 − si1 , r1 − s11 < r1 − si1 , ∀i ≠ 1
  
ci azzecchiamo su ψ 1
   
che per la base ψ 2 la distanza

 del vettore dal simbolo corretto 
 
sia minore di quella da
tutti i simboli scorretti
probabilità complessiva di non sbagliare
(entrambe le M-ASK devono essere corrette)

( )( ) ( )
2
M 2 -QAM
P e =1− 1 − PeM-ASK 1 − PeM-ASK = 1 − 1 − PeM-ASK
   
probabilità di non probabilità di non
sbagliare lungo sbagliare lungo
una dimensione una dimensione

Detto
etto questo, procediamo alla ricerca della probabilità d’errore sviluppando la relazione:
( ) ( ) ( )
2 2 2 2
PeM -QAM
= 1 − 1 − PeM-ASK = 1 − 1 + 2PeM-ASK − PeM-ASK = 2PeM-ASK − PeM-ASK (44)

M-PSK45

I casi di PSK con M = 2 e M = 4 li abbiamo implicitamente già analizzati quando abbiamo parlato
di 2-ASK e 4-QAM.
QAM. Che accade per M > 4?
Purtroppo in tal caso non esiste una forma chiusa per esprimere la probabilità d’errore per
simbolo (e per bit), ma esiste un’approssimazione così quantificabile:
 Eb log 2 M π  (46)
Pes = erfc  sin 
 N M
 0 
Inoltre, la PSK è sempre compresa fra i due estremi della seguente disequazione:
1  Eb log 2 M π   Eb log 2 M π 
erfc  sin  ≤ Pes ≤ erfc  sin 
2  N0 M   N0 M 
    
Molto vicina a tale termine per M >2

M-FSK

In questo caso abbiamo M = N,, come sappiamo. Diamo ancora per buona, naturalmente, l’ipotesi
che la distribuzione di probabilità che modella l’uscita dei vari simboli sia uniforme.
Se chiamiamo s j il generico simbolo
imbolo che è stato trasmesso,
qual è la probabilità di non interpretare correttamente il
segnale?
N
Pe = 1 − ∑ Prob
j =1
c sj
πj



Probabilità di fare la scelta
corretta dato che è uscito il
relativo simbolo

Facciamo un esempio in due dimensioni: in questo caso,


sappiamo bene, la linea che demarca le due zone di
decisione, cioè le due partizioni,
rtizioni, è la bisettrice tra i due assi
delle funzioni ortogonali ψ 1 (t ) e ψ 2 (t ) . Se chiamiamo r1 la
proiezione del vettore ricevuto r su ψ 1 (t ) [e r2 la
proiezione del vettore ricevuto r su ψ 2 (t ) ] allora possiamo dire che:

44 Si noti che questa quantità è sicuramente positiva perché PeM-ASK è compresa fra 0 e 1.
45 Ricordiamo che,, per la PSK, l’energia media è uguale all’energia per simbolo; dunque tutte le considerazioni fatte
sul confronto fra modulazioni nell’esempio ASK hanno puntuale riscontro anche in questo caso.
46 Si nota molto bene che, al crescere della cardinalità M, il seno tende a diventare sempre più piccolo (e vicino a zero)

e aumenta la sua tendenza a rendere piccolo l’intero argomento della erfc. Questo fa sì che la probabilità d’errore
aumenti con l’aumentare di M:: d’altronde questo risultato era prevedibile
prevedibile perché una PSK con M elevato è molto poco
sicura, vista la vicinanza dei punti della costellazione.
• mi trovo nella zona Z1 se r1 > r2 (47) ;
• mi trovo nella zona Z2 se r2 > r1 (48) .
Possiamo chiaramente generalizzare questo esempio ad un contesto multidimensionale;
sceglieremo infatti correttamente per la partizione Z j (e quindi per l’ipotesi Hˆ j e il simbolo s j ) se:
Probc s = Prob rj > ri , ∀i ≠ j s j
j
{ } (49)

Volendo, possiamo scrivere questa probabilità (di prendere una decisione corretta) in un altro
modo: qual è, infatti, la probabilità che rj > ri (50)?
L'integrale media sulla statistica di r (li esaminiamo tutti quanti!)

j

+∞
Probc s =
j ∫ Prob {
−∞
r < r , ∀i ≠ j r }

i

j j Prob ( rj )
 
drj

che ri < rj , fissato rj ? probabilità che fissiamo di
sia uscito proprio volta in volta rj
quell'rj

Troviamo un modo alternativo di esprimere il termine sotto l’integrale:

{ } ( ) ( )
M M −1
Prob ri < rj , ∀i ≠ j rj = ∏ Prob ri < rj rj = Prob ri < rj rj 
i =1    
i≠ j Al variare di i , queste
quantità sono tutte uguali

Ultimo nodo prima di sciogliere l’intera questione: quanto vale


Prob ri < rj rj ( )
Ovvero: quando una variabile aleatoria gaussiana51 è minore di rj ?
  r

 ( 1
Prob ri < rj rj = 1 − erfc  j
2  N )
  0

Dunque, tornando all’integralone riguardante la probabilità di effettuare la scelta corretta...


Gaussiana a valor
(r − )
2
M −1 medio nullo M −1
 1
+∞  r   +∞   r  −
j Es

⋅ Prob ( rj ) drj = ∫ 1 − erfc  j


1 1
Probc s = ∫ 1 − erfc  j   e N0
drj
j
−∞ 
2  N  −∞ 
2  N  N0
  0    0  2π
2
Sappiamo poi che la probabilità d’errore è:
N N
Pe = 1 − ∑
j =1
Probc s π j
j
= 1 − Probc s
j

j =1
π j = 1 − Probc s
 j
   1
=
1
Probabilità di fare la scelta M N
corretta dato che è uscito il
relativo simbolo

Ora siamo quindi in grado di scrivere:


(r − )
2
M −1
 1  r
+∞  1 −
j Es

Pe = 1 − ∫ 1 − erfc  j  e N0
drj =
−∞ 
2  N  N0
  0  2π
2
integrale di Gauss ( = 1) raccogliamo...

 
(r − ) M −1
( rj − Es ) ( rj − Es )  M −1
2 2 2
+∞
1 −
j Es
+∞  1  rj  1 −
1
+∞ −
  1  r   
= ∫ − ∫ 2  N
 −  e N0 drj = ∫ e 0 1 − 1 − 2 erfc  N   drj
N0 N j
e 1 erfc
π N0 −∞ 
 π N0 π N0 −∞
−∞   0   
  0  

47 Cioè se la pendenza di r, considerando la figura che abbiamo riportato a fianco del testo, è minore di 1.
48 Cioè se la pendenza di r, considerando la figura che abbiamo riportato a fianco del testo, è maggiore di 1.
49 Questa relazione è valida soltanto per le modulazioni ortogonali.

50 Ovvero, in altre parole, quando una variabile aleatoria risulta essere maggiore di un’altra variabile aleatoria?

51 Ci stiamo riferendo a ri ; ricordiamo che il rumore è AWGN!


L’unico modo per risolvere questo integrale, si vede bene, è per via numerica. Possiamo però fare
qualche osservazione: all’aumentare di M, con Es costante, la probabilità di fare errori tende ad
E
aumentare; nel rapporto SNR = b calano, a dire il vero, sia Eb che N 0 , ma il primo termine
N0
decresce molto più velocemente del secondo! L’altro risvolto di questa faccenda è che per M
grande, a parità di SNR, spendo meno energia per ogni bit.

3.12 – Union bound (limite dell’unione)

La procedura che stiamo per descrivere è molto utile nella teoria della
della decisione per un’adeguata
valutazione delle prestazioni.
Prendiamo le quattro partizioni in figura (esempio con 4-PSK
4 = 4-QAM):

Sappiamo bene come scrivere la probabilità di commettere un errore di decisione (eventualità che
accade quando, trasmesso il simbolo s1 , riceviamo un vettore r talmente influenzato dal rumore
da cadere su Z2 o Z4 , o anche su Z3 se il rumore è così consistente da provocare errori fra
f zone
non adiacenti):
M M
Pe = ∑
i =1
Pe Hi π i = ∑ Pe si π i
i =1
 
Probabilità di sbagliare
la rilevazione di H i , una
volta che è uscito proprio lui

Come esprimiamo la Pe Hi ? Abbiamo due modi:


• scriviamo la probabilità che il vettore non ricada nella zona di decisione giusta Zi (e quindi
che cada in una zona di decisione sbagliata cioè ≠ Zi ):
Prob {r ∉ Zi H i } = Prob {r ∉ Zi si }
• scriviamo la probabilità che il vettore ricadi nell’unione di tutte le zone di decisione
sbagliate (e quindi che non finisca nella zona di decisione giusta):
 
   
   M

Prob  r ∈ Zi H i  = Prob r ∈ ∪ Z j H i 

 r sta nel   j =1 
 complemento   j ≠i 
 di Zi 
Se consideriamo la costellazione completa, nell’unione
nell’unione di tutte le aree di decisione non giuste non
vi sono sovrapposizioni (non c’è overlap),
overlap in quanto tali aree sono tutte disgiunte;
disgiunte si ha infatti:
M

∩Z j =0
j =1
j ≠i
In virtù di tale osservazione possiamo definitivamente esprimere così la probabilità d’errore
Pe Hi = ∑ Prob {r ∈ Z j , ∀j ≠ i H i }
M
insiemi disgiunti  ∪ ⇒∑ j =1
j ≠i

Desideriamo ora impostare un limite dell’unione (union bound), ), il quale non consiste nel confrontare
un solo punto con tutti gli altri, come abbiamo fatto fin’ora, ma con uno solo degli altri alla volta.
Per farlo, è necessario capire bene il significato delle seguenti regioni di decisione:
• regione giusta:
{
Zi = x ∈ Z : x − si < x − s j , ∀j }
staura con il simbolo che è stato veramente trasmesso ( si ), quindi
La minima distanza si instaura
il decodificatore a minima distanza interpreta bene l’informazione.
l’informazione
• regioni sbagliate (prese singolarmente):
{
Z ji = x ∈ Z : x − s j < x − si }
Per individuare queste regioni
regio “sbagliate” bisogna fare finta che la costellazione sia formata
di soli due punti: quello “giusto” e uno di quelli “sbagliati” (ne prendiamo uno alla volta).
La regione di decisione Z ji è dunque un semipiano che fa capo a un solo punto errato,
ovvero s j , nei confronti dell’unico punto esatto, ovvero si .
• regione sbagliata (già vista poco fa):
fa)
Zi = ∪ Z ji = {x ∈ Z : x − si < x − sk , ∀k ≠ i}
M

j =1
i≠ j

È il complemento della regione giusta, ed è pari all’unione di tutte


te le regioni sbagliate del
punto precedente. Dalla figura seguente questo pare oltremodo evidente:

Regione Z21

Regione Z41

Regione Z31
Z21 ∪ Z31 ∪ Z41 = Z1
Regione sbagliata
“totale”

Ora possiamo scrivere in maniera diversa la probabilità d’errore. Giunti a questo punto, infatti, la
probabilità di sbagliare l’ipotesi (che si è davvero verificata) H i si può scrivere
scriver nei seguenti tre
modi:
   
 M
  M

∑ Prob {r ∈ Z , ∀j ≠ i H i } =
M
Pe H i = Prob r ∈ ∪ Z j H i  = j Prob r ∈ ∪ Z ji H i 
 j =1  j =1  j =1 

 

j ≠i j ≠i j ≠i



Unione delle aree di decisione errate Somma delle probabilità che il vettore Unione d i tutte le aree sbagliate
se consideriamo la costellazione complet
completa cada in una delle regioni errate, impostata calcolate confrontando il punto giusto
(il primo caso che abbiamo esaminato) sfruttando il fatto che tali regioni, nel caso singolarmente con ogni punto sbagliato
di costellazione completa, sono disgiunte (le aree Z ji chiaramente si sovrappongono)
Quindi, in definitiva:
 SOMMATORIA = eseguiamo M -1 volte...

  
 primo caso → = ∑ Prob {r ∈ Z j H i } = ∑ Prob  x − si < x − s k , ∀
M M

k ≠ i Hi 
 j =1 j =1  ... M −1 test! 
 j ≠i j ≠i
Pe Hi =  SOMMATORIA = eseguiamo M -1 volte...


  
 
union bound → ≤ ∑ Prob {r ∈ Z ji H i } = ∑ Prob  x − si < x − s j H i 
M M

 j =1 j =1    
 j ≠i j ≠i ...1 test!

OSSERVAZIONI:
il primo caso ha un costo computazionale di ( M − 1 ) test, ma ci offre il risultato esatto
2

della probabilità d’errore;
• il criterio dello union bound ha un costo computazionale minore, cioè di ( M − 1) test, ma ci
offre un risultato sovradimensionato, in quanto l’unione delle zone di decisione errate Z ji
porta con se un cospicuo overlap
overla (e quindi molte regioni le contiamo due volte).

3.13 – Esempio nel caso M-FSK

Il calcolo della probabilità d’errore nel caso FSK ci è rimasto un po’ sullo stomaco perché abbiamo
ottenuto un integrale assolutamente poco amichevole (v. paragrafo 3.11).
Cosa
osa succede ad applicare il nuovo criterio union bound?

Anzitutto definiamo (v. paragrafo precedente) le regioni di decisione:


{
Z ji = r − s j < r − si H i }
Dopodiché ricordiamo i vettori indicanti le funzioni base sono i seguenti:
s1 = ( E , 0, 0, 0, ..., 0)
s

s2 = ( 0, E , 0, 0, ..., 0 )
s

s3 = ( 0, 0, E , 0, ..., 0 )
s


(
sM ( = N ) = 0, 0, 0, 0, ..., Es )
In questa raffigurazione grafica sono presenti due aree di decisione: una è riferita al punto corretto
si , l’altra, Z j , fa capo ad uno degli altri punti (errati) s j .
Ecco che la probabilità d’errore diventa la seguente:
Il rumore ci deve portare a più di
dij
(d ij = distanza fra s j e si ) di
2
distanza dal simbolo giusto

Probabilità di finire nel semipiano
 d
sbagliato una volta che esaminiamo i
punti s j e si 
   ij   dij 
Prob {r ∈ Z ji H i }
1  2  = 1 erfc 
= erfc 
2  N0  2 2 N 
 2   0 
 2 
Ora può scattare lo union bound e possiamo scrivere che la probabilità d’errore è al limite
li uguale a:
M (=N ) M (=N )  dij 
Pe Hi ≤ ∑ Prob {r ∈ Z ji H i } = ∑ erfc 
1

j =1 2
2 N 
j =1
j ≠i j ≠i  0 

Questo passaggio è corretto perché la distanza dij è la stessa per qualunque coppia di punti
(siamo in uno spazio multidimensionale): è quindi sufficiente indicare tale quantità con la lettera
letter
d.. Siccome, a questo punto, le erfc sono tutte uguali ( N 0 resta com’è, d pure), possiamo sviluppare
la sommatoria:
Non M, perchè
un punto è giusto!

M −1  d 
Pe Hi ≤ erfc  
2 2 N 
 0 
Se poi introduciamo l’ulteriore ipotesi che d = 2Es , allora:
 M −1  Es
Pe Hi ≤
 erfc 
2  2N
  0

Questa formula è molto più amichevole dell’integrale visto qualche pagina fa!

Vediamo cosa succede imponendo M = N = 2:


 1  Es
Pe Hi =
 (52) erfc 
2  2N
  0

Se confrontiamo con la stessa probabilità calcolata nel caso 2-ASK


2
1  Es 
Pe2-ASK
Hi
= erfc  
2  N0 
ci accorgiamo che, rispetto a quest’ultima modulazione, la FSK perde immediatamente circa 3 dB
di SNR dovuto alla peggiore distribuzione dei punti rispetto alla 2-ASK
2 ASK, che invece, in questo
senso, è ottimizzata.

Se ci confrontiamo con la Q-PSK


Q (53)
, capiamo bene che la ragione
profonda dello union bound risiede de nel riportarci sempre in un
caso 2-ASK-like,
2 , smontando il problema nel calcolo della minima
distanza fra – appunto – solo due punti.
Il risultato è, per ogni singola analisi, qualcosa del tipo
1
2
( )
erfc ... , proprio come per la 2-ASK, 2 senza integrali

giganteschi da risolvere.

52 Nel caso M = 2, lo union bound dà un risultato esatto.


53 Che sarebbe la 4-PSK.
CAPITOLO 4
Codifiche a correzione d’errore – parte 1

4.1 – Introduzione

Lo scopo delle codifiche a correzione d’errore (FEC, Forward Error Correction)


Correction è sostanzialmente
E 
quello di farci avvicinare alla curva di Shannon sul piano η  b  .
 N0 
Nella pratica, tale correzione si attua con l’aggiunta di due blocchi1 a monte e a valle della catena
responsabile della modulazione. Ecco come si perfeziona l’intero percorso dell’informazione, dalla
sorgente al destinatario:
• all’ingresso abbiamo i bit d’informazione uk , emessi con una rate2 Rb . Tali bit vengono
presi in pasto dal FEC (Forward Corrector), che li codifica dando in uscita i bit codificati
Forward Error Corrector),
bn . La cadenza con la quale
uale vengono emessi tali bit è data dalla rate3 Re ;
• i bit codificati vengono passato al blocco modulatore,, che li trasforma nei simboli ai . A
questi simboli è associata una particolare rate4 Rs ;
• i simboli passano attraverso il canale di trasmissione che supponiamo essere di tipo
AWGN:: verrà quindi aggiunto al segnale utile un rumore n(t) con distribuzione di
probabilità gaussiana N  0, 0  . Il rumore ha effetto sul segnale
N
ale utile e può disturbarlo:
 2
di conseguenza, i simboli che il ricevitore ottiene potrebbero essere diversi da quelli
trasmessi ed è opportuno quindi darvi un nome diverso. Chiamiamoli ri ;
• i simboli ricevuti5 r vengono passati a un demodulatore,, che li ritrasforma in bit6 ( bˆ , il più
i n

possibile simili ai bn );
• i bit ricevuti e demodulati vengono passati al decodificatore,, che effettua il passo dalla
nformazione vera e propria, rilasciando i bit d’informazione uˆ k .
codifica7 all’informazione
Come influisce l’introduzione della codifica sulla curva degli
errori? Quello a fianco è il ben noto andamento della
probabilità di errore Peb , in funzione del rapporto SNR8, per la
cosiddetta curva uncoded (cioè quella senza codifica degli errori).
Chiaramente ci aspettiamo che una curva coded migliori tale
andamento, aumentandone (in modulo) la pendenza; ed
effettivamente questo è ciò che accade.

1 Tali blocchi, lo vedremo fra poco, sono il FEC (Forward


( Error Corrector, a monte) e il decodificatore (a valle).
2 Misurata in bit al secondo [bit/s], è pari all’inverso del tempo di bit Tb .
3 Misurata in bit al secondo [bit/s], è pari all’inverso del tempo di bit codificato
codific Te .
4 Misurata in bit al secondo [bit/s], è pari all’inverso del tempo di simbolo Ts .
5 Che logicamente vorremmo fossero il più possibile simili agli ai .
6Prima di questo capitolo ci siamo sempre fermati qui, definendo in tale punto della catena una probabilità d’errore
per bit Peb : tale probabilità – nel caso senza codifica a correzione d’errore – è (e rimane) priva di codifica e quindi
viene definita come uncoded.
7 Se la codifica, e quindi il mappaggio, è 1-ad-1,
1 possiamo “spostare” qui la Peb senza che cambi alcunché rispetto ai
casi precedentemente trattati (caso della no-codifica).
8 L’SNR è calcolato in prossimità dei bit di informazione
infor uk .
La cosa interessante (v. figura a destra) è che le curve coded
non funzionano molto bene alle SNR molto basse. Prima di
un certo valore  b  , infatti, spendiamo più energia per
E
N 
 0 th

introdurre la ridondanza (necessaria per introdurre


quell’informazione
uell’informazione “in più” che è proprio la codifica e che
rende possibile la rilevazione/correzione degli errori) rispetto
a quanta ne spendiamo per trasmettere l’informazione netta
vera e propria9. Oltre il valore di threshold, invece, le curve
codificatee vanno decisamente meglio perché la codifica inizia
a farsi sentire e aumenta di molto la pendenza10.

4.2 – Principio di funzionamento

Per descrivere un codice useremo i seguenti parametri:


• k  i bit d’informazione;
so ovviamente ≥ a quelli d’informazione);
• n  i bit codificati (che in numero sono
• n – k  la ridondanza del codice (che è in virtù di quanto abbiamo detto è chiaramente ≥ 0).
Da k ed n ricaviamo immediatamente la coppia (k, n)) in grado di darci molte mo informazioni sulla
natura dei codici che tratteremo; un codice (3, 5), ad esempio, mappa parole d’informazione di 3
bit su parole codificate di 5 bit. La ridondanza del codice è 2, ed infatti la codifica introduce 2 bit in
più rispetto all’informazione nuda e cruda. Siccome mappiamo parole di k bit in parole di n bit
(con n > k)) risulta evidente che, dovendo essere biunivoca l’associazione:
l’

parola d’informazione  parola di codice


(in spazio k-dimensionale)
dimensionale)  (in spazio n-dimensionale)
dimensionale)

lo spazio k-dimensionale
dimensionale di partenza non conterrà abbastanza elementi per riempire lo spazio n-
dimensionale d’arrivo che sarà anzi tanto più grande del primo quanto maggiore è la ridondanza
(e cioè n rispetto a k).
). E questo, per i nostri scopi, è certamente
certamente un guadagno: in uno spazio

9 Possiamo, ad esempio, pensare ad un codice che mappi un bit d’informazione uk in due bit di codifica bk e bk +1 ,
entrambi uguali a uk . Così facendo, abbiamo soltanto due parole di codice: 00 (se uk era 0) e 11 (se uk era 1). Ricevendo
01 o 10 riconosciamo immediatamente di esserci imbattuti in un errore e ciò è indubbiamente positivo: positi tuttavia
dobbiamo spedire il doppio dei bit (e qui sta la ridondanza); saremo così più efficienti nel rilevare gli errori, ma molto
meno a trasmettere i dati.
Un codice simile a quello appena visto, in grado di rilevare ma anche - e soprattutto - di correggere
co gli errori, è il codice
che mappa un bit d’informazione uk in tre bit di codifica ( bk , bk +1 e bk +2 ), tutti uguali a uk . Come nel caso
precedente abbiamo due parole di codice (che sono 000 e 111), tuttavia questa volta possiamo correggere seguendo un
criterio “a maggioranza”: ricevendo infatti la parola 010, possiamo ragionevolmente asserire che la maggioranza degli
zeri renda più probabile
abile il fatto che la vera parola (quella che è stata trasmessa) fosse 000: è infatti più improbabile
che, in un sol colpo, si siano avuti due errori piuttosto che uno solo. Seguendo lo stesso ragionamento e ricevendo 110
(ma anche 101 o 011), penseremo dunque nque che la parola corretta fosse 111.
10 L’alta pendenza, tuttavia, non è sempre un vantaggio: esistono infatti alcuni codici, all’apparenza perfetti e aventi

una pendenza spaventosa, che sono particolarmente deboli quando la qualità del servizio è molto instabile in termini
di SNR. L’elevata pendenza della curva degli errori, infatti, può farci rapidamente percorrere quest’ultima sia verso
un basso tasso d’errore, sia in senso opposto. Ciò significa che una piccola variazione dell’SNR ci può far andare
completamente
mpletamente fuori servizio. Risulta quindi chiaro come la scelta del codice dipenda radicalmente dalla relativa
applicazione pratica.
“piccolo”, ritagliato stretto stretto sul numero delle nostre parole, è facile che un errore ci porti da
una parola valida ad un’altra parola valida (che non verrà quindi interpretata
interpr come una parola
sbagliata); in uno spazio molto
olto più grande, in cui le parole valide sono più “rarefatte”, è invece
più improbabile che il risultato dell’aggiunta dell’errore sia un'altra parola valida e che, quindi,
l’errore non venga rilevato.

La ridondanza ha un’altra conseguenza importante, nella nella trasmissione dei codici:


codici quella di
introdurre una correlazione fra i bit. Prendiamo ad esempio il codice di parità (2, 3):
11

uk uk +1 bn bn +1 bn+2 = bn +1 ⊕ bn
0 0 0 0 0
0 1 0 1 1
1 0 1 0 1
1 1 1 1 0
In tabella vediamo la corrispondenza biunivoca fra i (2) bit d’informazione e i (3) bit di codifica,
che contengono al loro interno i bit d’informazione più il bit di parità, calcolato facendo la somma
modulo due dei bit u.. Si noti che siamo passati da uno spazio bidimensionale contenente solo
quattro parole ad uno spazio tridimensionale che ne contiene otto (quattro delle quali sono
valide).

Fra i codici si distinguono:


• quelli a blocco,, in base ai quali vengono mappate k-ple di bit in n-ple ple di bit senza che vi sia
consultazione delle parole precedenti e successive. I codici a blocco sono, per costruzione,
senza memoria;
• quelli convoluzionali,, che tengono conto di quello che avviene sia all’interno delle n-ple sia
fra le n-ple
ple stesse. I codici convoluzionali sono, per costruzione, con memoria.
memoria

Consideriamo ora il caso di trasmissione in figura.


Ricordiamo che:
• uk sono i bit d’informazione che vengono trasmessi;
• bi sono i bit codificati che vengono trasmessi;
• bˆi sono i bit codificati secondo l’interpretazione del
ricevitore;
• uˆ k sono i bit d’informazione decodificati dal
ricevitore.
Se, oltre alle quantità appena descritte, definiamo;
• i bit di errore ei , che sono pari ad 1 se l’errore è presente per il bit di posizione i;
• i bit ri , che sono i bit ricevuti nell’esatta forma in cui arrivano al destinatario12.

Si ha quindi:
k bit d’informazione n bit codificati
u1, u2, u3, ………….., uk b1, b2, b3, …………………….., bn

11 È nella correlazione che sta il vero potere della codifica; per esemplificare questo concetto, potremmo tirare in ballo
il linguaggio umano: all’interno di qualsiasi parola, ad es. “acqua”,
“ ”, esiste una certa correlazione fra i simboli, cioè le
lettere dell’alfabeto, tale per cui se leggiamo “acqa”
“ ” riusciamo a rilevare l’errore e a correggerlo interpretando la parola
ricevuta nel modo corretto.
12 Senza che vi sia stata alcuna correzione o alcuna interpretazione.
parola di codice parola d’errore (error
( pattern) parola ricevuta
b1, b2, b3, ………….., bn ⊕ e1, e2, e3, ………….., en r1, r2, r3, ………….., rn

Siccome tutte le somme vengono fatte modulo 2,2 si ha che:


bi + ei = ri
 = 0

bi + ei + ei = ri + ei
bi = ri + ei
Quindi sarebbe utilissimo conoscere il pattern d’errore13 per poter riottenere la corretta parola di
codice a partire dalla parola ricevuta.

4.3 – Codice sistematico e rappresentazione matriciale

Un codice sistematico è un particolare tipo di codice a blocco che ha in chiaro la parola


d’informazione al suo interno14.
La sua struttura è la seguente:
• parola d’informazione u1, u2, u3, ………….., uk

• parola di codice b1, b2, b3, ………….., bn = u1, u2, u3, …….., uk, bk+1, ………., bn

Il codice sistematico è anche un codice lineare, in quanto:


• la parola di tutti
utti zeri è ancora una parola di codice;
• è caratterizzato da un campo algebrico chiuso rispetto all’operazione di somma modulo
due.
Inoltre, un codice sistematico può essere illustrato:
• con un’opportuna tabella (rappresentazione
rappresentazione tabellare);
tabellare
• con alcune matrici (rappresentazione
rappresentazione matriciale)
matriciale
• con dei registri (rappresentazione register v. più avanti).
rappresentazione tramite shift register,

Esamineremo ora più da vicino le prerogative della rappresentazione matriciale. Definiamo alcuni
elementi importanti:
• il vettore u o vettore d’informazione
ormazione (contenente i bit d’informazione);
• il vettore b o vettore di codice (contenente i bit codificati);
• la matrice G o matrice generatrice
del codice,, che ha la seguente
struttura: è (k x n) ed è formata da
una prima parte (colonne da 1 a k)
che è a tutti gli effetti una matrice
identità (k x k),
), e da una seconda
parte (colonne da k+11 ad n), che
viene chiamata matrice parità15, che
dipende dal codice scelto.

13 E, in definitiva, sapere quali bit sono sbagliati e in quali posizioni si trovano.


14 Un codice a parità è chiaramente sistematico.
Le caratteristiche della matrice G appena descritta ci permettono di codificare una parola di codice
grazie ad una semplice moltiplicazione fra matrici:
b (1×n ) = u (1× k ) ⋅ G ( k×n )
Ad esempio, in un codice (4, 7) avente questa matrice generatrice G…
1 0 0 0 P11 P12 P13   
0 1 0 0 P   
P P  I ( k ×k ) P( k×( n −k ) ) 
G= 21 22 23 =
0 0 1 0 P31 P32 P33  matrice identità matrice parità 
  
0 0 0 1 P41 P42 P43   
... la parola d’informazione [ 1 0 1 0 ] viene così codificata:
b (1×n ) = u (1× k ) ⋅ G ( k×n )
1 0 0 0 P11 P12 P13 
 
0 1 0 0 P21 P22 P23 
1 0 1 0  ⋅  = 1 0 1 0 ( P11 + P31 ) ( P12 + P32 ) ( P12 + P32 )
  0 0 1 0 P31 P32 P33    
uk   bk
0 0 0 1 P41 P42 P43 

Gk

Questo è invece il risultato per la parola d’informazione [ 1 1 1 1 ]:


1 0 0 0 P11 P12 P13 
 
 0 1 0 0 P21 P22 P23   4 4 4

1 1 1 1 ⋅ = 1 0 1 0 ∑ Pi1 ∑ Pi 2 ∑ Pi3 
   0 0 1 0 P31 P32 P33  
uk   
i =1 i =1 i =1

0 0 0 1 P41 P42 P43 
 bk

Gk

Deduciamo quindi che il caso generale per il codice (4,7) è:


1 0 0 0 P11 P12 P13 
 
 0 1 0 0 P21 P22 P23   4 4 4

u1 u2 u3 u4  ⋅ = 1 0 1 0 ∑ ui Pi1 ∑ ui Pi 2 ∑ ui Pi3 
  0 0 1 0 P31 P32 P33  
uk 
i =1
 
i =1 i =1

0 0 0 1 P41 P42 P43 
 bk

Gk

Dunque, questo è il significato del generico bit di parità Pij :


se è = 1 → il i-esimo bit della parola d'informazione contribuisce

 alla somma modulo due che genera il ( k + j ) − esimo bit di codifica
Pij 
se è = 0 → il i-esimo bit della parola d'informazione NON contribuisce
 alla somma modulo due che genera il ( k + j ) − esimo bit di codifica

Detto questo, diventa facilissimo definire la forma di G per due semplicissimi codici16:
• codice a bit di parità17:
1 0 0 0 1
 
0 1 0 0 1
G=
0 0 1 0 1
 
0 0 0 1 1

15 Com’è presumibile, questo nome deriva direttamente dal codice a parità, tuttavia questa parte della matrice G viene
chiamata “matrice parità” indipendentemente dal codice.
16 In rosso la sottomatrice di parità all’interno di G.

17 Nell’esempio, il codice è (4, 5).


La matrice di parità è costituita
tuita da un’unica colonna,
colonna, fatta di tutti 1 in quanto tutti i bit della
parola d’informazione u vengono sommati modulo due per determinare se è pari il numero
di uni all’interno della parola stessa.
• codice a ripetizione18:
G = 1 1 1 1
Non c’è alcuna combinazione fra i bit delle parole d’informazione19 u: semplicemente, esse
vengono ripetutee tante volte quanto è lunga la matrice (degenere)20 G meno uno, ovvero n-
1 volte, che è anche la ridondanza del codice a ripetizione. Per questo, tutti i bit della
matrice (vettore) di parità sono pari ad 1.

4.4 – Rappresentazione del codice mediante shift-register

Le considerazioni che abbiamo appena fatto sulla matrice generatrice G di un codice si possono
chiaramente riscontrare nella rappresentazione mediante
medi shift-register (registri a scorrimento). Tale
rappresentazione è molto intuitiva e fa unicamente uso di registri21 e di sommatori,
sommatori che hanno la
funzione di combinare alcuni bit u del vettore d’informazione u.

Nell’esempio che vediamo in figura, i bit 1 e 7 della parola di codice associata al vettore b vengono
creati grazie alle seguenti combinazioni lineari:
b1 = u1 + u2 + u5 b7 = u3 + u6 + u7
Per un codice sistematico, la rappresentazione mediante shift-register è leggermente semplificata:
sempl
tutti i k bit d’informazione vengono passati al registro della parola di codice (registri da 1 a k)
senza che avvenga alcuna combinazione. I sommatori, infatti, saranno necessari soltanto dal k+1-
esimo bit del vettore b in poi22.

Alcuni esempi notevoli:


• codice a ripetizione (1,3): l’unico bit d’informazione che abbiamo
viene trasferito quale e quale a tutti i registri del vettore codificato.

18 Nell’esempio, il codice è (1, 4).


19 Nell’esempio, visto che k = 1, le parole di informazione sono semplicemente i bit 1 e 0.
20 Che è in realtà una matrice degenere (1 x n) e, in definitiva, un vettore.

21 Un registro per la parola d’informazione ed uno, più lungo, per la parola di


d codice.
22 Per tali bit di codifica bk +1 , bk + 2 , ..., bn i termini che dovremo passare ai singoli sommatori saranno quelli per i quali
si ha un 1 nella matrice di parità.
• codice di parità (2,3): è un codice sistematico, quindi i bit u1 e u2
diventano automaticamente i bit b1 e b2 ; l’ultimo bit di codifica, b3 ,
è dato dalla somma modulo due di u1 e u2 .

4.5 – Campi di Galois

Abbiamo visto come si fa a codificare le parole di codice attraverso le operazioni matriciali; non
abbiamo però parlato di come un sistema possa riconoscere gli errori e di ciò ci occuperemo a
partire da questo paragrafo.

Anzitutto, nellelle nostre operazioni con i numeri binari, noi ci muoviamo sempre all’interno di un
campo di Galois di ordine 2 (23). La cardinalità di un campo di Galois di ordine m dipende dal
numero n di elementi utilizzati, ed è precisamente pari ad mn ; dunque, un campo di Galois di
ordine 2 con n elementi ha cardinalità 2n (24).
Il fatto che stiamo parlando di campo,
campo, invece, ci garantisce che vi è chiusura rispetto all’operazione
all’operazio
di somma25 e di moltiplicazione26. Inoltre, esiste siste sicuramente l’elemento neutro (che è l’1) e
l’elemento nullo (lo 0).

Essendo G,, ovvero la matrice generatrice del codice, una matrice di rango k (27), essa sarà anche
generatrice di un campo di Galois di ordine 2 (con 2k elementi):
nti): la somma di due parole di codice,
di conseguenza, è ancora una parola di codice (del quale fa parte anche la parola di tutti zeri);
infatti:
b1 + b2 = u1G + u2G = ( u1 + u2 ) G = ui G  ancora una parola di codice

È chiaro che n, il numero di elementi del campo di Galois, è anche la dimensionalità dello spazio
vettoriale generato dal codice. Prendiamo, ad esempio, un campo di Galois di ordine 2, con
cardinalità 8 (n = 3);; riferiamoci, inoltre, ad un codice a ripetizione (1,3). Lo spazio vettoriale
monodimensionale del el vettore d’informazione è il seguente:

Lo spazio (questa volta tridimensionale) della codifica è invece così rappresentabile:

23 Si scrive GF(2), ovvero Galois Field (2).


24 Infatti, se abbiamo parole binarie di n bit – cioè di n elementi – possiamo scrivere 2n parole diverse.
25 Precisamente la somma modulo 2 (simbolo ⊕ ).

26 Che sarebbe l’AND logico.

27 Le righe sono senza dubbio linearmente indipendenti per via della presenza della matrice
matrice di parità.
Notiamo che i vertici del cubo corrispondenti a parole valide [e cioè (1,1,1) e (0,0,0)] sono già quelli
più geometricamente lontani possibili.
E cosa succede se, al posto di trovarci in una parola di codice esatta, commettiamo un errore? Ciò
significherebbe che il pattern d’errore (il vettore e) ha un bit a 1: a quel punto potremmo trovarci
in (0,0,1), (0,1,0), (1,0,0) che, guarda
uarda caso, sono i tre vertici adiacenti a (0,0,0).
0,0,1

0,1,0

1,0,0

Come sappiamo, il codice a ripetizione (1,3) è in grado di correggere un errore in base al criterio “a
maggioranza”: dunque, trovandoci in uno dei tre vertici adiacenti sopraccitati, saremo
perfettamente
tamente in grado di tornare nel vertice esatto, e cioè l’origine (0,0,0), e di correggere l’errore.
Purtroppo, è impossibile correggere 2 o 3 bit errati; infatti:
• con due bit errati il sistema deciderà, sì, a
maggioranza, ma per la parola sbagliata!
Ad es. trasmetto (0,0,0)  pattern d’errore (0,1,1)
 ricevo (0,1,1)  decido per (1,1,1).
• con tre bit errati (situazione tanto indesiderabile
quanto – si spera! – improbabile) riceviamo
direttamente la parola sbagliata.
sbagliata

Nel caso generale, dunque, un codice a ripetizione è un grado di correggere un numero d’errori
pari a28
d −1
t =  min 
 2 
Mentre il numero di errori rilevabili è uguale a
dmin − 1

Nella relazioni appena scritte dmin è la minima distanza di Hamming fra le parole del codice. La
distanza di Hamming tra due parole bi e b j , e cioè
d ( bi , b j )
il numero di posizioni in cui il vettore bi differisce da b j (29).

Definiamo poi il peso di una parola bn come il numero di uni all’interno della parola stessa30:
w ( bn ) = # di "1" all'interno della parola bn

Esiste,, per i codici lineari (v. paragrafo 6), una relazione fra la distanza e il peso: si ha
h che

28 Il simbolo   sta per limite inferiore intero; es. 2,34  = 2 .


29 Ad esempio, la distanza di Hamming fra le parole di codice (1011) e (1111) è pari ad 1; differiscono infatti per un

solo bit (il secondo).


30 Esempio: il peso della parola (1010001) è pari a 3.
d ( bi , b j ) = w ( bi ⊕ b j )
La somma modulo 2, ha l’effetto di far diventare pari a zero i bit uguali nelle due parole e pari ad
uno quelli diversi31. Calcolando il peso di questa somma non facciamo altro che contare i bit a 1 e,
cioè, i bit differenti fra le parole bi e b j .

La distanza minima di un codice è la minima distanza fra due qualsiasi parole del codice stesso:
dmin = min d ( bi , b j )
i,j

Determinare la distanza minima è importante in quanto tale parametro pilota fortemente le


prestazioni del codice: siccome vogliamo che le parole di codice siano il più possibile distanti fra
di loro, il caso di distanza minima sarà logicamente il caso meno favorevole (e quindi, in base alla
regola del caso peggiore, sarà anche quello su cui basarsi per progettare un sistema robusto).

4.6 – Codici lineari

Quello dei codici lineari è un sottoinsieme importante dei codici a correzione/rivelazione d’errore.
Ecco alcune caratteristiche dei codici in questione:
• la somma di due parole di codice è ancora una parola di codice;
• la parola di tutti zeri32 è parola di codice;
• la distanza fra due parole di codice è uguale al peso della parola ottenuta sommando
modulo due tali parole di codice:
d ( bi , b j ) = w (bi ⊕ b j )
  
calcolo della calcolo del peso della
distanza somma modulo due

Questo implica, peraltro, che per un codice a blocco lineare la distribuzione delle distanze
coincida con la distribuzione dei pesi;
• se escludiamo la parola di tutti zeri, la distanza minima coincide con il peso minimo.

4.7 - Rilevazione degli errori: la matrice di controllo parità H

La matrice di controllo parità H, matrice generatrice del sottospazio ortogonale33 al sottospazio


generato da G, è una matrice di n-k righe e n colonne34.
Essa ha questa struttura:
 
 
 P(Tn −k )×k I ( n −k )×( n− k ) 
H( n − k)×n =  
matrice di matrice identità
 
 parità trasposta 

31 Esempio: Parola 1  101110110


Parola 2  100011010 I bit in rosso sono quelli diversi fra le due parole.
Somma modulo 2  001101100
32 È l’elemento nullo.

33 L’ortogonalità impone che si abbia:

G k ×n ⋅ H kT× n = 0 k × ( n − k )
34Il ché significa che n è la dimensionalità e 2n −k è la cardinalità dello spazio generato dalla matrice H, il quale
contiene tutti gli elementi che non sono presenti nello spazio generato da G (conseguenza dell’ortogonalità fra tali due
spazi). Si ricordi infatti che lo spazio generato da G ha dimensionalità n e cardinalità 2k .
Come sappiamo, una parola la di codice può essere ottenuta in questo modo::
b = u⋅G
Se ora moltiplichiamo da entrambe le parti per HT , l’ortogonalità fra G e HT ci porta tutto a zero:
b ⋅ HT = u ⋅ G ⋅ HT = 01×(n − k)

Chiamiamo sindrome il vettore:


S1×( n −k ) = r ⋅ HT
La sindrome è fondamentale ai fini della rilevazione dell’errore; infatti:
• sindrome nulla  nessun errore rilevato
• sindrome non nulla  errori rilevati

Prendiamo, ad esempio, un codice (1,3) avente tali specifiche


Matrice generatrice
genera Matrice parità
G = 1 1 1 P = 1 1
Costruiamo in quattro e quattr’otto la matrice di controllo parità:
1 1 0
H= 
 1 0 1 
Matrice di parità trasposta Matrice identità
Verifichiamo che H e G sono ortogonali:
ortog
1 1 
 
G ⋅ H = 1 1 1  ⋅ 1 0  =  0 0 
T
 
k×n  0 1  k×( n − k )

n ×(n − k )

Se ora effettuiamo le possibili combinazioni lineari delle righe della matrice H (35):
w w⋅H
0 0 0 0 0
0 1 1 0 1
1 0 1 1 0
1 1 0 1 1
Coefficienti della combinazione lineare
Risultati della combinazione
binazione lineare

Abbiamo ottenuto un codice ortogonale a G: infatti (a parte la


parola di tutti zeri, ma quella ci deve essere per forza perché il
codice sia lineare),, tutte le triplette generate da w ⋅ H non fanno
parte del codice generato dalla matrice
G = 1 1 1
Si veda, a tal proposito, la figura a sinistra; con i pallini sono
segnati i punti appartenenti al codice di G, con i quadrati sono
invece evidenziati i punti dello spazio di H: in tali punti la
sindrome sarà non nulla.

Potevamo anche permutare righe e colonne della matrice H a piacere, tanto i punti dello spazio generato
35 gene da tale
matrice non sarebbero cambiati. Si provi, per credere, a fare la stessa cosa con la matrice permutata:
1 0 1
Hperm =  
0 1 1
Dobbiamo ora capire come fare a correggere gli errori a partire da questa matrice H; vediamo
quindi, in dettaglio, quale risultato porta la moltiplicazione b ⋅ HT nel caso generale di codice a
ripetizione (1,3):
 p1 p2 
b ⋅ H = b1 b2 b3  ⋅  1 0  = b1 p1 + b2 b1 p2 + b3 
T

 0 1 
Siccome abbiamo preso in considerazione un codice a ripetizione, si ha che
b1 = u1 b2 = u1 b3 = u1
Inoltre, nell’esempio di prima, entrambi i bit di parità sono ad 1 e ciò significa che dobbiamo ogni
volta prendere b1 , sommarlo e guardare il risultato. Il controllo parità, infatti, ha l’effetto sommare
fra loro i bit che entrano in gioco in virtù della struttura della matrice di parità agli altri termini
della trasmissione (i bit d’informazione), in modo da verificare che ciò che ho ottenuto sia
effettivamente quello che ho trasmesso.
Dunque, incarnando esplicitamente col il pattern d’errore e la possibilità che vi sia una
discrepanza rispetto all’esatta parola di codice b , il risultato della moltiplicazione soprascritta è:
 d'errore 
pattern parola
ricevuta
   
 + e  ⋅ H = r ⋅ H  sindrome!
T T
 b
 parola di 
 codice 
Se tutto è andato bene il risultato dev’essere per forza 0(36) perché si ha:
e =0  b ⋅ HT = u1 + u1 u1 + u1  = 0 0 
Se invece uno dei bit fra b1 , b2 e b3 è diverso da u1 (e ciò significa che il pattern d’errore e non è
nullo), la sindrome avrà almeno uno dei bit a 1: noi, dunque, interpreteremo questo segno come la
presenza di un errore all’interno della parola di codice ricevuta.
Possiamo ricavare questo importante risultato anche nel seguente modo:
= 0 se è andato
=0
 tutto bene

S = r ⋅ H = (b + e) ⋅ H = b ⋅ H + e ⋅ H = b ⋅ G
T T T T
 +
⋅ H T
e ⋅ HT
=0
ortogonalità

4.8 – Rivelazione degli errori per un codice sistematico

Per un codice sistematico si ha:


b1 bk bk +1 bn
k bit d’informazione n-k bit di parità
Ovvero:
bi = ui per 1<i <k
k
bi = ∑ Pj(i −k )u j per i>k
j =1

La matrice di parità, lo ricordiamo, è fatta così:


 p1,1 p1,2 … … p1,n −k 
 
 p2,1 ⋮ ⋮ ⋮ p2,n −k 
P= (k righe e n-k colonne)
 ⋮ ⋮ ⋮ ⋮ ⋮ 
 
 pk,1 pk,2 pk,3 … pk,n− k 

36 Perché siamo in un GF(2) e sia 0+0 che 1+1 danno come risultato 0.
Quindi, per i = k + 1, abbiamo il seguente bit codificato:
k
bk +1 = ∑ Pj ,1u j (37)
j =1

Costruiamoci ora la matrice di controllo parità (e la trasposta, che ci serve per calcolare la
sindrome):
   
   P 
 P T
I( n −k )   
H=  H T
=  
   
 In − k 
   
E ora passiamo alla sindrome:
 p11 p12 ⋯ p1( n −k ) 
 
 ⋮ ⋮ ⋮ ⋮ 
p ⋯ ⋯ pk( n −k ) 
S = r ⋅ H = r1 r2 ⋯ rn  ⋅
T
 k1 
1 ⋯ ⋯ 0 
 
 ⋮ ⋮ 
 0 ⋯ ⋯ 1 

Dunque, ad esempio, questo è il primo bit della sindrome:
bit di parità
combinazione lineare basata selezionato dalla
sulla matrice parità
 matrice identità
 k
s1 = r1 p11 + r2 p21 + ... + rk pk1 + rk +1 = ∑ p j1rj + rk +1
j =1

Possiamo ripetere lo stesso ragionamento anche per il secondo bit…


k
s2 = r1 p12 + r2 p22 + ... + rk pk 2 + rk +2 = ∑ p j 2rj + rk +2
j =1

… fino ad arrivare all’(n-k)-simo bit del vettore s:


k
sn − k = r1 p1( n −k ) + r2 p2(n − k ) + ... + rk pk( n − k) + rn = ∑ p j( n −k )rj + rn
j =1

Si noti che se non vi è alcun errore


ri = bi per qualsiasi i
l’espressione del vettore ricevuto r e le relazioni scritte sopra diventano:
ui 1≤i≤k
k
ri =  (codice sistematico)
 ∑ p j ( )
i − k
u j k + 1 ≤ i ≤ n
 j =1
k k k k
s1 = ∑ p j1u j + rk +1 = ∑ p j1u j + bk +1 = ∑ p j1u j + ∑ p j1u j = 0
j =1 j =1 j =1 j =1

37 Ciò significa che stiamo scorrendo sulla prima colonna della matrice di parità (in rosso):
 p1,1 p1,2 … … p1,n−k 
 
p2,1 ⋮ ⋮ ⋮ p2,n −k 
P=
 ⋮ ⋮ ⋮ ⋮ ⋮ 
 
 pk ,1 pk ,2 pk ,3 … pk ,n −k 
Tale colonna ci dice quali bit della parola di informazione vanno sommati per generare il primo bit di parità, ed è
k
proprio questo il senso della formula bk +1 = ∑ Pj ,1u j .
j =1
Le quantità sono uguali perché, siccome il codice è sistematico, senza errori avremo ri = bi = ui per
i che va da 1 a k. Per gli altri valori di i, il decoder semplicemente “ricopierà” i valori di parità che
gli sono giunti negli ultimi n-k bit del vettore r (a questo serve la matrice identità di rango n-k,
dove n-k – guarda caso! – è la ridondanza ovvero il numero di bit di parità che abbiamo introdotto
nella nostra codifica). Le quantità che stiamo sommando (NOTA: sempre se è ancora valida
l’ipotesi che siamo in assenza di errori!) sono le stesse, solo che la prima è un’informazione che
ricalcola il ricevitore utilizzando i bit codificati (che sono anche i bit d’informazione originari dato
che il codice è sistematico), mentre l’altra è un’informazione che ci viene recapitata senza che si
effettui alcun calcolo di parità, visto che ci ha già pensato il trasmettitore.
In altre parole, riferendoci all’esempio del secondo bit della sindrome:
k k
qualcosa di costruito   qualcosa che ci 
s2 = ∑ p u
j2 j + ∑ p j 2u j =  + 
j =1
   j =1
   localmente
   viene trasmesso

parte generata (lato RX) dalla matrice bit di parità già calcolati (lato TX) se le due quantità collimano i bit da sommare saranno uguali,
di parità contenuta in HT , ricostruita che ci vengono offerti direttamente dalla dunque non vi saranno stati errori e la sindrome sarà zero
localmente dal decoder parola di codice trasmessa grazie ad I

Stessa cosa per l’(n-k)-esimo bit della sindrome:


k k
sn− k = ∑ p j( n −k )u j + ∑ p j( n −k )u j
j =1 j =1

Una possibile insidia per il buon funzionamento di questo tipo di codice è rappresentata dal
subire due errori di trasmissione38: in tal caso, siccome tutte le somme sono modulo 2, potremmo
pensare di non notare alcuna differenza rispetto al caso senza errori in quanto, in virtù dei due bit
errati, la combinazione lineare che fa il decoder per ricalcolare la parità si “auto-compenserà”
riportando un risultato falsamente corretto (e coincidente con i bit di parità delle ultime n-k righe
della matrice HT ). In realtà ciò accade soltanto se la matrice di parità ha tutti uni (o zeri, v. nota
41) in corrispondenza dei due bit errati di cui sopra39: nel caso di codice a parità40 questo accade
sicuramente, visto che la matrice P è piena di 1 (e ne avrà anche in corrispondenza di due qualsiasi
bit errati). Per questo il codice di parità rileva (e non corregge) un numero dispari errori e non fa

38Tale considerazione può essere estesa, in realtà, a un numero pari di errori di trasmissione, come vedremo.
39Esempio con codice (3,5), quindi k = 3, n = 5, ridondanza = 2:
parola codificata trasmessa (giusta)  11110 (in rosso le differenze
parola di codice ricevuta (errata)  10010 dovute agli errori)
Non ci accorgiamo dell’errore se la matrice di controllo parità (già trasposta) è fatta così:
1 0 
1 1 
 
HT = 1 1 
 
1 0 
0 1 
Si noti che abbiamo tutti uni nelle righe corrispondenti alle posizioni (2° e 3°) degli errori! Nel confronto fra la parità
ricalcolata dal decoder (prime tre righe) con il bit di parità trasmesso (ultime due righe) sembrerà che non vi siano
discrepanze. Procediamo infatti al calcolo delle sindromi:
1 0  1 0 
1 1  1 1 
   
rgiusto ⋅ H = 1 1 1 1 0  1 1  = 0 0 
T
rsbagliato ⋅ H = 1 0 0 1 0  1 1  = 0 0 
T

   
1 0  1 0 
0 1  0 1 
Corretta “non rivelazione” Errata “non rivelazione”: l’errore c’è!!
40Ricordiamo che il motivo per il quale la matrice di parità porta questo nome non sta nel fatto che implementi il codice
di parità; chiaramente è possibile ottenere il codice a parità riempiendo di 1 la matrice di parità, tuttavia essa porta
questa denominazione qualsiasi sia il codice implementato. È solo un passaggio di nomi fra uno dei codici “storici”
della teoria dell’informazione e la matrice P.
una piega se questi sono invece pari. Avere una matrice di parità che abbia righe “abbastanza
eterogenee” per quanto riguarda gli uni e gli zeri41 è quindi garanzia di un codice sistematico più
potente: se una colonna della HT non ce la farà a rilevare l’errore che un’altra ha già mancato,
essendo tali due colonne molto simili per righe, allora una terza colonna (con bit un po’ diversi)
verrà in soccorso delle prime due e darà come risultato una sindrome diversa da zero. A quel
punto l’errore sarà rilevato, presumibilmente richiederemo la trasmissione dei dati e avremo
messo in salvo la correttezza dell’informazione ricevuta.

4.9 – Standard Array (SA)

Lo standard array non è un array, come potrebbe erroneamente suggerire il nome, bensì una
matrice particolare di 2n −k righe e 2k + 1 colonne che elenca tutte le possibili 2n parole
appartenenti allo spazio n-dimensionale in modo da identificare:
• le 2k parole di codice;
• le altre parole (non di codice) che si troverebbero sommando alle prole valide un pattern
d’errore. È importante che il pattern d’errore sia diverso da qualunque valida parola di
codice: per un codice lineare, infatti, sommare a una parola di codice un’altra parola di
codice significa trovare una terza parola corretta.
Ecco la struttura di uno standard array per un codice generico (k, n):

Sindrome s0 Tutte le parole di codice b1 b2 … b2k


Sindrome La prima riga più un certo b1 + e1 b2 + e1 … b2k + e1
s1 = e1 ⋅ HT pattern d’errore ( e1 ).
2n-k righe

Sindrome La prima riga più un altro b1 + e2 b2 + e2 … b2k + e2


s2 = e2 ⋅ HT pattern d’errore ( e2 ).
… … … … … …
Sindrome La prima riga più l’ultimo b1 + e2n − k −1 b2 + e2n − k −1 … b2k + e2n − k −1
s2n − k −1 = e2n − k −1 ⋅ HT pattern d’errore.

Etichetta Descrizione 2k colonne

41Chiaramente, negli esempi precedenti abbiamo accusato gli uni di essere i responsabili della mancata rilevazione, gli
zeri sono equi-colpevoli. Ripetiamo infatti il nostro esempietto: codice (3,5), quindi k = 3, n = 5, ridondanza = 2:
parola codificata trasmessa (giusta)  10110 (in rosso le differenze
parola di codice ricevuta (errata)  11010 dovute agli errori)
Non ci accorgiamo dell’errore se la matrice di controllo parità (già trasposta) è fatta così:
1 0 
0 0 
 
H = 0 0 
T

 
1 0 
0 1 
Gli zeri, come gli uni la scorsa volta, stanno nelle posizioni pericolose (2° e 3°)! Nel confronto fra la parità ricalcolata
dal decoder (prime tre righe) con il bit di parità trasmesso (ultime due righe) sembrerà che non vi siano discrepanze.
Procediamo infatti al calcolo delle sindromi:
1 0  1 0 
0 0  0 0 
   
rgiusto ⋅ HT = 1 0 1 1 0  0 0  = 0 0  rsbagliato ⋅ HT = 1 1 0 1 0  0 0  = 0 0 
   
1 0  1 0 
0 1  0 1 
Corretta “non rivelazione” Errata “non rivelazione”: l’errore c’è!!
Il numero totale di elementi presenti nella tabella è pari a 2k ⋅ 2n −k = 2n (che sarebbero tutti gli
elementi presenti nello spazio n-dimensionale della codifica).
La prima colonna (che non è una parte vera e propria della matrice 2k ⋅ 2n − k ) contiene le etichette
corrispondenti alle varie righe, utili per individuare un preciso pattern d’errore. Vediamo meglio
cosa significa con un esempio di codice di Hamming (1,3):
1 1 
1 1 0 
G = 1 1 1 H = 1 0 
T
H= 

1 0 1 
0 1 
Dunque tale codice ci porta da uno spazio (quello delle parole d’informazione) bidimensionale –
in quanto formato dai soli bit 1 e 0 – ad uno tridimensionale formato da 23 = 8 parole, delle quali
soltanto 2 su 8 sono valide (quella di tutti uni e quella di tutti zeri):
u b1 b2 b3
0 0 0 0
1 1 1 1
Lo standard array avrà perciò:
• 2n − k = 23−1 = 22 = 4 righe;
• 2k colonne (+1 per la sindrome).
E infatti:
Sindrome 00 ( s0 ) Tutte le parole di codice 000 111
Sindrome 01 ( s1 = e1 ⋅ HT ) La prima riga più il pattern e1 = 001 001 110
4 righe

Sindrome 10 ( s2 = e2 ⋅ HT ) La prima riga più il pattern e2 = 010 010 101


Sindrome 11 ( s3 = e3 ⋅ HT ) La prima riga più il pattern e3 = 100 100 011
Etichetta Descrizione 2 colonne
Tale codice corregge un errore e ne rivela due, dunque tale matrice è univoca. Se infatti ci
troviamo nella prima colonna, rileviamo l’errore e possiamo ragionevolmente pensare di poterlo
correggere portandoci nella parola esatta di codice più somigliante (000); stessa cosa possiamo fare
nella seconda colonna, segnalando l’errore e riconducendoci alla parola 111.
Si può provare a verificare la corrispondenza fra le parole di codice dello standard array e le
relative sindromi facendo una verifica; prendiamo infatti la seconda riga e moltiplichiamo le
parole (errate) di codice (cioè 001  r1 e 110  r2 ) per la matrice di controllo parità:
1 1 
s1 = r1 ⋅ H = 0 0 1 ⋅ 1 0  = 0 1
T

0 1 
(stessa sindrome!)
1 1 
s2 = r2 ⋅ H = 1 1 0  ⋅ 1 0  = 0 1
T

0 1 
Con un codice (1,3) di questo tipo la costruzione dello standard array è abbastanza semplice e
immediata: una matrice 4x3 è facilissima da elaborare e richiede davvero poco spazio in memoria.
Se però disponiamo di codici molto lunghi, la matrice rischia di diventare gigantesca, visto che il
numero delle righe e delle colonne cresce esponenzialmente con l’aumentare di k e n.
Ma dobbiamo davvero tenere l’intera tabella in memoria? In realtà no, è sufficiente tenere le prime
due colonne; vediamo come:
1. ricevo il vettore r;
2. calcolo la sindrome moltiplicando il vettore r per la matrice di controllo parità HT ;
3. a questo punto, leggendo l’etichetta, so qual è la riga corrispondente a tale sindrome;
4. vado alla riga in questione e guardo la prima colonna (cioè la seconda dopo la sindrome),
nella quale è presente il corrispondente pattern d’errore;
5. sommo modulo 2 il pattern d’errore alla parola ricevuta e ottengo la parola corretta.

ESEMPIO:
1. ricevo r = 101;
1 1 
 
2. calcolo la sindrome: s = r ⋅ H = 1 0 1 ⋅ 1 0  = 1 0 
T

0 1 
3. la riga da andare a consultare è quella avente etichetta 10;
4. tale riga riporta (v. seconda colonna) il pattern d’errore e = 010;
5. sommo r + e = 101 + 010 = 111 (parola corretta!).

ALTRO ESEMPIO DI COSTRUZIONE DELLO STANDARD ARRAY


Codice di parità (2,3)(42) k = 2, n = 3, ridondanza = 1

1
1 0 1
G=  H = 1 1 1 (43) HT = 1
0 1 1
1

Lo standard array avrà:


• 2n −k = 22−1 = 2 righe;
• 2k + 1 = 22 + 1 = 5 colonne (compresa la colonna delle sindromi).
E avrà questa forma:
Sindrome 0 ( s0 ) Tutte le parole (quelle 000 011 101 110
valide) di codice
2 righe

Sindrome 1 ( s1 ) La prima riga più il 001 010 100 111


pattern 001
Etichetta* Descrizione 4 colonne (+1 per sindrome*)

In questo caso, come si vede, non sono presenti tutti i pattern d’errore, ma soltanto il pattern 001.
Questo standard array, dunque, è inutile ai fini della correzione44,45 ma è comunque in grado di
riconoscere un errore.

42 Trattasi di un codice (detto a massima distanza, maximum length) duale al codice di Hamming (1,3), come viene
illustrato nella nota 44.
43 Si noti la dualità col caso precedente: questa volta le matrici G ed H sono invertite rispetto al codice di Hamming

(1,3): la matrice di controllo parità scritta in quest’ultimo esempio altro non è che la matrice generatrice del codice
visto precedentemente.
44 Se riceviamo, ad esempio, 010, non possiamo capire se tale parola di codice (sbagliata, perché non sta nella prima

riga dello standard array, dove invece si trovano le tutte e sole parole codificate esatte) viene da:
• 000 + pattern d’errore 010,
• 011 + pattern d’errore 001,
• 110 + pattern d’errore 100.
45 Potevamo accorgerci di questo utilizzando direttamente la formula per il calcolo del numero di errori correggibili da

un codice lineare:
 2 −1 
t= =0
 2 
4.10 – Codici ciclici

I codici ciclici sono un sottoinsieme dei codici lineari (i quali, a loro volta, sono
s un sottoinsieme dei
codici a blocco).. In un codice ciclico, una parola codificata appartenente a un codice (k,n)…
(
b1 b2 b3 ... bn
… può essere ricorsivamente “shiftata”…
bn b1 b2 b3 ... bn −1

bn −1 bn b1 b2 ... bn−2 *Parole di codice valide!

bn −2 bn −1 bn b1 ... bn −3
… col risultato che la parola ottenuta è ancora
ancor una parola di codice*.

I codici ciclici si possono scrivere in maniera molto compatta grazie alla descrizione polinomiale:
polinomiale essa
consiste nel rappresentare una parola di codice con un polinomio46 avente forma
b ( x ) = b1 + b2 x1 + b3 x 2 + b4 x 3 + ... + bn x n −1

ESEMPIO: polinomio di grado 6 (47


47)…

parola di codice  b = 1 0 0 1 1 0 1


b ( x ) = 1 ⋅ x 0 + 0 ⋅ x1 + 0 ⋅ x 2 + 1 ⋅ x 3 + 1 ⋅ x 4 + 0 ⋅ x 5 + 1 ⋅ x 6 = 1 + x 3 + x 4 + x 6

“Ruotare” un polinomio, alla pari di come shiftiamo ricorsivamente una qualsiasi parola di codice
di un codice ciclico, è semplice48; vediamo il procedimento sempre riferendoci riferendoci a un codice (n,k):
(
1. prendiamo la rappresentazione polinomiale di grado n-1
b ( x ) = b1 + b2 x1 + b3 x 2 + b4 x 3 + ... + bn x n −1
e moltiplichiamo per x i , dove i è il numero di shift che vogliamo effettuare:
b ( x ) x i = b1x i + b2 x i +1 + b3 x i +2 + b4 x i +3 + ... + bn x i +n −1
2. fatta questa operazione,
erazione, questa è la nostra situazione

46 La variabile x non ha un senso matematico in tutto e per tutto: serve soltanto ai fini della rappresentazione
polinomiale e per effettuare qualche operazione.
47 Si noti che la lunghezza della parola di codice è uguale al grado del corrispettivo polinomio
polino - 1. Nell’esempio una
parola di codice di 7 bit è rappresentata da un polinomio di grado 7 – 1 = 6.
48 E questo è il vero motivo per il quale utilizziamo proprio i polinomi.
Come faccio a far “rientrare” a sinistra i cinque blocchi che abbiamo “buttato fuori”? Posso
riuscirci impostando il modulo n-1, il che vuol dire che dobbiamo dividere il polinomio
b ( x ) x i per x n + 1 ; quel che otteniamo è:
b(x ) xi b1 x i + b2 x i +1 + b3 x i +2 + b4 x i +3 + ... + bn x i + n−1 z (x )
= = q (x ) + n
xn +1 x +1
n
x +1
In questa relazione:
• q(x) è il quoziente di grado i-1 (49); questo quoziente rappresenta la parte che
precedentemente era “fuoriuscita” dal registro ed ora “rientra” sulla sinistra;
• z ( x ) è il resto della divisione polinomiale, di grado n-1.
3. Si vada ad esaminare il resto: tale polinomio può essere trasformato nella parola di codice
che è il risultato dello shift che volevamo all’inizio.

ESEMPIO: polinomio b ( x ) x i

b5 x 6 + b4 x 5 + b3 x 4 + b2 x 3 + b1 x 2 + .... + .... x5 +1
(
− b5 x 6 + .... + .... + .... + .... +b5 x + .... ) b5 x + b4 quoziente q(x)

b4 x 5 + b3 x 4 + b2 x 3 + b1 x 2 +b5 x + ....
(
− b4 x 5 + .... + .... + .... + .... + b4 )
b3 x 4 + b2 x 3 + b1 x 2 + b5 x + b4

resto z(x)
Se ora riscriviamo il polinomio z(x) come parola di bit otteniamo:
b′ = b4 b5 b1 b2 b3 
Ci accorgiamo immediatamente che tale parola è quella di partenza b …
b = b1 b2 b3 b4 b5 
…shiftata ricorsivamente due volte. Chiaramente, siccome il codice è ciclico, sia b che b′ sono
parole di codice valide.

Esiste una notazione compatta per descrivere le operazioni appena compiute? Possiamo codificare
parole di informazione utilizzando i metodi che ci fornisce la rappresentazione polinomiale? La
risposta a questi quesiti è affermativa e ora vedremo come. Chiamiamo:
• u(x) il polinomio che rappresenta la parola d’informazione;
• b(x) il polinomio che rappresenta la parola di codice;
• g(x) il cosiddetto polinomio generatore: tale polinomio ha caratteristiche tali per cui sussiste
questa relazione50
b(x ) = g (x ) u (x )
  
grado n −1 grado n − k grado k −1

Esso ha la seguente forma : 51

g ( x ) = 1 + g2 x + g3 x 2 + g4 x 3 + ... + x n −k

49 In effetti, il polinomio b( x ) x i è di grado n-1+i: dividendo per un polinomio di grado n otteniamo un quoziente di
grado n–1+i–n = i–1.
50 È interessante notare che questa formula per la codifica è molto affine, come forma, a quella matriciale. Poco più
avanti vedremo altri parallelismi con la notazione a noi già familiare.
51 Nota: g parte dall’indice 2 perché tale coefficiente non compare né nel termine di grado 0, né in quello di grado n-k.
È importante sottolineare che il polinomio generatore g(x) ha sempre grado n-k e termine
noto sempre unitario52. Un polinomio generatore si ottiene nel seguente modo53:
grado k

g ( x ) h ( x ) = x
n
+1
 grado n
grado n − k

Nell’equazione soprastante, h(x) (polinomio di controllo parità) è un qualsiasi polinomio di


grado k.
È interessante notare che la g(x) e la h(x) hanno la stessa identica funzione che avevano
rispettivamente la matrice G ed H; infatti:
• come la matrice G generava un codice (k, n), anche il polinomio g(x) produce un codice
dello stesso tipo;
• analogamente, la matrice h(x) genera un codice (n-k, n), avente uno spazio identico a quello
che avrebbe generato la matrice H.

Fin’ora nulla mi garantisce la sistematicità del codice, e invece sarebbe molto desiderabile la
possibilità di avere il seguente risultato:
parità
☺  
u ( x ) g ( x ) = u1 + u2 x + u3 x + ... + uk x + bk +1x + ... + bn x n −1
2 k −1 k
 
parte sistematica (uguale identica al
polinomio u ( x ) della parola d'informazione)

Ebbene, possiamo farcela; illustriamo la procedura per ottenere un polinomio b(x) scritto in forma
sistematica, cioè con in chiaro le informazioni riguardanti la parola d’informazione:
1. shiftiamo il polinomio u(x) di n-k posizioni eseguendo la seguente moltiplicazione:
xn−k
⋅ u(x )
grado n − k

grado k −1

Quel che otteniamo possiamo visualizzarlo tramite questa rappresentazione a registro:


0 0 … 0 u1 … … … uk −1 uk
1 2 … n-k-1 n-k … … … n-1 n

effetto dello shifting parola d’informazione


2. dividiamo il tutto per il polinomio generatore g(x), di grado n-k:
grado ≤ n − k −1

x u(x ) z (x )
grado k −1
n −k 
= q (x ) + ⇒ q ( x ) g ( x ) + z ( x ) = x n − ku ( x )
g (x ) g (x )

grado n − k

3. a questo punto ci ricordiamo che siamo in algebra binaria e che, in questo caso, ha senso la
seguente operazione:
a +b = c ⇒ a + b+b = c +b (somme modulo 2)
Portiamo quindi il resto dall’altra parte dell’uguale, ma senza il cambio di segno che è
necessario quando operiamo nella più usuale base 10:
q ( x ) g ( x ) + z ( x ) = x n −ku ( x ) ⇒ q (x ) g ( x ) = x n − ku ( x ) + z ( x )
    
grado k −1 grado n − k grado n −1 grado ≤ n − k −1
(è una parola
d'informazione)

Ebbene, così facendo il resto z(x) è andato a porsi in quella parte che la moltiplicazione
xn−k
⋅ u(x )
grado n − k

grado k −1

52 Se così non fosse potrei pensare di semplificare il polinomio generatore e così il grado si abbasserebbe.
53 Tale relazione è dimostrabile e sempre valida.
aveva inizialmente lasciato libera,
libera ovvero quella piena di zeri
0 0 … 0 u1 … … … uk −1 uk
1 2 … n-k-1 n-k … … … n-1 n

parte precedentemente lasciata libera


⇓ ⇓ ⇓ ⇓
z (x ) x n −k
u (x )
1 2 … n-k-1 n-k … … … n-1 n

Quella che abbiamo ottenuto è una parola di codice! E c’è di più: è sistematica! Non lasciamoci
ingannare dal fatto che i bit di informazione siano sulla destra invece che sulla sinistra: se infatti
vediamo le cose in questo modo54…
x n −ku ( x ) z (x )
n n-1 … … … n-k n-k-1 … 2 1
… tutto è già più familiare!
Insomma, ora posso prendere una qualsiasi parola d’informazione, moltiplicarla per g(x) e
otteneree una parola di codice in forma sistematica; il termine
q (x ) g (x )
serve soltanto a giustificare che il termine a sinistra dell’uguale, e cioè
x n −ku ( x ) + z ( x )
è una parola di codice ben strutturata. Si noti poi che il quoziente non on ha nessuna utilità ai fini
della codifica: ci interessa infatti soltanto il resto, ed esistono circuiti molto semplici e performanti
in grado di calcolare il resto di una divisione polinomiale. Uno di questi è il circuito di divisione a
shift-register; la sua struttura è la seguente:
da qui uscirà il resto della divisione!

Studiamone il comportamento per una divisione generica fra polinomi:


V ( x ) → grado m
g ( x ) → grado r
Dal primo sommatore a sinistra iniziano ad entrare – clock dopo clock – i bit che rappresentano il
polinomio V(x);; fra i vari sommatori è interposto un blocchettino di memoria, che introduce un
adeguato ritardo ed è in grado di conservare i dati in forma provvisoria. Ad ogni colpo di clock, i
dati shiftano verso destra passando
ssando attraverso i sommatori, i quali ricevono,
ricevono oltre al valore del
blocco di memoria immediatamente a sinistra, il valore precedentemente presente nell’ultimo

54 Altrimenti possiamo utilizzare la seguente formula per traslare a sinistra di k i vari bit:
( )
x k z ( x ) + x n − k u ( x ) mod x n +1 ( )
blocco (quello presente all’estrema destra) moltiplicato per il corrispondente coefficiente g del
polinomio g(x)(55). Vediamo meglio tale funzionamento con un esempio.

ESEMPIO:
Il nostro codice è di tipo ciclico (4,7). Il polinomio g(x), ovvero il polinomio generatore del codice,
è il seguente
g (x ) = 1 + x + x3  g = 1 1 0 1
Siccome n = 7, il polinomio dividendo che compare in questa formula
b(x ) xi z (x )
= q (x ) + n
x −1
n
x −1
sarà x + 1 .
7

Già ora possiamo fare qualche altra considerazione sul grado dei polinomi:
• il polinomio b(x), quello corrispondente alla parola codificata, sarà di grado n − 1 = 7 − 1 = 6;
• il polinomio u(x), quello corrispondente alla parola d’informazione, sarà di grado k – 1 = 3.
Poniamo ora che u(x) sia pari a
u (x ) = 1 + x2 + x3  u = 1 0 1 1
Chiamiamo b′ ( x ) la “proto-parola di codice”56 che otteniamo in questo modo:
( )
b′ ( x ) = x n − ku ( x ) = x 3u ( x ) = x 3 1 + x 2 + x 3 = x 3 + x 5 + x 6  b′ = 0 0 0 1 0 1 1
dobbiamo ricavare questi tre bit dal resto della divisione
Ora calcoliamoci il resto della divisione fra b′ ( x ) e g(x), ovvero z(x):
polinomio u ( x ) x n −k = b′ ( x )
x6 + x5 + + x3 + + + x3 + x +1
(
− x6 + + x4 + x3 + + + ) x3 + x2 + x +1 quoziente q(x)
x +x +
5 4
+ + +
(
− x5 + + x3 + x2 + + )
x4 + x3 + x2 + +
(
− x + 4
+ x +x+
2
) resto (remainder) della divisione z(x)

x3 + +x+
(
− x3 + + x +1 )
1
Ora basta eseguire la seguente somma per trovare vera la parola di codice b(x), in forma
polinomiale:
b ( x ) = z ( x ) + x n −ku ( x ) = 1 + x 3 + x 5 + x 6 ⇒ b = 1 0 0 1 0 1 1
Potevamo fare la stessa identica cosa con uno shift-register. Vediamo nella figura seguente il
circuito progettato espressamente per questa divisione:

55 I segni meno e la divisione presente nell’ultimo blocco vengono introdotti perché stiamo trattando il caso generale:
chiaramente nel caso dei campi di Galois GF(2), i termini negativi non esistono e quindi − g 0 è semplicemente il
termine noto del polinomio g(x), mentre il termine 1 g è da interpretarsi come un chiuso.
r
56Non è ancora la parola di codice, ma i coefficienti di grado pari o superiore a 3 sono già quelli che cerchiamo: per
calcolare quelli di grado da 0 a 2 dobbiamo invece calcolarci il resto della divisione con il circuito a shift-register.
bit di g

Qui entrano i bit di


b′ ( x ) = x 3u ( x ) = x 3 + x 5 + x 6
b′ = 0 0 0 1 0 1 1 entrata registro 1 registro 2 registro 3

CLOCK 1 – 3: entrano i primi tre bit della parola b’.


Entrata: 1
Registro 1: 0
Registro 2: 1
Registro 3: 1

CLOCK 4: i moltiplicatori iniziano ad avere effetto (il vecchio registro 3 è passato ad 1) e a portare
un contributo ai sommatori.
Entrata: 0
Registro 1: 1+1 = 0
Registro 2: 0+1 = 1
Registro 3: 1+0 = 1
retroazione
CLOCK 5 il “vecchio” registro
regis 1
Entrata: 0 il “vecchio” registro 2
Registro 1: 0+1 = 1
Registro 2: 0+1 = 1
Registro 3: 1+0 = 1

CLOCK 6 retroazione
Entrata: 0
Registro 1: 0+1 = 1
Registro 2: 1+1 = 0
Registro 3: 1+0 = 1

CLOCK 7 retroazione
Entrata: 0
Registro 1: 0+1 = 1
Registro 2: 1+1 = 0 resto della divisione! z = 1 0 0 0 0 0 0 
Registro 3: 0+0 = 0

E dunque:
b = b′ + z = 0 0 0 1 0 1 1 + 1 0 0 0 0 0 0  = 1 0 0 1 0 1 1

Ci rimane da esaminare un ultimo aspetto, ovvero quello della detection degli errori;
fortunatamente,
tunatamente, anche per i codici cilici in forma polinomiale è possibile definire un pattern
d’errore (anch’esso in forma polinomiale): chiameremo questo polinomio, di grado n-1, e(x):
e ( x ) = e1 + e2 x + e3 x 2 + ... + en x n −1
Chiaramente, come tutte le entità esaminate in questo paragrafo, tale polinomio rimanda ad un
vettore così strutturato:
e = e1 e2 ... en 
Anche la relazione sottostante, che mette in relazione la parola ricevuta r(x) con quella trasmessa
b(x),
r (x ) = b(x ) + e (x ) ← Tutti polinomi di grado n − 1
non desta certamente sorpresa, dato che l’abbiamo più volte esaminata.
Dividiamo ora il tutto per il polinomio generatore g(x):
r (x ) b(x ) + e (x )
=
g (x ) g (x )
Svolgendo questa relazione, notiamo che compare la parola d’informazione u(x):
r (x ) b(x ) e (x ) u (x ) g (x ) e (x ) e (x )
= + = + = u (x ) +
g (x ) g (x ) g (x ) g (x ) g (x ) g (x )
e (x )
E, invece, che cos’è la quantità ? Non è certamente una parola d’informazione, anche
g (x )
perché ha grado massimo n-k (a differenza delle u(x), aventi grado k-1(57)):
grado k −1
grado n −1 
sindrome!
 (è parola

r (x )   e (x ) 
d'inform.)

= u (x ) +  = u(x ) + s(x )
g (x )  g ( x ) 
 
  
grado n − k grado < n − k

Trattasi quindi della sindrome s(x) della parola ricevuta.


Ora possiamo specificare meglio la relazione soprascritta: essa ci dice di prendere la parola
ricevuta, di dividerla per il polinomio generatore; fatto questo, otteniamo la parola d’informazione
e la sindrome, la quale ci indicherà una ben precisa riga dello standard array. A questo punto ci
basterà esaminare la seconda colonna per ottenere il pattern d’errore che fa al nostro scopo.
Esplicitando la parola ricevuta r(x) otteniamo quest’altra relazione, che ci fa vedere il problema dal
punto di vista del ricevitore:
r (x ) = u (x ) g (x ) + s(x ) g (x ) = b(x ) + s(x ) g (x )
Chiaramente, se nessun errore è stato commesso, la sindrome s(x) è nulla. Se infatti s(x) = 0,
immediatamente abbiamo:
r (x ) = b(x )
(trasmissione senza errori)

57 Tutti i polinomi di grado k-1 sono parole d’informazione.


CAPITOLO 5
Codifiche a correzione d’errore, parte 2

5.1 – Codici convoluzionali

I codici convoluzionali sono estremamente importanti perché vengono usati in quasi tutti i sistemi
di telecomunicazione,, spesso non singolarmente ma in modo “concatenato” (cioè associati ad altre
codifiche, come quelle a blocco)::
vediamo subito perché ciò
accade.
Laa curva degli errori dei codici
convoluzionali (v. figura) ha una
forma un po’ diversa rispetto a
quella dei codici a blocco. Questi
ultimi, infatti, vanno giù ù in
maniera più morbida rispetto a
quelli concatenati, che invece
piombano immediatamente verso
il basso; non è però tutto rosa e
fiori: i codici convoluzionali vanno sì relativamente presto verso le basse probabilità d’errore, ma
tendono a calare molto poco oco verso le SNR alte assestandosi su un floor1. Questo appiattimento
della curva non sussiste per i codici a blocco, pur essendo questi più deboli sul fronte
dell’abbattimento della BER(2).
Concatenando questi codici (ad ad es. codice a blocco  codice convoluzionale)
luzionale) uniamo l’esigenza di
correggere il floor a quella di raggiungere immediatamente le basse probabilità d’errore. Questa
sinergia ha risultati eccezionali e ci porta vicinissimi al
a limite di Shannon.

Occorre anzitutto introdurre qualche parametro3:


• k = numero dei bit d’informazione;
• n = numero dei bit di codifica;
• ν = lunghezza del vincolo: essa è un indice di quanto è lunga la memoria,
memoria cioè di quante
parole teniamo conto per elaborare la sintesi che genererà la parola di codice b.
4

1 Il motivo di questo strano andamento sta nel fatto che i codici convoluzionali sono codici con memoria: il vantaggio di
avere una memoria sta nel farsi “aiutare” nella rilevazione degli errori da parte dei simboli precedenti (e successivi, se
c’è un buffer);
); lo svantaggio è invece quello di tirarsi dietro per molto tempo gli errori, i quali diventano una fastidiosa
zavorra non influenzando una singola analisi, ma un’intera sequenza.
2 Bit Error Rate.

3 Valori tipici per queste grandezze (es. DVB-T):


DVB k = 1, n = 2~3, ν = 9 ( 256 stati).
4 Più avanti vedremo meglio che la parola d’informazione b ha un’origine “mista” che coinvolge i bit d’informazione

di più parole.
Come si vede dalla figura precedente, infatti, i bit della parola di d codice (lunghezza n) vengono
ricavati sommando alcuni bit fra le ν parole d’informazione (lunghezza k): in pratica, n bit di
5

codifica vengono tirati fuori da ν ⋅ k bit di informazione. Alcuni bit, inoltre, possono partecipare a
più codifiche (vedi, facendo riferimento alla figura
precedente, il terzo bit della parola d’informazione
uν −1 ).
Una volta effettuata una sintesi, le parole di
informazione shiftano (v. fig. a lato): questo produce
una nuova parola di codice b, calcolata ancora con
lo stesso criterio di prima (i sommatori e i
collegamenti in figura rimangono gli stessi) ma
chiaramente con bit diversi in quanto sono cambiate le ν parole d’informazione “generatrici”.
Si capisce bene che, dal momento che una parola di informazione entra nella memoria di vincolo –
cioè quella dove rimangono memorizzate le parole d’informazione che concorrono alla codifica –
vi rimarrà ν volte consecutive6.

5.2 – Principio di funzionamento

Per capire meglio in cosa consiste la codifica/decodifica di un codice convoluzionale facciamo


immediatamente un esempio.
Sia k = 1, n = 2, ν = 3 :

Le parole di codice sono 2n e cioè 4; le possibili configurazioni dei bit d’informazione


d’informazion presenti
nella memoria di vincolo, che è fatta di tre parole d’informazione (tutte di lunghezza k = 1 bit),
sono invece 2ν = 8 ; è per questo motivo che la tabella ha 8 righe: vogliamo infatti vedere quale
parola d’uscita abbiamo in base alle possibili combinazioni che si instaurano nella memoria di
vincolo.

Quel che si ha, e che vedremo meglio di seguito, è che tale dispositivo di codifica è considerabile
in realtà come una macchina
acchina a stati finiti.
finiti

5In pratica viene fatta, fra i vari bit, una combinazione lineare tramite
tra somme modulo 2.
6Ecco che capiamo meglio il senso della nota 1: se entra una parola sbagliata, ce la dobbiamo tenere per un numero di
codifiche pari alla lunghezza di vincolo.
Gli stati non sono però 2ν , come si potrebbe immaginare in un primo momento, bensì:
2ν −1 per k = 1 caso frequente
 (ν −1)k (7)

2 per k > 1 caso meno frequente


Quindi,
di, nel nostro caso, tali stati non sono 8 bensì 4. Come
mai sono di meno di quelli che pensiamo? Il fatto è che
dobbiamo interpretare uno dei possibili
ossibili registri quale quello
contenente bit d’ingresso, cioè il bit che viene dato in input
alla macchina a stati finiti:: i rimanenti due bit (bit
( di stato)
sono il vero e proprio stato della macchina.

Chiamiamo così i possibili stati della nostra macchina codificatrice:


σ 0 = ( 0,0 ) σ 2 = (1,0 )
σ 1 = ( 0,1) σ 3 = (1,1)
Mentre il seguente è il diagramma
iagramma degli stati:

Come abbiamo fatto ad ottenere questo diagramma? Abbiamo schematizzato con i pallini i
quattro stati;; dopodiché abbiamo visto cosa succede a far entrare da sinistra un 1 o uno 0 (da qui le
frecce, cioè le transizioni) all’interno
all’inte della memoria di vincolo. Nel far questo i bit shiftano e
quindi si cambia la configurazione dei due bit di stato: la nuova configurazione è lo stato d’arrivo
associato a quel particolare bit d’ingresso. L’uscita (2 bit) invece calcolata in base alla
combinazione
ombinazione lineare dei sommatori.
ESEMPIO: configurazione iniziale  100
Siamo nello stato 00 (cioè σ 0 ). Entra un 1: configurazione finale  110 (esce
esce uno 0 a destra)
Finiamo nello stato 10 (cioè σ 2 ): e infatti è presente una freccia, che va da σ 0 a σ 2 , avente
l’etichetta 1.. Guardando la tabella di prima ci accorgiamo che associato a 100 abbiamo, in uscita,
11; quindi, durante la transizione dalla configurazione
configurazione iniziale (100, appunto) a quella finale (110)
abbiamo “sputato fuori” una parola di codice pari a 11 (e anche quella compare nella freccia).

7In alcuni testi ν è la lunghezza del vincolo, ma


m in altri è la memoria del sistema:: bisogna però specificare se la memoria
comprende solo i bit di stato o anche il bit d’ingresso.
È importante specificare che gli stati e le transizioni non dipendono dalla regola di codifica (cioè da
come abbiamo
bbiamo disposto i sommatori): il diagramma degli stati che abbiamo testé disegnato è
valido per una qualsiasi macchina a stati finiti avente gli stessi parametri k e ν . Che si mappi il
tutto in n bit di codifica secondo le regole che
che vogliamo non importa: le regole di codifica non
influiscono minimamente sul funzionamento della macchina a stati finiti8 (transizioni e stati),
bensì solo sulle uscite9.
Esiste poi una rappresentazione per tenere traccia
t dello
scorrere del tempo: il diagramma
agramma ad albero. Dalla figura
affianco si evince questa chiave di lettura: per ogni
transizione innescata da uno 0,, prendiamo la direzione
della relativa freccia andante verso il basso;
basso per ogni
cambiamento di stato provocato da un 1 andiamo invece in
alto.
to. Ci accorgiamo immediatamente di alcune cose:
• l’albero “esplode” molto velocemente: al primo
tempo di bit abbiamo un unico stato ( σ 0 ) poi, allo
scoccare del secondo tempo di bit, due rami ci
portano verso altrettanti possibili stati ( σ 0 e σ 1 ).
Al “clock” successivo avremo altri due rami per
ogni stato (gli stati diventano 4); poi, al quarto
tempo di bit, ci spuntano fuori 8 rami (il doppio
rispetto a quelli che avevamo al tempo di bit
precedente), e così via…
n
simo tempo di bit avremo 2 possibili stati:: potremmo trovarci in uno qualsiasi di essi
All’n-simo
in base alla storia passata,, cioè alle transizioni che abbiamo compiuto;
• l’albero, in realtà, si ripete ciclicamente e forma, nella sua evoluzione, tanti sottoalberi
uguali fra loro. Questo è dovuto al fatto che gli stati, presi singolarmente, hanno solo due
possibilità d’evoluzione: lo stato σ 0 , ad esempio, pio, può solamente andare verso σ 1 o
ripiegarsi su sé stesso,, ma d’altronde, anche una volta ripiegato su sé stesso, le alternative
che ha sono di nuovo quelle. In pratica, l’albero si evolve replicandosi all’infinito sempre
uguale a sé stesso. Se staccassimo un ramo dell’albero, e guardassimo come esso evolve, ci
accorgeremmo che non riusciremmo più a distinguere l’albero di partenza (infinito) dal
ramo che abbiamo staccato (altrettanto infinito).
Negli anni ’60, Andrew Viterbi si è accorto che era possibile ripiegare l’albero su sé stesso: quel
che ne venne fuori era un traliccio (trellis),
), che si ripeteva sempre uguale (come l’albero), ma che
non esplodeva e – contemporaneamente – teneva conto dello scorrere del tempo.

8Piccola chiosa: il diagramma degli stati non contiene neppure la variabile temporale.
9D’altronde, è facile fare anche ill ragionamento inverso. Riceviamo una parola codificata b = 11: da dove arriviamo?
Eravamo nello stato 1 (0,1) o nello stato 0 (0,0)?
A seguitoo di questa rappresentazione (che che è perfettamente esaustiva in quanto è sufficiente
mostrare i collegamenti fra gli stati una volta sola che poi, di conseguenza, si desumono tutti gli
altri semplicemente estendendo il traliccio e copiando i collegamenti tali e quali), Viterbi è stato in
grado di creare un potentissimo algoritmo per decodificare i codici convoluzionali: tale algoritmo
(lo vedremo meglio più avanti) si basa sul semplice principio
principio che a qualsiasi sequenza di bit…
Es. 1 1 0 1 0

1
1 0
1 0

… corrisponde uno e soltanto un percorso: due sequenze diverse percorrono infatti due rami
diversi. L’algoritmo di Viterbi sfrutta questa proprietà e tiene conto del fatto che una certa
sequenza percorre il tragitto lungo il trallis in un unico modo.

Per indicare il funzionamento di un determinato codice convoluzione si utilizzano dei polinomi, i


quali specificano i legami fra i bit di informazione e il sommatore che li combina per creare un
certo bit di codice.
Riprendendo in mano l’esempio di qualche pagina
p fa: registro 1
registro 2
registro 3

CASO 1: per il primo bit di codice


sommiamo modulo due i bit nel CASO 2: per il secondo bit di codifica sommiamo
registro 1, 2 e 3 modulo due i bit dei registri primo e terzo.

5.3 – La decodifica e il criterio di verosimiglianza MLSD

Dobbiamo capire ora come mai i codici convoluzionali sono così potenti: ebbene, la curva degli
errori va giù molto velocemente perché la decodifica coinvolge un’intera sequenza numerica (e
non un singolo bit);
t); tale sequenza numerica – infatti – ha una sua storia passata,
passata che viene tenuta
in memoria e che spiana la strada alla decodifica, proteggendo i bit giusti grazie ad un adeguata
correlazione. La differenza introdotta dalla memoria,
memoria a dirla tutta, ha una natura probabilistica;
prendiamo infatti due sequenze, una corretta e una errata:
errata

CORRETTA 1 1 0 1 0 (probabile)
ERRATA 1 1 1 1 0 (meno probabile)

Con meccanismi che vedremo in seguito, il decoder riesce ad accorgersi del fatto che
c la seconda
sequenza è meno probabile della prima: questo è segno, per il ricevitore, che è probabilmente
avvenuto un errore. Vediamo meglio come.
Consideriamo un codice convoluzionale k, n con lunghezza di vincolo (detta anche “di prefisso”)
pari a ν . Ecco lo schema del codificatore:

Possiamo prendere nota dei passaggi di stato della macchina grazie alla nostra rappresentazione a
traliccio; all’interno del traliccio, le possibili sequenze (ovvero le possibili configurazioni interne
nel registro a scorrimento) saranno:
2ν ⋅k tutte le possibili configurazioni dei bit
( )
n bit delle parole d'informazione messi assieme...
assi
ν ⋅k
2 →
(...) ...tante volte quanti sono i bit della paro
n
parola di codice

Una volta codificata la parola (lunga n bit) la trasmetterò e, lato RX, dovrò effettuare un problema
decisionale per cercare di capire cosa è stato inviato con la minore probabilità d’errore d’ possibile
(sarebbe tutto troppo semplice se non vi fossero errori di trasmissione! Chi ci dice che ciò che
abbiamo ricevuto è esente da errori?). errori? . La decisione non è però roba da ridere: dobbiamo fare un
( )
n
confronto con 2ν ⋅k elementi,
ti, quindi trovare la sequenza più probabile fra tutte quante facendoci
guidare dalla correlazione che la memoria e la codifica hanno introdotto – servendosi dei bit
d’informazione – all’interno della parola codificata. È ora comprensibile il motivo per il quale tale
procedura è di complessità elevatissima, tanto che prima dell’invenzione dell’algoritmodell’ di
Viterbi10 si pensava fosse impossibile da attuare.
Considerando la situazione dall’i-esimo istante fino ad n istanti indietro, sia
• Ui = ( ui , ui −1 , ui −2 , ..., ui −n −1 ) il vettore delle parole d’informazione
• Bi = ( bi , bi −1 , bi −2 , ..., bi −n−1 ) il vettore delle parole di codice
• Ri = ( ri , ri −1 , ri −2 , ..., ri −n−1 ) il vettore delle parole ricevute
• f la funzione rappresentante la codifica.
Allora possiamo azzardare questa scrittura:
Ri 
versione ricevuta di
→ Bi = f ( Ui )
Il problema decisionale di cui parlavamo poco fa riguarda il capire se Ri è davvero Bi o se è Bi
con l’aggiunta di un pattern d’errore.
Il criterio di decisione utilizzato è ancora quello della maggiore verosimiglianza, ovvero della
distanza minima11. Questa volta però non si tratta di distanza nello spazio individuato da una base
ortonormale, bensì di distanza fra parole fatte di bit e – in definitiva – di distanza
distanz di Hamming.

10Il quale ha invece complessità lineare, come vedremo.


11Ne abbiamo due versioni: il MAP, che utilizziamo se tutte le scelte
scelte errate hanno lo stesso costo e se la distribuzione
di probabilità che indica l’uscita di un certo elemento non è uniforme, oppure il criterio ML, di cui facciamo uso se –
ancora una volta – tutte le scelte errate hanno lo stesso costo, ma se questa volta
volta è uniforme la distribuzione di
probabilità che modella il verificarsi delle varie ipotesi.
Non c’è nulla di nuovo da capire, se non che le distanze si misurano in base a quanti bit differenti
abbiamo; detto questo, il criterio di decisione (è un criterio ad hard decision, cioè devo ogni volta
scegliere fra un 0 o un 1, senza scelte intermedie) è abbastanza intuitivo da comprendere:
B( ) = arg max
h
j
(
P R B( )

j
)
guardo tutte le possibili
sequenze che posso
ottenere nel traliccio

scelgo la sequenza B che
massimizza la verosimiglianza
con la sequenza ricevuta R

Come si vede prendiamo una decisione sequenza per sequenza: si parla, a tal proposito, di Maximum
Likelyhood Sequence Detection (MLSD)12. Come abbiamo detto, questo procedimento ha una
( )
n
complessità enorme, per via del numero mastodontico di sequenze 2ν ⋅k con le quali dobbiamo
effettuare il confronto, e quindi pare inattuabile: l’algoritmo di Viterbi fortunatamente ci viene in
soccorso, vedremo fra poco come.
Tornano alla relazione appena scritta, siamo in grado di scrivere la P R B( ) ?
j
( )
Sì, perché abbiamo tutti gli elementi:
• sappiamo che il discrimine fra le due sequenze sta nella distanza di Hamming d ( r, b ) fra la
parola ricevuta e la parola codificata. In assenza di errori la distanza di Hamming con al
sequenza esatta sarebbe 0, in quanto tutti i bit di r risulterebbero identici ai bit di b;
• sappiamo qual è la probabilità di sbagliare un singolo bit:
1  Eb 
Peb = erfc 
2  N 
 0 

• sappiamo che il canale è BSC , e quindi che vi è probabilità Peb di sbagliare un 1 con uno 0
13

(e, per simmetria, uno 0 con un 1) e probabilità 1 ‒ Peb di non commettere errore (sia per un
1 che per uno 0);
• sappiamo modellare la probabilità di avere, su un numero M di test, H eventi di tipo
“successo/presenza” (nel nostro caso intendiamo con questo la presenza di un errore di
trasmissione su un bit; siccome le occorrenze di questo tipo sono H, tale parametro risulterà
anche essere la distanza di Hamming fra la parola ricevuta r e quella trasmessa b) e M – H
eventi “insuccesso/assenza” (caso di bit ben trasmesso e decodificato). Si tratta, infatti, di un
caso modellabile con la variabile aleatoria di Bernoulli:
(
1 − Peb )
M −H
PebH
  
probabilità di probabilità complementare
compiere H di successo in M − H bit
errori consecutivi

Fatte le doverose premesse, ora siamo in grado di esprimere la (probabilità) bernoulliana di avere
una qualsiasi sequenza di H errori (“successo”) in M bit:
M 
Pe =   PebH (1 − Peb )
M −H

H 
Qual è quindi la probabilità di confondere le sequenze?
CORRETTA b = 1 1 1 1 0 4 successi (errori) e 1 insuccesso (no errore)
ERRATA r = 0 0 0 0 0

12 Tale criterio è applicabile a qualunque sistema abbia memoria, quindi non solo alla teoria dei codici. Risulta utile
anche nel particolare caso vi sia interferenza inter-simbolo (ISI), la quale rappresenta una prima forma di memoria
all’interno dei sistemi di telecomunicazione.
13 Binary Symmetric Channel = canale binario (usiamo solo 0 e 1) e simmetrico.
P (r b) = PebH (1 − Peb )
M −H


 
Probabilità di
ricevere r dato che
è stato trasmesso b

Attenzione: il coefficiente binomiale non c’è e non dev’esserci! Non stiamo infatti calcolando la
probabilità che vi sia una qualsiasi sequenza errata di quattro bit all’interno di una parola lunga
cinque bit; la parte errata – così come quella corretta, per complementarietà – è già localizzata a
priori (r ha i primi quattro bit sbagliati e solo l’ultimo corretto): sappiamo già che la
configurazione incriminata è una e una soltanto, dunque non ci serve il coefficiente binomiale per
contarle.

Sappiamo anche che H è la distanza di Hamming; quindi ora siamo pronti per esprimere la
probabilità di ricevere una sequenza di:
• N parole codificate lunghe n bit [ numero di bit su cui fare il test = n ⋅ N ],
• in funzione dalla quantità di errori14 H [ numero di bit errati  distanza di Hamming fra
le sequenze = d R, B( ( j)
) ]:
bit errati
   bit esatti
 
( )
( ) d R ,B ( ) ( )
n ⋅ N − d R ,B ( )
j

P R B ( ) = Peb (1 − Peb )
j
j

Tale probabilità può essere espressa in maniera logaritmica:

( ( )) (
d R,B( ) ) + ln (
n⋅N −d R,B( ) ) = ln P d(R,B( ) ) + ln (1 − P )n⋅N + ln (1 − P )−d(R,B( ) ) =
j j

ln P R B( ) (1 − Peb )
j j

= ln Peb
j
eb eb eb
  
proprietà dei logaritmi log ( a⋅b) = log a + log b

 d ( R ,B ( j ) ) − d ( R ,B ( ) )   Peb 
(
d R ,B ( )
j
)
( eb )  + ln (1 − Peb ) + ln (1 − Peb )
j
n⋅N n⋅N
= ln  Peb 1 − P = ln  

   1 − Peb 
riapplichiamo la stessa proprietà (al contrario)

Se ora facciamo l’ipotesi, più che plausibile, che la probabilità d’errore per bit Peb sia inferiore a 0,5
allora possiamo dire che:
< 0,5

Peb  P   1 − Peb 
<1  ln  eb  è negativo  ln   è positivo
1 − Peb  1 − Peb  P
 eb 

> 0,5

Proseguendo i nostri calcoli:


(
d R ,B( )
j
) (
− d R ,B ( )
j
)
( (
ln P R B ( j)
))  P 
= ln  eb 
 1 − Peb 
+ ln (1 − Peb )
n⋅ N  1 − Peb 
= ln 
 Peb 
 + ln (1 − Peb )
n⋅ N
=

 1 − Peb 
= −d R, B ( ) ln 
j

 Peb 
(
 + ln (1 − Peb )
n⋅N
)
Questa quantità (probabilità che R , che è stata trasmessa, sia uguale alla B , che è stata spedita) è
ovviamente una quantità che desideriamo massimizzare: vogliamo infatti rendere più grande
possibile la probabilità di non aver commesso errore.
quantità negativa quantità negativa
   ( però costante!!)
  
( (
ln P R B ( )
j
)) (
= −d R, B ln 
  Peb 
( j)
)
 1 − Peb 
 + ln (
1 − Peb )

n ⋅N

quantità negativa  <1


quantità positiva

14 Il nostro obiettivo sarà, lo vedremo fra poco, massimizzare la probabilità che R sia come B.
L’unica quantità non costante in quest’espressione è quindi:

−d R, B( ) ln 
j

 Peb 
(
 1 − Peb 
 )
Ma, nuovamente, possiamo in realtà considerare soltanto la quantità
(
−d R, B( )
j
)
 1 − Peb 
dato che ln   è una costante.
 Peb 
Quindi il nostro criterio è:

j
{ (
arg max ln P R B( )
j
)} = arg max {−d (R, B )} = arg
j
min {d ( R, B )}

( j)
j
( j)

cambio di segno

In pratica, ci viene detto di minimizzare la distanza di Hamming fra le due sequenze!


B( ) : h = arg min d R, B( )
h j
j
{( )}
(leggi: “scegli la sequenza B( ) che ha massima verosimiglianza, ovvero
h

minima distanza di Hamming, rispetto alla sequenza


sequenza ricevuta R ”)

E qui entra in gioco l’algoritmo di Viterbi.

5.4 – Algoritmo di Viterbi:: terminologia

Per la decodifica dei codici convoluzionali, apparentemente in districabile, l’algoritmo di Viterbi


fornisce una soluzione ottima a difficoltà lineare.
Abbiamo però bisogno di introdurre una terminologia del traliccio;; si faccia riferimento alla figura:

Stato di partenza v Transizione dallo stato Stato d’arrivo u


(all’istante i-1) v allo stato u (all’istante i)

In esteso:
• nello stato v ( σ i −1 ) le parole d’informazione all’interno del registro a scorrimento sono:

( )
σ iv−1 ≡ ui −1 , ui −2 , ..., ui −(ν −1) ;

• (
nello stato u ( σ i ) abbiamo invece in memoria: σ iu ≡ ui , ui −1 , ui −2 , ..., ui −(ν −1)+1 ) ;
(15)

• per definire la transizione si usa la dicitura ξiuv = ui ,σ iv−1 , dove: ( )


o u è lo stato d’arrivo;
o v lo stato di partenza;
o ui è la parola che, entrata nella memoria, ha fatto shiftare tutte le altre
altr e “scattare” il
cambio di stato per la macchina a stati finiti16;

15 Si noti lo shift dei pedici.


o i ed i‒1 si riferiscono agli istanti temporali.
Possiamo esprimere questa dinamica del sistema in maniera funzionale:
σ iu = F (ξiuv ) = F ( ui ,σ iv−1 )
Lo stato d’arrivo, in questo senso, è funzione della transizione, la quale dipende chiaramente da
cosa entra, all’istante i, all’interno della memoria dello shift-register e da quale stato siamo partiti
(cioè da com’erano, all’istante i‒1, bit di stato, i quali sono in numero pari alla lunghezza del
vincolo meno 1).
Per ogni singolo stato abbiamo 2k possibili transizioni, mentre esse divengono, per ogni singolo
istante:
( ) ν −1 k
2
 ⋅ 2

k
= 2ν k
configurazioni possibili
possibili dei bit stati d'arrivo
di stato per ogni
(esclusa la parola singolo stato
entrante) di partenza

Se poi ci allarghiamo ancora e prendiamo un’intera sequenza di istanti le transizioni diventano,


( )
n
come abbiamo già motivato, 2ν k .
Nel paragrafo scorso abbiamo detto il compito del ricevitore ottimo è quello di trovare la parola di
codice bh tale che h minimizzi la distanza di Hamming (= massimizzi la verosimiglianza):
h = arg min d R, B( )
j
j
{( )}
(MLSD = Maximum Likelyhood Sequence Detection)
Calcolare la distanza di Hamming di un’intera sequenza è banale; basta calcolare la distanza di
Hamming di tutte le parole facenti parte della suddetta sequenza:

( ) ( )
N
d R, B( ) = ∑ d rt , bt( )
j j (17)

t =1

E si definisce proprio metrica accumulata al tempo t‒1 la quantità:


i −1
Γ (σ i −1 ) = ∑ d ( rh , bh )
h =1

Come si calcola allora la metrica all’istante (successivo) t, sapendo che tra l’istante t‒1 e l’istante t è
avvenuta la transizione generica ξi ? Se il surplus di distanza di Hamming introdotto dalla
transizione è:
γ (ξi ) = d ( ri , bi )
Allora, ricorsivamente, si ha:
i −1
Γ (σ i ) = γ (ξi ) + Γ (σ i −1 ) = d ( ri , bi ) + ∑ d ( rh , bh )
h =1

Si definisce insieme dei precursori (detti anche predecessori) di uno stato σ u , l’insieme degli stati
(18)

dei quali è possibile arrivare, in virtù di una transizione, allo stato σ u .


P σu ( ) insieme di 2k stati

16 E infatti tale parola non è presente nell’espressione dello stato di partenza


(
σ iν−1 ≡ ui −1 , ui −2 , ..., ui −(ν −1) )
ma è ben presente in quella dello stato d’arrivo:
(
σ iu ≡ ui , ui −1 , ui −2 , ..., ui −(ν −1)+1 )
17 N è la lunghezza della sequenza, t funge da pedice temporale nella sommatoria e ci serve ber distinguere le varie
parole di codice b che caratterizzano la sequenza B. Questa distanza può essere calcolata in maniera ricorsiva.
18 Si noti che non vi è alcuna indicazione temporale: l’insieme dei precursori dipende solo dalla struttura del

diagramma degli stati e non dall’istante in cui ci poniamo.


Si chiamano metriche concorrenti le metriche che confluiscono in uno stesso stato19. Per ogni stato, al
fine
ine di minimizzare la probabilità d’errore, devo scegliere la metrica avente minor peso di
Hamming.

5.5 – Algoritmo di Viterbi: esempio

Prendiamo il nostro solito codificatore


(figura a lato). Osservando la tabella
ricostruiamo anche il diagramma degli
stati (figura sottostante).

Il principio che sta dietro l’algoritmo di Viterbi è quello di scegliere, ad ogni passaggio e fra tutte
le metriche concorrenti, quella a minore distanza di Hamming. Dobbiamo quindi sapere bene, ad
ogni transizione:
• da quale stato partiamo, in modo da poter sapere in che stato arriviamo in seguito all’arrivo
della nuova parola d’informazione ui all’interno dello shift register (nel nostro esempio la
parola d’informazione è in realtà un solo bit perché k = 1) e cosa ci dà, in uscita, la nostra
macchina a stati finiti;
• quale nuova parola d’informazione arriva allo shift register:: essa è l’altra informazione, oltre
a quella riguardante
ante lo stato di partenza, davvero importante capire lo stato d’arrivo. Nel
nostro esempio, lo stato d’arrivo è indicato dal bit più significativo indicante lo stato
precedente (che diventa il bit meno significativo dello stato successivo) e dal bit arrivato
arriva in
pasto alla macchina.
ESEMPIO:
  arrivo 
stato di

   
Transizione: ξi = 1, 1
32
0 = 1,1 0  1 = bit d’informazione in arrivo
 stato di  
 partenza   
   

19Quindi, di riflesso, i precursori di uno stato hanno tutte


tutte metriche concorrenti verso tale stato. Dal momento che
saranno confluite nello stato d’arrivo, le metriche concorrenti proseguiranno con la stessa identica evoluzione.
Per capire dove dobbiamo andare ci serve il bit 1 dello stato di partenza (10
( cioè 2) e il bit 1
in arrivo alla macchina: i due bit, messi assieme (11)) danno il numero (3) del nuovo stato.
Ecco dunque perché entrambe
ntrambe queste quantità sono riportate nella dicitura di ogni transizione:
ξiuv = ( ui ,σ iv−1 ) = ( parola d'informazione in arrivo, stato dii partenza )

Inoltre, per ogni transizione:


• dobbiamo andare a vedere, nella tabella, cosa hanno “macinato”“macinato” i sommatori prima
dell’arrivo del nuovo bit, ovvero quale parola ci restituiscono in uscita come conseguenza
della combinazione lineare da loro effettuata sulle parole d’informazione presenti nello shift
register;
• una volta capita la parola b di cui si parla nel punto precedente, si deve andare a
confrontare quest’ultima con la parola ricevuta r e capire qual è la distanza di Hamming fra
queste:: essa darà un proprio contributo alla metrica accumulata fino a quel momento.
All’interno di un’intera sequenza, questo contributo andrà a sommarsi alla metrica del
percorso scelto. Maggiore è tale metrica e maggiore è la distanza di Hamming che abbiamo
“accatastato” fino ad ora (e minore è la verosimiglianza che, invece, vorremmo
massimizzare):: tale metrica, accumulata lungo un preciso percorso del trellis, è detta metrica
di ramo;
• ad ogni istante e per ogni stato si somma la metrica di ramo e si calcolano le metriche
concorrenti, delle quali verrà poi scelta quella di peso minimo.
In linguaggio matematico:
• andare a sommare la metrica associata alla transizione generica ξiuv : ADD
accumulata
accumulata fino nell'ultima
all'istante prima transizione

  
P σ( )u
i ( )
= Γ σ i −1 + γ ξiuv
v
( )
• esaminare la metrica di ramo e andare a vedere quale transizione ha provocato un minore
aumento di tale metrica (COMPARE). Dopodiché si sceglie il percorso che minimizza
l’aumento di metrica (SELECT):
( ) { ( ) ( ) ( )}
S σ iu = arg minu Γ σ iu = Γ σ iv−1 + ξiuv
( )
v =P σ

( )
S σ iu è l’insieme dei sopravvissuti (survivors) all’istante i-esimo:
esimo: i sopravvissuti sono quegli
stati che non sono stati scartati in quanto hanno accumulato la metrica minore fra tutti
quanti. Esiste un survivor per ogni possibile stato.

Ecco un micro-esempio
esempio di ciò che si è detto fino ad ora.
ora. Si vedono, colorati: tre possibili rami.
Il nostro scopo è andare a calcolare
la metriche di transizione γ ξiuv ( )
associate ad ogni collegamento fra i
pallini (gli stati). Come si vede, i tre
rami andranno ad unirsi in uno in
corrispondenza del terzo tempo di
simbolo. A quel punto ci guardiamo
indietro e ci chiediamo quale ramo
ha accumulato meno distanza di
Hamming? Una volta trovato tale
ramo, lo evidenzio e lo scelgo.
ESEMPIO DI DECODIFICA:

Bit/simboli trasmessi 0/000 1/111 1/101 0/011 0/001


ERRORE: 0/010

Stato σ0
(predecessori σ0 e σ1)

Stato σ1
(predecessori σ2 e σ3)

Stato σ2
(predecessori σ0 e σ1)
d

Stato σ3
(predecessori σ2 e σ3)
c

( )
Γ σ0 0 0 3 5 5
Γ (σ )
1
+∞ +∞ +∞ 3 2
Γ (σ )
2
+∞ 3 0 4 4
Γ (σ )
3
+∞ +∞ 4 0 2
S (σ )
0
σ0 σ0 σ0 σ0 σ1
S (σ )
1
n/a σ2 σ2 σ2 σ3
S (σ )
2
n/a σ0 σ0 σ0 σ1
S (σ )
3
n/a σ0 σ2 σ2 σ3
Come si compila e si legge questo schema?
potizzando il fatto di partire con tutti i rami dallo stato σ 0
Facciamo subito un esempio. Ipotizzando
all’istante zero, consideriamo lee due uniche transizioni possibili:
possibili
1) Dallo stato 0 allo stato 0 (se nello shift register entra uno 0)  ξ 00 = ( 0, 00 ) = ( 0, 00 )
2) Dallo stato 0 allo stato 2 (se nello shift register entra un 1)  ξ 20 = (1, 00 ) = (1, 00 )
A questo punto andiamo a leggere nella tabella
cosa accade nei seguenti casi.
 Nel caso 1) viene trasmesso 000
 Nel caso 2) viene trasmesso 111

Andiamo a vedere sul traliccio per capire cos’è


stato trasmesso e scopriamo che:
• nello shift register è entrato uno 0;
• è stato trasmesso 000.

Quindi:
• nel caso 1 ho distanza di Hamming 0
rispetto all’informazione senza errore;
• nel caso 2 ho distanza di Hamming 3
rispetto alla parola di codice trasmessa.
Dunque la transizione 1 (vedi nel traliccio) ha costo 0 [e andiamo e segnare
( )
questa informazione presso la riga Γ σ 0 , seconda colonna].
La transizione 2,
2, invece, ha costo 3 [e andiamo e segnare questa
( )
informazione presso la riga Γ σ 2 , seconda colonna].

La transizione 2, insomma, è altamente improbabile,


improbabile oltre che minimamente
verosimigliante e massimamente distante.

Continuiamo così, ricordandoci di calcolare


calcolare il costo di ogni transizione: dal
caso successivo a quello esemplificato, infatti,
infatti, bisogna esaminare quattro
transizioni (le due possibili dallo stato σ 0 e le altre due facenti capo allo
stato σ 2 ) e avanti così per tutti gli stati che verranno toccati.
Dopodiché inizio a guardare il traliccio
raliccio “all’indietro”: per ogni stato guardo i due da cui si è giunti
fin lì e scopro qual è quello che porta allo stato in questione tramite la metrica più corta (= minore
distanza di Hamming). La transizione con metrica più corta ci indica qual è il sopravvissuto.
Esempio:

Per σ 1 il survivor è σ 3 !!

Costo della transizione


proveniente da σ 2  2
Costo della transizione
proveniente da σ 3  1
Insomma, dopo esserci scritti nella tabella tutti i sopravvissuti proviamo, in un certo istante, a
procedere
rocedere a ritroso, guardando i sopravvissuti per ogni stato d’arrivo. In pratica, andiamo a
battere i sentieri di minor costo,, cioè di minor metrica, ovvero i rami più probabili lungo i quali si
è mossa la macchina a stati finiti. Nell’esempio fatto precedentemente, questi sono i sopravvissuti
calcolati per ogni istante

(
S σ0 ) σ0 σ0 σ0 σ0 σ1
S (σ 1
) n/a σ2 σ2 σ2 σ3
S (σ 2
) n/a σ0 σ0 σ0 σ1
S (σ 3
) n/a σ0 σ2 σ2 σ3

Come si vede, da qualsiasi stato noi partiamo da questo istante (ovvero quando è avvenuto
l’errore),, alla fine tutti i possibili rami (sono quelli che nello schema dell’algoritmo sono colorati in
blu, verde, magenta e rosso)) costruiti inseguendo a ritroso i sopravvissuti, che abbiamo annotato
diligentemente nella nostra tabellina, finiscono per unirsi (merging)) in uno unico (v. rettangolo
verde nello schema soprastante).
soprastante). Da quel momento (andando indietro), siamo sicuri che
l’informazione
’informazione ricevuta fino a lì è corretta.

5.6 – Considerazioni sull’algoritmo di Viterbi

Quanti errori corregge l’algoritmo di Viterbi?


Per rispondere a questa domanda bisogna dare una nuova definizione di distanza e si introduce
quindi la distanza libera ( dfree ) di un codice convoluzionale. Essa si definisce come:
dfree = lim dmin ( l )
l →∞ 
distanza minima
fra due sequenze
di lunghezza l

Prendendo due qualsiasi sequenze di lunghezza l portando


ortando questa all’infinito la distanza minima
fra queste due sequenze diventa quindi la distanza
distanza libera del codice convoluzionale.

Un codice convoluzionale corregge:


 d −1 
t =  free  errori
 2 
L’operazione
’operazione necessaria a ricavare
il parametro t pare apparentemente
molto ardua:
ardua in realtà siccome il
codice è lineare, e quindi
comprende la parola di tutti zeri,
possiamo fare il famoso confronto
fra le due sequenze (tirate in ballo
dalla dfree ) usando come termine di
paragone la sequenza di tutti zeri20.
Inoltre, non è necessario
ne spingersi

La distanza dalla sequenza di tutti zeri è, come sappiamo, il peso di una qualsiasi
20 qualsiasi sequenza di bit e, quindi, il calcolo
del peso è molto facile da effettuare.
verso l’infinito, dato che cerchiamo una distanza minima: se troviamo la distanza minima fra due
sequenze a lunghezza finita l, tra cui una di tutti zeri, possiamo tenere per buona quella (tanto le
altre possibili sequenze saranno più lunghe
lunghe e quindi a maggiore distanza,
distanza cioè con più bit a 1,
rispetto alla sequenza arrivata prima).
prima). Dunque posso prendere come distanza libera la distanza
della sequenza di tutti zeri da quella che torna per prima nello stato σ 0 .
ESEMPIO

Sequenza con 6 uni


(distanza = 6 = dfree )

Ci sono 9 uni di distanza


(distanza = 9)

Non esistono sequenze con meno


uni di distanza rispetto a quella che
temporalmente ritorna per prima allo
stato σ 0 !!
La distanza libera21, insomma, ci dice quanto ci possiamo allontanare dalla sequenza di tutti zeri
pur continuando ad avere speranza che avverrà la correzione da parte del codice. Se abbiamo
subito più errori rispetto al t calcolato poco fa22, allora vi è una possibilità23 che – nella decodifica –
venga sbagliato il traceback. Per evitare questa occorrenza si concatena, al nostro codice
convoluzionale, un codice a blocco24.

5.7 – Funzione di trasferimento di un codice convoluzionale

Si tratta di un’espressione polinomiale:


+∞ esempio
T (D) = ∑ a (d ) D d = D6
3 + 4
 D8 + 10 D11 + ....€€
d = d free
 ci sono 3 sequenze ci sono 4 sequenze
  numero di di peso 6 (che è anche di peso 8, etc...
la distanza libera sequenze di la distanza minima)
è il grado minimo peso d
del polinomio

Come ottenere questa funzione? Anzitutto si prende il grado


della macchina a stati finiti, avendo l’accortezza di segnalare,
su ogni freccia,, la parola che viene codificata
corrispondentemente a quella transizione. Dopodiché si
calcola il peso di tali parole e lo si annota di fianco (v. figura).

A questo punto si sostituiscono le etichette fatte nei vari rami


con i parametri
D(
peso della transizione )

21 Che risulta essere una proprietà intrinseca di un codice.


22 In genere si tratta di errori subiti in un brevissimo lasso di tempo, magari tutti consecutivi (errori a pacchetto o a
burst).
23 La d
min è da considerarsi come caso peggiore:
peggiore: esistono anche sequenze più distanti, ma si tratta di casi sporadici.
24 Ad esempio un BCH che corregga 12 errori.
e si ridisegna il grafo partendo dallo stato σ 0 ed evolvendolo per intero, fino a quando non
troviamo lo stato che si ricongiunge a quello di partenza (sempre σ 0 ).
Nella figura che segue abbiamo messo in pratica il procedimento descritto per il solito grafo
utilizzato per gli esempi:

Dopo aver fatto questo è necessario introdurre le regole di risoluzione dei grafi:

Ecco, qui di seguito, un esempio che illustra com’è possibile compattare i grafi per ottenere, alla
fine, un polinomio (che alla fine did tutto sarà calcolato nella variabile D e sarà la funzione di
trasferimento del nostro codice ciclico):
Compattiamo quindi il nostro solito grafico:

Ora svolgiamo i calcoli per semplificare l’espressione della nostra funzione di trasferimento:
 3  2 D 4  2 
D D +  D  D9
1 − D   D 7
+ (1 − D ) D7 + D9 = D7 + D8 + D9
  1−D =
T (D) =  =
  2 D 4   1 − D 3 − D
5
1 − D − D 3 (1 − D ) − D5 1 − D − D3 + D4 − D5
1 − D  D + 
  1 − D   1− D
A questo punto si può ulteriormente proseguire ed effettuare la divisione polinomiale in modo da
avere l’espressione di T tutta su una linea; dopodiché guardiamo il termine di grado minore e
scopriamo qual è la distanza libera del del codice semplicemente osservandone l’esponente25.

5.8 – Considerazioni finali sui codici convoluzionali

Abbiamo detto che i codici convoluzionali riescono a correggere


 d −1 
t =  free  errori
 2 
Viene ora spontaneo chiedersi qual è la probabilità di commettere più di t errori nell’ipotesi di
canale BSC;; sfruttiamo le considerazioni che già abbiamo fatto nel paragrafo 5.3 e modelliamo
questo caso come esperimento di Bernoulli:
n
Pe ,i =   Pebi (1 − Peb )
n −i

i 
(probabilità di sbagliare i bit qualsiasi all’interno di una sequenza lunga n)

25Questo significa che possiamo trovare la distanza libera anche senza disporre del traliccio, ma solo disponendo del
grafico.
In realtà non abbiamo finito qui, perché vogliamo sapere la probabilità di sbagliare da t+1 ad n
errori all’interno della parola (cioè di fare almeno t+1 errori su n), quindi dobbiamo anche valutare
la probabilità di commettere di t+2 errori, t+3 errori, etc… fino ad n. Ma a questo punto è facile,
perché dobbiamo solo introdurre una sommatoria:
n
n
Pw < ∑   Pebi (1 − Peb )
n −i

i =t +1  i 

Questa probabilità è un upper bound per il nostro codice convoluzionale, dato che alcune parole
aventi anche più di t errori potrebbero comunque farci fare un traceback corretto: come abbiamo
già detto, il caso di t+1 errori è stato esaminato con un occhio di riguardo alla filosofia del caso
peggiore, tanto in voga fra gli ingegneri. Sicuramente una parola con t – o meno – errori è corretta,
ma una con t+1 potrebbe non esserlo (e non è detto che lo sia per forza, anche se è molto
plausibile).

Supponiamo ora di lavorare con un codice convoluzionale k, n, ν : sappiamo che la funzione di


trasferimento di questo codice è
+∞ esempio
T (D) = ∑ a (d ) D d €€ = D6
3 + 4
 D8 + 10 D11 + ....
d = d free
 ci sono 3 sequenze ci sono 4 sequenze
  numero di di peso 6 (che è anche di peso 8, etc...
la distanza libera sequenze di la distanza minima)
è il grado minimo peso d
del polinomio

Questo particolare polinomio, sempre privo dei gradi 0 e 1, può tornarci utile nel calcolo di una
probabilità d’errore facendo uso di alcune osservazioni già fatte quando abbiamo introdotto il
criterio dello union bound già visto nel capitolo 3.

Chiamiamo A j il generico evento/errore j-esimo concernente una certa sequenza di bit e


definiamo la probabilità d’errore come unione della probabilità di fare uno qualsiasi di questi
errori:
Pe = Prob {∪ A j } ≤ ∑ Prob { A j }
j

Il segno di disuguaglianza è dovuto al fatto che nel caso di probabilità dell’unione non contiamo
doppiamente le aree di sovrapposizione degli eventi non mutuamente esclusivi, come invece
accade nel termine con la sommatoria:

Probabilità dell’unione Somma delle probabilità

= 3/2 ≤ + =2

Dunque quello della somma delle probabilità del verificarsi di ciascun evento d’errore è un upper
bound per la nostra probabilità d’errore. Tale probabilità d’errore può quindi essere espressa così:

+∞
Pe ≤ ∑ a (d ) ⋅ P ( ed )
d =dfree
 
presenza di una proabilità che d errori
sequenza avente mi facciano confondere
peso d , cioè distanza la sequenza con quella
d dalla sequenza di tutti zeri
di tutti zeri
Si dimostra (non lo facciamo in questa sede) che il termine P ( ed ) , chiamato pairwise error
probability, soggiace a tale disequazione:
d
 
 
P ( ed ) < 4 Peb (1 − Peb ) 
     
proabilità che d errori  sbagliata corretta 
sequenza sequenza
mi facciano confondere
la sequenza con quella
 
di tutti zeri

Dunque, se infiliamo questa relazione all’interno della disequazione di prima, la probabilità


d’errore diventa ulteriormente minore della quantità:

( )
+∞ +∞ d
Pe ≤ ∑ a ( d ) ⋅ P ( ed ) ⇒ Pe < ∑ a (d ) ⋅ 4 Peb (1 − Peb )
d = dfree d =dfree

Ma questa relazione somiglia molto a:


+∞
T (D) = ∑ a (d ) D d

d = dfree

Quindi possiamo dire che la probabilità d’errore per un codice convoluzionale è maggiorata dalla
funzione di trasferimento del codice calcolata in
D = 4 Peb (1 − Peb )
Ovvero:
Pe ≤ T ( D )
D = 4 Peb (1− Peb )

Trovare la probabilità d’errore in questo modo è molto, molto semplice!


Tutto questo sta in piedi solo se il canale è binario e simmetrico (BSC).

C’è un ultimo aspetto di questi codici che ancora non abbiamo ben esaminato: tutte le nostre
codifiche si basano sull’introduzione di una ridondanza che sia in grado di creare legami all’interno
della nostra informazione, in modo di avere – lato RX – qualche indicazione in più in grado di
farci scoprire o correggere gli errori.
La ridondanza ha lo svantaggio di costringerci a trasmettere più dati (e questo l’abbiamo già più
volte specificato), ma non solo: per spedire più bit ci serve maggiore potenza. Se ipotizziamo
infatti di spedire con la stessa potenza una parola d’informazione non codificata (e quindi lunga k
bit) e un’altra codificata (e quindi lunga n > k bit), ci accorgiamo immediatamente che la potenza
media per bit è maggiore nel caso di assenza di codifica che nel secondo.