Argomenti della Lezione ) Hamming bound, coset, codici equivalenti 2) Esercizi sui codici lineari a blocchi
Osservazione () Per effettuare la decodifica a rivelazione di errore si può seguire una delle due procedure seguenti: a) Verificare che il vettore y ricevuto sia uguale ad una delle codeword del codice C. b) Verificare che la sindrome s associata al vettore y ricevuto sia uguale al vettore nullo. Per effettuare la decodifica a correzione di errore si può seguire una delle due procedure seguenti che permettono di stimare la codeword trasmessa x: a) Identificare all'interno della matrice canonica la posizione in cui si trova il vettore y ricevuto. Scegliere come vettore trasmesso (codeword) quello che compare nella stessa colonna di y e in prima riga. b) Calcolare la sindrome s associata ala vettore y ricevuto e identificare il coset leader corrispondente ad s nella tabella di associazione sindrome/coset leader. Scegliere come vettore di errore stimato tale coset leader e sommarlo ad y ottendo la codeword stimata x. 2
Sia H la matrice di controllo di parità di un codice lineare a blocchi ed e il generico vettore di errore, scritti come: e [ e e... ] 2 e n Osservazione (2) H T h h2... h n dove h i è la i-esima riga della matrice H T. La sindrome associata ad e si può scrivere come: s eh T Quindi s è uguale alla somma delle righe di H T che corrispondono alle posizioni in cui si è verificato un errore. Nel caso di codice a correzione di errore singolo, la sindrome associata ad un errore singolo in posizione i è uguale alla riga i-esima di H T (o alla colonna i-esima di H). Se esiste una riga di H T composta da tutti valori pari a zero oppure se esistono due righe di H T uguali allora non è possibile correggere tutti i vettori di errore a peso unitario. i n e h i i 3
Sia t la capacità di correzione degli errori per un codice lineare a blocchi C. Un dato requisito su t si tramuta in un vincolo su n e k. Infatti per la disuguaglianza detta Hamming Bound si ha: 2 n k + Osservazione (3) n + n 2 +... + n t t i n i numero di diversi coset del codice C numero di diversi vettori di errore di peso numero di diversi vettori di errore di peso numero di diversi vettori di errore di peso 2 numero di diversi vettori di errore di peso t Nota : il coefficiente binomiale rappresenta il numero di possibili combinazioni in cui possono essere disposti i elementi in n posti (n i): n n! i!( n i)! Nota 2: la Hamming Bound diventa uguaglianza per codici perfetti. i 4
Osservazione (3) cont. Consideriamo il codice lineare a blocchi C {,,,}. Poichè il numero M di codeword è uguale a 4 e M2 k allora k2. Tale codice ha n3. d min e quindi non può nè correggere nè rivelare errori. Infatti, ad esempio il vettore di errore a peso unitario [] sommato alla seconda codeword produce la codeword [] e ciò non permette di rivelare tale errore singolo. Tale codice ha 2 n-k 2 diversi coset di 2 k 4 diversi elementi ciascuno che sono: {,,,} il cui coset leader è {,,,} il cui coset leader è 5
Osservazione (3) cont. Consideriamo il codice lineare a blocchi C 2 {,,,}. Tale codice, come il codice C ha n3 e k2. d min 2 e quindi non può correggere errori, ma può rilevare errori singoli. Tale codice ha 2 n-k 2 diversi coset di 2 k 4 diversi elementi ciascuno che sono: {,,,} il cui coset leader è {,,,} il cui coset leader è Poichè 2 n-k 2 ed n3, i due diversi coset leader associati ai due diversi coset non coprono tutti i possibili vettori di errore a peso unitario di lunghezza 3 che sono:,,, (includendo anche il vettore errore di tutti zeri). Considerando la Hamming bound, per permettere la correzione di errori singoli, cioè per permettere t è necessario aumentare la ridondanza cioè aumentare n-k (o equivalentemente aumentare 2 n-k ). 6
Osservazione (3) cont. Consideriamo la disuguaglianza Hamming Bound per t: 2 n k + n + n!!( n )! + n Tale disuguaglianza è verificata per i seguenti valori minimi di n al variare di k: k n R c k/n note 3,33 Verificata con uguaglianza (codice perfetto). Corrisponde al codice a ripetizione (3,) 2 5,4 3 6,5 4 7,57 Verificata con uguaglianza (codice perfetto). Corrisponde al codice di Hamming (7,4) 7
Osservazione (3) cont. Analizziamo il caso in cui k ed n3 (per aumentare n-k abbiamo diminuito k). Consideriamo il codice lineare a blocchi C 3 {,}. Tale codice è il codice a ripetizione (3,). I 2 n-k 4 diversi coset di C 3 sono: {,} il cui coset leader è {,} il cui coset leader è {,} il cui coset leader è {,} il cui coset leader è I quattro coset leader ora includono tutti i 4 possibili vettori di errore a peso. 8
Esercizio Sia dato un codice C a ripetizione (4,). Si determini: ) se C è lineare e/o sistematico e perchè 2) la matrice generatrice del codice 3) la capacità di correzione dell errore 4) la capacità di rivelazione dell errore 5) il circuito codificatore 9
Esercizio cont. ) Il codice a ripetizione è un codice lineare a blocchi di tipo (n,). Per questo codice n4.la relazione di corrispondenza tra le dataword e le codeword è la seguente: u -> x u -> x Poiché il vettore x di tutti zeri appartiene al codice ed inoltre la somma modulo 2 delle codeword è ancora una codeword, allora il codice è lineare. Il codice è sistematico poiché le codeword hanno come simbolo iniziale la dataword associata. 2) Per la matrice G generatrice del codice, di ordine k x n x 4, si può scrivere: x ug in Ponendo x x [ x x2 x3 x4] u [ u] [ ] e u [] si ha G [ ] cui
Esercizio cont. 3) La capacità di correzione dell errore si calcola a partire dalla distanza minima. Poiché esistono soltanto due parole di codice che differiscono in tutti i quattro bit, la distanza minima di Hamming è d min 4. Tale codice può correggere fino a t errori dove: t d 2 4 2 min 4) Tale codice può rivelare fino a r errori dove: r dmin 4 3
Esercizio cont. 4) Poiché k il registro a scorrimento in ingresso è costituito da un solo stadio, mentre essendo n4 il registro a scorrimento in uscita è costituito da 4 stadi. Dalla relazione matriciale tra x, u e G si può scrivere: x u, x 2 u, x 3 u, x 4 u. Il circuito codificatore è il seguente: k u x x 2 x 3 x 4 n4 2
Esercizio 2 Si consideri un codice lineare a blocchi a correzione di errore singolo, e caratterizzato dalla seguente matrice di controllo di parità: H Trovare l errore associato alla ricezione della parola y[ ] 3
Calcoliamo la sindrome associata ad y[ ] H Esercizio 2 Esercizio 2 cont cont. ] [ ] [ T yh s Poichè s[ ] è uguale alla 5 a colonna di H (o alla 5 a riga di H T ), allora è stato introdotto un errore in 5 a posizione: e[ ] 4
Esercizio 3 Si consideri un codice lineare a blocchi con k2 e n5, e caratterizzato dalla seguente matrice generatrice: G Determinare: ) Le parole di codice 2) La capacità di correzione e di rivelazione dell errore 3) Utilizzando la sindrome, verificare che la parola z[ ] non appartiene al codice 4) Utilizzando la sindrome effettuare la correzione della suddetta parola z. 5
Esercizio 3 cont. ) Le parole di codice si ottengono moltiplicando tutte le possibili dataword che si ottengono con k2 per la matrice generatrice del codice: x ug [ ] u u 2 u u u u [ ] x [ ] [ ] x [ ] [ ] x [ ] [ ] x [ ] 6
Esercizio 3 cont. 2) Per ricavare la capacità di correzione e di rivelazione dell errore del codice bisogna determinare la distanza minima. Poiché il codice è lineare, la distanza minima è data dal peso di Hamming della parola di codice x che ha peso minimo. Poiché le parole di codice x hanno peso rispettivamente: 3, 3 e 4, allora la distanza minima del codice è pari a 3. La capacità di correzione e di rivelazione dell errore sono rispettivamente: t d 2 3 2 min r dmin 3 2 7
Esercizio 3 cont. 3) La sindrome associata ad un vettore z è un vettore di dimensione mn-k. Per risalire alla sindrome, la quale permette di verificare l esistenza di una parola di codice ed eventualmente di correggerla, bisogna calcolare la matrice del controllo di parità H (matrice di ordine (n-k) n) partendo dalla matrice P (matrice di ordine k (n-k)): [ P ] H I G [ I P] k T n k P H [ P T I ] 3 8
Esercizio 3 cont. s zh T [ ] [ ] Poiché la sindrome s associata al vettore z non risulta un vettore di soli zeri, allora z non è una codeword. 9
Esercizio 3 cont. 4) Per correggere la parola z bisogna calcolare il vettore di errore e. Sappiamo che il codice è a correzione di errore singola e che s[ ] è uguale alla quarta colonna di H e quindi si è verificato un errore in quarta posizione: e [ ] A tale vettore di errore corrisponde la codeword: x z+ e [ ] 2
Esercizio 4 Un codice lineare a blocchi (6,3) sistematico ha i tre bit di parità calcolati mediante le tre equazioni: x x 4 u u + u + u 3 5 2 6 u u2 x + + u 3 Determinare: ) La matrice generatrice del codice 2) L insieme delle parole di codice Decodificare le parole: y [ ] e y 2 [ ] 2
) Essendo il codice sistematico, la matrice generatrice 3 6 può essere scritta come: ed essendo: [ ] P I G 3 3 4 u u x + Esercizio 4 Esercizio 4 cont cont. si ha: 2 6 3 2 5 u u x u u u x + + + G 22
Esercizio 4 cont. 2) Poichè k3, esistono 2 k 8 codewords date da: x ug G Scrivendo tutte le possibili combinazioni di dataword di tre bit si ottiene la tabella: dataword codeword 23
Per la decodifica è necessario calcolare la matrice di controllo di parità: P G Esercizio 4 Esercizio 4 cont cont. [ ] 3 I P H T T H 24
Esercizio 4 cont. Per decodificare la parola y [ ] sindrome associata: s bisogna calcolare la [ ] [ ] T yh Poichè s è un vettore di tutti zeri, la parola y è stata ricevuta senza errori e la codeword trasmessa è x y [ ] 25
Esercizio 4 cont. Per decodificare la parola y 2 [ ] sindrome associata: s bisogna calcolare la [ ] [ ] T 2 y2h Poichè s 2 è uguale alla quarta riga di H T, la parola y 2 è stata ricevuta con un errore in quarta posizione, e quindi la codeword trasmessa è: x y 2 + e [ ] + [ ] [ ] 26
Esercizio 5 Un codice lineare a blocchi ha la seguente matrice di controllo di parità: H ) Determinare la matrice generatrice del codice 2) Decodificare la parola y[ ] ed identificare la dataword trasmessa. 27
) Poichè H è in generale una matrice di ordine (n-k) n, si ha che: n-k3, n6, > k3. La matrice generatrice del codice è una matrice k n del tipo: Esercizio 5 Esercizio 5 cont cont. ] [ 3 I P H T Ricavando la matrice P di ordine k (n-k) si può risalire alla matrice G: [ ] P I G 3 G P 28
Esercizio 5 cont. Per decodificare la parola y [ ] bisogna calcolare la sindrome associata: s yh T [ ] [ ] Poichè s è uguale alla seconda riga di H T, la parola y è stata ricevuta con un errore in seconda posizione, e quindi la codeword trasmessa è: x y + e [ ] + [ ] [ ] Poichè il codice è sistematico, la dataword trasmessa è: u [ ] 29
Osservazione (4) Ogni codice lineare a blocchi C ha un codice equivalente C con matrice generatrice in forma sistematica (o standard). Sia G la matrice generatrice di un codice binario lineare a blocchi C. La matrice generatrice G di un codice C equivalente al codice C può essere ottenuta da G tramite le seguenti operazioni: ) permutazione delle righe di G 2) sostituzione di una riga di G con la somma di una riga con un altra riga 3) permutazione delle colonne di G N.B. le operazioni elementari sulle righe del tipo ) e 2) portano ad una matrice G che genera un codice C C. Le operazioni semplici sulle colonne del tipo 3) portano ad una matrice G che genera un codice C equivalente a C, ma non necessariamente uguale. 3
Esercizio 6 Un codice lineare a blocchi ha la seguente matrice generatrice: G Determinare la matrice generatrice in forma sistematica di un codice equivalente 3
Esercizio 6 cont. G Permutando la seconda colonna con la terza si ottiene la matrice G in forma sistematica: ' G 32
Esercizio 6 cont. Si può verificare che il codice lineare C generato da G è diverso dal codice lineare C generato dalla matrice G : x ug u u 2 [ ] dataword C codeword x ug' 2 [ u ] u C dataword codeword 33
Esercizio 7 Un codice lineare a blocchi ha la seguente matrice generatrice: G Costruire la tabella di decodifica (sindrome/coset-leader) e decodificare la parola y[ ] 34
Esercizio 7 cont. Il codice lineare C (4,2) generato da G è equivalente (in particolare è uguale) al codice lineare C generato dalla matrice G ottenuta sostituendo la prima riga di G con la somma della prima e seconda riga di G: G' a cui corrisponde la matrice di controllo di parità: H 35
Esercizio 7 cont. Le codewords di C sono: {,,, } I 2 n-k 4 coset (distinti) di C sono: + C {,,, } + C {,,, } + C {,,, } -> è uguale a C + C {,,, } + C {,,, } -> è uguale al secondo coset + C {,,, } -> è uguale al secondo coset + C {,,, }... Sono così calcolati i 4 coset di C 36
Esercizio 7 cont. Il numero di sindromi è pari a 2 n-k 4. Ad ogni sindrome è associato un coset leader. Calcolando la sindrome di ogni coset leader si ottiene la tabella di decodifica: Tabella di decodifica sindrome coset leader La sindrome associata alla parola y[ ] è s[ ], che corrisponde ad un vettore di errore: e[ ] e quindi la codeword decodificata è: xy+e[ ] 37
Esercizio 7 cont. Poiché per questo codice con n4 e k2 la Hamming Bound non è verificata neanche per t, allora il codice non può correggere gli errori singoli. Infatti i 4 coset leader di C non possono includere tutti i 4 vettori a peso unitario ed il vettore a peso nullo. 38
Esercizio 8 Costruire un codice lineare a blocchi con n5 e t. ) Per scegliere il valore di k devo fare in modo che la Hamming bound sia verificata per i valori dati di n e t. I valori di k che verificano la Hamming Bound sono k e k2. Scelgo k2 perché offre una ridondanza (n-k) minore. 2) Il codice deve essere composto da 2 k 2 2 4 codeword: C{x, x 2, x 3, x 4 } 39
Esercizio 8 cont. 3) Poiché il codice è lineare a blocchi, C deve includere la codeword di tutti zeri e la somma di ogni coppia di codeword deve essere una codeword. 4) Per avere t, la distanza minima deve essere: d min 2t+3. Essendo il codice lineare ciò implica che il peso di ogni codeword (esclusa la codeword di tutti zeri) deve essere 3. 4
Esercizio 8 cont. 5) Se assumiamo che il codice sia sistematico, possiamo scrivere le 4 codeword: x x 2??? x 3??? x 4??? 6) Scegliendo la seconda codeword con peso pari a 3 si ha: x x 2 x 3??? x 4??? 4
Esercizio 8 cont. 7) Scegliendo la terza codeword con distanza pari a 3 dalla seconda codeword e con peso 3: x x 2 x 3 x 4??? 8) Scegliendo la quarta codeword come somma della seconda e terza codeword: x x 2 x 3 x 4 42
Esercizio 8 cont. Si può verificare che il codice C formato da: x x 2 x 3 x 4 è un codice lineare a blocchi con distanza minima pari a 3. 43
Per trovare la matrice generatrice G del codice C è necessario trovare una base del sottospazio vettoriale generato dalle codeword del codice. Poniamo le 2 k codeword del codice sulle righe di una matrice ed operiamo l eliminazione di Gauss: Esercizio 8 Esercizio 8 cont cont. La matrice ridotta in questa forma ha due vettori riga non nulli che formano una base per il codice lineare a blocchi C, il quale per definizione è un sottospazio vettoriale di dimensione k2 (numero di vettori della base). 44
Esercizio 8 cont. La matrice generatrice G del codice C è quindi: G la quale è scritta in forma sistematica. 45