• Non ci sono risultati.

110101011011ha rango 3 (come si verifica facilmente), ed è dunque la matrice generatrice di un codice lineare Cdi lunghezza n=4 e dimensione k=3 (contenente 2

N/A
N/A
Protected

Academic year: 2021

Condividi "110101011011ha rango 3 (come si verifica facilmente), ed è dunque la matrice generatrice di un codice lineare Cdi lunghezza n=4 e dimensione k=3 (contenente 2"

Copied!
1
0
0

Testo completo

(1)

Matematica Discreta III

Lezione del giorno 4 aprile 2008

Vediamo ora come generare dei codici lineari, di lunghezza e dimensione (quindi cardinalità) prefissate.

Tutte le matrici di cui ci occuperemo saranno matrici binarie (o booleane) nel senso che avranno elementi 0,1Z2. Dato un naturale m, indicheremo con Im la matrice identica che ha tutti 1 nella diagonale principale e gli altri elementi nulli. Ricordiamo che possiamo identificare una matrice binaria 1xn (con 1 sola riga) con un vettore di Z2n (quindi con una parola di lunghezza n).

Dato un [n, k, ]-codice lineare C, essendo k la dimensione di C come Z2-spazio vettoriale esiste in C una base di n parole B = {v1,…..,vk} tale che ogni parola vC sia combinazione lineare di tali parole a coefficienti in Z2.

Costruiamo la matrice kxn M le cui righe sono i vettori v1,…..,vk della basedi C.

Tale matrice M è detta matrice generatrice del codice lineare C (essa non è univocamente determinata, perché il sottospazio C in generale ha diverse basi).

Se consideriamo una generica parola (vettore) v=(x1,…..,xn)C Z2n esistono opportuni scalari α1,

…., αk Z2 tali che v=(x1,…..,xn)=α1v1+….. αkvk .

Ciò si può tradurre in termini di prodotto fra matrici: se identifichiamo v=(x1,…..,xn)Z2n e w=(α1,

…., αk)Z2k con vettori “riga” (cioè matrici 1xn ed 1xk rispettivamente), le eguaglianze precedenti equivalgono alla seguente eguaglianza matriciale:

wM = α1v1+….. αkvk = v

Dunque, dal punto di vista algoritmico, data una matrice generatrice M del codice lineare C(matrice kxn dove k è la dimensione di C ed n la lunghezza di C), per generare le 2k parole del codice C basta far variare w=(α1,…., αk)Z2k e calcolare le diverse parole wM = v.

Se il codice C si utilizza per la codifica di (al più) 2k simboli di informazione di un insieme S, si può allora pensare che una preliminare codifica dei simboli dell’insieme S avvenga con una funzione iniettiva f: S  Z2k che associa ad ogni simbolo sS una parola w lunghezza k e poi l’effettiva codifica avvenga calcolando la parola di lunghezza wM = v di lunghezza n (che è trasmessa attraverso il canale di trasmissione): in questo senso k bits della parola trasmessa v contengono l’effettiva informazione, mentre i rimanenti n-k bits (bits di “ridondanza” o di “controllo”) possono essere opportunamente utilizzati per cercare di rilevare e correggere gli errori.

Se vogliamo costruire un codice lineare C di lunghezza n e dimensione k prefissate (con 1≤k≤n), basta fissare una matrice (binaria) M con k righe ed n colonne (in cui i vettori riga siano linearmente indipendenti) e generare le parole del codice nel modo indicato sopra.

Nota: da alcuni risultati di Algebra Lineare segue che la condizione precedente sui vettori riga di M equivale alla condizione che il rango della matrice M coincida con il numero delle righe k (dunque che si possa estrarre da M una matrice quadrata kxk con determinante non nullo).

Esempio: la seguente matrice 3x4

M =

1 1 0 1

0 1 0 1

1 0 1 1

ha rango 3 (come si verifica facilmente), ed è dunque la matrice generatrice di un codice lineare C di lunghezza n=4 e dimensione k=3 (contenente 23=8 parole). Per generare le parole di C, basta far variare la parola w=(α1, α2, α3)Z23 e calcolare le diverse parole wM = v.

Per esempio se w=(1, 0, 1) si ottiene v = wM = (0, 1, 1, 0)=0110C etc….

Sviluppando i calcoli si ottengono le parole del codice C:

C = { 0000, 1101, 1010, 1011, 0111, 0110, 0001, 1100 }.

(2)

Si tratta di un [4,3,]-codice lineare, dove la distanza =1 (la parola di peso minimo in C ha peso 1).

Vedremo in seguito da quali caratteristiche della matrice generatrice si può dedurre la distanza del codice generato.

Una matrice M (binaria) kxn (con 1≤k≤n) è detta in forma standard se la matrice quadrata formata dalle prime k colonne coincide con la matrice identica Ik. In tale caso, se con M’ indichiamo la matrice kx(n-k) formata dalle ultime (n-k) colonne, scriveremo:

M = [ IkM’]

Per esempio data la matrice 3x5 in forma standard:

M =

1 1 1 0 0

1 0 0 1 0

0 1 0 0 1

si ha M = [ I3M’] dove

M’ =

1 1

1 0

0 1

La stessa matrice identica In si considera in forma standard (in questo caso M’ è la matrice “vuota”

con k righe e 0 colonne). Notiamo che una matrice kxn in forma standard (con 1≤k≤n ) ha certamente rango k, perché la matrice identica Ik ha determinante 10.

Un caso interessante si ha quando un codice C di lunghezza n e dimensione k ha una matrice generatrice M in forma standard:

M = [ IkM’]

con

M’ = (βij) i=1,….,k; j=1,…..,n-k

In tale caso per generare le parole del codice C al variare del vettore w=(α1,…., αk)Z2k calcoliamo le parole:

v = wM = (α1,…., αk, α1β112β21+….+ αkβk1, …….., α1β1(n-k)2β2(n-k)+….+ αkβk(n-k))

Si vede dunque che, nella codifica, i primi k bits “di informazione” restano invariati, mentre i rimanenti (n-k) bits “di controllo” si ottengono come combinazioni lineari dei bits di informazione con coefficienti presi dalla matrice M’ : questo permette anche in termini algoritmici una codifica più semplice ed efficiente per il calcolo della parola da trasmettere nel canale d’informazione.

Purtroppo non tutti i codici lineari hanno una matrice generatrice in forma standard.

Definiamo codice lineare sistematico un codice che ha una matrice generatrice in forma standard.

Dimostreremo comunque che un codice lineare generico è “molto simile” (in un senso che definiremo fra poco) ad un codice lineare sistematico.

Dati due codici lineari C e C’ di lunghezza n, diremo che C è equivalente a C’ (e scriveremo CC’) se esiste un’opportuna permutazione  degli indici 1,….,n tale che le parole di C’ si ottengano dalle parole di C permutando le posizioni dei bits secondo la permutazione :

C’ = { x(1)x(2)… x(n) / x1x2… xnC }

Tale relazione è una relazione di equivalenza definita nell’insieme dei codici di lunghezza n, come si dimostra facilmente. Codici lineari equivalenti sono molto simili in termini operativi e in particolare hanno, oltre che la stessa lunghezza, anche la stessa cardinalità e quindi la stessa dimensione (perché la funzione f : C  C’ definita da f(x1x2… xn)= x(1)x(2)… x(n) è biunivoca), e inoltre la stessa distanza  (è ovvio, perché la permutazione delle posizioni dei bits non cambia il peso della parola).

(3)

Esempio: applicando nell’ultimo esempio di codice lineare di lunghezza 5:

C = { 0000, 1101, 1010, 1011, 0111, 0110, 0001, 1100 }

la permutazione  definita da (1)=4, (2)=2, (3)=3, (4)=1, si ottiene il codice equivalente:

C’= { 0000, 1101, 0011, 1011, 1110, 0110, 1000, 0101 }

Riferimenti

Documenti correlati

”determinare una matrice P invertibile ed una matrice diagonale D (quadrate di ordine n, ad entrate reali) tali che A = P DP −1 ” diciamo in breve ”diagonalizzare la matrice

Questa lezione fa riferimento sostanzialmente al paragrafo 10.4 ”Rango di una matrice”, in particolare alla proprieta’ 10.2 (teorema di Rouche’-Capelli) che da’ una

[r]

Date le seguenti matrici A e B, dire se sia possibile calcolare il prodotti AB e BA.. In caso sia

Se le righe (colonne) di una matrice quadrata A formano un insieme di vettori linearmente dipendenti, allora A ` e singolare... Proof.. Il rango di una matrice non cambia se essa

[r]

Una base di autovettori ortogonale in R 3 per il prodotto scalare standard sar` a anche una base ortogonale per il prodotto scalare definito da M 2.. Il determinante del minore

[r]