Teoria dell’Informazione II Anno Accademico 2013–2014 Lezione 16 Ugo Vaccaro Nella Lezione scorsa abbiamo introdotto una classe di codici a correzione di errore (codici di Hamming) in grado di correggere tutte le possibili occorrenze di un errore che potevano capitare durante la trasmissione di parole del codice. In questa lezione introdurremo una generalizzazione dei codici di Hamming e proveremo che essi sono in grado di correggere un numero maggiore di errori. In via preliminare, abbiamo bisogno di ricordare alcune propiet` a di base dei campi finiti. Denotiamo con F2 il campo con elementi {0, 1}, munito dell’operazione di addizione e moltiplicazione modulo 2. Con F2m denoteremo il campo composto da tutti i 2m vettori binari di lunghezza m. L’operazione di addizione in F2m `e la solita operazione di addizione vettoriale, ovverosia se a, b ∈ F2m , allora a + b = c ∈ F2m , ed il vettore c ha come i-esima componente la somma (modulo 2) della i-esima componente di a e b. Per definire un’opportuna operazione di moltiplicazione in F2m , `e utile vedere gli elementi (vettori) di F2m come polinomi di grado al pi` u m − 1. Ovvero, dato il vettore a = (a0 , a1 . . . , am−1 ), esso lo vedremo come il polinomio a(x) = a0 + a1 x + . . . + am−1 xm−1 . Un polinomio p(x) di grado > 1 a coefficienti in F2 `e detto polinomio irriducibile se esso non `e divisibile per nessun altro polinomio a coefficienti in F2 . Si pu`o vedere che un polinomio m irriducibile su F2 necessariamente divide il polinomio x2 −1 + 1. Un polinomio p(x) a coefficienti in F2 `e detto m polinomio primitivo se esso `e un polinomio irriducibile (quindi divide x2 −1 + 1), e non divide xn + 1 per ogni n < 2m − 1. Polinomi primitivi esistono e sono noti per ogni m. Ad esempio, i seguenti polinomi sono primitivi su F2 : m = 3, x3 + x + 1 m = 4, x4 + x + 1 m = 5, x5 + x2 + 1. A questo punto, definiamo la seguente regola di moltiplicazione tra vettori in F2m . Dati a, b ∈ F2m , porremo a · b = c se e solo se c(x) = a(x)b(x) mod p(x) (1) m dove p(x) = pm x + . . . + p0 = `e un polinomio primitivo. Si pu`o vedere facilmente che in questo modo l’insieme F2m − {0} `e un gruppo commutativo. Ne segue che F2m munito dell’operazione di addizione prima definita e della operazione di moltiplicazione (1) `e un campo finito. Sia ora p(x) = p0 + p1 x + . . . + pm xm un polinomio primitivo di grado m su F2 , e sia α una radice di p(x). m Ogni radice di p(x) viene detta radice primitiva. Poich`e per definizione p(x) divide x2 −1 + 1, otteniamo che m m m x2 −1 + 1 = q(x)p(x), per qualche polinomio q(x), da cui α2 −1 + 1 = q(α)p(α) = 0, e quindi α2 −1 = 1. Ci` o m che `e interessante, `e che `e possibile provare che le successive potenze 1 = α0 , . . . , α2 −2 sono tutti gli elementi di Vm (F2 ), tranne 0, in altri termini α `e un generatore del gruppo (moltiplicativo) F2m − {0}. Vediamo un esempio. Sia m = 3, sia dato il polinomio primitivo x3 + x + 1 e sia α radice primitiva, per cui α3 + α + 1 = 0, il che `e equivalente a dire che α3 = α + 1. Il campo F23 ha ovviamente 8 elementi, che possono essere rappresentati come 8 potenze di α, oppure come 8 polinomi su F2 di grado al pi` u 2, oppure come vettori binari a tre componenti, come mostrato nella tabella di seguito: αi α0 = 1 α1 α2 α3 α4 α5 α6 α7 0 α α α2 α+1 α(α + 1) = α2 + α α(α2 + α) = α2 + α + 1 α(α2 + α + 1) = α2 + 1 α(α2 + 1) = 1 polinomio (grado ≤ 2) 1 x x2 x+1 x2 + x x2 + x + 1 x2 + 1 1 vettore (a2 , a1 , a0 ) 001 010 100 011 110 111 101 ´ inoltre semplice calcolare l’inverso di un elemento attraverso la identit`a α−i = αn−i , dove n = 2m − 1. E Ritorniamo ora per un momento ai codici di Hamming introdotti la lezione scorsa. Ricordiamo che essi erano definiti come codici C = x ∈ {0, 1}n : HxT = 0 , dove H `e la matrice binaria le cui colonne sono tutti i m possibili 2m − 1 vettori binari 6= 0 lunghi m ed m `e un generico intero. Quindi C avr`a 22 −m−1 parole, ciascuna di lunghezza 2m − 1. Un modo formalmente diverso, ma sostanzialmente equivalente, di scrivere la matrice H di un codice di Hamming `e il seguente: se α `e radice primitiva di F2m , allora H = [α0 , α, . . . , αn−1 ]. I codici di Reed-Solomon di parametri n e t, dove n = 2m − 1 per qualche intero m e t `e un intero ≥ 1, sono definiti come quei codici C = x ∈ {0, 1}n : HxT = 0 dove la matrice H `e cos`ı composta: 0 α α0 H= . .. α α2 ... ... .. . αn−1 α2(n−1) .. . α0 α2t ... α2t(n−1) dove α `e radice primitiva di F2m . In altri termini, un vettore c = (c0 , . . . , cn−1 ), dove ci ∈ Vm (F2 ) per ogni i = 0, . . . , n − 1, `e una parola codice del codice di Reed-Solomon di parametri n e t (denotato con RS(n, t)) se e solo se valgono le condizioni n−1 X αij ci = 0, j = 1, . . . , 2t. (2) i=0 Notiamo che ciascun ci `e esso stesso un vettore binario ad m componenti, per cui se scrivessimo una parola c = (c0 , . . . , cn−1 ) ∈ RS(n, t) in binario, essa conterrebbe mn = m(2m − 1) bits. Cerchiamo ora di scoprire qual `e la capacit` a di correzione di errore del codice RS(n, t). Ricordiamo a tal proposito il risultato fondamentale visto la lezione scorsa, secondo il quale un generico codice C `e in grado di correggere t errori se e solo se wmin(C) ≥ 2t + 1. Ricordiamo anche che ogni vettore c = (c0 , . . . , cn−1 ), pu`o anche essere visto come il polinomio c(x) = c0 + c1 + . . . + cn−1 xn−1 . Secondo questa corrispondenza, e dalla (2), otteniamo che c ∈ RS(n, t) ⇔ n−1 X αij ci = 0, j = 1, . . . , 2t (3) i=0 ⇔ c(αj ) = 0 j = 1, . . . , 2t (4) In altri termini, c = (cn−1 , . . . , c0 ) ∈ RS(n, t) se e solo il corripondente polinomio c(x) = cn−1 xn−1 + . . . + c1 x + c0 si annulla nei punti αj , j = 1, . . . , 2t. Quindi RS(n, t) consta di tutti i polinomi a coefficienti su F2m , di grado al pi` u n − 1, che sono multipli del polinomio g(x) = (x − α) · · · (x − α2t ). Lemma 1 Vale che wmin (RS(n, t)) = 2t + 1, per cui il codice RS(n, t) `e in grado di correggere tutte le possibili occorrenze di t errori nelle parole codice. Dimostrazione. Proviamo innanzitutto che wmin (RS(n, t)) ≤ 2t + 1. Da quanto prima detto, g(x) = (x − α) · · · (x−α2t ) ∈ RS(n, t). Essendo g(x) di grado 2t, esso avr`a al pi` u 2t+1 coefficienti 6= 0, siano essi (g0 , . . . , g2t ). Ne segue che il vettore associato g = (g0 , . . . , g2t , 0, . . . , 0), di lunghezzza n appartenente a RS(n, t), ha peso di Hamming w(g) ≤ 2t + 1, per cui wmin (RS(n, t)) ≤ 2t + 1. Per provare la diseguaglianza opposta wmin (RS(n, t)) ≥ 2t + 1, ricordiamo il Corollario 1 della precedente lezione, il quale affermava che per codici lineari wmin (C) = minimo numero di colonne di H la cui somma `e uguale a 0, , ovvero wmin (C) =minimo numero di colonne di H linearmente indipendenti. Consideriamo ora una generica 2 sottomatrice H 0 di H definente il codice RS(n, t), composta da r ≤ 2t arbitrarie colonne e prime r righe. Essa avr` a la forma γ1 . . . γ r γ12 . . . γr2 H0 = , .. . r r γ1 . . . γ r e calcoliamocene il determinante Det(H 0 ). Si ha: Det(H 0 ) 1 γ1 .. . ... ... .. . (γ1 · · · γr )Det γ1r−1 . . . Y = γ1 · · · γr (γj − γi ) 6= 0 = 1 γr .. . γrr−1 i<j dove abbiamo certamente riconosciuto la familiare forma delle matrici di Vandermonde, e quindi del loro determinante. Ne consegue che qualunque insieme di al pi` u 2t colonne di H `e composto da colonne linearmente indipendenti, per cui wmin (RS(n, t)) ≥ 2t + 1, il che conclude la prova del Lemma. Il Lemma appena visto afferma che, usando una decodifica a minima distanza, `e possibile ricostruire la parola codice del codice RS(n, t) originalmente trasmessa conoscendo la versione corrotta di essa, purch`e non si siano verificati pi` u di t errori nella trasmissione. Ma come realizzare questa operazione di correzione in pratica, ovvero come trovare velocemente, a partire dal vettore ricevuto l’unica parola del codice RS(n, t) a distanza al pi` u t da esso? Il problema `e di grande importanza pratica, in quanto i codici RS(n, t) sono effettivamente usati in vari contesti. Ad esempio, i codici RS(n, t) sono usati per memorizzare dati su Compact Disc, per la realizzazione dei codici a barra che appaiono sui prodotti nei supermercati, per la trasmissione dati da sonde spaziali (ad es., Mars Pathfinder, Galileo, Mars Exploration Rover e la sonda Cassini). Per derivare un metodo efficiente di correzione di errori per i codici RS(n, t), da questo punto in poi identificheremo ogni vettore c = (cn−1 , . . . , c0 ) con il corripondente polinomio C(x) = cn−1 xn−1 + . . . + c1 x + c0 . Sia quindi la parola trasmessa pari a C(x) = c0 + . . . + cn−1 xn−1 e sia R(x) = r0 + . . . + rn−1 xn−1 il vettore (polinomio) ricevuto. Sar` a accaduto un errore nella posizione i se e solo se ri 6= ci . Sia ei = ri − ci . Definiamo il polinomio E(x) = e0 + . . . + en−1 xn−1 (detto polinomio valutatore di errore). Ovviamente varr`a R(x) = C(x) + E(x), e l’operazione di correzione d’errore `e equivalente a scoprire il polinomio E(x) a partire da R(x). Supponiamo che siano occorsi γ errori nelle posizioni j1 , . . . , jγ , ci`o implica che i coefficienti ej1 , . . . , ejγ di E(x) sono 6= 0, mentre i restanti coefficienti ei sono nulli, per cui E(x) = ej1 xj1 + . . . + ejγ xjγ . Definiamo β1 = αj1 , . . . , βγ = αjγ e E1 = ej1 , . . . , Eγ = ejγ per cui E(x) = E1 xj1 + . . . + Eγ xjγ . Calcoliamo ora il vettore S = (s1 , . . . , s2t ) = HRT (detto vettore sindrome). Risulta si = (riga ima di H)R = (αi , . . . , αij , . . . , αi(n−1) )(r0 , . . . , rn−1 ) = r0 + r1 αi + . . . + rj αij + . . . + rn−1 αi(n−1) = R(αi ) Essendo S = HRT = H(C + E)T = HC T + HE T = HE T in quanto ovviamente HC T = 0 poich`e C `e una parola codice di RS(n, t), otteniamo che si = E(αi ) = e0 + e1 αi + . . . + en−1 αi(n−1) = E1 αij1 + . . . + Eγ αijγ = E1 β1i + . . . + Eγ βγi = γ X j=1 3 Ej βji . Quindi ciascuna componente del vettore sindrome `e funzione del vettore degli errori E occorso, e non della parola C trasmessa. Proviamo ora che ciascun coefficiente si del vettore (polinomio) sindrome, i = 1, . . . , 2t, che avevamo visto essere anche uguale al valore che il polinomio R(x) assume in αi (ovvero R(αi )) `e anche uguale al valore che il polinomio resto della divisione di R(x) per (x + αi ) assume nel punto αi . Infatti, dividendo R(x) per (x + αi ) otteniamo R(x) = qi (x)(x + αi ) + bi , dove qi (x) `e il polinomio quoziente e bi `e il resto (necessariamente di grado 0, in quanto deve essere di grado minore del divisore (x + αi ), da cui R(αi ) = qi (αi )(αi + αi ) + bi = bi , essendo ovviamente αi + αi = 0, nell’aritmetica di F2m . Notiamo ora che per scoprire chi `e il polinomio E(x) = ej1 xj1 + . . . + ejγ xjγ , che ci permetterebbe di ricostruire la parola trasmessa C(x) a partire dal vettore ricevuto R(x), occorre sia trovare le posizioni degli errori (j1 , . . . , jγ ) che il valore degli errori (E1 , . . . , Eγ ). Ricordando che abbiamo posto β1 = αj1 , . . . , βγ = αjγ , possiamo definire il polinomio locatore degli errori come quel polinomio σ(x) che ha come radici i valori β1−1 , . . . , βγ−1 . Il nome di σ(x) `e giustificato dal fatto che dalla conoscenza delle sue radici β1−1 = αj1 = αn−j1 , . . . , βγ−1 = αjγ = αn−jγ , possiamo dedurre le posizioni degli errori (j1 , . . . , jγ ). Ovviamente, σ(x) `e per il momento incognito, facciamo vedere, per` o, che esso pu` o essere calcolato a partire dalle quantit`a a noi note s1 = R(α), . . . , s2t = R(α2t ). Esprimiamo σ(x) come σ(x) = (1 + β1 x) . . . (1 + βγ x) = 1 + σ1 x + . . . + σγ x e diamo un metodo per calcolare σ1 , . . . , σγ a partire da s1 = R(α), . . . , s2t = R(α2t ). Poich´e σ(β`−1 ) = 0, ∀` = 1, . . . , γ, vale anche che per ogni j ≤ 2t 0 = = γ X `=1 γ X E` β`j+γ σ(β`−1 ) E` β`j+γ (1 + σ1 β`−1 + . . . + σγ β`−γ ) `=1 = γ X E` β`j+γ + σ1 `=1 = γ X E` β`j+γ−1 + . . . + σγ `=1 γ X E` β`j `=1 sj+γ + σ1 sj+γ−1 + . . . + σγ sj Ovvero, sγ+j = σ1 sj+γ−1 + . . . + σγ sj , per ogni j, per cui i valori σi incogniti soddisfano il seguente sistema di equazioni lineari sγ+1 = sγ+2 = σ1 sγ+1 + . . . + σγ s2 ... s2γ σ1 sγ + . . . + σγ s1 ... = σ1 s2γ−1 + . . . + σγ sγ che in forma matriciale si pu` o scrivere come: s1 s2 . . . sγ ... sγ σγ sγ+1 . . . sγ+1 σγ−1 = sγ+2 ... ... ... ... . . . s2γ−1 σ1 s2γ Proviamo ora il seguente importante risultato. 4 (5) Teorema 1 La s1 s2 M = . . . sµ matrice s2 s3 ... sµ+1 ... sµ . . . sµ+1 ... ... . . . s2µ−1 ha determinante diverso da 0 (e quindi `e invertibie) se µ = γ =# errori occorsi nella trasmissione, determinante nullo se µ > γ. Dimostrazione. Innanzitutto ricordiamo la relazione esistente tra i valori delle sindromi si , i valori degli errori Ei e i valori βi = αji che permettevano la individuazione delle posizioni dove sono occorsi gli errori: s1 = E1 β1 + E2 β2 + . . . + Eγ βγ s2 = E1 β12 + E2 β22 + . . . + Eγ βγ2 ... ... s2t = E1 β12t + E2 β22t + . . . + Eγ βγ2t Definiamo le quantit` a Xi come ( βi Xi = 0 per i = 1, . . . , γ per i > γ Per ogni intero µ, consideriamo ora la seguente matrice (di Vandermonde) A che ha come generico elemento Aij nella riga i e colonna j il valore Aij = Xji−1 , ovvero 1 1 ... 1 X1 X2 ... Xµ A= ... ... ... ... X1µ−1 X2µ−1 . . . Xµµ−1 e la matrice B che ha ha come generico elemento Bij nella riga i e colonna j il valore Aij = Ei Xi δij , dove ( 1 se i = j δij = 0 se i 6= j. Ovvero E1 X1 0 B= ... 0 0 E2 X2 ... 0 ... 0 ... 0 ... ... . . . Eµ Xµ dove conviene ricordare che Eµ = 0 per µ > γ, in quanto il numero di errori occorsi `e pari a γ e quindi il valore degli errori per µ > γ `e ovviamente nullo. Consideriamo ora la matrice prodotto (ABAT ) e calcoliamone esplicitamente l’elemento nella riga i-esima e colonna j-esima, ovvero (ABAT )ij = µ X X`i−1 `=1 = = µ X `=1 µ X µ X E` X` δ`k Xkj−1 k=1 X`i−1 E` X` X`j−1 E` X`i+j−1 `=1 = si 5 Ne segue che M = ABAT , da cui segue anche che det(M ) = det(A)det(B)det(A). Ricordiamo che se µ > γ, allora Eµ = 0, il che implica che per µ > γ vale det(B) = 0 = det(M ). D’altra parte, se µ = γ, allora ovviamente det(B) 6= 0. Inoltre, se µ = γ tutte le colonne si A sono differenti tra di loro, per cui anche il determinante della matrice di Vandermonde A `e non nullo, per cui anche det(M ) 6= 0. Ci`o conclude la dimostrazione del Teorema. Il Teorema 1 `e alla base dell’algoritmo di correzione degli errori per i codici RS(n, t). Innanzitutto possiamo trovare il numero esatto di errori nel modo seguente. Come primo tentativo poniamo γ = t, dove t `e il numero massimo che il codice RS(n, t) pu` o correggere. Calcoliamo poi il determinante della matrice M cos`ı ottenuta. Se tale determinante `e diverso da zero, allora abbiamo trovato il valore corretto di γ, altrimenti decrementiamo il valore tentativo di γ di 1 e continuiamo, fin quando troveremo una matrice con determinante diverso da zero. In virt` u del Teorema 1, avremo trovato l’esatto numero di errori γ occorso durante la trasmissione. A questo punto invertiamo la matrice M e risolviamo il sistema di equazioni (5), ovvero s1 s2 . . . sγ ... sγ σγ sγ+1 . . . sγ+1 σγ−1 = sγ+2 ... ... ... ... . . . s2γ−1 σ1 s2γ (6) per calcolarci i coefficienti σ1 , . . . , σγ e quindi il polinomio locatore degli errori σ(x) = 1 + σ1 x + . . . + σγ x = (1 + β1 x) . . . (1 + βγ x). Da esso, calcolandocene le radici e facendone gli inversi, scopriremo le locazioni degli errori, ovvero dove sono occorsi gli errori duranta la trasmissione della parola c(x). Ci restano da scoprire i valori degli errori, ovvero le quantit` a E1 , . . . , Eγ . A tal fine, ricordiamo che valeva la seguente espressione si = E1 β1i + . . . + Eγ βγi = γ X Ej βji , i = 1, . . . , 2t j=1 che pu` o essere scritta in β1 . . . s1 s2 β12 . . . = . . . . . . . . . s2t β12t . . . forma matriciale come βγ E1 E2 βγ2 . . . . . . βγ2t Eγ Questo `e un sistema di 2t equazioni lineari nelle γ incognite E1 , . . . , Eγ (ricordiamo che i valori βij li abbiamo scoperti). Potremmo scoprire i valori incogniti E1 , . . . , Eγ usando le prime γ equazioni del sistema di sopra se e solo se esse sono linearmente indipendenti, ovvero se il determinante della matrice che otteniamo da quella di sopra considerando solo le prime γ righe `e diverso da zero. Ma possiamo osservare che vale la seguente uguaglianza 1 ... 1 β1 . . . β γ β1 β12 . . . βγ2 ... βγ det . . . . . . . . . = (β1 · β2 · . . . · βγ )det . . . . . . . . . . β1γ . . . βγγ β1γ−1 . . . βγγ−1 La matrice al membro destro `e la familiare matrice di Vandermonde, che ha determinante diverso da zero se e solo se i valori β1 , β2 , . . . , βγ sono distinti tra di loro, il che `e il caso in quanto essi sono univocamente associati alle differenti locazioni dove sono occorsi gli errori. 6 A questo punto, il seguente algoritmo ci permette la correzione di errori. Metodo (Peterson-Gorenstein–Ziegler) 1. Input: R(x) 2. Calcola s1 , . . . , s2t 3. Poni γ = t s1 s2 4. While Det . . . sγ σγ s1 σγ−1 s2 5. . . . = . . . σ1 sγ ... sγ . . . sγ+1 = 0 poni γ = γ − 1 ... . . . . . . s2γ−1 −1 ... sγ sγ+1 . . . sγ+1 sγ+2 ... ... ... . . . s2γ−1 s2γ 6. Trova le posizioni degli errori j1 , . . . , jγ , trovando le radici β1−1 = α−j1 , . . . , βγ−1 = α−jγ del polinomio locatore degli errori σ(x) = (1 + β1 x) . . . (1 + βγ x) = 1 + σ1 x + . . . + σγ x β1 E1 E2 β12 7. . . . = . . . Eγ β1γ ... ... ... ... −1 βγ s1 s2 βγ2 . . . . . . βγγ sγ Per trovare le radici del polinomio σ(x), il metodo pi` u semplice `e di calcolare σ(αj ), per tutti i possibili valori m j = 0, 1, . . . , 2 − 1. Per velocizzare i calcoli, si usa una variante della cosiddetta regola di Horner, per cui, per ogni β nel campo finito F2m , vale σ(β) = (. . . (((σγ β + σγ−1 )β + σγ−2 )β + σγ−3 )β + . . . + σ0 ). La regola di Horner richieder` a γ moltiplicazioni e γ addizioni per calcolare σ(β). La parte onerosa, dal punto di vista computazionale, `e rappresentata dai punti 5. e 7. dell’algoritmo prima visto, dove occorre calcolare l’inverso di matrici. In pratica, si usano algoritmi pi` u complessi dal punto di vista concettuale, ma pi` u efficienti dal punto di vista computazionale, ovvero che richiedono un numero di operazioni minore. 7
© Copyright 2024 Paperzz