Salta al contenuto
Note per Studenti Codici a blocco lineari e sindrome

Codici a blocco lineari e sindrome

In questa pagina 8
In questa pagina 5

Nella nota Codici a blocco - distanza minima, rivelazione e correzioneLa codifica di canale aggiunge ridondanza in modo mirato: $k$ bit di informazione diventano una parola di codice di $n>k$ bit scelta tra $2^k$ parole ammesse. Se la parola ricevuta non è una parola di codice l'errore è rivelato (e si può chiedere la ritrasmissione, ARQ) oppure corretto (FEC). La qualità dipende dalla distanza minima di Hamming $d_{min}$: si rivelano fino a $d_{min}-1$ errori e se ne correggono $t<d_{min}/2$, ma non contemporaneamente. Per un BSC con $P_{bit}<1/2$ la decisione ottima ML coincide con quella a distanza minima. Limite di Hamming: $k/n\le1-\frac1n\log_2\sum_{r=0}^t\binom nr$.Codici a blocco - distanza minima, rivelazione e correzione → un codice era un elenco di 2k2^k parole, e per trovare dmind_{min} bisognava confrontare tutte le coppie; per decodificare, cercare la parola più vicina in tutto l'elenco. Con k=16k=16 sono 65 53665\,536 parole: impraticabile. I codici lineari aggiungono una struttura algebrica che rende tutto più semplice: si descrivono con una matrice, dmind_{min} si trova con un passaggio solo e la decodifica si fa con una piccola tabella.

Vedi anche la versione per Ing. Elettronica (convenzione a vettore riga): 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 →.

Algebra su Z2\mathbb Z_2

L'insieme A=Z2={0,1}\mathcal A=\mathbb Z_2=\{0,1\} con il prodotto AND (indicato con ⋅\cdot) e la somma XOR (indicata con ++, ovvero somma modulo 22: 0+0=00+0=0, 0+1=10+1=1, 1+1=01+1=0) è un campo (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 →). Dal fatto che 1+1=01+1=0 segue che ogni elemento è l'opposto di sé stesso, per cui −x=x-x=x e la sottrazione coincide con la somma: γ1−γ2=γ1+γ2\boldsymbol\gamma_1-\boldsymbol\gamma_2=\boldsymbol\gamma_1+\boldsymbol\gamma_2 (e per questo AA e −A-A sono la stessa matrice).

L'insieme Z2n\mathbb Z_2^n delle sequenze di nn bit, con la somma bit a bit e il prodotto per gli scalari 00 e 11, è uno spazio vettoriale (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 →) di dimensione nn e con 2n2^n elementi. Non ha un prodotto scalare, ma ha la distanza di Hamming dHd_H, che induce una norma:

Definizione (peso di Hamming). ∥c∥H=dH(c,0)=\|\mathbf c\|_H=d_H(\mathbf c,\mathbf 0)= numero di bit uguali a 11 in c\mathbf c =∑j=1ncj=\sum_{j=1}^nc_j (somma in R\mathbb R, non modulo 22), dove 0\mathbf 0 è la parola nulla (tutti zeri). Vale dH(γ1,γ2)=∥γ1−γ2∥H=∥γ1+γ2∥Hd_H(\boldsymbol\gamma_1,\boldsymbol\gamma_2)=\|\boldsymbol\gamma_1-\boldsymbol\gamma_2\|_H=\|\boldsymbol\gamma_1+\boldsymbol\gamma_2\|_H.

Esempio. γ1=1011\boldsymbol\gamma_1=1011, γ2=0110\boldsymbol\gamma_2=0110: γ1+γ2=1101\boldsymbol\gamma_1+\boldsymbol\gamma_2=1101, peso 3=dH(γ1,γ2)3=d_H(\boldsymbol\gamma_1,\boldsymbol\gamma_2) (le posizioni 1,2,41,2,4 differiscono).

Codice lineare

Definizione (codice lineare). Un codice a blocco è lineare se l'insieme delle parole C=μC(Z2k)\mathcal C=\mu_C(\mathbb Z_2^k) è un sottospazio (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 →) di Z2n\mathbb Z_2^n.

Un sottospazio è chiuso rispetto alle combinazioni lineari; in Z2\mathbb Z_2 l'unica combinazione lineare non banale è la somma, quindi la definizione si riduce a: γ1,γ2∈C ⇒ γ1+γ2∈C.\boldsymbol\gamma_1,\boldsymbol\gamma_2\in\mathcal C\ \Rightarrow\ \boldsymbol\gamma_1+\boldsymbol\gamma_2\in\mathcal C. Corollari: vale anche γ1−γ2∈C\boldsymbol\gamma_1-\boldsymbol\gamma_2\in\mathcal C (è la stessa cosa) e soprattutto 0=γ+γ∈C\mathbf 0=\boldsymbol\gamma+\boldsymbol\gamma\in\mathcal C: ogni codice lineare contiene la parola nulla. È un criterio comodo per scartare i codici non lineari: se 0∉C\mathbf 0\notin\mathcal C il codice non è lineare.

Teorema (distanza minima di un codice lineare). In un codice lineare dmind_{min} coincide con il peso di Hamming minimo delle parole non nulle: dmin=min⁡γ∈C∖{0}∥γ∥H.d_{min}=\min_{\boldsymbol\gamma\in\mathcal C\setminus\{\mathbf0\}}\|\boldsymbol\gamma\|_H. Dimostrazione. Per definizione dmin=min⁡γ1≠γ2dH(γ1,γ2)=min⁡∥γ1−γ2∥Hd_{min}=\min_{\gamma_1\ne\gamma_2}d_H(\gamma_1,\gamma_2)=\min\|\gamma_1-\gamma_2\|_H. Basta mostrare che l'insieme delle differenze γ1−γ2\boldsymbol\gamma_1-\boldsymbol\gamma_2 con γ1≠γ2\boldsymbol\gamma_1\ne\boldsymbol\gamma_2 è esattamente l'insieme delle parole di codice non nulle. Una differenza è una parola di codice (linearità) e non è nulla perché γ1≠γ2\gamma_1\ne\gamma_2. Viceversa, sia γ∈C\boldsymbol\gamma\in\mathcal C non nulla: allora γ=γ−0\boldsymbol\gamma=\boldsymbol\gamma-\mathbf0 è la differenza di due parole del codice, perché 0∈C\mathbf0\in\mathcal C. □\square

Il vantaggio è grande: invece di confrontare tutte le coppie (∼22k−1\sim2^{2k-1}) si fa un solo passaggio sulle 2k−12^k-1 parole non nulle.

Esempio. Il codice μ1\mu_1 dell'Esercizio - Codici (4,2) lineari o no e probabilità di errore non rivelato, {0011,0110,1010,1100}\{0011,0110,1010,1100\}, non è lineare: manca 0\mathbf 0. Il μ2\mu_2, {0000,0110,1011,1101}\{0000,0110,1011,1101\}, lo è: pesi 0,2,3,30,2,3,3, dmin=2d_{min}=2.

Rappresentazione matriciale

Se μC:Z2k→Z2n\mu_C:\mathbb Z_2^k\to\mathbb Z_2^n è una mappa lineare (Funzioni lineari e isomorfismiUna funzione tra spazi vettoriali è lineare se rispetta somma e prodotto per uno scalare; manda 0 in 0, è determinata dalle immagini di una base e si chiama isomorfismo quando è anche biiettiva.Funzioni lineari e isomorfismi →), ogni bit di codice è combinazione lineare di bit di informazione: ci=gi1b1+gi2b2+⋯+gikbk(i=1,…,n),gij∈{0,1},c_i=g_{i1}b_1+g_{i2}b_2+\dots+g_{ik}b_k\quad(i=1,\dots,n),\qquad g_{ij}\in\{0,1\}, cioè, con i vettori scritti in colonna (c\mathbf c è n×1n\times1, b\mathbf b è k×1k\times1), c=G b,G matrice n×k.\mathbf c=G\,\mathbf b,\qquad G\ \text{matrice } n\times k. (Alcuni testi usano la convenzione a riga, con GG trasposta e post-moltiplicata: c=bGT\mathbf c=\mathbf bG^T; per questo la GG di altri libri e delle note di Elettronica ha le righe e le colonne scambiate.) Per una codifica invertibile GG ha rango pieno =k=k (Operazioni tra matriciLe matrici m×n formano uno spazio vettoriale (somma e prodotto per scalare elemento per elemento); il prodotto righe per colonne corrisponde alla composizione di funzioni lineari, è associativo ma non commutativo; la trasposta scambia righe e colonne e (AB)^T = B^T A^T.Operazioni tra matrici →, Nucleo e immagineIl nucleo (vettori mandati in 0) e l'immagine (vettori raggiunti) di una funzione lineare sono sottospazi; f è iniettiva se e solo se Ker f = {0}; dim Ker f + dim Im f = dim V (nullità + rango); l'antimmagine di un vettore è una soluzione particolare più il nucleo.Nucleo e immagine →). Poiché le parole di informazione sono sempre equiprobabili, interessa solo l'insieme C\mathcal C delle parole, che è anche lo span (il sottospazio generato) delle colonne di GG.

Definizione (matrice generatrice). Se si prendono kk parole di codice linearmente indipendenti γ1,…,γk\boldsymbol\gamma_1,\dots,\boldsymbol\gamma_k (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 →) e le si mettono in colonna si ottiene G=[γ1 γ2 … γk]G=[\boldsymbol\gamma_1\ \boldsymbol\gamma_2\ \dots\ \boldsymbol\gamma_k] (n×kn\times k), una matrice generatrice del codice. Le γj\boldsymbol\gamma_j sono una base di C\mathcal C (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 →, DimensioneTutte le basi di uno spazio vettoriale hanno lo stesso numero di vettori, la dimensione (dim K^n = n). Da ogni sistema di generatori si estrae una base, ogni insieme di vettori indipendenti si completa a una base, e in dimensione n bastano n vettori indipendenti (o n generatori) per avere una base.Dimensione →: dim⁡C=k\dim\mathcal C=k).

Ci sono più matrici generatrici dello stesso codice (basta scegliere un'altra base): la generazione riguarda l'insieme delle parole, non la mappa specifica μC\mu_C, che cambia.

Esempio. Il codice μ2\mu_2 dell'esercizio, c1=b1c_1=b_1, c2=b2c_2=b_2, c3=b1+b2c_3=b_1+b_2, c4=c2+c3=b1c_4=c_2+c_3=b_1, ha G=(10011110).G=\begin{pmatrix}1&0\\0&1\\1&1\\1&0\end{pmatrix}. La prima colonna è (1,0,1,1)T=1011(1,0,1,1)^T=1011 (la parola associata a b=10\mathbf b=10), la seconda (0,1,1,0)T=0110(0,1,1,0)^T=0110 (per b=01\mathbf b=01); la parola per b=11\mathbf b=11 è la loro somma 11011101, e per b=00\mathbf b=00 si ha 00000000.

Codici sistematici

Teorema (forma di GG per un codice sistematico). Un codice lineare sistematico ammette una matrice generatrice G=(IkA),G=\begin{pmatrix}I_k\\ A\end{pmatrix}, con IkI_k la matrice identità k×kk\times k e AA una matrice (n−k)×k(n-k)\times k detta matrice di parità. Dimostrazione. Per definizione di sistematico cj=bjc_j=b_j per 1≤j≤k1\le j\le k: le prime kk righe di GG sono IkI_k. Gli altri n−kn-k bit sono combinazioni lineari dei bjb_j e le loro righe formano AA. □\square

Esempi. Ripetizione (cj=bjc_j=b_j, cj+k=bjc_{j+k}=b_j, …, mm volte): G=(Ik⋮Ik)G=\begin{pmatrix}I_k\\\vdots\\I_k\end{pmatrix} (mm blocchi), A=(m−1)A=(m-1) copie di IkI_k. Un bit di parità ck+1=∑j=1kbjc_{k+1}=\sum_{j=1}^kb_j: G=(Ik1 1 … 1)G=\binom{I_k}{1\ 1\ \dots\ 1}, AA è il vettore riga di soli uni.

Codice di Hamming (7,4)(7,4) (esempio guida del capitolo), sistematico con G=(1000010000100001110110110111),A=(110110110111).G=\begin{pmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\\\hline1&1&0&1\\1&0&1&1\\0&1&1&1\end{pmatrix},\quad A=\begin{pmatrix}1&1&0&1\\1&0&1&1\\0&1&1&1\end{pmatrix}. I bit di parità sono c5=b1+b2+b4c_5=b_1+b_2+b_4, c6=b1+b3+b4c_6=b_1+b_3+b_4, c7=b2+b3+b4c_7=b_2+b_3+b_4. Dalle colonne γ1=1000110\boldsymbol\gamma_1=1000110, γ2=0100101\boldsymbol\gamma_2=0100101, γ3=0010011\boldsymbol\gamma_3=0010011, γ4=0001111\boldsymbol\gamma_4=0001111 si vedono subito 44 parole oltre alla nulla; le altre 1111 sono le somme, ad esempio γ5=γ1+γ2=1100011\boldsymbol\gamma_5=\boldsymbol\gamma_1+\boldsymbol\gamma_2=1100011. Tutte le 1616 parole: 0000000, 0001111, 0010011, 0011100, 0100101, 0101010, 0110110, 0111001, 1000110, 1001001, 1010101, 1011010, 1100011, 1101100, 1110000, 11111110000000,\ 0001111,\ 0010011,\ 0011100,\ 0100101,\ 0101010,\ 0110110,\ 0111001,\ 1000110,\ 1001001,\ 1010101,\ 1011010,\ 1100011,\ 1101100,\ 1110000,\ 1111111 (enumerate al calcolatore).

Come si trova dmind_{min} guardando GG

In linea di principio si guardano tutte le parole e si prende il peso minimo: per il (7,4)(7,4) i pesi sono 00 (una parola), 33 (sette parole), 44 (sette parole), 77 (una parola): dmin=3d_{min}=3. Dalla sola GG si può dire dmin≤3d_{min}\le3 (le colonne γ1,γ2,γ3\boldsymbol\gamma_1,\boldsymbol\gamma_2,\boldsymbol\gamma_3 hanno peso 33 e la γ4\boldsymbol\gamma_4 ha peso 44). Per escludere dmin=1d_{min}=1 e 22 ci sono trucchi:

  • non può essere 11: una parola di peso 11 avrebbe un solo bit di informazione uguale a 11 e tutte le parità nulle, cioè una colonna di AA nulla; qui nessuna colonna di AA è nulla (e una parola con parte sistematica nulla è la parola nulla, che non conta);
  • non può essere 22: una parola di peso 22 avrebbe o (i) due bit di informazione a 11 e parità nulle, cioè due colonne di AA uguali (la somma di due colonne uguali è nulla), oppure (ii) un solo bit di informazione a 11 e una sola parità a 11, cioè una colonna di AA di peso 11. Le colonne di AA del (7,4)(7,4) sono 110, 101, 011, 111110,\ 101,\ 011,\ 111: tutte diverse e di peso ≥2\ge2.

Un modo più sistematico, con HH, è nella sezione sulla matrice di controllo.

Permutazioni elementari ed equivalenza

Si consideri la matrice HijH_{ij} ottenuta dall'identità scambiando le righe ii e jj (una matrice di permutazione), e la matrice KijK_{ij} ottenuta dall'identità aggiungendo un 11 fuori diagonale (che somma una riga o una colonna a un'altra). Come operazioni su GG:

  • post-moltiplicando per matrici k×kk\times k (G′=GHijG'=GH_{ij} oppure G′=GKijG'=GK_{ij}) si operano trasformazioni elementari sulle colonne: HijH_{ij} scambia le colonne ii e jj (stessa base, stesso sottospazio C\mathcal C), KijK_{ij} sostituisce la colonna γj\boldsymbol\gamma_j con γi+γj\boldsymbol\gamma_i+\boldsymbol\gamma_j (sempre una base di C\mathcal C). Cambia la mappa μC\mu_C ma non il codice.
  • pre-moltiplicando per matrici n×nn\times n (G′=HijGG'=H_{ij}G) si scambiano le righe, cioè si permutano i bit delle parole di codice: il sottospazio cambia, ma si ottiene un codice equivalente, con gli stessi pesi, la stessa dmind_{min} e gli stessi poteri di rivelazione e correzione. Lo stesso vale per KijK_{ij}.

Esempio. C={0000,0101,1010,1111}\mathcal C=\{0000,0101,1010,1111\} scambiando i bit 22 e 33 diventa C′={0000,0011,1100,1111}\mathcal C'=\{0000,0011,1100,1111\}: stessi pesi (0,2,2,4)(0,2,2,4), dmin=2d_{min}=2.

Lemma. Ogni codice lineare ha un equivalente sistematico. Idea della dimostrazione. Data una GG a rango pieno, con operazioni elementari su righe e colonne (l'eliminazione di Gauss-Jordan, Eliminazione di GaussCon tre operazioni elementari sulle righe (scambio, moltiplicazione per uno scalare non nullo, somma di un multiplo di un'altra riga) ogni matrice si riduce a scala senza cambiare il rango; serve a calcolare ranghi, risolvere sistemi, trovare relazioni di dipendenza e matrici che riducono a scala.Eliminazione di Gauss →) la si riduce a G′=(IkA)G'=\binom{I_k}{A}.

Teorema (limite di Singleton). Per ogni codice lineare (n,k)(n,k), dmin≤n−k+1d_{min}\le n-k+1. Dimostrazione. Si usa il lemma. Ogni colonna di G′=(IkA)G'=\binom{I_k}{A} è una parola di codice che ha al più un 11 nella parte superiore (IkI_k) e al più n−kn-k uni nella parte inferiore (AA): peso ≤1+(n−k)\le1+(n-k). Quindi esiste una parola non nulla di peso ≤n−k+1\le n-k+1 e dmin≤n−k+1d_{min}\le n-k+1. □\square

Esempi. (7,4)(7,4): 3≤43\le4. Ripetizione (3,1)(3,1): 3≤33\le3 (uguaglianza). Un bit di parità (5,4)(5,4): 2≤22\le2. Il limite è piuttosto lasco, ma conferma che per avere dmind_{min} alta bisogna sacrificare il tasso: dmin↑⇒k/n↓d_{min}\uparrow\Rightarrow k/n\downarrow.

Matrice di controllo di parità e sindrome

Definizione (matrice di controllo di parità). Per un codice lineare (n,k)(n,k) la matrice di controllo di parità è una matrice HH di tipo ℓ×n\ell\times n (in generale ℓ≥n−k\ell\ge n-k, in pratica ℓ=n−k\ell=n-k) tale che Hc=0  ⟺  c∈C,H\mathbf c=\mathbf 0\iff\mathbf c\in\mathcal C, dove 0\mathbf 0 è il vettore nullo con ℓ\ell elementi. (Non va confusa con la matrice di parità AA, che è un'altra cosa.)

Se si conosce HH si ha un controllo rapido: ricevuta c~\tilde{\mathbf c} ci si chiede se è una parola di codice e si calcola il vettore σ=Hc~,detto sindrome dell’errore (error syndrome).\boldsymbol\sigma=H\tilde{\mathbf c},\qquad\text{detto \textbf{sindrome} dell'errore}\ (\text{error syndrome}). Se la sindrome è nulla non ci sono errori (a meno che l'errore non sia non rivelato, cioè c~\tilde{\mathbf c} è un'altra parola di codice); se è non nulla, l'errore è rivelato.

Teorema (proprietà caratteristica). HH (ℓ×n\ell\times n) è la matrice di controllo del codice con matrice generatrice GG se e solo se HG=OHG=O e rank(H)=n−k\mathrm{rank}(H)=n-k. Dimostrazione (sketch). (⇒\Rightarrow) GG è fatta di parole di codice, quindi Hγj=0H\boldsymbol\gamma_j=\mathbf0 per ogni colonna: HG=OHG=O (la matrice nulla ℓ×k\ell\times k). (⇐\Leftarrow) C\mathcal C è lo spazio nullo di HH (Nucleo e immagineIl nucleo (vettori mandati in 0) e l'immagine (vettori raggiunti) di una funzione lineare sono sottospazi; f è iniettiva se e solo se Ker f = {0}; dim Ker f + dim Im f = dim V (nullità + rango); l'antimmagine di un vettore è una soluzione particolare più il nucleo.Nucleo e immagine →), che ha dimensione n−rank(H)=n−(n−k)=kn-\mathrm{rank}(H)=n-(n-k)=k; e HG=OHG=O dice che lo span di GG (dimensione kk) è contenuto nel nucleo di HH: avendo la stessa dimensione coincidono. □\square

Questo giustifica ℓ=n−k\ell=n-k nei casi pratici (per avere rango pieno senza righe ridondanti).

Teorema (matrice HH di un codice sistematico). Se G=(IkA)G=\binom{I_k}{A} allora H=[ −A∣In−k ]=[ A∣In−k ]in Z2.H=[\,-A\mid I_{n-k}\,]=[\,A\mid I_{n-k}\,]\quad\text{in }\mathbb Z_2. Dimostrazione. HH ha rango n−kn-k per la presenza di In−kI_{n-k}. Inoltre HG=[−A∣In−k](IkA)=−A Ik+In−kA=−A+A=OHG=[-A\mid I_{n-k}]\binom{I_k}{A}=-A\,I_k+I_{n-k}A=-A+A=O. Per la proprietà caratteristica HH è la matrice di controllo. □\square (Il teorema vale anche sui campi non binari, dove il segno conta.)

Esempio. Hamming (7,4)(7,4) (n−k=3n-k=3): H=[A∣I3]=(110110010110100111001).H=[A\mid I_3]=\begin{pmatrix}1&1&0&1&1&0&0\\1&0&1&1&0&1&0\\0&1&1&1&0&0&1\end{pmatrix}. Controllo su γ1=1000110\boldsymbol\gamma_1=1000110: la prima riga di HH somma i bit 1,2,4,51,2,4,5 di γ1\boldsymbol\gamma_1 (1+0+0+1=01+0+0+1=0), la seconda i bit 1,3,4,61,3,4,6 (1+0+0+1=01+0+0+1=0), la terza i bit 2,3,4,72,3,4,7 (0+0+0+0=00+0+0+0=0): Hγ1=0H\boldsymbol\gamma_1=\mathbf0. Lo stesso vale per γ2,γ3,γ4\boldsymbol\gamma_2,\boldsymbol\gamma_3,\boldsymbol\gamma_4 (HG=OHG=O, verificato al calcolatore). Le colonne di HH sono 110, 101, 011, 111, 100, 010, 001110,\ 101,\ 011,\ 111,\ 100,\ 010,\ 001: tutte le 77 sequenze non nulle di 33 bit, e quindi tutte distinte e non nulle.

Come HH dà dmind_{min}

Hc=∑jcjhjH\mathbf c=\sum_jc_j\mathbf h_j (hj\mathbf h_j = colonna jj di HH): una parola di codice di peso ww corrisponde a ww colonne di HH che sommano a 0\mathbf0. Quindi dmind_{min} è il minimo numero di colonne di HH linearmente dipendenti. Se nessuna colonna è nulla, dmin≥2d_{min}\ge2; se inoltre sono tutte distinte, nessuna coppia somma a zero e dmin≥3d_{min}\ge3. Per il (7,4)(7,4) le colonne sono distinte e non nulle, quindi dmin≥3d_{min}\ge3; e la terna h1,h2,h3\mathbf h_1,\mathbf h_2,\mathbf h_3 è dipendente: 110+101+011=000110+101+011=000. Quindi dmin=3d_{min}=3. Questo è il criterio con cui, nella simulazione d'esame 2013, si vede quanti errori un codice può rivelare.

Un'analogia: la prova del nove. Per controllare 33108+62613=9572133108+62613=95721 si sostituiscono i numeri con la somma ripetuta delle loro cifre (con 9→09\to0): 33108→3+3+1+0+8=15→633108\to3+3+1+0+8=15\to6; 62613→18→9→062613\to18\to9\to0; 95721→24→695721\to24\to6. Se 6+0=66+0=6 coincide con 66 i numeri sono "probabilmente" giusti; se non coincide c'è sicuramente un errore. È il calcolo di un numero modulo 99 (perché 10i=9…9+110^i=9\dots9+1, quindi a⋅104+⋯+e=9999a+⋯+9d+(a+b+c+d+e)a\cdot10^4+\dots+e=9999a+\dots+9d+(a+b+c+d+e)): la differenza è la sindrome, e se non è divisibile per 99 c'è un errore.

Decodifica con la sindrome

La sindrome è un vettore di n−kn-k bit: ci sono 2n−k2^{n-k} sindromi possibili, ma i vettori c~\tilde{\mathbf c} sono 2n2^n. Quindi più vettori hanno la stessa sindrome: quanti? 2k2^k. Infatti Hc~=σH\tilde{\mathbf c}=\boldsymbol\sigma è un sistema di n−kn-k equazioni in nn incognite (sottodeterminato) con 2k2^k soluzioni; verifica: per σ=0\boldsymbol\sigma=\mathbf0 le soluzioni sono le parole di codice, 2k2^k.

"Avere la stessa sindrome" è una relazione di equivalenza (riflessiva, simmetrica, transitiva) su Z2n\mathbb Z_2^n, e le relazioni di equivalenza inducono partizioni. (Altro esempio: Z2\mathbb Z_2 come partizione di Z\mathbb Z nelle classi dei resti modulo 22, pari e dispari.)

Definizione (laterale, o coset). Ognuna delle classi della partizione si chiama coset: Z2n\mathbb Z_2^n è partizionato in 2n−k2^{n-k} coset, ciascuno associato a una sindrome e con 2k2^k elementi; uno di essi (sindrome nulla) è l'insieme delle parole di codice C\mathcal C.

Definizione (coset leader). A ogni sindrome σ\boldsymbol\sigma si associa un elemento speciale ε(σ)=arg⁡min⁡c∈Z2n: Hc=σ∥c∥H,\varepsilon(\boldsymbol\sigma)=\arg\min_{\mathbf c\in\mathbb Z_2^n:\ H\mathbf c=\boldsymbol\sigma}\|\mathbf c\|_H, cioè l'elemento del coset di peso di Hamming minimo. Se più elementi hanno peso minimo se ne sceglie uno con una regola qualsiasi. Evidentemente ε(0n−k)=0n\varepsilon(\mathbf0_{n-k})=\mathbf0_n.

Teorema (decodifica a sindrome). Ricevuto c~\tilde{\mathbf c} con sindrome σ=Hc~\boldsymbol\sigma=H\tilde{\mathbf c}, la decodifica a distanza minima (MD) è c^=c~−ε(σ)  (=c~+ε(σ) in Z2).\hat{\mathbf c}=\tilde{\mathbf c}-\varepsilon(\boldsymbol\sigma)\ \ (=\tilde{\mathbf c}+\varepsilon(\boldsymbol\sigma)\text{ in }\mathbb Z_2). Dimostrazione. Primo, c^\hat{\mathbf c} è una parola di codice: Hc^=Hc~−Hε(σ)=σ−σ=0H\hat{\mathbf c}=H\tilde{\mathbf c}-H\varepsilon(\boldsymbol\sigma)=\boldsymbol\sigma-\boldsymbol\sigma=\mathbf0. Poi, come funziona MD? Se C={γ1,…,γ2k}\mathcal C=\{\boldsymbol\gamma_1,\dots,\boldsymbol\gamma_{2^k}\} si fanno 2k2^k ipotesi: c~=γj+e~j\tilde{\mathbf c}=\boldsymbol\gamma_j+\tilde{\mathbf e}_j, dove e~j\tilde{\mathbf e}_j è il possibile vettore d'errore (con un 11 nei bit invertiti), e si sceglie quello con meno uni (distanza di Hamming minima). I vettori e~j\tilde{\mathbf e}_j (1) sono tutti diversi, (2) sono 2k2^k, (3) hanno tutti sindrome σ\boldsymbol\sigma: infatti σ=Hc~=H(γj+e~j)=He~j\boldsymbol\sigma=H\tilde{\mathbf c}=H(\boldsymbol\gamma_j+\tilde{\mathbf e}_j)=H\tilde{\mathbf e}_j. Sono quindi tutto il coset di σ\boldsymbol\sigma, e quello di peso minimo è per definizione ε(σ)\varepsilon(\boldsymbol\sigma). La decodifica MD è c~=c^+ε(σ)\tilde{\mathbf c}=\hat{\mathbf c}+\varepsilon(\boldsymbol\sigma), cioè quanto affermato. □\square

Corollari. Se c~∈C\tilde{\mathbf c}\in\mathcal C la sindrome è nulla e il coset leader è 0\mathbf0: nessuna correzione, coerente con MD. Più in generale il coset leader coincide con la sindrome stessa solo in casi particolari.

Il vantaggio pratico: i coset leader si mettono in una tabella con 2n−k2^{n-k} righe (in genere poche). Ricevuta c~\tilde{\mathbf c}: si calcola σ=Hc~\boldsymbol\sigma=H\tilde{\mathbf c}, si legge ε(σ)\varepsilon(\boldsymbol\sigma) e si sottrae.

Esempio completo: il codice (4,2)(4,2) μ2\mu_2

G=(10011110)G=\begin{pmatrix}1&0\\0&1\\1&1\\1&0\end{pmatrix}, quindi A=(1110)A=\begin{pmatrix}1&1\\1&0\end{pmatrix} e H=[A∣I2]=(11101001)H=[A\mid I_2]=\begin{pmatrix}1&1&1&0\\1&0&0&1\end{pmatrix} (controllo: HG=OHG=O). Le 44 sindromi dividono i 1616 vettori in 44 coset da 44 elementi:

σ\boldsymbol\sigma elementi del coset coset leader
0000 0000, 0110, 1011, 11010000,\ 0110,\ 1011,\ 1101 (il codice) 00000000
0101 0001, 0111, 1010, 11000001,\ 0111,\ 1010,\ 1100 00010001
1010 0010, 0100, 1001, 11110010,\ 0100,\ 1001,\ 1111 00100010 oppure 01000100 (entrambi peso 11)
1111 0011, 0101, 1000, 11100011,\ 0101,\ 1000,\ 1110 10001000

Si riceve c~=1110\tilde{\mathbf c}=1110: σ=Hc~=(1+1+1+0, 1+0+0+0)=(1,1)\boldsymbol\sigma=H\tilde{\mathbf c}=(1+1+1+0,\ 1+0+0+0)=(1,1), coset leader 10001000, c^=1110+1000=0110\hat{\mathbf c}=1110+1000=0110 (è una parola di codice). Nel coset 1010 i leader 00100010 e 01000100 hanno lo stesso peso: la decodifica sceglie uno dei due, ma l'errore è a distanza 11 da due parole di codice diverse, quindi non è garantita la correzione (coerente con dmin=2d_{min}=2, t<1t<1: nessun errore correggibile). Qui il leader del coset 1111 è unico: la parola decodificata 01100110 è a distanza 11 da c~\tilde{\mathbf c}, mentre le altre parole di codice (00000000, 10111011, 11011101) sono a distanza 33, 22 e 22.

Esempio con Hamming (7,4)(7,4)

La tabella dei coset leader del (7,4)(7,4) ha 23=82^3=8 righe: la sindrome nulla (0\mathbf0) e le 77 sindromi non nulle, ciascuna uguale a una colonna di HH, hanno per leader il vettore con un solo 11 nella posizione di quella colonna:

σ\boldsymbol\sigma 000000 110110 101101 011011 111111 100100 010010 001001
ε(σ)\varepsilon(\boldsymbol\sigma) 00000000000000 10000001000000 01000000100000 00100000010000 00010000001000 00001000000100 00000100000010 00000010000001

Esempio: b=1011\mathbf b=1011, c=Gb=1011010\mathbf c=G\mathbf b=1011010 (parità: b1+b2+b4=1+0+1=0b_1+b_2+b_4=1+0+1=0, b1+b3+b4=1+1+1=1b_1+b_3+b_4=1+1+1=1, b2+b3+b4=0+1+1=0b_2+b_3+b_4=0+1+1=0). Se il canale sbaglia il bit 44 si riceve c~=1010010\tilde{\mathbf c}=1010010 e σ=Hc~=(1,1,1)\boldsymbol\sigma=H\tilde{\mathbf c}=(1,1,1): è la colonna 44 di HH, quindi ε=0001000\varepsilon=0001000 e c^=1010010+0001000=1011010=c\hat{\mathbf c}=1010010+0001000=1011010=\mathbf c ✓. Una sola sindrome per ognuno dei 77 errori singoli: il codice li corregge tutti (112 casi = 16⋅716\cdot7 verificati al calcolatore). Con 22 errori invece la decodifica sbaglia sempre: la sindrome è la somma di due colonne, che è una terza colonna, e si "corregge" il bit sbagliato aggiungendo un terzo errore.

Il codice del compito 2013

G=(100010001101011100010)G=\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\\1&0&1\\0&1&1\\1&0&0\\0&1&0\end{pmatrix} (colonne γ1=1001010\boldsymbol\gamma_1=1001010, γ2=0100101\boldsymbol\gamma_2=0100101, γ3=0011100\boldsymbol\gamma_3=0011100): è sistematico (le prime tre righe sono I3I_3), (n,k)=(7,3)(n,k)=(7,3), e H=[A∣I4]H=[A\mid I_4] con A=(101011100010)A=\begin{pmatrix}1&0&1\\0&1&1\\1&0&0\\0&1&0\end{pmatrix}. I pesi delle 88 parole sono 0,3,3,4,3,4,6,50,3,3,4,3,4,6,5: dmin=3d_{min}=3, rivela fino a 22 errori. Il calcolo completo è nell'Esercizio - Quattro domande brevi su capacità, TDMA e FDMA, entropia e codice lineare (simulazione d'esame 2013).

Errori comuni

  • Verificare la linearità con una sola somma: serve la chiusura per tutte le coppie (o basta controllare che 0∈C\mathbf 0\in\mathcal C per scartare un codice).
  • Calcolare dmind_{min} su tutte le coppie in un codice lineare, o prenderlo dal peso di una colonna di GG qualsiasi (è solo un limite superiore).
  • Scrivere H=[I∣A]H=[I\mid A] con G=(IA)G=\binom{I}{A}: l'identità va dalla parte dei bit di parità, H=[A∣In−k]H=[A\mid I_{n-k}] (verificare sempre HG=OHG=O).
  • Confondere GG (n×kn\times k in questo corso) con quella dell'altra convenzione (k×nk\times n): conta l'ordine del prodotto.
  • Credere che una sindrome non nulla identifichi sempre l'errore: con colonne uguali o con due o più errori la correzione è ambigua o sbagliata.

Collegamenti

Il codice di Hamming e il CRC sono in 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 →. Per le basi algebriche: 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 →, Nucleo e immagineIl nucleo (vettori mandati in 0) e l'immagine (vettori raggiunti) di una funzione lineare sono sottospazi; f è iniettiva se e solo se Ker f = {0}; dim Ker f + dim Im f = dim V (nullità + rango); l'antimmagine di un vettore è una soluzione particolare più il nucleo.Nucleo e immagine →, DimensioneTutte le basi di uno spazio vettoriale hanno lo stesso numero di vettori, la dimensione (dim K^n = n). Da ogni sistema di generatori si estrae una base, ogni insieme di vettori indipendenti si completa a una base, e in dimensione n bastano n vettori indipendenti (o n generatori) per avere una base.Dimensione →. Esercizi: Esercizio - Codici (4,2) lineari o no e probabilità di errore non rivelato, Esercizio - Test del DNA con 4, 5 e 7 provette.

Versione ripasso

Un codice è lineare se è un sottospazio di Z2n\mathbb Z_2^n (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 →): in Z2\mathbb Z_2 basta che la somma XOR di due parole di codice sia una parola di codice. Il codice si descrive con una matrice, invece che con un elenco di 2k2^k parole (vedi Codici a blocco - distanza minima, rivelazione e correzioneLa codifica di canale aggiunge ridondanza in modo mirato: $k$ bit di informazione diventano una parola di codice di $n>k$ bit scelta tra $2^k$ parole ammesse. Se la parola ricevuta non è una parola di codice l'errore è rivelato (e si può chiedere la ritrasmissione, ARQ) oppure corretto (FEC). La qualità dipende dalla distanza minima di Hamming $d_{min}$: si rivelano fino a $d_{min}-1$ errori e se ne correggono $t<d_{min}/2$, ma non contemporaneamente. Per un BSC con $P_{bit}<1/2$ la decisione ottima ML coincide con quella a distanza minima. Limite di Hamming: $k/n\le1-\frac1n\log_2\sum_{r=0}^t\binom nr$.Codici a blocco - distanza minima, rivelazione e correzione →).

Peso, linearità e distanza minima

  • Peso di Hamming: ∥c∥H=∑jcj\|\mathbf c\|_H=\sum_jc_j (somma in R\mathbb R), cioè il numero di uni; dH(γ1,γ2)=∥γ1+γ2∥Hd_H(\boldsymbol\gamma_1,\boldsymbol\gamma_2)=\|\boldsymbol\gamma_1+\boldsymbol\gamma_2\|_H.
  • Esempio: 1011+0110=11011011+0110=1101, peso 3=dH(1011,0110)3=d_H(1011,0110).
  • Ogni codice lineare contiene 0=γ+γ\mathbf0=\boldsymbol\gamma+\boldsymbol\gamma: se 0∉C\mathbf0\notin\mathcal C il codice non è lineare.
  • Teorema: in un codice lineare dmin=min⁡γ∈C∖{0}∥γ∥Hd_{min}=\min_{\boldsymbol\gamma\in\mathcal C\setminus\{\mathbf0\}}\|\boldsymbol\gamma\|_H Basta un passaggio sulle 2k−12^k-1 parole non nulle, invece di confrontare tutte le coppie.
  • Esempio: {0011,0110,1010,1100}\{0011,0110,1010,1100\} non è lineare (manca 0\mathbf0). {0000,0110,1011,1101}\{0000,0110,1011,1101\} lo è: pesi 0,2,3,30,2,3,3, dmin=2d_{min}=2.

Matrice generatrice

Trovare dmind_{min} dalla forma

Matrice di controllo HH

  • HH è (n−k)×n(n-k)\times n con Hc=0  ⟺  c∈CH\mathbf c=\mathbf0\iff\mathbf c\in\mathcal C
  • Teorema: HH è la matrice di controllo di GG se e solo se HG=OHG=O e rank H=n−k\mathrm{rank}\,H=n-k (Nucleo e immagineIl nucleo (vettori mandati in 0) e l'immagine (vettori raggiunti) di una funzione lineare sono sottospazi; f è iniettiva se e solo se Ker f = {0}; dim Ker f + dim Im f = dim V (nullità + rango); l'antimmagine di un vettore è una soluzione particolare più il nucleo.Nucleo e immagine →: C\mathcal C è lo spazio nullo di HH).
  • Per G=(IkA)G=\binom{I_k}{A} si ha H=[ A∣In−k ]H=[\,A\mid I_{n-k}\,] in Z2\mathbb Z_2. Verifica: HG=A+A=OHG=A+A=O.
  • Esempio: Hamming (7,4)(7,4): H=(110110010110100111001)H=\begin{pmatrix}1&1&0&1&1&0&0\\1&0&1&1&0&1&0\\0&1&1&1&0&0&1\end{pmatrix} Le sue colonne sono le 77 sequenze non nulle di 33 bit, tutte diverse.
  • Come HH dà dmind_{min}: Hc=∑jcjhjH\mathbf c=\sum_jc_j\mathbf h_j. Una parola di peso ww corrisponde a ww colonne di HH che sommate danno 0\mathbf0. Quindi dmind_{min} è il minimo numero di colonne linearmente dipendenti. Colonne non nulle e distinte danno dmin≥3d_{min}\ge3; per il (7,4)(7,4) 110+101+011=000110+101+011=000, quindi dmin=3d_{min}=3.
  • Esempio (compito 2013): GG 7×37\times3 sistematica con colonne 10010101001010, 01001010100101, 00111000011100: pesi 0,3,3,4,3,4,6,50,3,3,4,3,4,6,5, dmin=3d_{min}=3, rivela fino a 22 errori.

Sindrome e decodifica

  • Sindrome: σ=Hc~\boldsymbol\sigma=H\tilde{\mathbf c} (n−kn-k bit). Se è nulla c~\tilde{\mathbf c} è una parola di codice; se non è nulla l'errore è rivelato. Hc~=HeH\tilde{\mathbf c}=H\mathbf e dipende solo dall'errore e=c~+c\mathbf e=\tilde{\mathbf c}+\mathbf c.
  • Ci sono 2n−k2^{n-k} sindromi e 2n2^n vettori: si formano 2n−k2^{n-k} coset (classi con la stessa sindrome), ciascuno di 2k2^k elementi. Il coset con sindrome nulla è C\mathcal C.
  • Coset leader ε(σ)\varepsilon(\boldsymbol\sigma): l'elemento di peso minimo del coset. Se due elementi hanno peso minimo se ne sceglie uno.
  • Teorema: la decodifica MD è c^=c~+ε(σ)(in Z2)\hat{\mathbf c}=\tilde{\mathbf c}+\varepsilon(\boldsymbol\sigma)\qquad(\text{in }\mathbb Z_2) Dimostrazione: Hc^=σ+σ=0H\hat{\mathbf c}=\boldsymbol\sigma+\boldsymbol\sigma=\mathbf0, quindi c^∈C\hat{\mathbf c}\in\mathcal C; e il leader è il vettore d'errore con meno uni del coset, cioè il più probabile su un BSC con Pbit<12P_{bit}<\frac12.

Procedura: (1) calcolare σ=Hc~\boldsymbol\sigma=H\tilde{\mathbf c}; (2) leggere ε(σ)\varepsilon(\boldsymbol\sigma) nella tabella; (3) sommare.

Esempio completo: μ2\mu_2, (4,2)(4,2)

  • H=[A∣I2]=(11101001)H=[A\mid I_2]=\begin{pmatrix}1&1&1&0\\1&0&0&1\end{pmatrix} (controllo: HG=OHG=O). Le 44 sindromi dividono i 1616 vettori in 44 coset da 44 elementi.
  • Coset: σ=00\boldsymbol\sigma=00: {0000,0110,1011,1101}\{0000,0110,1011,1101\}, leader 00000000; σ=01\boldsymbol\sigma=01: leader 00010001; σ=10\boldsymbol\sigma=10: leader 00100010 oppure 01000100 (peso 11 entrambi); σ=11\boldsymbol\sigma=11: leader 10001000.
  • Si riceve c~=1110\tilde{\mathbf c}=1110: σ=(1+1+1+0, 1+0+0+0)=(1,1)\boldsymbol\sigma=(1+1+1+0,\ 1+0+0+0)=(1,1), leader 10001000, c^=1110+1000=0110\hat{\mathbf c}=1110+1000=0110.
  • Nel coset 1010 l'errore è a distanza 11 da due parole diverse: non è garantita la correzione, coerente con dmin=2d_{min}=2.

Esempio: Hamming (7,4)(7,4)

  • Per il (7,4)(7,4) ogni sindrome non nulla è una colonna di HH, e il leader è il vettore con un 11 nella posizione di quella colonna. Le 88 sindromi bastano per correggere tutti i 77 errori singoli.
  • Esempio: b=1011\mathbf b=1011, c=1011010\mathbf c=1011010. Se il canale inverte il bit 44, si riceve c~=1010010\tilde{\mathbf c}=1010010, σ=(1,1,1)\boldsymbol\sigma=(1,1,1) = colonna 44 di HH, ε=0001000\varepsilon=0001000, c^=c\hat{\mathbf c}=\mathbf c.
  • Con 22 errori la decodifica sbaglia sempre: la sindrome è la somma di due colonne, cioè una terza colonna, e si "corregge" aggiungendo un terzo errore.

Errori tipici:

  • verificare la linearità con una sola somma: servono tutte le coppie (per scartare un codice basta vedere se 0∉C\mathbf0\notin\mathcal C);
  • calcolare dmind_{min} dal peso di una colonna di GG: è solo un limite superiore;
  • scrivere H=[I∣A]H=[I\mid A] con G=(IA)G=\binom{I}{A}: l'identità sta dalla parte dei bit di parità, H=[A∣In−k]H=[A\mid I_{n-k}] (verificare sempre HG=OHG=O);
  • credere che una sindrome non nulla identifichi sempre l'errore: con due o più errori la correzione è ambigua o sbagliata.

Collegamenti

Codice di Hamming e CRC: 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 →. Basi algebriche: 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 →, DimensioneTutte le basi di uno spazio vettoriale hanno lo stesso numero di vettori, la dimensione (dim K^n = n). Da ogni sistema di generatori si estrae una base, ogni insieme di vettori indipendenti si completa a una base, e in dimensione n bastano n vettori indipendenti (o n generatori) per avere una base.Dimensione →. Esercizi: Esercizio - Test del DNA con 4, 5 e 7 provette.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata