Salta al contenuto
Note per Studenti Esercizio 30 · codice a blocco lineare (4,3) esteso a (5,3), matrici e sindrome (temi d'esame gennaio e luglio 2017)

Esercizio 30codice a blocco lineare (4,3) esteso a (5,3), matrici e sindrome (temi d'esame gennaio e luglio 2017)

Esame
In questa pagina 5

Testo (temi d'esame del secondo compitino del 15 gennaio 2017 e dell'esame del 6 luglio 2017 di un corso UniPD equivalente). Si consideri un codice a blocco lineare sistematico binario con k=3k=3 e n=4n=4. Date le parole di codice X1=(1001)X_1=(1001), X2=(0101)X_2=(0101) e X3=(1010)X_3=(1010):

  1. Determinare la matrice generatrice e la matrice di parità del codice in forma sistematica.
  2. Si dica quanti errori può rilevare il codice e quanti ne può correggere.
  3. Si aggiunga un bit alle parole di codice ottenuto come c5=c1⊕c2c_5=c_1\oplus c_2 (con cic_i, i=1,…,5i=1,\dots,5, bit di posizione ii-esima delle parole di codice). Si scrivano le matrici generatrici e di parità del nuovo codice.
  4. Data la sequenza ricevuta (11010)(11010) si controlli la presenza di errori mediante il calcolo della sindrome e si scriva la parola di codice decodificata.

Teoria usata: 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 →, Codifica di canale - codici a blocco, distanza minima, rivelazione e correzioneLa codifica di canale aggiunge ridondanza ai bit per rivelare o correggere gli errori del canale. Un codice a blocco $(n,k)$ trasforma $k$ bit in $n$ bit (rendimento $R_c=\frac kn$). Con la distanza di Hamming minima $d_{min}$ il codice rivela fino a $d_{min}-1$ errori e ne corregge $t=\left\lfloor\frac{d_{min}-1}2\right\rfloor$ (decodifica a minima distanza). Vale il limite di Singleton $d_{min}\le n-k+1$. Su un canale binario simmetrico con errore $p$, la probabilità di parola sbagliata è $P_w\le\sum_{i>t}\binom nip^i(1-p)^{n-i}$ e, con $p$ piccola, $P_{bit}\approx\frac{d_{min}}n\binom n{t+1}p^{t+1}$.Codifica di canale - codici a blocco, distanza minima, rivelazione e correzione →.

(1) Matrici GG e HH

Le tre parole sono linearmente indipendenti, quindi generano un codice con 23=82^3=8 parole. In forma sistematica G=[I3∣P]G=[I_3\mid P]: servono parole che abbiano i primi 33 bit uguali a 100100, 010010, 001001.

  • 100→X1=1001100\to X_1=1001 ✓ (parità 11);
  • 010→X2=0101010\to X_2=0101 ✓ (parità 11);
  • 001001: X3⊕X1=1010⊕1001=0011X_3\oplus X_1=1010\oplus1001=0011 ✓ (parità 11).

G=(100101010011)=[I3∣P],P=(111),H=[PT∣I1]=(1111).G=\begin{pmatrix}1&0&0&1\\0&1&0&1\\0&0&1&1\end{pmatrix}=[I_3\mid P],\quad P=\begin{pmatrix}1\\1\\1\end{pmatrix},\qquad H=[P^T\mid I_1]=\begin{pmatrix}1&1&1&1\end{pmatrix}. Il bit di parità è c4=c1⊕c2⊕c3c_4=c_1\oplus c_2\oplus c_3 (codice a parità pari): cHT=c1⊕c2⊕c3⊕c4=0\mathbf cH^T=c_1\oplus c_2\oplus c_3\oplus c_4=0 per ogni parola.

(2) Rivelazione e correzione

Le 88 parole sono 0000, 0011, 0101, 0110, 1001, 1010, 1100, 11110000,\,0011,\,0101,\,0110,\,1001,\,1010,\,1100,\,1111, di pesi 0,2,2,2,2,2,2,40,2,2,2,2,2,2,4: dmin=2d_{min}=2 (codice lineare: peso minimo ≠0\ne0). Il codice rivela dmin−1=1d_{min}-1=1 errore e corregge ⌊2−12⌋=0\left\lfloor\frac{2-1}2\right\rfloor=0 errori. (Un errore singolo dà una parola a peso dispari, non valida; due errori danno una parola di peso pari che può essere valida.)

(3) Il codice esteso (5,3)(5,3)

Si aggiunge c5=c1⊕c2c_5=c_1\oplus c_2. Le parti di parità diventano p=(c4,c5)=(c1⊕c2⊕c3, c1⊕c2)\mathbf p=(c_4,c_5)=(c_1\oplus c_2\oplus c_3,\ c_1\oplus c_2): G′=(100110101100110),P′=(111110),H′=[P′T∣I2]=(1111011001).G'=\begin{pmatrix}1&0&0&1&1\\0&1&0&1&1\\0&0&1&1&0\end{pmatrix},\qquad P'=\begin{pmatrix}1&1\\1&1\\1&0\end{pmatrix},\qquad H'=[P'^T\mid I_2]=\begin{pmatrix}1&1&1&1&0\\1&1&0&0&1\end{pmatrix}. Verifica: G′H′T=0G'H'^T=0 (righe di G′G': 10011→(1+1, 1+1)=(0,0)10011\to(1+1,\,1+1)=(0,0); 01011→(0,0)01011\to(0,0); 00110→(1+1, 0)=(0,0)00110\to(1+1,\,0)=(0,0)). Le 88 parole di (5,3)(5,3) sono 00000, 00110, 01011, 01101, 10011, 10101, 11000, 1111000000,\,00110,\,01011,\,01101,\,10011,\,10101,\,11000,\,11110, di pesi 0,2,3,3,3,3,2,40,2,3,3,3,3,2,4: dmin=2d_{min}=2 (le parole 0011000110 e 1100011000 hanno peso 22). Il rendimento scende a 35\frac35 ma la distanza non cresce: l'estensione non è utile per la correzione.

(4) Sindrome della sequenza 1101011010

s=rH′T=(1⊕1⊕0⊕1⊕0,  1⊕1⊕0⊕0⊕0)=(1, 0)≠(0,0).\mathbf s=\mathbf rH'^T=\left(1\oplus1\oplus0\oplus1\oplus0,\ \ 1\oplus1\oplus0\oplus0\oplus0\right)=(1,\,0)\ne(0,0). Errore rivelato. Per cercare un errore singolo si confronta s\mathbf s con le colonne di H′H': h1=(1,1)\mathbf h_1=(1,1), h2=(1,1)\mathbf h_2=(1,1), h3=(1,0)\mathbf h_3=(1,0), h4=(1,0)\mathbf h_4=(1,0), h5=(0,1)\mathbf h_5=(0,1). La sindrome (1,0)(1,0) coincide con h3\mathbf h_3 e con h4\mathbf h_4: l'errore può essere nella posizione 33 (parola 11010⊕00100=1111011010\oplus00100=11110) o nella 44 (11010⊕00010=1100011010\oplus00010=11000), che sono due parole di codice ugualmente vicine a r\mathbf r (distanza 11). Il codice non può correggere (è coerente con dmin=2d_{min}=2): la parola decodificata non è determinabile in modo univoco; si può solo dire che c'è un errore e chiedere la ritrasmissione, oppure scegliere a caso tra 1111011110 e 1100011000 (50%50\% di probabilità di sbagliare).

(Verificato con Python: G′H′T=0G'H'^T=0, dmin=2d_{min}=2 per entrambi i codici, sindrome (1,0)(1,0).)

Errori comuni

  • Dimenticare che per un codice lineare dmind_{min} è il peso minimo delle parole non nulle (22 qui), e rispondere che corregge un errore.
  • Calcolare la sindrome con HH del codice (4,3)(4,3) su una parola di 55 bit: serve H′H' (2×52\times5).
  • Concludere che la sindrome identifica sempre la posizione dell'errore: colonne uguali (h3=h4\mathbf h_3=\mathbf h_4) lasciano ambiguità.
  • Credere che aggiungere un bit di parità aumenti la distanza: qui dmind_{min} resta 22.

Versione ripasso

Testo. Codice lineare sistematico k=3k=3, n=4n=4 con X1=1001X_1=1001, X2=0101X_2=0101, X3=1010X_3=1010: GG, HH; rivelazione/correzione; estensione c5=c1⊕c2c_5=c_1\oplus c_2: G′G', H′H'; sindrome di 1101011010 (compitino 15/1/201715/1/2017 e esame 6/7/20176/7/2017).

Teoria collegata