Upload
dotruc
View
213
Download
0
Embed Size (px)
Citation preview
CODIFICA DI CANALE
In un sistema di telecomunicazione digitale l'informazione trasmessa, in generale, è corrotta da contributi rumorosi che causano la presenza di errori di stima dei simboli trasmessi. Per questo motivo èestremamente importante minimizzare la probabilità di commettere errori.Un limite alla velocità con la quale è possibile trasferire informazione attraverso un canale di comunicazione gaussiano a banda limitata èdata dalla ben nota formula di Shannon
20
1 avPC BlogBN
= +
bit/secondo
In generale, per aumentare la capacità di canale si potrebbe pensare di agire sulle principali risorse del sistema, ossia potenza in trasmissione e la larghezza di banda
2202
0 02
02
1
1 1
1 1
avav av
avB B B
P log eP P B NlogBN BN Plim C lim lim log e
NB B
→∞ →∞ →∞
− + +
= = =−
C[bit/s]
B
20
avP log eN
La codifica di canale si effettua mediante l’introduzione di un grado di ridondanza nei simboli trasmessi. ES: controllo di parità
Esiste tuttavia un limite teorico valido per entrambi i tipi di codifica (Shannon). E' possibile migliorare prestazioni del sistema, tramite una codifica di canale a patto però che la bit-rate sia sempre al di sotto della capacità di canale.
( )RnEe eP −≤
dove n è la lunghezza delle parole di codice, E(R), detta funzione di affidabilità del canale, è una funzione a valori positivi dipendente dallo schema di modulazione, e quindi dal numero medio R di cifre binarie usate per rappresentare i simboli emessi dalla sorgente, e del valore asintotico Cinf della capacità di canale per una larghezza di banda che diverge.
E(R)
RCinf
Se R -> Cinfper ottenere la Pe desiderata occorre aumentare il valore di n
In generale, il controllo d'errore può avvenire secondo due principali strategie:
1) a correzione diretta d'errore (FEC) mediante codifica di canale, in cui si cerca di correggere gli errori effettuati senza scambio di messaggi fra trasmettitore e ricevitore;
2) a richiesta automatica di ritrasmissione (ARQ) , in cui il ricevitore richiede, utilizzando opportuni protocolli di comunicazione, la ritrasmissione dei simboli riconosciuti come errati.
Aspetti “ingegneristici”
1) trovare un metodo veloce e facilmente realizzabile di codifica e decodifica;2) realizzare codici che correggano un numero di errori per soddisfare le specifiche di sistema sulla probabilità di errore;3) mantenere i costi di realizazione entro limiti accettabili.
Saranno considerati errori causati da rumore gaussiano, quindi errori casuali, tralasciando altri tipi di errore, come gli errori a pacchetto (burst), causati da rumore di tipo impulsivo
FUNZIONE DI INTERLEAVING ( o SCRAMBLING)
CODICI A BLOCCHI
Ad ogni sequenza di k bit di informazione sono aggiunti r bit di controllo il cui valore dipende in qualche modo dai primi k. I bit di controllo sono utilizzati in ricezione dal decodificatore come verifica sui bit di informazione.
CODICI CONVOLUZIONALI
Non c’è una separazione netta fra i bit di controllo e quelli di informazione, ma un flusso di bit di informazione è sostituito da un flusso di bit codificati ad una frequenza di simbolo maggiore.
STIMA
La stima può avvenire secondo una logica di tipo hard o soft, a secondo che la decisione su ciascun bit sia effettuata tramite una soglia oppure grazie ad altri criteri
Ricevitore Decodificatore HardCanalencr
nr (t) r (t)
RicevitoreCanalencr(t) r(t)
Decodificatore soft
Il canale discreto
Nella teoria dei codici è comodo supporre il canale come discreto senza memoria (DMC)
In ingresso al canale sono accettati simboli appartenenti ad un alfabeto discreto e in uscita sono restituiti dei simboli appartenenti ad un alfabeto,anch’esso discreto, ma che, in generale, non coincide con quello di trasmissione. In questo modo si ingloba nel modello del canale anche la parte di sistema di modulazione e demodulazione
sorgente codificatoredi sorgente
codificatoredi canale modulatore
canale
+
utente demodulatore
rumore additivo
decodificatoredi sorgente di canale
decodificatore
sh ncka
a k
n (t)
c (t)
r (t)s h
rn
Canale discretosorgente discreta
Binary Symmetric Channel - BSC
0
1 1
0P(0/0)=1-p
P(1/1)=1-p
p
p
( ) ( )0 1 1 0P / P / p= =
( ) ( )1 1 0 0 1P / P / p= = −
( ) ( )ppppCBSC −−++= 1log 1log 1 22 bit/simbolo
CBSC
1
0.5 1 p
Codici a blocchi
Un codice a blocchi è un insieme di sequenze di bit di lunghezza fissa (che si possono modellare come vettori aventi come componenti i bit che formano la sequenze stesse) dette parole di codice.
Le parole di codice sono generate in modo deterministico utilizzando sequenze di bit di sorgente di lunghezza fissa e minore di quella delle parole di codice. Ciò rende necessario un aumento della la velocità di trasmissione per mantenere invariata la quantità di informazione trasmessa nell’unità di tempo.
Quindi un codificatore a blocchi divide il flusso continuo di bit di sorgente in blocchi (da cui il nome) di lunghezza prefissata pari a k bit, modellabili dal vettore
( )110 ,...,, −= kdddd
dove k è la dimensione del codice e, poiché si suppone la sorgente binaria, ciascun elemento
( )22 GFZdi ≡∈
Ogni messaggio di sorgente è elaborato singolarmente in modo tale da essere rappresentato mediante nuovi vettori di codice di n bit,
( )110 ,...,, −= ncccC
Un codice a blocchi generico con k bit di informazione e n-k bit di controllo è indicato con C(n,k)
T
1 k
1 n2
messaggio
parola di codice
C’è una corrispondenza biunivoca tra i blocchi messaggio e la loro rispettiva parola di codice. Dei blocchi (vettori) di messaggio solo 2k
di questi sono utilizzati per formare l'alfabeto di in trasmissione e si indicheranno con C1,C2, etc... Gli altri 2n-2k vettori sono parole di lunghezza n non appartenenti a C(n,k), che possono tuttavia presentarsi in ricezione a causa di errori nella stima dei bit.
I primi k bit di una parola di codice possono coincidere con i bit di sorgente, o essere una combinazione lineare di questi. Gli n-k bit di aggiunti sono calcolati usando i k bit di sorgente, secondo una legge ben precisa, e poiché dipendono esclusivamente dai k bit precedenti, il decodificatore è realizzato mediante reti logiche combinatorie.
Se le prime componenti c0, c1, …ck-1 di tutte le parole del codice C(n,k) sono esattamente i bit di informazione d0, d1, …dk-1 il codice si dice sistematico
codificatoredi canale
di codice
bit di parità
messaggioblocchi
messaggio
k
bitsk+r=n
r
k
blocchi
messaggio bits di parità
Se le 2n parole di codice si possono rappresentare attraverso la combinazione lineare di n vettori di codice linearmente indipendenti, il codice è detto lineare.La bit-rate in ingresso al codificatore è pari a:
R kTin = bit/sec
dove T è la durata temporale di ciascun blocco. All'uscita si ha un aumento percentuale della bit-rate pari a
RR
nk
out
in
=
e una conseguente efficienza o code rate R del codice C(n,k)
R RR
kn
in
out
= = < 1
N.B. Le due bit-rate Rin e Rout non possono essere confrontate direttamente con la capacità di canale C
Poiché k<n, le 2k parole di codice C(n,k) sono in numero minore dei 2n possibili vettori ottenibili all'uscita del canale, la capacità di C(n,k)di rivelare o correggere eventuali errori si basa su un criterioopportuno che permette di “riconoscere” una parola di codice a partire da una non appartenente a C(n,k).
Si può definire una distanza tra due parole di codice C1 e C2
( )1 2C , Cd
In fase di decodifica si sceglie la parola più "vicina" a quella ricevuta. In questo modo è possibile decodificare nel modo più corretto possibile o, nel caso peggiore, rivelare la presenza di errori. Si avràuna decodifica errata quando la parola di codice più vicina a quella ricevuta non è la parola trasmessa.
Per un vettore di n componenti il peso di Hamming, indicato con WH(v), è definito come il numero di componenti non nulle.La distanza di Hamming, indicata con dH(u,v), tra due vettori u e v, èil numero di componenti che hanno un valore diverso
La grandezza fondamentale per i codici a correzione d'errore operanti secondo la decodifica hard è la distanza minima di Hamming, indicata dHmin , che è definita come la più piccola distanza tra una qualsiasi coppia di vettori.
TeoremaLa distanza minima di un codice lineare a blocchi è uguale al minimo dei pesi di ogni parola di codice non nulla.
( )vWd HvH 0min min ≠=
Utilizzando il concetto di distanza minima, si definisce il raggio di un intorno centrato in ogni parola di codice
t dH=−min 1
2
Quindi in fase di decodifica risulteranno correggibili non più di t errori.
C
t
Ct
C
t
Se tutti gli intorni costituiscono una partizione dello spazio il codice èdetto perfetto
Notazione Matriciale
( )1210 ,,.....,, −−= kk ddddd messaggio
( )1210 ,,....,, −−= nn ccccc vettore di codice
( )12310 ,,,.....,, −−−= nnn rrrrrr ingresso del decodificatore
Per un codice sistematico
i ic d , i=0,...,k-1=
11 0 1 2 1 1 1
1 1 0 2 1 1
k , , ,k k
n ,n k ,n k k ,n k k
c p d p d .... p d
c p d p d ....... p d
−
− − − − −
= + + +
= + + +M M M
n-kk
[ ] [ ]
=
−
−
−−−
−−
knkk
kn
knkn
kn
pp
pppppp
dddccc
,1,
,21,2
,11,12,11,1
110110
1 00
00
00100001
L
OM
M
LLL
LL
LLLL
c dG=
G è detta matrice di generazione
[ ] nkk PIG ×= M
Ik k k×matrice identità di dimensioni
k n k× −P matrice di parità avente dimensioni
Sindrome
( )0 1 2 1n kS s ,s ,s ,......,s − −=
THrS ⋅=
[ ]T
n k n k nH P I − − ×
= M
[ ] [ ]0=
=⋅
−kn
kT
I
PPIHG LM
quindi
[ ]0=⋅⋅=⋅ TT HGdHc
Se una n-pla c è un vettore appartenente all'alfabeto di codice allora èverificata tale relazione
Siccome r può essere espresso come
r c e= +
( )0 1 2 1ne e ,e ,e ....,e −= vettore di errore
( ) TTTTT eHeHcHHecrHS =+=+==
Quindi il valore della sindrome S dipende esclusivamente dal vettore errore e non dalla parola di codice trasmessa
nknnnnkn
knn
knn
hehehes
heheheshehehes
,,21,101
2,2,212,101
1,1,211,100
......
............
−−−
−
−
+++=
+++=
+++=
MMM
In particolare, per un codice binario la sindrome è la somma modulo 2 delle colonne di H in corrispondenza delle quali sono occorsi eventuali errori. Utilizzando la sindrome è possibile determinare la presenza di errori in ricezione. In particolare, se e solo se la sindrome S è nulla la parola ricevuta è una parola di codice, quindi se S ≠ 0 la parola ricevuto èaffetta da errori.Quando la sindrome è nulla il decodificatore stima r come vettore di codice trasmesso.
Esempio: Codice di Hamming (7,4)
1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1
G
=
1 0 11 1 11 1 00 1 1
P
=
=
100101101011100010111
H
Dalla matrice G si ricava che la distanza minima del codice è dHmin=3, quindi il calcolo della sindrome consentirà di correggere sicuramente 1 singolo errore
Il numero di possibili sequenze ricevute è 27=128. Di queste solo 24=16 sono utilizzate, le quali generano una sindrome nulla. Siccome il codice è in grado di correggere sicuramente un errore, i vettori di errore che sono sicuramente correggibili hanno una composizione di sei 0 e un 1.
Ad esempio, se il terzo bit di una parola ricevuta risulta errato, il corrispondente vettore di errore e=[0 0 1 0 0 0 0], genera una sindrome pari a eHT=[1 1 0]. Se la stessa sindrome fosse generata da altri vettori di errore composti da più simboli 1, tali errori non sarebbero correggibili.
Occorre notare che esiste la possibilità di decodifica errata nel caso in cui il vettore errore e è una parola di codice. Ne segue che r=c+ecome somma di due parole di codice è ancora una parola di codice. In questo caso segue che il calcolo della sindrome non evidenziaerrore con conseguente errore di decodifica; l'errore occorso sidefinisce non rivelabile
Un altro parametro fondamentale per la valutazione di un codice a blocchi è la distribuzione dei pesi delle parole del codice
Sia Ai il numero di parole di C(n,k) di peso pari ad i. Si definisce l'insieme A0,…,An distribuzione dei pesi di C(n,k) , e la funzione enumeratore
( ) ∑=
=n
i
ii zAzA
0
Poiché per un canale binario simmetrico e senza memoria, gli eventi dierrore sono indipendenti, la probabilità di commettere i errori su una parola di codice di lunghezza n assume una distribuzione binomiale:
( ) ( ) ini ppin
inP −−
= 1,
Un decodificatore a correzione di t errori ha una probabilità di decodificare correttamente una parola ricevuta pari a
( ) ( )∑=
−−
≥
t
i
inicorr pp
in
bloccoP0
1
Si definisce la probabilità d'errore di blocco come la probabilità di una decodifica errata di una parola di codice. Si esprime un limite superiore per questa probabilità
( ) ( ) inin
tie pp
in
bloccoP −
+=
−
≤ ∑ 1
1
Nel caso di codici perfetti vale l'uguaglianza
Si definisce inoltre la probabilità d'errore non rivelabile per un codice C(n,k), considerando un canale BSC, come la probabilità che il vettore di errore sia identico ad una parola del codice C(n,k)
( ) ( ) ( )[ ]111
11
−−=
−
−= ∑=
zApp
pApP nin
ii
nnriv
( ){ }{ }
{ } ( )∑∑∑=
−
∈=
−
−===
−=∈=
===
n
i
inii
Cc
n
inriv
inii
Hi
ppAcePP
pCceP
niicwcC
i 111
1
...1 :
( )p
z pp
=−1
Si definisce, inoltre, una probabilità d'errore per bit come la probabilitàdi errore su ciascun bit della parola decodificata.
( ) ( )k
bloccoPbitP e
e ≥
Codici ciclici
I codici ciclici sono codici a blocchi lineari con una particolare struttura che permette di usare, oltre alla notazione matriciale, una notazione polinomiale
Per definizione, un codice ciclico, oltre ad essere lineare, gode della proprietà che se un vettore c=(c0,…,cn-1)∈C anche il suo vettore traslato di una posizione a destra o a sinistra c1=(cn-1, c0 ,…,cn-2)∈C. Ciò implica che qualsiasi shift circolare di una parola di codice èancora una parola di codice. Restano invariate tutte le altre considerazioni fin qui esposte a proposito dei codici a blocchi.
Rappresentazione polinomiale per codici ciclici
Alla parola di simboli di sorgente d=(d0,…,dk-1), fino ad ora vista come vettore in uno spazio di dimensione k, si associa il polinomio
( ) 11
2210
−−+++= k
k xdxdxddxd
La parola di codice c=(c0,…,cn-1) corrispondente a d=(d0,…,dk-1) avràcome polinomio associato
( ) 11
2210 ... −
−++++= nn xcxcxccxc
Affinché il codice sia ciclico si dimostra che c deve appartenere ad un sottospazio ciclico di
( ) [ ] ( )1/2 +≡ nn xxFGF
si consideri il polinomio c(x) moltiplicato per x
( ) nn
nn xcxcxcxcxxc 1
12
210 ... −
−− ++++=
Poiché questo polinomio è di grado n quando cn-1=1, esso non può rappresentare un polinomio associato ad una parola dell'alfabeto di codice.
si ha che
( ) ( ) ( )xcxcxxc nn
11 1 ++= −
dove
( )1 2 11 0 1 2
nn nc x c c x c x ... c x −− −= + + + +
quindi
( )21011 ,,,, −−= nn ccccc K
soddisfa la definizione di codice ciclico
In generale quindi, si ha che
( ) ( )( ) ( )xcxxqxcx ini ++= 1
( ) ( ) ( )1 mod += nii xxcxxc
con ci(x) ancora appartenente all'alfabeto di codice e q(x) polinomio quoziente
E’ possibile generare un codice ciclico mediante il cosiddetto polinomio generatore g(x) di grado n-k. Tale polinomio risulta essere un fattore di xn+1, e assume la forma
( ) 11 1 1n k n k
n kg x x g x ..... g x− − −= + + + +− −
Si dimostra che ogni polinomio di grado n-1 è di codice se e solo se èun multiplo di g(x) Si può quindi, tramite esso, generare un ideale, da cui il suo nome di polinomio generatore.
Quindi a partire da g(x) si può di generare un codice ciclico C(n,k) come insieme dei polinomi c(x) multipli di g(x)mod(xn+1)
Costruzione di un codice ciclico tramite un polinomio generatore
dato un polinomio di informazione d(x) di grado k-1 associato alla parola d=(d0,…,dk-1), il polinomio associato alla corrispondente parola di codice è data da
( ) ( ) ( )c x d x g x=
Verifica della condizione di ciclicitàUno shift circolare di una qualsiasi parola di codice c(x) produce un’altra parola di codice c1(x) che si può scrivere come segue
( ) ( ) ( )1 1 1nnc x xc x c x−= + +
Siccome g(x) è un fattore sia di c(x) sia di (xn+1), allora risulta essere un fattore anche di c1(x). Quindi esiste un polinomio d1(x) tale che
( ) ( ) ( )1 1c x d x g x=
quindi anche c1(x), generato da uno shift circolare di c(x), è una parola di codice poiché è generabile da g(x).
Si supponga, inoltre, di fattorizzare il polinomio xn+1. Essendo il polinomio generatore un fattore di xn+1, si ha
( ) ( )1nx h x g x+ =
dove h(x) prende il nome di polinomio di parità di grado k con h0=hk=1
( ) kk xhhxh ++= ......0
Si ha che ossia h(x) e g(x) sono ortogonali.
( ) ( ) ( )1 mod 0 −≡ nxxgxh
Per un codice ciclico sistematico il polinomio
( ) ( ) ( ) xg=xc xd
assume la forma
( ) 110
110
−−
−−−−− +++++= n
kknkn
kn xdxdxxc LL γγ
doveγ γ0 1,..., n k− −
sono i bit di parità indicati come coefficienti di γ(x), polinomio resto di grado n-k, ottenuto dividendo xn-kd(x) per g(x).
( ) ( ) ( ) ( )xxdx kn γ+− xgxq=
In fase di stima, come per i codici a blocchi, è utile il calcolo della sindrome
Per un codice ciclico sistematico la sindrome, in notazione polinomiale, è un polinomio s(x) di grado n-k-1 o minore ed è individuato dal resto della divisione tra la parola ricevuta r(x) ed il polinomio g(x) o equivalentemente
( ) ( ) ( ) ( )
( ) ( ) ( )xgxrxs
xsxgxqxr
mod=
+=
In questa notazione è facile notare che, analogamente ai codici a blocchi, se r(x) è una parola di codice, ossia un multiplo di g(x), allora s(x)=0. Se il polinomio associato alla parola ricevuta, espresso nella forma
( ) ( ) ( )xexcxr +=
dove
( ) 1110 ... −−+++= n
n xexeexe
è detto polinomio di errore, non appartiente ai polinomi di codice, allora la sindrome non è nulla.
Si ha che
( ) ( ) ( ) ( ) ( )xsxgxqxcxe ++=
poiché il polinomio di codice c(x) è un multiplo di g(x)
( ) ( ) ( )[ ] ( ) ( )xsxgxqxdxe ++=
quindi la sindrome non è altro che il resto della divisione tra e(x) e g(x)
La funzione del decodificatore è quella di stimare e(x) a partire da s(x)
Dualità della rappresentazione polinomiale e matriciale per codici ciclici
A g(x) e a h(x) sono associate la matrice G e la matrice H
In generale, a partire da un polinomio f(x) qualsiasi di grado j, è ottenuta la matrice generica F nel seguente modo
( ){ }
( ){ }
( ){ }jn
j xfx
xxf
xf
F
×
−
=
1
dove si indica con {f(x)} il vettore di j componenti corrispondenti ai coefficienti di f(x)
Esempio
( ){ } 1011=xg ( ){ } 11101=xh( ) 13 ++= xxxg ( ) 1234 +++= xxxxh
( ){ }( ){ }
( ){ }
( ){ }( ){ }
( ){ }
=
=
=
=
×−−−
×−
001011101011101011100
1101000011010000110100001101
11nkn
knnk
k xhx
xxhxh
H
xgx
xxgxg
GMM
Aspetti realizzativi dei codici a blocchi
+
a
b
a+b
a
b
ab
Registro a scorrimento
Trasferimento dati fra registri
seriale
parallelo
Il codificatore per una codifica di canale a blocchi accetta in ingresso sequenze di k bit di informazione dalla sorgente per poi inviarli, dopo l’elaborazione, al canale numerico. Ogni blocco di k bit di sorgente èseguito da n-k bit aggiuntivi. Durante questa operazione il codificatore non accetta altra informazione dalla sorgente. La sequenza di bit di sorgente deve essere, quindi, sezionata in blocchi di k bit seguito da n-kbit di padding e inviati ad un filtro FIR attraverso il quale è realizzato il codificatore.
filtro FIR
bit di informazionek
pad di n-k bit
bit di parola di codicen
Codificatori per codici a blocchi
d0 d1 k-1
ck
d0 d1 dk-1 d0 d1 dk-1
ck+1 c n-1
p11
p21
pk,1
p1,n-k
p11
p22
pk,2
p2,n-k
pk,n-k
registro di parità
al canale
d0 d1 dk-1d2
al canale
ingresso d
registro R del messaggio
d
Il messaggio di sorgente è traslato in un registro a scorrimento e inviato al canale. Non appena l'intero vettore messaggio è entrato nel registro, gli n-k bit di controllo sono resi disponibili all'uscita degli n-k sommatorimodulo 2, serializzati e inviati sul canale.
La complessità dell'intero circuito è linearmente proporzionale alla dimensione del codice.
Decodificatori per codici a blocchi
++ +
r
r r r
c
e
s
cc
s s
e e0 1 n-1
0 1 n-1
10 n-k-1
0 1 n-1
Registro di buffer R
Circuito per il calcolo della sindrome
Circuito per la rivelazione d'errore
occorre innanzi tutto effettuare il calcolo della sindrome, che si realizza facilmente mediante da un circuito concettualmente simile a quello del codificatore. L'uscita di tale circuito fornirà l'ingresso al circuito di rivelazione dell'errore. Infatti, data la corrispondenza biunivoca tra sindrome e vettore d'errore (nel caso in cui i vettori d’errore appartengono all’insieme correggibile) direttamente dalla standar arraydel codice, può essere ricavata una tabella di decodifica (tabella di look-up) contenente tutti i possibili cosets leader e le sindromi corrispondenti.
Circuito di calcolo per la sindrome di un codice a blocchi sistematico
s0 s1
p00
p10
pk-1,0
p0,n-k-1
p00
p10
pk-1,0
p1,n-k-1
pk-1,n-k-1
r0 r1 r n-1r2
sn-k-1
r
r0 rn-k rn-k+1 rn-1 r1 rn-k rn-k+1 rn-1 rn-k rn-k+1 rn-1r n-k-1
Il circuito di rivelazione dell'errore è completamente combinatorio.Questo tipo di decodifica ha il vantaggio di consentire tempi didecisione minimi con la minima probabilità d'errore. Tuttavia, per elevati valori di n-k, la realizzazione del circuito diventa onerosa a causa della quantità di memoria necessaria e della complessità del circuito combinatorio di rivelazione del vettore d'errore. Il costo computazionale del sistema è essenzialmente imputabile alla complessità di quest'ultimo.
Codificatori e decodificatori di codici ciclici
Data la proprietà di ciclicità del campo al quale gli elementi di un codice ciclico appartengono, è possibile utilizzare dei registri ad anello per la realizzazione dei codificatori e dei decodificatori.
n simboli binari contenuti nei registri a scorrimento ad n stadi possono essere interpretati come coefficienti di polinomi di grado n-1
somma di polinomi: g(x)+d(x)=c(x)
+
Un registro a scorrimento ad anello, o circolare, è utilizzato per traslare ciclicamente il vettore dei coefficienti associati al generico polinomio memorizzato in esso:
v( x )= + +........+v x-v v x nn
0 1 11−
v vv0 v1 2 n−1
prodotto di polinomi: g(x)d(x)=c(x)
+ +++++
g 0g 1gn-4gn-2
gn-3
gn-1
d0 ,...,dk-1
c 0 ,...,cn-1
divisione di polinomi: c(x)/g(x)=d(x)
d0 ,...,dk-1c0 ,...,cn-1
gn-1gn-3
gn-2
gn-4g1
g0
+ + + + + +
-1
Codici convoluzionali
Un codificatore convoluzionale binario consiste in una macchina a stati finiti formata da un registro a scorrimento a M stadi avente opportune connessioni verso L sommatori modulo 2. I pesi delle connessioni possono valere 0 o 1.
1 M2input
output 1
output 2
output L
w1L
w2L wKL
w12w22
wK2
w11w21 wK1
Lo schema delle connessioni si può modellare mediante dei polinomi generatori
( ) LlDwDwwDg MMllll ≤≤+++= − 1 ,... 1
21
la l-esima uscita del codificatore si può esprimere come il prodotto fra il polinomio generatore gl(D) e il polinomio m0 + m1D+ ... + mi Di+…, dove la sequenza (m0, m1, ... , mi, ...) è la sequenza di simboli in ingresso al codificatore.
Se un gruppo di L bit produce un’uscita codificata di lunghezza N bit, la rate di codifica è quindi data da
NLr =
La lunghezza di vincolo del codice convoluzionale è definita come il numero di scorrimenti per i quali un bit di messaggio, può influenzare l’uscita del codificatore. In un codificatore con un registro a scorrimento lungo M, la memoria è uguale a M bit di messaggio e K=M+1scorrimenti sono necessari per entrare nel registro ed uscirne=> Lunghezza di vincolo=M.
Il comportamento nel dominio del tempo di un codificatore convoluzionale può essere definito mediante la sua risposta all’impulso. Per un codificatore rate 1/K mostrato occorrono K risposte all’impulso per caratterizzarlo nel dominio del tempo. Siano (g0
(1), g1(1), ...gM
(1)),…, (g0
(K), g1(K)+, ...gM
(K)) le risposte all’impulso di tutte le connessioni ingresso-uscita del codificatore. Tali risposte all’impulso, che sono ottenute determinando le due sequenze di uscita al codificatore quando in ingresso ho la sequenza (1,0,0,...,0), sono dette le sequenze generatrici del codice.
Il funzionamento di un codificatore convoluzionale può essere illustrato in forma grafica mediante tre diagrammi equivalenti: albero del codice, traliccio (trellis) e diagramma degli stati.
1 32input
output 1
output 2
( ) 21 1 DDDg ++=
( ) 21 1 DDg +=
albero del codice
00
11
10
01
11
00
01
10
00
11
10
01
00
11
0
1
00111001110001100011100111000110
i simboli che etichettano i rami del percorso costituiscono la sequenza codificata. Si noti che è stato assunto che il valore iniziale memorizzato negli stadi del codificatore è 0. L’ albero diventa ripetitivo dopo i primi tre rami, cioè, dopo il terzo livello di biforcazione, si ripete la stessa configurazione iniziale Es. (1, 0, 0, m3, m4, ...) e (0, 0, 0, m3, m4, ...), generano gli stessi simboli di codice in corrispondenza dell’ingresso di m3 e m4, quindi la coppia di nodi corrispondente può essere unita.
traliccio (trellis)
(00)
(10)
(01)
(11)
00
11
11
0010
01
01
00
11
11
0010
01
01
00
11
11
0010
01
01
00
11
10
01
11
00 00
11
10
01
01
00
11
10 10 10
un ramo del trellis prodotto da uno 0 in ingresso è indicato con una linea nera mentre un ramo di codice prodotto da un 1 in è indicato con una linea verde.
Ogni sequenza in ingresso (messaggio), corrisponde ad uno specifico percorso nel trellis. Ad esempio, la sequenza (1, 0, 0, 1, 1,) produce l’uscita codificata (11, 10, 11, 11, 01).
Il trellis evidenzia il fatto che al codificatore convoluzionale si può associare una macchina a stati finiti.
Lo stato di un codificatore convoluzionale si può identificare con il contenuto del registro a scorrimento che determinerà l’uscita successiva.
Quando il j-esimo bit entra nel registro a scorrimento, la porzione della sequenza del messaggio contenente i più recenti M bit è (mj-M+1 , ... ,mj-1 , mj), dove mj è il bit corrente, che corrisponde allo stato del codificatore. Nel caso del codificatore convoluzionale nell’esempio considerato si ha che lo stato può assumere ognuno dei quattro possibili valori: a=00, b=01, c=10, d=11.
Se la lunghezza di vincolo del codificatore è M e la lunghezza della sequenza in ingresso è L, il trellis è composto da L+M stadi.
In generale, con i primi M-1 stadi si realizza l’allontanamento dallo stato iniziale, che nel caso considerato è suposto essere a=00, e con gli ultimi M-1 stadi si ritorna di nuovo ad esso.
Si nota che nella porzione centrale il trellis mostra una struttura fissa e periodica.
11
11
0010
01
01
00(00)(00)
(10)(10)
(01)(01)
(11)(11)10
Si possono unire i nodi a sinistra e destra, ottenendo diagramma degli stati del codificatore
00
11
00
10
01
(00)
(01)(10)
(11)
11
01
10
Una transizione di stato in risposta di un simbolo 0 in ingresso èrappresentata da una linea nera mentre una transizione in corrispondenza ad un 1 è rappresentata con una linea verde. I simboli binari che etichettano i rami sono l’uscita del codificatore in corrispondenza di quella transizione.
Decodifica a massima verosimiglianza di codici convoluzionaliAlgoritmo di Viterbi
Una sequenza codificata con un codice convoluzionale può essere decodificata minimizzando la probabilità di errore se si sceglie, tra tutte le sequenze generabili dal decodificatore, quella che meno si discosta da quella ricevuta.
Distanza di HAMMING decodifica HARD
Distanza di EUCLIDEA decodifica SOFT
Una ricerca esaustiva tra tutte le possibili sequenze generate dal codificatore ha un costo computazionale che diventa presto insostenibile al crescere della complessità del codificatore. L’algoritmo usato per estrarre tale sequenza e che minimizza le operazioni necessarie per l’estrazione di tale sequenza è l’algoritmo di Viterbi.
Sia m un vettore di messaggio (bit di sorgente) e x il corrispondente vettore di codice prodotto dal codificatore inviato al canale discreto. Sia yil vettore ricevuto, che può differire dal vettore di codice trasmesso a causa degli errori causati dalla presenza del rumore. Dato un vettore ricevuto y, il decodificatore ha il compito di fare una stima m del vettore di messaggio.
Poiché vi è una corrispondenza biunivoca tra il vettore di messaggio m ed il vettore di codice x, il decodificatore può assolvere al compito equivalentemente effetuando una stima x del vettore di codice. In altre parole m=m se e solo se x=x .
Sia p(y/x) la probabilità condizionata di ricevere la sequenza di simboli rappresentata dal vettore y quando è stata trasmessa la sequenza rappresentata da x. Il decodificatore a massima verosimiglianza seleziona la stima x in modo tale da minimizzare la funzione ln( p(y/x)).
(00)
(10)
(01)
(11)
00
11
11
0010
01
01
10
00
11
11
0010
01
01
10
00
11
11
0010
01
01
10
00
11
10
01
11
00 00
11
10
01
01
00
11
Al terzo stadio ci sono due percorsi che entrano in ognuno dei quattro nodi del traliccio. Ogni percorso che passa per il nodo in questione, e si dirama successivamente, si divide a monte del nodo nei due rami che lo hanno condotto al nodo stesso. Quindi, ciò che li distingue è il percorso attraverso il quale sono giunti al nodo in corrispondenza del quale si sono uniti.
Un decodificatore a massima verosimiglianza può prendere una decisione su quale dei due percorsi mantenere a monte del nodo scegliendo il ‘migliore’ dei due e scartando l’altro.
Questa sequenza di decisioni corrisponde al funzionamento dell’algoritmo di Viterbi. Le decisioni si basano sull’uso di una metrica, il cui calcolo èeffettuato per tutti i possibili percorsi nel traliccio.
Esempio
(00)
(10)
(01)
(11)
00
11
11
0010
01
01
10
00
11
11
0010
01
01
10
00
11
11
0010
01
01
10
00
11
10
01
11
00 00
11
10
01
01
00
11
1 1 0 0 1 1 0 0 0 1 0 0 0 0Seq. Ric.
(00)
(10)
(01)
(11)
4
1
1
2
2
2
3
3
3
3
2
3
1 1 1 0 1 1 0 0 0 0 0 0 0 0Seq. Stim.
2 222 2 1 1
2
0
Per ogni nodo (stato) nel traliccio l’ algoritmo confronta i due percorsi che entrano in ogni nodo, ed il percorso con la metrica minore è mantenuto, mentre l’ altro è scartato. Il percorso che è mantenuto dall’ algoritmo èchiamato sopravvissuto. Per un codice convoluzionale di lunghezza di vincolo K, ci sono non più di 2K-1 percorsi sopravvissuti e le loro metriche devono essere ogni volta memorizzate.
Tuttavia il numero dei percorsi sopravvissuti è relativamente basso se confrontato con la totalità dei percorsi realizzabili, quindi ciò consente di mantenere il relativamente basso il costo computazionale dell’algoritmo.
Quando due percorsi che entrano in uno stato hanno la stessa metrica èeffettuata una scelta casuale su quale dei due mantenere.
Passi dell’ Algoritmo di Viterbi
Passo 1: cominciando dal livello j=M, è calcolata la metrica di ogni percorso che entra in ogni stato del codificatore. E’ mantenuto un solo percorso (sopravvissuto) per ogni nodo del trellis (stato) in corrispondenza di quel livello.
Passo 2: si passa dal livello j al livello j+1. E’ calcolata la metrica per ogni percorso che entra in ogni stato sommando la metrica dei percorsi sopravvissuti al livello j alla metrica dei rami che connettono il livello j al livello j+1. Per ogni stato si determina il percorso con la metrica minore e tutti gli altri sono scartati.
Passo 3: se il livello j<L+M si ripete la procedura illustrata al Passo2, altrimenti l’algoritmo è giunto alla fine. In tal caso l’unico percorso sopravvissuto determina la sequenza stimata.
Il notevole vantaggio dell’algoritmo di Viterbi è che, per un codice con una lunghezza di vincolo K e frequenza di codice r=1/n , il numero di operazioni eseguite nel decodificare L bit è L2n(K-1) , che è una quantità lineare in L. Tuttavia, il numero di operazioni eseguite per ogni bit decodificato è una funzione esponenziale della lunghezza di vincolo K. Questa dipendenza esponenziale con K limita l’uso dell’algoritmo di Viterbi come tecnica di decodifica accettabile per codici con lunghezza di vincolo relativamente bassa (tipicamente da 7 a 11).
Il ritardo di decodifica, è in generale troppo lungo per molte applicazioni pratiche, oltre al fatto che la memoria richiesta per registrare l’intera lunghezza della sequenza sopravvissuta è troppo costosa.
Per ovviare al problema sono trattenuti ad ogni istante temporale t, solo i δ bit di informazione più recenti decodificati in ogni sequenza sopravvissuta. Per realizzare ciò, quando un nuovo bit di informazione è ricevuto, si prende una decisione sul bit ricevuto δ rami indietro nel trellis confrontando le metriche delle sequenze sopravvissute e decidendo in favore del bit della sequenza che ha la metrica più bassa. Un ritardo di δ≥5K causa un degrado minimo rispetto alle prestazioni dell’ algoritmo di Viterbi ottimo.
Un limite pratico rispetto al funzionamento teorico dell’algoritmo di Viterbi è che le metriche accumulate non possono essere registrate con precisione infinita, poiché queste, in generale, sono numeri reali.
Un problema nasce dal fatto che, sebbene possiamo quantizzare ogni metrica di ogni ramo in un ragionevole numero di bit tali da poter essere memorizzati, il valore cumulativo delle metriche cresce linearmente con il numero di rami decodificati. Questa difficoltà può essere superata annullando la metrica minore sottraendo la stessa quantità da ogni metrica accumulata dopo il calcolo per ogni ramo.
La massima distanza tra tutte le metriche dei percorsi distinti èfacilmente determinabile. Si supponga che la migliore metrica di ramo sia zero e la peggiore sia ν (possiamo ottenere ciò sottraendo una costante da tutte le metriche di ramo). La massima distanza per una lunghezza di vincolo K è quindi (K-1)ν , dato che ogni stato può essere raggiunto da ogni altro stato in al massimo K-1 transizioni. Poiché tutte le metriche di ramo si trovano tra zero e ν, la massima variazione di metrica fre due stati è Kν, che si ottiene sommando la metrica iniziale per separare i due percorsi e quella per riunirli; quindi lo spread non può essere maggiore di Kν. Per questo motivo, il numero di bit necessario per memorizzare la metrica di un percorso è
( ) νKn 2log=
Distanza libera (dfree)
Le prestazioni di un codice convoluzionale non dipendono solamente dall’algoritmo di decodifica usato ma anche dalle proprietà di distanza del codice. In questo contesto la misura più importante delle prestazioni del codice convoluzionale nel combattere il rumore di canale è la distanza libera, indicata con dfree
La distanza libera di un codice convoluzionale è definita come la minima distanza di Hamming tra due parole di codice associate a due percorsi nel trellis che divergono ad un certo stadio e che poi si riuniscono ad unostadio successivo.
Il calcolo della distanza libera dfree è legato strettamente con il calcolo della funzione generatrice del codice convoluzionale. Per un codice in cui ad esempio dfree=5, sono correggibili fino a due errori nella sequenza ricevuta.
16271232167514
16176611053313
155723433512
143661233511
121545116710
127535619
103712478
101711337
875536
735235
617154
5753
dfreeGeneratori in ottaleLungh. vincolo