Salta al contenuto
Note per Studenti Codici di Hamming e bound di Hamming

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 (n,k)(n,k) che corregge sempre tt errori ha dmin≥2t+1d_{min}\ge2t+1: le sfere di Hamming di raggio tt attorno alle 2k2^k 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 rr da una sequenza data di nn bit si ottengono cambiando rr bit su nn: sono (nr)\binom nr (si scelgono le posizioni da cambiare).
  • Quindi la sfera di raggio tt contiene ∑r=0t(nr)\sum_{r=0}^t\binom nr sequenze (la prima, per r=0r=0, è la parola stessa).

Le 2k2^k sfere, tutte diverse, stanno nello spazio delle 2n2^n sequenze:

2k∑r=0t(nr)≤2n\boxed{2^k\sum_{r=0}^t\binom nr\le2^n}

Prendendo log⁡2\log_2 e dividendo per nn:

n≥k+log⁡2∑r=0t(nr)⟹kn≤1−1nlog⁡2∑r=0t(nr).n\ge k+\log_2\sum_{r=0}^t\binom nr\quad\Longrightarrow\quad\boxed{\frac kn\le1-\frac1n\log_2\sum_{r=0}^t\binom nr}.

È un limite superiore al tasso R=knR=\frac kn in funzione di tt: 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 (t=1t=1, n=7n=7). ∑r=01(7r)=1+7=8\sum_{r=0}^1\binom7r=1+7=8, quindi 2k⋅8≤272^k\cdot8\le2^7, cioè k≤4k\le4: il tasso massimo di un codice a 77 bit che corregge 11 errore è 47\frac47. Con k=4k=4 vale l'uguaglianza: 24⋅8=272^4\cdot8=2^7.

Esempio (un codice che non esiste). Si può costruire un codice con n=64n=64 e k=57k=57 che corregge 22 errori? Con t=2t=2: ∑=1+64+(642)=1+64+2016=2081\sum=1+64+\binom{64}2=1+64+2016=2081 e 5764=0,8906\frac{57}{64}=0{,}8906, mentre 1−164log⁡2(2081)=1−11,0264=0,8278.1-\frac1{64}\log_2(2081)=1-\frac{11{,}02}{64}=0{,}8278. 0,8906>0,82780{,}8906>0{,}8278: il bound è violato, il codice non esiste (con sole 77 righe di parità non si distinguono i 20812081 errori da correggere: 27=128<20812^7=128<2081).

Esempio (confronto con Singleton). Per n=10n=10 e t=2t=2: 1+10+45=561+10+45=56 e 2n−k≥562^{n-k}\ge56 dà n−k≥6n-k\ge6, cioè k≤4k\le4. 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 dmin≥5d_{min}\ge5 darebbe solo k≤n−dmin+1=6k\le n-d_{min}+1=6: 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à HH ha per colonne tutte le sequenze binarie non nulle lunghe n−kn-k, ciascuna presa una sola volta. L'ordine delle colonne non conta.

Con m=n−km=n-k righe le sequenze non nulle sono 2m−12^m-1, quindi

n=2n−k−1,n=2m−1,k=2m−1−m.n=2^{n-k}-1,\qquad n=2^m-1,\quad k=2^m-1-m.

m=n−km=n-k nn kk tasso kn\frac kn
2 3 1 0,3330{,}333
3 7 4 0,5710{,}571
4 15 11 0,7330{,}733
5 31 26 0,8390{,}839
6 63 57 0,9050{,}905
7 127 120 0,9450{,}945
8 255 247 0,9690{,}969

(il codice (3,1)(3,1) è il codice a ripetizione.) Quindi esiste un codice di Hamming con parametri (n,k)(n,k) se e solo se n=2n−k−1n=2^{n-k}-1: per (63,57)(63,57) vale 26−1=632^6-1=63, sì; per (15,11)(15,11) vale 24−1=152^4-1=15, sì; per (9,4)(9,4) no (25−1=31≠92^5-1=31\ne9); per (6,3)(6,3) no (23−1=7≠62^3-1=7\ne6).

Esempio (n=7n=7, k=4k=4, m=3m=3). La matrice di controllo della lezione ha per colonna jj il numero jj scritto in binario (bit meno significativo in alto): H=[101010101100110001111].H=\begin{bmatrix}1&0&1&0&1&0&1\\0&1&1&0&0&1&1\\0&0&0&1&1&1&1\end{bmatrix}. Con questa scelta la sindrome di un errore singolo, letta come numero binario, è proprio la posizione dell'errore.

Forma sistematica. Si scelgono le n−k=mn-k=m colonne dell'identità e si scrivono a destra, le altre kk colonne a sinistra (in qualunque ordine): H=[A∣Im]H=[A\mid I_m] e G=[IkA]G=\begin{bmatrix}I_k\\A\end{bmatrix}. Per (7,4)(7,4) si ottiene (permutando le colonne di HH come 3,5,6,7,1,2,43,5,6,7,1,2,4) H=[110110010110100111001],G=[1000010000100001110110110111].H=\begin{bmatrix}1&1&0&1&1&0&0\\1&0&1&1&0&1&0\\0&1&1&1&0&0&1\end{bmatrix},\qquad G=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\\1&1&0&1\\1&0&1&1\\0&1&1&1\end{bmatrix}. (le colonne di AA sono le sequenze di peso ≥2\ge2; HG=0HG=0 verificato con Python). Per (15,11)(15,11) le 1111 colonne di AA sono tutte le sequenze di 44 bit di peso ≥2\ge2.

3. La distanza minima vale 3

Teorema. Ogni codice di Hamming ha dmin=3d_{min}=3.

Dimostrazione. Per il teorema della sezione 2 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 →, dmind_{min} è il minimo numero di colonne di HH che sommano a 0\mathbf 0.

  1. Nessuna parola di peso 1. Una parola di peso 11 con l'11 in posizione ii darebbe Hc=hiH\mathbf c=\mathbf h_i, la colonna ii: ma per costruzione in HH non ci sono colonne nulle.
  2. Nessuna parola di peso 2. Con due 11 in posizioni i≠ji\ne j si avrebbe Hc=hi+hjH\mathbf c=\mathbf h_i+\mathbf h_j, la somma di due colonne diverse: non può essere 0\mathbf 0 perché in HH non ci sono colonne ripetute.
  3. Esiste una parola di peso 3. Si scelgono i≠ji\ne j. La somma hi+hj\mathbf h_i+\mathbf h_j non è nulla (le colonne sono diverse) e diversa da hi\mathbf h_i e da hj\mathbf h_j (perché né hj\mathbf h_j né hi\mathbf h_i sono nulle); quindi è una sequenza non nulla di n−kn-k bit diversa da hi\mathbf h_i e hj\mathbf h_j, e siccome HH contiene tutte le sequenze non nulle, è una terza colonna hk\mathbf h_k con k≠i,jk\ne i,j. Allora hi+hj+hk=0\mathbf h_i+\mathbf h_j+\mathbf h_k=\mathbf 0: la sequenza con tre 11 in i,j,ki,j,k è una parola di codice. □\square

Quindi corregge sempre t=1t=1 errore (un errore nella posizione jj ha per sindrome la colonna jj, e le colonne sono tutte diverse: si capisce dove è) e rivela sempre 22 errori (dmin−1d_{min}-1): con due errori in ii e jj la sindrome hi+hj≠0\mathbf h_i+\mathbf h_j\ne\mathbf0 segnala l'errore, ma il decodificatore, che interpreta la sindrome come un errore singolo in una terza posizione kk, produce una parola sbagliata (rivelazione sì, correzione no). Il numero di parole di peso 33 di (7,4)(7,4) è 77: lo spettro dei pesi è 1, 7, 7, 11,\,7,\,7,\,1 per i pesi 0,3,4,70,3,4,7 (verificato).

4. È un codice perfetto

Per un codice di Hamming t=1t=1 e n=2n−k−1n=2^{n-k}-1, quindi 1+n=2n−k1+n=2^{n-k}. Il bound di Hamming vale con l'uguaglianza: 1−1nlog⁡2∑r=01(nr)=1−1nlog⁡2(1+n)=1−1nlog⁡2 ⁣(2n−k)=1−n−kn=kn.1-\frac1n\log_2\sum_{r=0}^1\binom nr=1-\frac1n\log_2(1+n)=1-\frac1n\log_2\!\left(2^{n-k}\right)=1-\frac{n-k}{n}=\frac kn.

Definizione. Un codice per cui le sfere di raggio tt 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 nn bit è a distanza ≤1\le1 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 2n−k=n+12^{n-k}=n+1 sindromi sono occupate, una dal caso senza errore e nn dagli errori singoli. Non ci sono coset leader di peso 22.

Decodifica. Si calcola la sindrome σ=Hγ\boldsymbol\sigma=H\boldsymbol\gamma; se è nulla la parola è valida; altrimenti σ\boldsymbol\sigma coincide con una colonna hj\mathbf h_j e si inverte il bit jj.

Esempio ((7,4)(7,4) sistematico). b=[1,0,1,1]T\mathbf b=[1,0,1,1]^T: i primi quattro bit sono 1,0,1,11,0,1,1 e le tre parità (righe 5,6,75,6,7 di GG) sono b1⊕b2⊕b4=1⊕0⊕1=0b_1\oplus b_2\oplus b_4=1\oplus0\oplus1=0, b1⊕b3⊕b4=1⊕1⊕1=1b_1\oplus b_3\oplus b_4=1\oplus1\oplus1=1, b2⊕b3⊕b4=0⊕1⊕1=0b_2\oplus b_3\oplus b_4=0\oplus1\oplus1=0, quindi c=Gb=[1,0,1,1,0,1,0]T\mathbf c=G\mathbf b=[1,0,1,1,0,1,0]^T. Se il canale sbaglia il bit 22 si riceve γ=[1,1,1,1,0,1,0]T\boldsymbol\gamma=[1,1,1,1,0,1,0]^T: σ=Hγ=[1,0,1]T\boldsymbol\sigma=H\boldsymbol\gamma=[1,0,1]^T, che è la colonna 22 di HH. Si inverte il bit 22 e si ottiene c^=c\hat{\mathbf c}=\mathbf c, quindi b^=[1,0,1,1]T\hat{\mathbf b}=[1,0,1,1]^T (controllato con Python su tutti i 16⋅7=11216\cdot7=112 errori singoli).

5. Probabilità d'errore di parola

Il codice corregge tutti gli errori singoli, e con ≥2\ge2 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 P(E)=P(almeno 2 errori su n)=1−(1−Pbit)n−nPbit(1−Pbit)n−1.P(E)=P(\text{almeno 2 errori su }n)=1-(1-P_{bit})^n-nP_{bit}(1-P_{bit})^{n-1}.

codice Pbit=10−3P_{bit}=10^{-3} Pbit=10−2P_{bit}=10^{-2} senza codice (kk bit) a 10−210^{-2}
(7,4)(7,4) 2,09⋅10−52{,}09\cdot10^{-5} 2,03⋅10−32{,}03\cdot10^{-3} 3,94⋅10−23{,}94\cdot10^{-2} (k=4k=4)
(15,11)(15,11) 1,04⋅10−41{,}04\cdot10^{-4} 9,63⋅10−39{,}63\cdot10^{-3} 1,05⋅10−11{,}05\cdot10^{-1} (k=11k=11)
(63,57)(63,57) 1,88⋅10−31{,}88\cdot10^{-3} 0,1310{,}131 0,4360{,}436 (k=57k=57)
(255,247)(255,247) 2,74⋅10−22{,}74\cdot10^{-2} 0,7240{,}724 0,9160{,}916 (k=247k=247)

(valori calcolati con Python). Il tasso sale con mm ma la probabilità di avere due errori in una parola più lunga sale anch'essa: come (n2)Pbit2\binom n2P_{bit}^2. Per Pbit=10−2P_{bit}=10^{-2} il (255,247)(255,247) 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): cn+1=c1⊕⋯⊕cnc_{n+1}=c_1\oplus\dots\oplus c_n. Tutte le parole hanno peso pari, le 77 parole di peso 33 di (7,4)(7,4) diventano di peso 44 e il codice (8,4)(8,4) ha dmin=4d_{min}=4 (spettro dei pesi 1,14,11,14,1 per 0,4,80,4,8): corregge 11 errore e ne rivela 33 (verificato con Python). La matrice di controllo ha una riga di tutti 11 in più e una colonna nulla in più nelle righe precedenti: Hest=[H01 ⋯ 11]H_{est}=\begin{bmatrix}H&\mathbf 0\\1\ \cdots\ 1&1\end{bmatrix}.
  • Aggiungere un bit che somma solo i bit di informazione, cn+1=∑i=1kbic_{n+1}=\sum_{i=1}^kb_i: non basta per salire a dmin=4d_{min}=4. Per (63,57)(63,57) si prendono due colonne della parte di informazione, per esempio hi=[1,1,0,0,0,0]T\mathbf h_i=[1,1,0,0,0,0]^T e hj=[1,1,1,0,0,0]T\mathbf h_j=[1,1,1,0,0,0]^T (entrambe di peso ≥2\ge2): la loro somma è [0,0,1,0,0,0]T[0,0,1,0,0,0]^T, una colonna dell'identità, quindi esiste una parola di peso 33 con due 11 nella parte di informazione e uno in quella di parità; il nuovo bit, somma di due bit di informazione, vale 00 e il peso resta 33. Il codice (64,57)(64,57) ottenuto ha dmin=3<5d_{min}=3<5, coerente con il bound di Hamming della sezione 1.
  • Togliere colonne (codice accorciato): tolta, per esempio, la colonna [1,1,1]T[1,1,1]^T da (7,4)(7,4) resta una HH 3×63\times6 con colonne non nulle e distinte: dmin=3d_{min}=3 (corregge sempre 11 errore), ma non è di Hamming (n=6≠23−1n=6\ne2^3-1) e non è perfetto (la sindrome 111111 non è usata dai singoli errori).
  • Duplicare una colonna (per esempio sostituire una colonna con un'altra già presente): due colonne uguali fanno scendere a dmin=2d_{min}=2, e il codice rivela 11 errore, non ne corregge nessuno (verificato).

Errori comuni

  • Dire che esiste un codice di Hamming per ogni coppia (n,k)(n,k): serve n=2n−k−1n=2^{n-k}-1.
  • Dire che il bound di Hamming garantisce l'esistenza: è solo una condizione necessaria.
  • Contare nella sfera di raggio tt solo (nt)\binom nt sequenze invece di ∑r=0t(nr)\sum_{r=0}^t\binom nr (sono le sequenze a distanza ≤t\le t).
  • Per un codice di Hamming prendere P(E)=P(esattamente 2 errori)P(E)=P(\text{esattamente 2 errori}): sono gli errori di almeno 22 (anche 3,4,…3,4,\dots).
  • Dimenticare che l'identità nella forma sistematica di HH sta a destra.

Domande d'esame

  1. Mostrare che esiste un codice di Hamming (63,57)(63,57) e dire quanti errori corregge e rivela. n−k=6n-k=6 e 26−1=63=n2^6-1=63=n: esiste. dmin=3d_{min}=3: corregge 11 errore, ne rivela 22.
  2. Dimostrare che dmin=3d_{min}=3 per un codice di Hamming. Nessuna colonna nulla (niente peso 11), nessuna colonna ripetuta (niente peso 22), tre colonne sommano a zero perché la somma di due è un'altra colonna (peso 33 esiste).
  3. Verificare che il codice di Hamming raggiunge il bound di Hamming con l'uguaglianza. Con t=1t=1: 1−1nlog⁡2(1+n)1-\frac1n\log_2(1+n) e 1+n=2n−k1+n=2^{n-k} danno kn\frac{k}{n}.

Esercizi svolti

Versione ripasso

Bound di Hamming (sfere di raggio tt disgiunte; (nr)\binom nr sequenze a distanza rr; la sfera ne contiene ∑r=0t(nr)\sum_{r=0}^t\binom nr)

  • 2k∑r=0t(nr)≤2n  ⟺  kn≤1−1nlog⁡2∑r=0t(nr)2^k\sum_{r=0}^t\binom nr\le2^n\iff\frac kn\le1-\frac1n\log_2\sum_{r=0}^t\binom nr. Limite superiore al tasso; condizione necessaria, non sufficiente.
  • Esempi: n=7n=7, t=1t=1: k≤4k\le4, con uguaglianza. (64,57)(64,57) con t=2t=2: ∑=2081\sum=2081, 5764=0,8906>1−log⁡2208164=0,8278\frac{57}{64}=0{,}8906>1-\frac{\log_22081}{64}=0{,}8278, non esiste (2081>272081>2^7). n=10n=10, t=2t=2: 2n−k≥562^{n-k}\ge56, k≤4k\le4, mentre Singleton darebbe k≤6k\le6.

Codice di Hamming

  • Colonne di HH = tutte le sequenze non nulle di n−kn-k bit, una volta ciascuna, ordine indifferente: n=2n−k−1n=2^{n-k}-1; parametri (2m−1,2m−1−m)(2^m-1,2^m-1-m).
mm 2 3 4 5 6 7 8
(n,k)(n,k) (3,1)(3,1) (7,4)(7,4) (15,11)(15,11) (31,26)(31,26) (63,57)(63,57) (127,120)(127,120) (255,247)(255,247)
kn\frac kn 0,330{,}33 0,570{,}57 0,730{,}73 0,840{,}84 0,900{,}90 0,940{,}94 0,970{,}97
  • Esiste per (63,57)(63,57) e (15,11)(15,11), non per (9,4)(9,4) (25−1=312^5-1=31) né (6,3)(6,3) (23−1=72^3-1=7).
  • (7,4)(7,4) della lezione: colonna jj di HH = jj in binario (bit meno significativo in alto), sindrome = posizione dell'errore.
  • Forma sistematica: identità ImI_m a destra, H=[A∣Im]H=[A\mid I_m], G=[IkA]G=\begin{bmatrix}I_k\\A\end{bmatrix}, con le colonne di AA = sequenze di peso ≥2\ge2. Per (7,4)(7,4): A=[110110110111]A=\begin{bmatrix}1&1&0&1\\1&0&1&1\\0&1&1&1\end{bmatrix}.

dmin=3d_{min}=3 (dimostrazione in tre passi, sulle colonne di HH)

  • Nessuna colonna nulla: niente parole di peso 11.
  • Nessuna colonna ripetuta: hi+hj≠0\mathbf h_i+\mathbf h_j\ne\mathbf 0, niente peso 22.
  • hi+hj\mathbf h_i+\mathbf h_j non è nulla né uguale a hi,hj\mathbf h_i,\mathbf h_j, ed HH contiene tutte le sequenze non nulle: è una terza colonna hk\mathbf h_k, quindi la sequenza con tre 11 in i,j,ki,j,k è una parola.
  • Corregge 11 errore, rivela 22. Spettro dei pesi di (7,4)(7,4): 1,0,0,7,7,0,0,11,0,0,7,7,0,0,1.

Perfetto: t=1t=1 e 1+n=2n−k1+n=2^{n-k} danno 1−1nlog⁡2(1+n)=kn1-\frac1n\log_2(1+n)=\frac kn: bound con uguaglianza, tutte le 2n−k=n+12^{n-k}=n+1 sindromi sono usate (una nulla e nn errori singoli), nessun leader di peso 22.

Decodifica: σ=Hγ\boldsymbol\sigma=H\boldsymbol\gamma; se è nulla la parola è valida, altrimenti è la colonna jj e si inverte il bit jj. Esempio (7,4)(7,4): b=1011→c=1011010\mathbf b=1011\to\mathbf c=1011010 (parità 0,1,00,1,0); errore nel bit 22: γ=1111010\boldsymbol\gamma=1111010, σ=[1,0,1]T\boldsymbol\sigma=[1,0,1]^T = colonna 22, si inverte il bit 22. Con ≥2\ge2 errori si decodifica sempre male.

Probabilità d'errore di parola: P(E)=1−(1−p)n−np(1−p)n−1P(E)=1-(1-p)^n-np(1-p)^{n-1} (almeno 22 errori, esatta).

codice p=10−3p=10^{-3} p=10−2p=10^{-2} senza codice a 10−210^{-2}
(7,4)(7,4) 2,09⋅10−52{,}09\cdot10^{-5} 2,03⋅10−32{,}03\cdot10^{-3} 3,94⋅10−23{,}94\cdot10^{-2}
(15,11)(15,11) 1,04⋅10−41{,}04\cdot10^{-4} 9,63⋅10−39{,}63\cdot10^{-3} 1,05⋅10−11{,}05\cdot10^{-1}
(63,57)(63,57) 1,88⋅10−31{,}88\cdot10^{-3} 0,1310{,}131 0,4360{,}436
(255,247)(255,247) 2,74⋅10−22{,}74\cdot10^{-2} 0,7240{,}724 0,9160{,}916

Il tasso sale con mm ma P(E)≈(n2)p2P(E)\approx\binom n2p^2 cresce con nn. (7,4)(7,4) è migliore dei 44 bit senza codice per ogni p<0,5p<0{,}5.

Modifiche

  • Parità totale →(8,4)\to(8,4) esteso: dmin=4d_{min}=4 (spettro 1,14,11,14,1), corregge 11 e rivela 33; Hest=[H01⋯11]H_{est}=\begin{bmatrix}H&\mathbf 0\\1\cdots1&1\end{bmatrix}.
  • Parità dei soli bit di informazione: per (63,57)(63,57) esiste una parola di peso 33 con due 11 nei bit di informazione (colonne [1,1,0,0,0,0]T[1,1,0,0,0,0]^T e [1,1,1,0,0,0]T[1,1,1,0,0,0]^T sommano a e3\mathbf e_3), il nuovo bit vale 00: dmin=3d_{min}=3.
  • Colonna tolta: dmin=3d_{min}=3 ma non perfetto ((6,3)(6,3) da (7,4)(7,4) senza [1,1,1]T[1,1,1]^T). Colonna duplicata: dmin=2d_{min}=2.

Errori tipici

  • Un codice di Hamming per ogni (n,k)(n,k) (serve n=2n−k−1n=2^{n-k}-1).
  • Il bound di Hamming garantisce l'esistenza.
  • (nt)\binom nt al posto di ∑r=0t(nr)\sum_{r=0}^t\binom nr.
  • P(E)P(E) con esattamente 22 errori invece di almeno 22.
  • Identità a sinistra nella forma sistematica di HH.

Esercizi su questo argomento

Teoria collegata