Corso di Algebra Avanzata Teoria dei Codici e Crittografia: 3 Teoria dei Codici
Teoria dei Codici
Obiettivi
-
Fornire i fondamenti matematici dei codici per la correzione d’errori.
-
Mostrare come costruire codici lineari, codici ciclici e codici di Hamming.
-
Presentare metodi pratici di codifica e decodifica (sindrome, correzione).
-
Eseguire esercizi numerici e simulazioni a mano per comprendere i meccanismi.
1. Concetti fondamentali e notazioni
-
Lavoriamo su vettori binari (campo finito con due elementi: ; operazioni modulo 2).
-
Un codice è un sottoinsieme non vuoto di .
-
Un codice lineare di lunghezza e dimensione è un sottospazio vettoriale di di dimensione ; si indica come (talvolta includendo distanza minima ).
-
Peso di un vettore = numero di componenti uguali a 1.
-
Distanza di Hamming = peso di (operazione in ); per un codice lineare la distanza minima è il minimo peso non nullo tra i codici: .
Proprietà utili: per un codice lineare vale che può correggere fino a errori (decodifica hard-decision minimum-distance).
2. Codici lineari: generatori e controllo di parità
Matrice generatrice
Se è un sottospazio -dimensionale, esiste una matrice (righe linearmente indipendenti) tale che ogni parola codice si esprime come
dove è il vettore di informazione (message). Si parla di codifica sistematica se è della forma (identità seguita da una matrice ): allora il codiceword contiene i bit informazione nei primi posti seguiti dai bit di parità.
Matrice di controllo
Per un codice lineare esiste una matrice di controllo tale che
Le righe di generano lo spazio ortogonale . Se allora una scelta convenzionale è
(con operazioni in , dunque il segno meno è identico al plus).
Encoding e verifica
-
Codifica: dato , calcoli .
-
Verifica: dati (ricevuto), calcoli la sindrome
Se allora è un codiceword (o c’è un errore appartenente al codice nullo); altrimenti identifica il cosiddetto coset di errore.
3. Distanza minima, bound fondamentali
-
Bound di Hamming (sfera di Hamming) per codici binari: per correggere errori, si deve avere
-
Singleton bound: . Un codice che raggiunge è MDS (maximally distance separable).
-
Bound di Gilbert–Varshamov e altri forniscono limiti esistenziali (non approfonditi qui).
4. Codice di Hamming: struttura e decodifica
Costruzione del codice di Hamming
Il codice di Hamming a singola correzione con parametro è uno degli esempi base.
-
Dimensione , lunghezza , controllo .
-
Si costruisce spesso in forma sistematica e .
Una scelta comune (matrici su ) è:
(Esistono molte rappresentazioni equivalenti via operazioni elementari sulle colonne; l’importante è che le colonne di siano tutte le diverse vettori in .)
Le colonne di generalmente corrispondono all’indirizzo binario (1..7):
(alcune convenzioni usano ordine diverso).
Proprietà
-
Distanza minima → può correggere errore e rilevare fino a 2 errori.
-
Decodifica tramite sindrome: la sindrome (3 bit) indica la posizione dell’errore (se ); per il la sindrome non nulla corrisponde esattamente al vettore colonna di che indica il bit errato.
Esempio numerico (Hamming (7,4))
Scegliamo il messaggio . Codifichiamo (operazioni mod 2):
Dalla riga di , calcoli a mano:
-
moltiplicato per :
componendo:
Calcoliamo le colonne dei bit di parità:
-
prima colonna di parità (col 5) = somma mod2 delle colonne P corrispondenti ai bit info attivi: per brevità: otteniamo
Procedendo si trova (con i valori di sopra) oppure altro a seconda della versione di ; l’importante è seguire i calcoli con la matrice effettiva scelta. (Nella pratica si usano generatori standard; qui l’esempio è didattico: nella decodifica seguente useremo un codiceword numerico definito.)
-
Supponiamo che il codiceword trasmesso sia . Durante la trasmissione si verifica un errore in posizione 3 (contiamo da 1 a 7), il vettore ricevuto è
Calcoliamo la sindrome
operando modulo 2. Se coincide con la colonna di corrispondente alla posizione 3, allora si corregge invertendo quel bit. Dopo la correzione si ottiene il codiceword corretto .
(Per chiarezza: nei materiali didattici si riporta passo passo il calcolo numerico della sindrome, colonna per colonna. Qui per brevità abbiamo descritto il metodo: se desideri, scrivo il calcolo bit-per-bit seguendo la matrice specifica.)
5. Decodifica per sindrome (algoritmo)
Algoritmo (hard-decision, correzione fino a t errori con tabella sindrome):
-
Ricevi .
-
Calcola .
-
Se → output (nessun errore rilevato).
-
Altrimenti cerca in una tabella precalcolata che mappa ogni possibile sindrome al più probabile pattern di errore (per Hamming è il singolo bit con quella sindrome).
-
Correggi (equiv. in ), quindi estrai l’informazione da .
Complessità: calcolo sindrome , con tabella sindrome l’operazione è O(n) per applicare la correzione.
6. Codici ciclici: rappresentazione polinomiale
Un codice ciclico di lunghezza è un codice lineare tale che se allora la rotazione ciclica è ancora in .
Rappresentazione
Associamo a un vettore il polinomio
in modulo . Un codice è ciclico ⇔ esiste un polinomio divisore di tale che
dove è il polinomio generatore di grado .
Proprietà
-
è monico e di grado .
-
per qualche polinomio .
-
Parità e controllo si esprimono via polinomi: la condizione .
Esempio: CRC semplificato
La CRC è un codice ciclico di tipo rilevazione: dato un messaggio , si calcola e si invia , dove è il polinomio generatore di grado . In ricezione si verifica per determinare errori rilevabili.
7. Codici più avanzati: BCH e Reed–Solomon (cenni)
-
BCH codes: codici ciclici costruiti su estensioni dei campi finiti ; permettono correzione di più errori con costruzione parametrica.
-
Reed–Solomon: codici su (con grande), sono MDS e molto usati (CD, DVD, comunicazioni satellitari).
8. Correzione vs. rilevazione, canale e criteri di decodifica
-
Hard-decision decoding: lavoriamo con simboli binari discreti (0/1). Decodifica minima distanza è ottima per canali simmetrici a memoria nulla.
-
Soft-decision decoding: sfrutta informazioni di affidabilità (es. valori reali). Algoritmi come Viterbi/BCJR o il decoding soft per Reed–Solomon/BCH sono più potenti ma più costosi.
-
Canale binario simmetrico (BSC): modello comune, probabilità di bit-flip . Massimizzazione della probabilità a posteriori (MAP) coincide con decodifica a minima distanza per canale simmetrico.
9. Attività pratiche e esercizi svolti
Esercizio 1 — Costruzione di un codice di Hamming (7,4) e decodifica
Obiettivo: costruire , codificare , introdurre errore in posizione 3, calcolare sindrome e correggere.
Soluzione passo-passo:
-
Prendiamo e come nella sezione 4 (o una delle forme canoniche).
-
Codifica con . Calcoliamo esplicitamente ogni prodotto riga-colonna modulo 2. (Operazioni bitwise XOR).
-
Introduciamo errore con 1 nella posizione 3: .
-
Calcoliamo . Poiché ha un unico 1 in posizione 3, sarà la colonna 3 di .
-
Troviamo che tale sindrome identifica la posizione 3 → inverto il bit 3 in → otteniamo = c.
(Se vuoi, incollo qui i calcoli numerici riga-per-riga con numeri. Basta dirmelo e li sviluppo esplicitamente per la matrice scelta.)
Esercizio 2 — Simulazione di Hamming su più messaggi
Costruisci tutti i codiciword per i 16 messaggi di 4 bit, genera tutti i possibili vettori di errore a singolo bit e verifica la correzione automatica tramite sindrome per ciascuna possibile ricezione (dimostrazione esaustiva che Hamming(7,4) corregge 1 errore).
Esercizio 3 — Codice ciclico semplice e CRC
-
Sia , (esempio). Dato rappresentato da (con grado < k), calcola il codeword .
-
Esegui una simulazione di errore (flipping di bit) e verifica la condizione .
10. Metodi pratici e consigli di implementazione
-
In implementazioni reali, generatori e matrici usano bitwise XOR e shift register per codici ciclici (LFSR per CRC).
-
Per decoding efficienti di codici BCH/Reed–Solomon si usano algoritmi di algebra sui campi finiti (Euclide esteso, Berlekamp–Massey).
-
Per canali rumorosi si preferiscono schemi concatenati (RS + convolutional) o codici moderni LDPC/Polar con decoding iterativo (belief propagation).
11. Esercizi proposti (da svolgere)
-
Costruisci il codice di Hamming nella forma sistematica con generator e ottieni tale che . Verifica la tabella delle sindromi.
-
Per il messaggio calcola . Simula un errore in posizione 5 e decodifica. Mostra tutti i passaggi.
-
Sia e . Dimostra che divide su . Costruisci il codice ciclico corrispondente e trova la dimensione .
-
Implementa in pseudo-codice la funzione
encode(u)edecode(r)per il codice di Hamming (use a syndromes table).
12. Punti critici e appunti di rigore
-
La scelta di e è non unica: matrici diverse definiscono lo stesso codice (equivalenza di colonne).
-
La decodifica per minima distanza è ottima ma computazionalmente proibitiva per codici generali: la sindrome + tabella funziona solo se il numero di pattern di errore probabili è piccolo (es. t=1). Per correzione multipla si usano algoritmi strutturati (BCH, Reed–Solomon, Viterbi per convolutional).
-
La rappresentazione polinomiale è potente per i codici ciclici ma richiede consapevolezza dei campi finiti quando si passa a codici non binari.
13. Conclusione sintetica
La teoria dei codici mette in relazione algebra lineare (sottospazi vettoriali, matrici e ), algebra polinomiale (codici ciclici), teoria dei campi finiti (BCH, RS) e algoritmi numerici per la decodifica. Il passaggio dalla teoria (distanza minima, bound) alle applicazioni pratiche richiede la scelta di strutture codificanti che bilancino capacità di correzione, efficienza di codifica/decodifica e complessità computazionale, tenendo conto del modello di canale.

Commenti
Posta un commento