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.
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.
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
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
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).
22 Né rettangolare,
angolare, né di durata finita, perché in tal caso non sarebbe a potenza finita.
23 Inter Symbol Interference.
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
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 )
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
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
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
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.
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
T 0 se j ≠ k → ortogonalità
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
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
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
∑c
2
Ee = Ex −
i =1
i
energia energia del
dell'errore segnale coefficienti
originario del segnale
proiettato
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.
−
xˆ (t ) = ∑ ciψ i (t )
i =1
segnale descrizione del segnale
(esatto) tramite coefficienti
( proiezione sulla
base {ψ i (t )} )
N
i =1
{ }
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
i =1
T
1 → per ogni i = j
∫ψ (t )ψ (t ) dt = 0 → per ogni i ≠ j
*
i j
0
∑ ci ci* = ∑ ci
2
Exˆ = (13)
( j = )i =1 i =1
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
∑
2
x ,ψ − c = 0 i i
i =1
il quadrato che
abbiamo creato
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ˆ
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
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
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
• 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.
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
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 ) ,
PASSO 4
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.
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:
(
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
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
Possiamo quindi fare un piccolo schema del modulatore37, per vedere graficamente i vari passaggi.
Vediamo
diamo ora, singolarmente, le varie modulazioni.
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
In tale relazione,
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.
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
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
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.
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
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
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.
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).
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
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
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.
∑π
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
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
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
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.
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
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
(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
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
( 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
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
Senza, per ora, rispondere a questo quesito in questa sede esamineremo il primo caso, quello di
decisione simbolo per simbolo3.
3.2 - Terminologia
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
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.
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.
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
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
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.
• { }
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
deciderò per Ĥ 0 .
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
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.
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
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
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
(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
Λ (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
Pr H1 ( r H1 ) π 1
>P r H π
( )
<
r H0 0 0
H0
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
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
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.
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
r
> 0
<
H 0
− 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
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 .
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
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
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
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
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π
2
Esempio grafico con N = 2:
"Portato fuori"
dalla produttoria
2 N 0 h =1
N
∑ (r − sih )
2
Il termine h (v. figura26) rappresenta
h =1
∑ (r − sih ) = r − si
2 2 2
h = n = di2
h =1
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.
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.
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
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
∑ ∑ 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
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.
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
(convoluzione)
Se ora leggo questa quantità all’istante t = Ts , e limito l’integrale
egrale al solo intervallo di definizione
Ts , ottengo:
= ∫ 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.
∫ 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
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:
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.
2-ASK
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
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:
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
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!
M2-QAM
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
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
{ } ( ) ( )
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
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?
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
∩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
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).
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?
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!
giganteschi da risolvere.
4.1 – Introduzione
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.
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.
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).
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
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.
• parola di codice b1, b2, b3, ………….., bn = u1, u2, u3, …….., uk, bk+1, ………., bn
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.
Gk
Gk
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.
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.
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:
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
La distanza minima di un codice è la minima distanza fra due qualsiasi parole del codice stesso:
dmin = min d ( bi , b j )
i,j
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.
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)
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
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à
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
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
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.
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):
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
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!).
1
1 0 1
G= H = 1 1 1 (43) HT = 1
0 1 1
1
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 −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
“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
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
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
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
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!
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
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
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.
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.
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.
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)
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).
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.
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.
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
( ( )) (
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
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
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 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)
( ) ( )
N
d R, B( ) = ∑ d rt , bt( )
j j (17)
t =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)
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
( )
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:
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
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].
Per σ 1 il survivor è σ 3 !!
(
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.
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
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.
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).
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.
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:
= 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
( )
+∞ +∞ d
Pe ≤ ∑ a ( d ) ⋅ P ( ed ) ⇒ Pe < ∑ a (d ) ⋅ 4 Peb (1 − Peb )
d = dfree d =dfree
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 )
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.