Salta al contenuto
Note per Studenti Codici a blocco lineari - matrice generatrice, forma sistematica e bound di Singleton

Codici a blocco lineari - matrice generatrice, forma sistematica e bound di Singleton

In questa pagina 10

La tabella b→c\mathbf b\to\mathbf c di un codice a blocco (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 →) occupa 2k⋅n2^k\cdot n bit: già per k=57k=57 è impensabile. Se il codice ha una struttura algebrica basta una matrice di nknk bit, e anche la decodifica (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 →) diventa un calcolo. I codici con questa struttura sono i codici lineari.

Versione per Ing. Elettronica (stessa teoria con i vettori scritti per riga, c=mG\mathbf c=\mathbf mG, GG di dimensioni k×nk\times n): 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 →. Le due convenzioni sono legate dalla trasposta: la GG di questa nota è la trasposta della GG di quella nota. Per Ing. delle Telecomunicazioni: Codici a blocco lineari e sindromeUn codice a blocco è lineare se la somma (XOR) di due parole di codice è una parola di codice: allora le parole formano un sottospazio di $\mathbb Z_2^n$. Si descrive con la matrice generatrice $G$ ($n\times k$, $\mathbf c=G\mathbf b$; in forma sistematica $G=\binom{I_k}{A}$) e con la matrice di controllo $H$ ($(n-k)\times n$, $H\mathbf c=\mathbf 0$ se e solo se $\mathbf c\in\mathcal C$; per $G$ sistematica $H=[A\mid I_{n-k}]$). La distanza minima è il peso minimo delle parole non nulle e vale $d_{min}\le n-k+1$ (Singleton). La sindrome $\boldsymbol\sigma=H\tilde{\mathbf c}$ dipende solo dall'errore; la decodifica a distanza minima è $\hat{\mathbf c}=\tilde{\mathbf c}-\varepsilon(\boldsymbol\sigma)$, dove $\varepsilon(\boldsymbol\sigma)$ è il coset leader (vettore di peso minimo con quella sindrome).Codici a blocco lineari e sindrome →.

1. Lo spazio delle sequenze binarie

Le sequenze x=[x1,…,xn]T\mathbf x=[x_1,\dots,x_n]^T con xi∈{0,1}x_i\in\{0,1\} formano uno spazio vettoriale sul campo binario {0,1}\{0,1\} (CampiUn campo è un insieme di numeri con somma e prodotto che rispettano le regole usuali (associativa, commutativa, neutri, opposti, inversi, distributiva): è ciò che serve per risolvere le equazioni di primo grado. Esempi: Q, R, C e i campi finiti.Campi →, Spazi vettorialiUno spazio vettoriale su un campo K è un insieme con una somma di vettori e un prodotto per scalari che rispettano 7 proprietà. Esempi fondamentali: K^n (somma componente per componente), le funzioni da R in R, i polinomi.Spazi vettoriali →), con le operazioni modulo 2:

  • somma (senza riporto): z=x+y\mathbf z=\mathbf x+\mathbf y con zi=(xi+yi)2=xi⊕yiz_i=(x_i+y_i)_2=x_i\oplus y_i (XOR: 0+0=00+0=0, 0+1=10+1=1, 1+1=01+1=0);
  • prodotto per uno scalare α∈{0,1}\alpha\in\{0,1\}: αx=[αx1,…,αxn]T\alpha\mathbf x=[\alpha x_1,\dots,\alpha x_n]^T (moltiplicare per 00 dà la sequenza nulla, per 11 lascia invariata).

Conseguenza della regola 1+1=01+1=0: ogni sequenza è l'opposto di se stessa, y+y=0\mathbf y+\mathbf y=\mathbf 0 (si somma con se stessa e si ottiene la sequenza nulla; per esempio 01001110+01001110=0000000001001110+01001110=00000000). Quindi la differenza coincide con la somma: x−y=x+y.\mathbf x-\mathbf y=\mathbf x+\mathbf y. È il motivo per cui nei conti modulo 2 i segni meno non servono mai.

Definizione. La norma (peso) di Hamming ∥x∥H=wH(x)\|\mathbf x\|_H=w_H(\mathbf x) è il numero di 11 presenti nella sequenza. Valgono ∥x∥H≥0\|\mathbf x\|_H\ge0, ∥x∥H=0  ⟺  x=0\|\mathbf x\|_H=0\iff\mathbf x=\mathbf0, ∥αx∥H=∣α∣ ∥x∥H\|\alpha\mathbf x\|_H=|\alpha|\,\|\mathbf x\|_H e la disuguaglianza triangolare ∥x+y∥H≤∥x∥H+∥y∥H\|\mathbf x+\mathbf y\|_H\le\|\mathbf x\|_H+\|\mathbf y\|_H.

La distanza di Hamming è la norma della differenza: dH(x,y)=∥x−y∥H=∥x+y∥Hd_H(\mathbf x,\mathbf y)=\|\mathbf x-\mathbf y\|_H=\|\mathbf x+\mathbf y\|_H (la somma ha un 11 proprio dove i due bit differiscono).

2. Codice lineare

Definizione. Un codice a blocco C={c1,…,c2k}\mathcal C=\{\mathbf c_1,\dots,\mathbf c_{2^k}\} è lineare se è un sottospazio lineare dello spazio delle sequenze di lunghezza nn (Sottospazi vettorialiUn sottospazio vettoriale è un sottoinsieme che è spazio vettoriale con le stesse operazioni: basta che sia chiuso per somma e per prodotto per scalari. Deve contenere il vettore nullo. In R^2 i sottospazi sono {0}, le rette per l'origine e tutto R^2.Sottospazi vettoriali →): contiene la parola nulla e la somma di due parole qualunque è ancora una parola.

Quindi ∣C∣=2k|\mathcal C|=2^k con kk dimensione del sottospazio. Per negare la linearità basta un controesempio: la parola nulla assente, oppure due parole la cui somma non è una parola.

Esempio. {001,010,111,101}\{001,010,111,101\}: k=2k=2, n=3n=3. Non è lineare perché 0∉C\mathbf 0\notin\mathcal C, e anche perché 001+010=011∉C001+010=011\notin\mathcal C. Invece {000,011,101,110}\{000,011,101,110\} è lineare: la somma di due parole diverse e non nulle è la terza (011+101=110011+101=110).

Quando il codice è dato da equazioni ci=fi(b1,…,bk)c_i=f_i(b_1,\dots,b_k) si guarda se ogni cic_i è una somma modulo 2 di bit di informazione:

  • un termine costante, per esempio c3=b1+1+b2c_3=b_1+1+b_2, rende il codice non lineare (con b=0\mathbf b=\mathbf 0 la parola non è nulla);
  • un prodotto di bit, per esempio c=b1b2c=b_1b_2, lo rende non lineare;
  • un quadrato bi2b_i^2 vale bib_i (02=00^2=0, 12=11^2=1), quindi non rompe la linearità; lo stesso per (b1+b2+b3)2=b1+b2+b3(b_1+b_2+b_3)^2=b_1+b_2+b_3;
  • il peso di Hamming modulo 2, ∥b∥H mod 2\|\mathbf b\|_H\bmod2, è b1+⋯+bkb_1+\dots+b_k modulo 2: è un bit di parità, quindi lineare.

Esempio (da un tema d'esame). c1=b1+b2, c2=b3, c3=b1+1+b2, c4=b1+b3, c5=b2c_1=b_1+b_2,\ c_2=b_3,\ c_3=b_1+1+b_2,\ c_4=b_1+b_3,\ c_5=b_2: è un codice (5,3)(5,3) con 88 parole tutte diverse (quindi decodificabile) ma non lineare, per il +1+1 nel terzo bit. Non esiste una matrice che lo rappresenti come c=Gb\mathbf c=G\mathbf b.

Un codice non lineare può comunque essere un buon codice; ma serve la tabella intera e perde le scorciatoie di calcolo di questa nota.

3. Matrice generatrice

Definizione. Una matrice GG di dimensioni n×kn\times k è la matrice generatrice di un codice lineare se ha rango kk e c=G b  ⟺  c∈C(b∈{0,1}k).\mathbf c=G\,\mathbf b\iff\mathbf c\in\mathcal C\qquad(\mathbf b\in\{0,1\}^k). Il bit ii-esimo della parola è il prodotto della riga ii di GG per b\mathbf b: ci=Gi,⋅ bc_i=\mathbf G_{i,\cdot}\,\mathbf b (somma modulo 2).

Il rango kk (colonne linearmente indipendenti, Combinazioni lineari e dipendenza lineareUna combinazione lineare è una somma di vettori moltiplicati per scalari. I vettori sono linearmente indipendenti se l'unica combinazione che dà il vettore nullo è quella con tutti i coefficienti nulli; altrimenti sono dipendenti, e allora uno di essi è combinazione lineare degli altri.Combinazioni lineari e dipendenza lineare →) garantisce che a b\mathbf b diversi corrispondano parole diverse, quindi 2k2^k parole.

Se b\mathbf b è la sequenza con un solo 11 in posizione ii, GbG\mathbf b è la colonna ii di GG: ogni colonna di GG è una parola di codice, e il codice è l'insieme di tutte le somme di colonne (il sottospazio generato, Generatori e basiDei vettori generano V se ogni vettore di V è loro combinazione lineare; una base è un insieme di generatori linearmente indipendenti, e allora ogni vettore si scrive in modo unico come combinazione dei vettori di base. Lemma dello scambio: i vettori indipendenti non sono mai più dei generatori.Generatori e basi →).

Esempio. G=[100111]G=\begin{bmatrix}1&0\\0&1\\1&1\end{bmatrix}, n=3n=3, k=2k=2. Le equazioni sono c1=b1c_1=b_1, c2=b2c_2=b_2, c3=b1⊕b2c_3=b_1\oplus b_2 e le parole sono {000,011,101,110}\{000,011,101,110\} (per b=00,01,10,11\mathbf b=00,01,10,11). È il codice a parità pari: il terzo bit rende pari il numero di 11.

La GG non è unica. Il codice {0000,0101,1011,1110}\{0000,0101,1011,1110\} (n=4n=4, k=2k=2) si genera con una qualunque coppia di colonne scelte tra le tre parole non nulle: [11011110],[01110110],[01100111].\begin{bmatrix}1&1\\0&1\\1&1\\1&0\end{bmatrix},\qquad\begin{bmatrix}0&1\\1&1\\0&1\\1&0\end{bmatrix},\qquad\begin{bmatrix}0&1\\1&0\\0&1\\1&1\end{bmatrix}. (le tre matrici sono state controllate enumerando le 44 parole). La probabilità d'errore di parola su un canale qualunque dipende solo dall'insieme delle parole C\mathcal C e non da quale b\mathbf b corrisponde a quale c\mathbf c: cambiare GG senza cambiare C\mathcal C è irrilevante per le prestazioni.

Trasformazioni di GG.

  • Operazioni sulle colonne (scambiare due colonne, sommare una colonna a un'altra): sostituiscono una base del sottospazio con un'altra base dello stesso sottospazio. Il codice C\mathcal C non cambia, cambia solo la corrispondenza b→c\mathbf b\to\mathbf c.
  • Permutazioni delle righe: scambiare le righe ii e jj scambia i bit cic_i e cjc_j di tutte le parole. Si ottiene un codice diverso (altre parole), ma con la stessa distanza minima e, se il canale è senza memoria, la stessa probabilità d'errore: i bit sono tutti equivalenti.

Esempio. Da G=[10011011]G=\begin{bmatrix}1&0\\0&1\\1&0\\1&1\end{bmatrix} (parole 0000, 1011, 0101, 11100000,\,1011,\,0101,\,1110) scambiando le righe 11 e 44 si ottengono le parole 0000, 1011, 1100, 01110000,\,1011,\,1100,\,0111: insieme diverso, dmin=2d_{min}=2 in entrambi i casi.

4. Forma sistematica

Definizione. GG è in forma sistematica se G=[IkA],A di dimensioni (n−k)×k,Gb=[bAb].G=\begin{bmatrix}I_k\\A\end{bmatrix},\qquad A\ \text{di dimensioni }(n-k)\times k,\qquad G\mathbf b=\begin{bmatrix}\mathbf b\\A\mathbf b\end{bmatrix}. I primi kk bit della parola sono i bit di informazione, gli altri n−kn-k sono i bit di parità p=Ab\mathbf p=A\mathbf b.

Il vantaggio è che la decodifica, una volta trovata la parola, restituisce b^\hat{\mathbf b} leggendo i primi kk bit. Una GG qualunque si porta sempre in forma sistematica con combinazioni delle colonne e permutazioni delle righe. Quando basta toccare le colonne il codice non cambia.

Esempio (tema d'esame del 9 gennaio 2026). Il codice c1=b1c_1=b_1, c2=b1+b2c_2=b_1+b_2, c3=b3c_3=b_3, c4=b1+b2+b3c_4=b_1+b_2+b_3, c5=b2+b3c_5=b_2+b_3 ha G′=[100110001111011].G'=\begin{bmatrix}1&0&0\\1&1&0\\0&0&1\\1&1&1\\0&1&1\end{bmatrix}. Le prime tre righe non sono l'identità (la seconda riga è [1,1,0][1,1,0]). Sommando la seconda colonna alla prima (operazione sulle colonne: il codice è lo stesso) la prima colonna diventa [1,0,0,0,1]T[1,0,0,0,1]^T e G=[100010001011111],A=[011111].G=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\\0&1&1\\1&1&1\end{bmatrix},\qquad A=\begin{bmatrix}0&1&1\\1&1&1\end{bmatrix}. Con Python si controlla che G′G' e GG producono le stesse 88 parole.

Se la parte alta di GG non è l'identità e per qualche posizione manca una riga del tipo [0,…,1,…,0][0,\dots,1,\dots,0], le sole permutazioni delle righe non bastano: servono combinazioni delle colonne (vedi l'esercizio Esercizio - codice (8,4) non sistematico, sistematica equivalente e cascata di due codici (esame del 23 gennaio 2024, es. 172)).

5. Peso di Hamming e distanza minima

Definizione. Il peso di Hamming del codice è wH(C)=min⁡c∈C, c≠0wH(c)w_H(\mathcal C)=\min_{\mathbf c\in\mathcal C,\ \mathbf c\ne\mathbf0}w_H(\mathbf c), il minimo numero di 11 tra le parole non nulle.

Teorema. In un codice lineare la distanza minima è uguale al peso minimo: dmin=wH(C)d_{min}=w_H(\mathcal C).

Dimostrazione. dmin=min⁡ci≠cjdH(ci,cj)=min⁡ci≠cj∥ci−cj∥Hd_{min}=\min_{\mathbf c_i\ne\mathbf c_j}d_H(\mathbf c_i,\mathbf c_j)=\min_{\mathbf c_i\ne\mathbf c_j}\|\mathbf c_i-\mathbf c_j\|_H. Il codice è lineare, quindi ci−cj=ci+cj\mathbf c_i-\mathbf c_j=\mathbf c_i+\mathbf c_j è una parola di codice, non nulla perché ci≠cj\mathbf c_i\ne\mathbf c_j; viceversa ogni parola non nulla c\mathbf c si ottiene come c−0\mathbf c-\mathbf 0 con 0∈C\mathbf 0\in\mathcal C. Quindi il minimo sulle coppie è il minimo sulle parole non nulle: min⁡c≠0∥c∥H=wH(C)\min_{\mathbf c\ne\mathbf 0}\|\mathbf c\|_H=w_H(\mathcal C). □\square

In pratica si elencano le 2k−12^k-1 parole non nulle (invece delle (2k2)\binom{2^k}{2} coppie) e si prende il peso minore. Ogni colonna di GG è una parola, quindi dmin≤min⁡colonnewH.d_{min}\le\min_{\text{colonne}}w_H. Il bound può non essere raggiunto, perché una somma di colonne può pesare meno di ogni colonna: G=[I31 1 11 1 11 1 1]G=\begin{bmatrix}I_3\\ \hline1\ 1\ 1\\1\ 1\ 1\\1\ 1\ 1\end{bmatrix} (n=6n=6, k=3k=3) ha tutte le colonne di peso 44, ma la somma della seconda e della terza colonna è [0,1,1,0,0,0]T[0,1,1,0,0,0]^T di peso 22: dmin=2d_{min}=2 (le 88 parole hanno pesi 0,2,2,2,4,4,4,60,2,2,2,4,4,4,6, controllato con Python).

Esempio (codice (7,3)(7,3) sistematico). Con c4=c1+c2c_4=c_1+c_2, c5=c1+c3c_5=c_1+c_3, c6=c2+c3c_6=c_2+c_3, c7=c1+c2+c3c_7=c_1+c_2+c_3: le 77 parole non nulle hanno tutte peso 44 (b=100→1001101b=100\to1001101, …\dots). Quindi dmin=4d_{min}=4: il codice rivela 33 errori e ne corregge 11 (controllato con Python).

6. Bound di Singleton

Teorema (bound di Singleton). Per un codice lineare (n,k)(n,k) dmin≤n−k+1.d_{min}\le n-k+1.

Dimostrazione. Si sceglie una GG in forma sistematica (si può sempre: cambia al più l'ordine dei bit, non dmind_{min}). La colonna ii è [eiA⋅,i]\begin{bmatrix}\mathbf e_i\\A_{\cdot,i}\end{bmatrix}, con ei\mathbf e_i il vettore con un solo 11 in posizione ii e A⋅,iA_{\cdot,i} lunga n−kn-k. Il suo peso è al più 1+(n−k)1+(n-k). Essendo una parola di codice, dmin≤wH≤1+n−kd_{min}\le w_H\le1+n-k. □\square

Si usa in due modi.

  • Per scartare un codice. Per correggere tt errori serve dmin≥2t+1d_{min}\ge2t+1, quindi 2t+1≤n−k+12t+1\le n-k+1, cioè n−k≥2tn-k\ge2t: servono almeno 2t2t bit di parità. Per esempio un codice lineare con k=2k=2 e n=4n=4 non può correggere 22 errori: servirebbe dmin≥5d_{min}\ge5 ma n−k+1=3n-k+1=3.
  • Per sapere cosa si può ottenere. Con k=2k=2, n=5n=5 si ha dmin≤4d_{min}\le4; vediamo cosa si ottiene davvero.

Esempio (lezione). Si trovino a,b,c,d∈{0,1}a,b,c,d\in\{0,1\} che massimizzano gli errori corretti per G=[0c1da101b1]G=\begin{bmatrix}0&c\\1&d\\a&1\\0&1\\b&1\end{bmatrix} (n=5n=5, k=2k=2).

Le tre parole non nulle sono le due colonne e la loro somma: g1=[0,1,a,0,b]T\mathbf g_1=[0,1,a,0,b]^T, g2=[c,d,1,1,1]T\mathbf g_2=[c,d,1,1,1]^T e g1+g2=[c, 1+d, a+1, 1, b+1]T\mathbf g_1+\mathbf g_2=[c,\,1+d,\,a+1,\,1,\,b+1]^T. Si vuole che ciascuna abbia peso ≥3\ge3.

  1. g1\mathbf g_1 ha peso 1+a+b≤31+a+b\le3: per avere 33 servono a=b=1a=b=1.
  2. Con a=b=1a=b=1 la somma vale [c, 1+d, 0, 1, 0]T[c,\,1+d,\,0,\,1,\,0]^T e pesa c+(1+d)+1c+(1+d)+1: per avere 33 servono c=1c=1 e d=0d=0.
  3. Con c=1c=1, d=0d=0: g2=[1,0,1,1,1]T\mathbf g_2=[1,0,1,1,1]^T pesa 44.

Quindi dmin=3d_{min}=3 (il massimo, con a=b=c=1a=b=c=1, d=0d=0; Singleton ammetterebbe 44 ma non è raggiungibile: lo si verifica provando tutte le 1616 scelte con Python, solo questa dà 33, negli altri casi dmin≤2d_{min}\le2). Il codice corregge t=1t=1 errore. Scambiando le prime due colonne si ha la forma sistematica G=[1001111011]G=\begin{bmatrix}1&0\\0&1\\1&1\\1&0\\1&1\end{bmatrix} con parole 00000, 01101, 10111, 1101000000,\,01101,\,10111,\,11010 e pesi 3,4,33,4,3.

Casi in cui il bound è raggiunto (codici a distanza massima, MDS):

  • codice a ripetizione (n,1)(n,1): c=[b,b,…,b]T\mathbf c=[b,b,\dots,b]^T, dmin=n=n−1+1d_{min}=n=n-1+1 (corregge ⌊n−12⌋\lfloor\frac{n-1}2\rfloor errori, ma R=1nR=\frac1n);
  • codice a parità singola (k+1,k)(k+1,k) (sezione 7): dmin=2=(k+1)−k+1d_{min}=2=(k+1)-k+1.

7. Codice a parità singola

Con n=k+1n=k+1 il bound dà dmin≤2d_{min}\le2, quindi il meglio che si può fare è dmin=2d_{min}=2: rivelare sempre 11 errore e non correggerne nessuno. Lo ottiene il codice che aggiunge un bit di parità ck+1=b1⊕b2⊕⋯⊕bk,G=[Ik1 1 ⋯ 1]  (k+1 righe, k colonne).c_{k+1}=b_1\oplus b_2\oplus\dots\oplus b_k,\qquad G=\begin{bmatrix}I_k\\1\ 1\ \cdots\ 1\end{bmatrix}\ \ (k+1\text{ righe},\ k\text{ colonne}). Il numero di 11 di ogni parola è pari (parità pari), quindi un numero dispari di errori (di cui 11) si rivela sempre e un numero pari no. Tutte le parole non nulle hanno peso pari, il minimo è 22 (per esempio b=10…0\mathbf b=10\dots0 dà peso 22). Per k=3k=3 le 77 parole non nulle hanno pesi 2,2,2,2,2,2,42,2,2,2,2,2,4.

Con più bit di parità la scelta migliore dipende da quanti errori si vogliono rivelare o correggere: Singleton dice che dmind_{min} cresce al massimo di 11 per ogni bit di parità aggiunto.

Errori comuni

  • Credere che un codice sia lineare perché contiene la parola nulla o perché la somma di una coppia è una parola: serve la chiusura per tutte le somme.
  • Considerare lineare un codice con un termine costante (+1+1) o con prodotti di bit; non considerare lineare un codice con bi2b_i^2 (che vale bib_i).
  • Scambiare righe e colonne di GG: le operazioni sulle colonne non cambiano il codice, le permutazioni delle righe cambiano le parole ma non le prestazioni.
  • Calcolare dmind_{min} prendendo il minimo peso delle colonne di GG invece del minimo su tutte le parole non nulle (somme di colonne comprese).
  • Dimenticare che GG è n×kn\times k in questo corso (c=Gb\mathbf c=G\mathbf b), non k×nk\times n.

Domande d'esame

  1. È lineare il codice c1=b2c_1=b_2, c2=b1c_2=b_1, c3=b3c_3=b_3, c4=b22+b32c_4=b_2^2+b_3^2, c5=b1+b2c_5=b_1+b_2, c6=(b1+b2+b3)2c_6=(b_1+b_2+b_3)^2? Quali sono GG e il rate? Sì: i quadrati valgono i bit stessi, quindi ogni cic_i è una somma di bit. Rate 36=12\frac36=\frac12. GG ha righe [0,1,0],[1,0,0],[0,0,1],[0,1,1],[1,1,0],[1,1,1][0,1,0],[1,0,0],[0,0,1],[0,1,1],[1,1,0],[1,1,1] (Esercizio - codice (6,3) da equazioni con quadrati e matrice di controllo di parità (secondo compitino del 14 gennaio 2025, es. 185)).
  2. Dimostrare che per un codice lineare dmind_{min} è il peso minimo. Le differenze di parole sono parole; la distanza tra ci\mathbf c_i e cj\mathbf c_j è il peso di ci+cj≠0\mathbf c_i+\mathbf c_j\ne\mathbf 0.
  3. Può un codice lineare binario con k=2k=2 e n=4n=4 correggere 22 errori? No: servirebbe dmin≥5d_{min}\ge5, ma Singleton dà dmin≤n−k+1=3d_{min}\le n-k+1=3.

Esercizi svolti

Versione ripasso

Spazio delle sequenze (CampiUn campo è un insieme di numeri con somma e prodotto che rispettano le regole usuali (associativa, commutativa, neutri, opposti, inversi, distributiva): è ciò che serve per risolvere le equazioni di primo grado. Esempi: Q, R, C e i campi finiti.Campi →, Spazi vettorialiUno spazio vettoriale su un campo K è un insieme con una somma di vettori e un prodotto per scalari che rispettano 7 proprietà. Esempi fondamentali: K^n (somma componente per componente), le funzioni da R in R, i polinomi.Spazi vettoriali →)

  • Somma XOR senza riporto (1+1=01+1=0), scalari {0,1}\{0,1\}. Ogni sequenza è opposta di se stessa: x−y=x+y\mathbf x-\mathbf y=\mathbf x+\mathbf y (esempio 01001110+01001110=001001110+01001110=\mathbf 0).
  • Peso ∥x∥H\|\mathbf x\|_H = numero di 11; dH(x,y)=∥x+y∥Hd_H(\mathbf x,\mathbf y)=\|\mathbf x+\mathbf y\|_H; vale la disuguaglianza triangolare.

Codice lineare (Sottospazi vettorialiUn sottospazio vettoriale è un sottoinsieme che è spazio vettoriale con le stesse operazioni: basta che sia chiuso per somma e per prodotto per scalari. Deve contenere il vettore nullo. In R^2 i sottospazi sono {0}, le rette per l'origine e tutto R^2.Sottospazi vettoriali →)

  • Sottospazio dello spazio delle sequenze: contiene 0\mathbf 0 ed è chiuso rispetto alla somma; 2k2^k parole, kk = dimensione.
  • Non lineare: {001,010,111,101}\{001,010,111,101\} (0∉C\mathbf 0\notin\mathcal C e 001+010=011∉C001+010=011\notin\mathcal C). Lineare: {000,011,101,110}\{000,011,101,110\}.
  • Da equazioni ci=fi(b)c_i=f_i(\mathbf b): lineare se ogni cic_i è somma di bit. Non lineare con una costante (c3=b1+1+b2c_3=b_1+1+b_2) o con un prodotto (b1b2b_1b_2). Lineare con bi2=bib_i^2=b_i, con (b1+b2+b3)2=b1+b2+b3(b_1+b_2+b_3)^2=b_1+b_2+b_3 e con ∥b∥H mod 2=b1+⋯+bk\|\mathbf b\|_H\bmod2=b_1+\dots+b_k.

Matrice generatrice GG (n×kn\times k, rango kk)

Forma sistematica G=[IkA]G=\begin{bmatrix}I_k\\A\end{bmatrix}, c=[b;Ab]\mathbf c=[\mathbf b;A\mathbf b], parità p=Ab\mathbf p=A\mathbf b

  • Si ottiene con somme di colonne e permutazioni di righe. Esempio: G′=[100110001111011]G'=\begin{bmatrix}1&0&0\\1&1&0\\0&0&1\\1&1&1\\0&1&1\end{bmatrix}, colonna 1←1\leftarrow colonna 1+1+ colonna 22 dà G=[100010001011111]G=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\\0&1&1\\1&1&1\end{bmatrix}, A=[011111]A=\begin{bmatrix}0&1&1\\1&1&1\end{bmatrix}, stesse 88 parole.
  • Se manca una riga del tipo [0,…,1,…,0][0,\dots,1,\dots,0] le sole permutazioni di righe non bastano.

Distanza minima

  • Teorema: in un codice lineare dmin=wH(C)=min⁡c≠0∥c∥Hd_{min}=w_H(\mathcal C)=\min_{\mathbf c\ne\mathbf 0}\|\mathbf c\|_H, perché le differenze di parole sono parole. Si elencano 2k−12^k-1 parole invece di tutte le coppie.
  • dmin≤d_{min}\le peso minimo delle colonne di GG, ma può essere minore: G=[I3J3]G=\begin{bmatrix}I_3\\J_3\end{bmatrix} (JJ tutti 11) ha colonne di peso 44 e dmin=2d_{min}=2 (somma delle colonne 22 e 33: 011000011000). Codice (7,3)(7,3) con c4=c1+c2c_4=c_1+c_2, c5=c1+c3c_5=c_1+c_3, c6=c2+c3c_6=c_2+c_3, c7=c1+c2+c3c_7=c_1+c_2+c_3: 77 parole non nulle tutte di peso 44, dmin=4d_{min}=4.

Bound di Singleton: dmin≤n−k+1d_{min}\le n-k+1.

  • Dimostrazione: in forma sistematica la colonna ii è [ei;A⋅,i][\mathbf e_i;A_{\cdot,i}], di peso al più 1+(n−k)1+(n-k).
  • Correggere tt errori richiede dmin≥2t+1d_{min}\ge2t+1, quindi n−k≥2tn-k\ge2t. Un codice lineare con k=2k=2, n=4n=4 non corregge 22 errori (dmin≤3<5d_{min}\le3<5).
  • Esempio lezione (5,2)(5,2), G=[0c1da101b1]G=\begin{bmatrix}0&c\\1&d\\a&1\\0&1\\b&1\end{bmatrix}: colonne [0,1,a,0,b]T[0,1,a,0,b]^T, [c,d,1,1,1]T[c,d,1,1,1]^T e somma [c,1+d,a+1,1,b+1]T[c,1+d,a+1,1,b+1]^T; peso ≥3\ge3 richiede a=b=1a=b=1, poi c=1c=1, d=0d=0. Risultato dmin=3d_{min}=3 (le altre 1515 scelte danno al più 22), t=1t=1; sistematica [1001111011]\begin{bmatrix}1&0\\0&1\\1&1\\1&0\\1&1\end{bmatrix}, parole 00000,01101,10111,1101000000,01101,10111,11010.
  • Raggiunto da: ripetizione (n,1)(n,1) con dmin=nd_{min}=n; parità singola (k+1,k)(k+1,k) con dmin=2d_{min}=2 (ck+1=b1+⋯+bkc_{k+1}=b_1+\dots+b_k, rivela i numeri dispari di errori).

Errori tipici

  • Chiusura verificata solo su una coppia, o solo 0∈C\mathbf 0\in\mathcal C.
  • Ritenere lineare un codice con +1+1 o con prodotti; ritenere non lineare uno con bi2b_i^2.
  • Scambiare operazioni su righe e su colonne di GG.
  • Prendere dmind_{min} dal peso delle sole colonne di GG.
  • Dimenticare che in questo corso GG è n×kn\times k (c=Gb\mathbf c=G\mathbf b).

Esercizi su questo argomento

Teoria collegata