Codici di Hamming e bound di Hamming
In questa pagina 9
Un limite al tasso di un codice a parità di errori corretti (il bound di Hamming) e una famiglia di codici che lo raggiunge con l'uguaglianza (i codici di Hamming) completano la parte sulla codifica di canale. La distanza minima, la sindrome e la matrice di controllo sono quelle di Controllo d'errore - ARQ, FEC e codici a blocco sul canale binario simmetricoPer proteggere i bit dagli errori si può chiedere la ritrasmissione (ARQ, serve il canale di ritorno), aggiungere ridondanza per correggere (FEC) o unire le due cose (HARQ). Un codice a blocco $(n,k)$ trasforma $k$ bit in una parola di $n>k$ bit scelta tra $2^k$ parole su $2^n$ sequenze; modulatore, canale e demodulatore equivalgono a un canale binario simmetrico senza memoria con probabilità d'errore sul bit $P_{bit}$. Per $P_{bit}<\frac12$ il decodificatore ML sceglie la parola a minima distanza di Hamming; con distanza minima $d_{min}$ si correggono sempre $t=\lfloor\frac{d_{min}-1}{2}\rfloor$ errori e se ne rivelano sempre $d_{min}-1$. Il tasso è $R=\frac kn$ e la probabilità d'errore di parola è limitata da $P(\text{più di }t\text{ errori})$. L'ARQ ha efficienza $S_{SW}$, $S_{GBN}$, $S_{SR}$ in funzione di $t_P$, $t_A$, $\tau_P$ e $p$.Controllo d'errore - ARQ, FEC e codici a blocco sul canale binario simmetrico → e di Matrice di controllo di parità, sindrome e cosetLa matrice di controllo di parità $H$ ($\ell\times n$) soddisfa $H\mathbf r=\mathbf 0\iff\mathbf r\in\mathcal C$; per un codice con generatrice $G$ ($n\times k$) vale $HG=0$ con $\operatorname{rango}(H)=n-k$, e se $G=\begin{bmatrix}I_k\A\end{bmatrix}$ allora $H=[A\mid I_{n-k}]$. La distanza minima è il minimo numero di colonne di $H$ linearmente dipendenti. La sindrome $\boldsymbol\sigma=H\boldsymbol\gamma$ della sequenza ricevuta $\boldsymbol\gamma=\mathbf c+\boldsymbol\varepsilon$ vale $H\boldsymbol\varepsilon$: dipende solo dall'errore. Le sequenze con la stessa sindrome formano un coset ($2^{n-k}$ coset di $2^k$ sequenze) e il decodificatore a minima distanza sceglie il coset leader, l'errore di peso minimo del coset: $\hat{\mathbf c}=\boldsymbol\gamma+\boldsymbol\varepsilon_{min}$. La probabilità di decodifica corretta sul BSC è la somma delle probabilità dei coset leader.Matrice di controllo di parità, sindrome e coset →.
Versione per Ing. Elettronica: Codici a blocco lineari - matrice generatrice, controllo di parità, sindrome e codici di HammingUn codice a blocco è lineare se la somma (bit a bit, modulo 2) di due parole di codice è una parola di codice. Si descrive con la matrice generatrice $G$ ($k\times n$, $\mathbf c=\mathbf mG$) e con la matrice di controllo di parità $H$ ($(n-k)\times n$, $G H^T=0$); in forma sistematica $G=[I_k\mid P]$ e $H=[P^T\mid I_{n-k}]$. La distanza minima è il peso minimo delle parole non nulle. La sindrome $\mathbf s=\mathbf rH^T$ dipende solo dall'errore: se è nulla la parola è valida, altrimenti identifica l'errore (un solo errore ha per sindrome la colonna di $H$ corrispondente). I codici di Hamming $(2^m-1,,2^m-1-m)$ hanno $d_{min}=3$.Codici a blocco lineari - matrice generatrice, controllo di parità, sindrome e codici di Hamming →. Per Ing. delle Telecomunicazioni: Codici di Hamming e CRCIl codice di Hamming $(2^h-1,,2^h-h-1)$ ha come matrice di controllo $H$ che ha per colonne tutte le sequenze non nulle di $h$ bit: colonne distinte e non nulle danno $d_{min}=3$, la sindrome di un errore singolo è la colonna corrispondente, quindi corregge 1 errore (o rivela 2) ed è un codice perfetto ($2^{n-k}=1+n$). Per $(7,4)$ e BSC: errore non rivelato $\simeq7P^3(1-P)^4$, parola sbagliata dopo correzione $\simeq\binom72P^2(1-P)^5$. Il CRC è un codice lineare ciclico usato per sola rivelazione: la parola è $m(x)x^r$ più il resto della divisione per il polinomio generatore $g(x)$ di grado $r$ (modulo 2); rivela ogni errore a burst di lunghezza $\le r$.Codici di Hamming e CRC →.
1. Il bound di Hamming
Un codice che corregge sempre errori ha : le sfere di Hamming di raggio attorno alle parole sono disgiunte (Controllo d'errore - ARQ, FEC e codici a blocco sul canale binario simmetricoPer proteggere i bit dagli errori si può chiedere la ritrasmissione (ARQ, serve il canale di ritorno), aggiungere ridondanza per correggere (FEC) o unire le due cose (HARQ). Un codice a blocco $(n,k)$ trasforma $k$ bit in una parola di $n>k$ bit scelta tra $2^k$ parole su $2^n$ sequenze; modulatore, canale e demodulatore equivalgono a un canale binario simmetrico senza memoria con probabilità d'errore sul bit $P_{bit}$. Per $P_{bit}<\frac12$ il decodificatore ML sceglie la parola a minima distanza di Hamming; con distanza minima $d_{min}$ si correggono sempre $t=\lfloor\frac{d_{min}-1}{2}\rfloor$ errori e se ne rivelano sempre $d_{min}-1$. Il tasso è $R=\frac kn$ e la probabilità d'errore di parola è limitata da $P(\text{più di }t\text{ errori})$. L'ARQ ha efficienza $S_{SW}$, $S_{GBN}$, $S_{SR}$ in funzione di $t_P$, $t_A$, $\tau_P$ e $p$.Controllo d'errore - ARQ, FEC e codici a blocco sul canale binario simmetrico →). Quante sequenze contiene una sfera?
- Le sequenze a distanza esattamente da una sequenza data di bit si ottengono cambiando bit su : sono (si scelgono le posizioni da cambiare).
- Quindi la sfera di raggio contiene sequenze (la prima, per , è la parola stessa).
Le sfere, tutte diverse, stanno nello spazio delle sequenze:
Prendendo e dividendo per :
È un limite superiore al tasso in funzione di : più errori si vogliono correggere, meno alto può essere il tasso. È una condizione necessaria: se è violata il codice non esiste; se è rispettata non è detto che esista.
Esempio (, ). , quindi , cioè : il tasso massimo di un codice a bit che corregge errore è . Con vale l'uguaglianza: .
Esempio (un codice che non esiste). Si può costruire un codice con e che corregge errori? Con : e , mentre : il bound è violato, il codice non esiste (con sole righe di parità non si distinguono i errori da correggere: ).
Esempio (confronto con Singleton). Per e : e dà , cioè . Il bound di Singleton (Codici a blocco lineari - matrice generatrice, forma sistematica e bound di SingletonUn codice a blocco è lineare se le sue $2^k$ parole formano un sottospazio dello spazio delle sequenze binarie di $n$ bit, con la somma modulo 2 (XOR) senza riporto: contiene la parola nulla ed è chiuso rispetto alla somma. Si descrive con la matrice generatrice $G$ ($n\times k$, rango $k$, $\mathbf c=G\mathbf b$, le colonne sono parole di codice); le operazioni sulle colonne non cambiano il codice, le permutazioni delle righe permutano i bit e non cambiano le prestazioni sul canale senza memoria. In forma sistematica $G=\begin{bmatrix}I_k\A\end{bmatrix}$ e $\mathbf c=[\mathbf b;A\mathbf b]$. Per i codici lineari la distanza minima è il peso di Hamming minimo delle parole non nulle e vale il bound di Singleton $d_{min}\le n-k+1$.Codici a blocco lineari - matrice generatrice, forma sistematica e bound di Singleton →) con darebbe solo : quello di Hamming è più stringente.
2. Il codice di Hamming
Definizione. Un codice di Hamming è un codice lineare la cui matrice di controllo di parità ha per colonne tutte le sequenze binarie non nulle lunghe , ciascuna presa una sola volta. L'ordine delle colonne non conta.
Con righe le sequenze non nulle sono , quindi
| tasso | |||
|---|---|---|---|
| 2 | 3 | 1 | |
| 3 | 7 | 4 | |
| 4 | 15 | 11 | |
| 5 | 31 | 26 | |
| 6 | 63 | 57 | |
| 7 | 127 | 120 | |
| 8 | 255 | 247 |
(il codice è il codice a ripetizione.) Quindi esiste un codice di Hamming con parametri se e solo se : per vale , sì; per vale , sì; per no (); per no ().
Esempio (, , ). La matrice di controllo della lezione ha per colonna il numero scritto in binario (bit meno significativo in alto): Con questa scelta la sindrome di un errore singolo, letta come numero binario, è proprio la posizione dell'errore.
Forma sistematica. Si scelgono le colonne dell'identità e si scrivono a destra, le altre colonne a sinistra (in qualunque ordine): e . Per si ottiene (permutando le colonne di come ) (le colonne di sono le sequenze di peso ; verificato con Python). Per le colonne di sono tutte le sequenze di bit di peso .
3. La distanza minima vale 3
Teorema. Ogni codice di Hamming ha .
- Nessuna parola di peso 1. Una parola di peso con l' in posizione darebbe , la colonna : ma per costruzione in non ci sono colonne nulle.
- Nessuna parola di peso 2. Con due in posizioni si avrebbe , la somma di due colonne diverse: non può essere perché in non ci sono colonne ripetute.
- Esiste una parola di peso 3. Si scelgono . La somma non è nulla (le colonne sono diverse) e diversa da e da (perché né né sono nulle); quindi è una sequenza non nulla di bit diversa da e , e siccome contiene tutte le sequenze non nulle, è una terza colonna con . Allora : la sequenza con tre in è una parola di codice.
Quindi corregge sempre errore (un errore nella posizione ha per sindrome la colonna , e le colonne sono tutte diverse: si capisce dove è) e rivela sempre errori (): con due errori in e la sindrome segnala l'errore, ma il decodificatore, che interpreta la sindrome come un errore singolo in una terza posizione , produce una parola sbagliata (rivelazione sì, correzione no). Il numero di parole di peso di è : lo spettro dei pesi è per i pesi (verificato).
4. È un codice perfetto
Per un codice di Hamming e , quindi . Il bound di Hamming vale con l'uguaglianza:
Definizione. Un codice per cui le sfere di raggio attorno alle parole riempiono tutto lo spazio senza sovrapporsi (il bound di Hamming vale con l'uguaglianza) è un codice perfetto.
Significa che ogni sequenza di bit è a distanza da una (e una sola) parola: nella tabella dei coset (Matrice di controllo di parità, sindrome e cosetLa matrice di controllo di parità $H$ ($\ell\times n$) soddisfa $H\mathbf r=\mathbf 0\iff\mathbf r\in\mathcal C$; per un codice con generatrice $G$ ($n\times k$) vale $HG=0$ con $\operatorname{rango}(H)=n-k$, e se $G=\begin{bmatrix}I_k\A\end{bmatrix}$ allora $H=[A\mid I_{n-k}]$. La distanza minima è il minimo numero di colonne di $H$ linearmente dipendenti. La sindrome $\boldsymbol\sigma=H\boldsymbol\gamma$ della sequenza ricevuta $\boldsymbol\gamma=\mathbf c+\boldsymbol\varepsilon$ vale $H\boldsymbol\varepsilon$: dipende solo dall'errore. Le sequenze con la stessa sindrome formano un coset ($2^{n-k}$ coset di $2^k$ sequenze) e il decodificatore a minima distanza sceglie il coset leader, l'errore di peso minimo del coset: $\hat{\mathbf c}=\boldsymbol\gamma+\boldsymbol\varepsilon_{min}$. La probabilità di decodifica corretta sul BSC è la somma delle probabilità dei coset leader.Matrice di controllo di parità, sindrome e coset →) tutte le sindromi sono occupate, una dal caso senza errore e dagli errori singoli. Non ci sono coset leader di peso .
Decodifica. Si calcola la sindrome ; se è nulla la parola è valida; altrimenti coincide con una colonna e si inverte il bit .
Esempio ( sistematico). : i primi quattro bit sono e le tre parità (righe di ) sono , , , quindi . Se il canale sbaglia il bit si riceve : , che è la colonna di . Si inverte il bit e si ottiene , quindi (controllato con Python su tutti i errori singoli).
5. Probabilità d'errore di parola
Il codice corregge tutti gli errori singoli, e con errori la sequenza ricevuta cade nella sfera di un'altra parola (tutto lo spazio è coperto): la decisione è sempre sbagliata. Quindi, sul BSC, la probabilità d'errore di parola è esattamente
| codice | senza codice ( bit) a | ||
|---|---|---|---|
| () | |||
| () | |||
| () | |||
| () |
(valori calcolati con Python). Il tasso sale con ma la probabilità di avere due errori in una parola più lunga sale anch'essa: come . Per il non protegge quasi più.
Grafico interattivo: Probabilità che una parola di 4 bit di informazione arrivi errata: senza codice (1 − (1−P)^4) e con Hamming (7,4), esattamente uguale a P(almeno 2 errori su 7); il codice è migliore per ogni P_bit minore di 0,5, a P_bit = 0,01 vale 2,03·10⁻³ contro 3,94·10⁻²
6. Modificare un codice di Hamming
- Aggiungere un bit di parità totale (codice di Hamming esteso): . Tutte le parole hanno peso pari, le parole di peso di diventano di peso e il codice ha (spettro dei pesi per ): corregge errore e ne rivela (verificato con Python). La matrice di controllo ha una riga di tutti in più e una colonna nulla in più nelle righe precedenti: .
- Aggiungere un bit che somma solo i bit di informazione, : non basta per salire a . Per si prendono due colonne della parte di informazione, per esempio e (entrambe di peso ): la loro somma è , una colonna dell'identità, quindi esiste una parola di peso con due nella parte di informazione e uno in quella di parità; il nuovo bit, somma di due bit di informazione, vale e il peso resta . Il codice ottenuto ha , coerente con il bound di Hamming della sezione 1.
- Togliere colonne (codice accorciato): tolta, per esempio, la colonna da resta una con colonne non nulle e distinte: (corregge sempre errore), ma non è di Hamming () e non è perfetto (la sindrome non è usata dai singoli errori).
- Duplicare una colonna (per esempio sostituire una colonna con un'altra già presente): due colonne uguali fanno scendere a , e il codice rivela errore, non ne corregge nessuno (verificato).
Errori comuni
- Dire che esiste un codice di Hamming per ogni coppia : serve .
- Dire che il bound di Hamming garantisce l'esistenza: è solo una condizione necessaria.
- Contare nella sfera di raggio solo sequenze invece di (sono le sequenze a distanza ).
- Per un codice di Hamming prendere : sono gli errori di almeno (anche ).
- Dimenticare che l'identità nella forma sistematica di sta a destra.
Domande d'esame
- Mostrare che esiste un codice di Hamming e dire quanti errori corregge e rivela. e : esiste. : corregge errore, ne rivela .
- Dimostrare che per un codice di Hamming. Nessuna colonna nulla (niente peso ), nessuna colonna ripetuta (niente peso ), tre colonne sommano a zero perché la somma di due è un'altra colonna (peso esiste).
- Verificare che il codice di Hamming raggiunge il bound di Hamming con l'uguaglianza. Con : e danno .
Esercizi svolti
- Esercizio - porta parallela a 8 pin, Hamming (7,4), coset e canale con pin guasto (esame del 15 febbraio 2023, es. 157): porta parallela a 8 pin: Hamming (7,4), coset e canale con un pin guasto.
- Esercizio - codice (6,3) accorciato di Hamming, sindrome e peso minimo (esame del 6 settembre 2022, es. 146): codice (6,3) accorciato dal (7,4): non è di Hamming, ma ha .
- Esercizio - codice di Hamming (63,57), bound di Hamming e bit di parità aggiunto (secondo compitino dell'11 gennaio 2022, es. 132): Hamming (63,57), matrice sistematica a pesi decrescenti e bound di Hamming con un bit aggiunto.
Versione ripasso
Bound di Hamming (sfere di raggio disgiunte; sequenze a distanza ; la sfera ne contiene )
- . Limite superiore al tasso; condizione necessaria, non sufficiente.
- Esempi: , : , con uguaglianza. con : , , non esiste (). , : , , mentre Singleton darebbe .
Codice di Hamming
- Colonne di = tutte le sequenze non nulle di bit, una volta ciascuna, ordine indifferente: ; parametri .
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|
- Esiste per e , non per () né ().
- della lezione: colonna di = in binario (bit meno significativo in alto), sindrome = posizione dell'errore.
- Forma sistematica: identità a destra, , , con le colonne di = sequenze di peso . Per : .
(dimostrazione in tre passi, sulle colonne di )
- Nessuna colonna nulla: niente parole di peso .
- Nessuna colonna ripetuta: , niente peso .
- non è nulla né uguale a , ed contiene tutte le sequenze non nulle: è una terza colonna , quindi la sequenza con tre in è una parola.
- Corregge errore, rivela . Spettro dei pesi di : .
Perfetto: e danno : bound con uguaglianza, tutte le sindromi sono usate (una nulla e errori singoli), nessun leader di peso .
Decodifica: ; se è nulla la parola è valida, altrimenti è la colonna e si inverte il bit . Esempio : (parità ); errore nel bit : , = colonna , si inverte il bit . Con errori si decodifica sempre male.
Probabilità d'errore di parola: (almeno errori, esatta).
| codice | senza codice a | ||
|---|---|---|---|
Il tasso sale con ma cresce con . è migliore dei bit senza codice per ogni .
Modifiche
- Parità totale esteso: (spettro ), corregge e rivela ; .
- Parità dei soli bit di informazione: per esiste una parola di peso con due nei bit di informazione (colonne e sommano a ), il nuovo bit vale : .
- Colonna tolta: ma non perfetto ( da senza ). Colonna duplicata: .
Errori tipici
- Un codice di Hamming per ogni (serve ).
- Il bound di Hamming garantisce l'esistenza.
- al posto di .
- con esattamente errori invece di almeno .
- Identità a sinistra nella forma sistematica di .
Esercizi su questo argomento
- Esercizio - canale binario con errori diversi sui bit pari e dispari (compito del 25 giugno 2024, es. 179)
- Esercizio - codice (6,3) accorciato di Hamming, sindrome e peso minimo (esame del 6 settembre 2022, es. 146)
- Esercizio - codice di Hamming (63,57), bound di Hamming e bit di parità aggiunto (secondo compitino dell'11 gennaio 2022, es. 132)
- Esercizio - Kraft-McMillan, Huffman, due canali binari alternati e codice di Hamming (15,11) (compito del 13 febbraio 2026, es. 201)
- Esercizio - Kraft-McMillan, Huffman, Hamming (7,4) e attenuazione massima con 16-QAM (secondo compitino del 12 gennaio 2024, es. 170)
- Esercizio - porta parallela a 8 pin, Hamming (7,4), coset e canale con pin guasto (esame del 15 febbraio 2023, es. 157)
- Esercizio - quantizzatore con densità esponenziale a due lati, codice di Shannon, 64-QAM e Hamming (compito del 23 gennaio 2026, es. 198)
- Esercizio - rate di informazione, codice di Hamming (7,4) e capacità del canale binario simmetrico (compito del 6 luglio 2026, es. 204)