Salta al contenuto
Note per Studenti Esercizio - codice (8,4) non sistematico, sistematica equivalente e cascata di due codici (esame del 23 gennaio 2024, es. 172)

Esercizio - codice (8,4) non sistematico, sistematica equivalente e cascata di due codici (esame del 23 gennaio 2024, es. 172)

Esame
In questa pagina 6

Testo (tema d'esame del 23 gennaio 2024, corso di Fondamenti di Telecomunicazioni, Ing. Informatica UniPD). Si consideri il codice a correzione d'errore con matrice generatrice G=[10000100001100011110101111110110].G=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&1\\0&0&0&1\\1&1&1&0\\1&0&1&1\\1&1&1&1\\0&1&1&0\end{bmatrix}.

  1. (3p) Dire se il codice è a) lineare e b) in forma sistematica, motivando la risposta. Se non è in forma sistematica, dire se è possibile metterlo in forma sistematica solamente usando una sola permutazione dei bit per tutte le parole di codice.
  2. (2p) Dire se il codice originale può avere distanza minima 55, motivando la risposta.
  3. (2p) Se non già trovato al punto 1, trovare ora un codice in forma sistematica equivalente a quello originale (usando tutte le trasformazioni adeguate) e calcolarne la matrice di controllo di parità.
  4. (2p) Per ridurre la probabilità di errore si utilizza ora la cascata del codice originale del punto 1 con un altro codice avente matrice generatrice G1=[I81 1 1 0 0 1 0 1]G_1=\begin{bmatrix}I_8\\\hline1\ 1\ 1\ 0\ 0\ 1\ 0\ 1\end{bmatrix} (nove righe, otto colonne). Ovvero, le parole di codice in uscita dal codificatore con la GG originale vengono codificate con un secondo codice con matrice generatrice G1G_1. Dire se la cascata dei due codici è ancora un codice lineare, e in caso affermativo calcolare la matrice generatrice del codice cascata risultante.
  5. (2p) Se ora utilizziamo la versione in forma sistematica di GG come primo codice della cascata e ancora G1G_1 come secondo codice, dire se il codice cascata ammette matrice di parità e in caso affermativo dire se questa matrice è in forma sistematica (senza calcolarla).

Teoria usata: 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 →, 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 →.

1. Linearità e forma sistematica

a) Lineare. Il codice è definito da una matrice generatrice: c=Gb\mathbf c=G\mathbf b, e l'insieme dei GbG\mathbf b è lo spazio generato dalle colonne di GG, un sottospazio. La matrice ha rango 44 (le righe [1,0,0,0][1,0,0,0], [0,1,0,0][0,1,0,0], [0,0,1,1][0,0,1,1] e [0,0,0,1][0,0,0,1] sono indipendenti): ci sono 24=162^4=16 parole, n=8n=8, k=4k=4. Il codice è lineare.

b) Sistematico? In un codice sistematico G=[I4A]G=\begin{bmatrix}I_4\\A\end{bmatrix}. Qui le prime quattro righe sono [1,0,0,0],[0,1,0,0],[0,0,1,1],[0,0,0,1][1,0,0,0],[0,1,0,0],[0,0,1,1],[0,0,0,1]: la terza non è [0,0,1,0][0,0,1,0], quindi non è in forma sistematica.

Basta una permutazione dei bit? Permutare i bit di tutte le parole significa permutare le righe di GG. Per ottenere I4I_4 in alto servono quattro righe che valgano [1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1][1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]. Le righe di GG sono [1,0,0,0],[0,1,0,0],[0,0,1,1],[0,0,0,1],[1,1,1,0],[1,0,1,1],[1,1,1,1],[0,1,1,0][1,0,0,0],[0,1,0,0],[0,0,1,1],[0,0,0,1],[1,1,1,0],[1,0,1,1],[1,1,1,1],[0,1,1,0]: manca [0,0,1,0][0,0,1,0]. Quindi no, con una permutazione dei bit non si arriva alla forma sistematica.

2. Può essere dmin=5d_{min}=5?

Ogni colonna di GG è una parola di codice, quindi dmind_{min} non supera il peso di nessuna colonna (il peso minimo dà un limite superiore, 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 →). La prima colonna è [1,0,0,0,1,1,1,0]T[1,0,0,0,1,1,1,0]^T e ha peso 44. Perciò dmin≤4<5.d_{min}\le4<5. No, il codice non può avere distanza minima 55. (Il valore vero è dmin=3d_{min}=3: Python dà 44 parole di peso 33, 55 di peso 44, 44 di peso 55, 22 di peso 66; per esempio g3+g4=[0,0,0,1,1,0,0,1]T\mathbf g_3+\mathbf g_4=[0,0,0,1,1,0,0,1]^T ha peso 33.)

3. Forma sistematica equivalente e matrice di parità

Servono operazioni sulle colonne, che non cambiano il codice. La terza riga è [0,0,1,1][0,0,1,1] e dovrebbe essere [0,0,1,0][0,0,1,0]: si toglie il 11 in quarta colonna sostituendo la quarta colonna con la somma della terza e della quarta: g3=[00101111], g4=[00110110],g3+g4=[00011001].\mathbf g_3=\begin{bmatrix}0\\0\\1\\0\\1\\1\\1\\1\end{bmatrix},\ \mathbf g_4=\begin{bmatrix}0\\0\\1\\1\\0\\1\\1\\0\end{bmatrix},\qquad \mathbf g_3+\mathbf g_4=\begin{bmatrix}0\\0\\0\\1\\1\\0\\0\\1\end{bmatrix}. La nuova matrice è Gs=[10000100001000011111101011100111]=[I4A],A=[1111101011100111].G_s=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\\1&1&1&1\\1&0&1&0\\1&1&1&0\\0&1&1&1\end{bmatrix}=\begin{bmatrix}I_4\\A\end{bmatrix},\quad A=\begin{bmatrix}1&1&1&1\\1&0&1&0\\1&1&1&0\\0&1&1&1\end{bmatrix}. (Le colonne 11, 22 e 33 sono invariate e la quarta colonna nuova è [0,0,0,1,1,0,0,1]T[0,0,0,1,1,0,0,1]^T. Python conferma che GG e GsG_s generano le stesse 1616 parole.)

La matrice di controllo di parità è H=[A∣I4]H=[A\mid I_4] (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 →): H=[11111000101001001110001001110001].H=\begin{bmatrix}1&1&1&1&1&0&0&0\\1&0&1&0&0&1&0&0\\1&1&1&0&0&0&1&0\\0&1&1&1&0&0&0&1\end{bmatrix}. Controllo HGs=0HG_s=0 (Python). Le colonne di HH sono tutte non nulle e distinte, quindi dmin≥3d_{min}\ge3, coerente con la sezione 2.

4. Cascata dei due codici

L'uscita del primo codificatore è c=Gb\mathbf c=G\mathbf b (otto bit) e questa è l'ingresso del secondo: c′=G1c=G1(Gb)=(G1G)b\mathbf c'=G_1\mathbf c=G_1(G\mathbf b)=(G_1G)\mathbf b. Il prodotto di matrici è una trasformazione lineare di b\mathbf b: la cascata è un codice lineare con matrice generatrice Gc=G1G(9×4).G_c=G_1G\qquad(9\times4). Poiché G1=[I8r]G_1=\begin{bmatrix}I_8\\\mathbf r\end{bmatrix} con r=[1,1,1,0,0,1,0,1]\mathbf r=[1,1,1,0,0,1,0,1], il prodotto è Gc=[GrG]G_c=\begin{bmatrix}G\\\mathbf rG\end{bmatrix}: le prime otto righe sono quelle di GG e la nona è la combinazione delle righe di GG dove r\mathbf r ha un 11 (righe 1,2,3,6,81,2,3,6,8): rG=[1,0,0,0]+[0,1,0,0]+[0,0,1,1]+[1,0,1,1]+[0,1,1,0]=[0,0,1,0].\mathbf rG=[1,0,0,0]+[0,1,0,0]+[0,0,1,1]+[1,0,1,1]+[0,1,1,0]=[0,0,1,0]. (colonna per colonna: 1+0+0+1+0=01+0+0+1+0=0, 0+1+0+0+1=00+1+0+0+1=0, 0+0+1+1+1=10+0+1+1+1=1, 0+0+1+1+0=00+0+1+1+0=0.) Quindi Gc=[100001000011000111101011111101100010].G_c=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&1\\0&0&0&1\\1&1&1&0\\1&0&1&1\\1&1&1&1\\0&1&1&0\\0&0&1&0\end{bmatrix}. È un codice (9,4)(9,4) (n=9n=9, k=4k=4). Controllo con Python: dmin=4d_{min}=4 (spettro dei pesi 1, 0,0,0, 9, 0, 61,\ 0,0,0,\ 9,\ 0,\ 6 per i pesi 0,…,60,\dots,6): il bit aggiunto aumenta la distanza minima da 33 a 44 (le parole di peso 33 vengono portate a peso 44), quindi la cascata rivela 33 errori e ne corregge 11 (prima rivelava 22).

5. Cascata con la GG sistematica

Con GsG_s come primo codice, c=Gsb=[bAb]\mathbf c=G_s\mathbf b=\begin{bmatrix}\mathbf b\\A\mathbf b\end{bmatrix} e poi c′=G1c=[crc]\mathbf c'=G_1\mathbf c=\begin{bmatrix}\mathbf c\\\mathbf r\mathbf c\end{bmatrix} (il secondo codice è sistematico: copia i primi 88 bit e aggiunge un bit). La cascata è c′=[bAbrc]:\mathbf c'=\begin{bmatrix}\mathbf b\\A\mathbf b\\\mathbf r\mathbf c\end{bmatrix}: i primi quattro bit sono b\mathbf b, quindi G1Gs=[I4A′]G_1G_s=\begin{bmatrix}I_4\\A'\end{bmatrix} è in forma sistematica, con A′A' (5×45\times4) formata da AA e dalla riga di parità. Ogni codice lineare ha una matrice di controllo di parità, e per un codice con GG sistematica la matrice standard è Hc=[A′∣I5]H_c=[A'\mid I_5] (5×95\times9): ammette matrice di parità e questa è in forma sistematica (le ultime 55 colonne sono l'identità).

Errori comuni

  • Pensare che permutando le righe si ottenga sempre la forma sistematica: serve una riga eiT\mathbf e_i^T per ogni ii; altrimenti servono combinazioni di colonne.
  • Calcolare dmind_{min} come minimo peso delle righe di GG invece di quello delle parole (le colonne di GG sono parole, e le somme di colonne anche).
  • Moltiplicare G G1G\,G_1 invece di G1GG_1G: l'ordine è dalla destra (prima GG, poi G1G_1) e le dimensioni lo impongono (G1G_1 è 9×89\times8, GG è 8×48\times4).
  • Dimenticare che la cascata di due codici lineari è lineare perché il prodotto di matrici è lineare in b\mathbf b.

Versione ripasso

Testo. G=[10000100001100011110101111110110]G=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&1\\0&0&0&1\\1&1&1&0\\1&0&1&1\\1&1&1&1\\0&1&1&0\end{bmatrix}. Richiesti: linearità e forma sistematica (con una sola permutazione dei bit?); dmin=5d_{min}=5?; sistematica equivalente e HH; cascata con G1=[I81 1 1 0 0 1 0 1]G_1=\begin{bmatrix}I_8\\1\,1\,1\,0\,0\,1\,0\,1\end{bmatrix}; cascata con la GG sistematica.

Punto 1 (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 →)

  • Lineare (ha una GG di rango 44): n=8n=8, k=4k=4. Non sistematico (riga 33 =[0,0,1,1]=[0,0,1,1]).
  • Con una permutazione dei bit (righe) no: manca la riga [0,0,1,0][0,0,1,0].

Punto 2: la colonna 11 ha peso 44: dmin≤4<5d_{min}\le4<5. Vero valore dmin=3d_{min}=3.

Punto 3

Punto 4

  • c′=G1Gb\mathbf c'=G_1G\mathbf b: prodotto di matrici, quindi lineare, Gc=G1G=[GrG]G_c=G_1G=\begin{bmatrix}G\\\mathbf rG\end{bmatrix} con rG=[0,0,1,0]\mathbf rG=[0,0,1,0].
  • (9,4)(9,4), dmin=4d_{min}=4.

Punto 5: con GsG_s e G1G_1 sistematiche i primi 44 bit sono b\mathbf b: cascata sistematica; ha matrice di parità Hc=[A′∣I5]H_c=[A'\mid I_5], in forma sistematica.

Dettagli di calcolo

  • Pesi delle colonne di GG: 4,4,5,44,4,5,4, quindi dmin≤4d_{min}\le4. Spettro dei pesi del codice (Python): 11 di peso 00, 44 di peso 33, 55 di peso 44, 44 di peso 55, 22 di peso 66: dmin=3d_{min}=3.
  • Cascata (9,4)(9,4): rG=[0,0,1,0]\mathbf rG=[0,0,1,0] con r=[1,1,1,0,0,1,0,1]\mathbf r=[1,1,1,0,0,1,0,1] (righe 1,2,3,6,81,2,3,6,8 di GG); spettro 1,0,0,0,9,0,61,0,0,0,9,0,6: dmin=4d_{min}=4, rivela 33 e corregge 11.

Errori tipici

  • Aspettarsi la forma sistematica dalle sole permutazioni delle righe.
  • Calcolare G G1G\,G_1 al posto di G1GG_1G.
  • Prendere il peso minimo delle righe di GG come dmind_{min}.

Teoria collegata