Hammingův kód

Grafické zobrazení Hammingova kódu pro 4 datové bity (d1,d2,d3,d4) a 3 paritní bity (p1,p2,p3)

Hammingův kód, pojmenovaný po Richardu Hammingovi, je lineární kód používaný v oblasti telekomunikací pro detekci až dvou chybných bitů nebo pro opravu jednoho chybného bitu. Základem je Hammingův kód (7,4), ale lze jej zobecnit i na jiné počty datových a paritních bitů.

Binární kód se nazývá Hammingův, jestliže má kontrolní matici, jejíž sloupce jsou všechna nenulová slova dané délky n k = r {\displaystyle n-k=r} a žádné z nich se neopakuje.

Jedná se o speciální případ lineárních dvojkových ( n , k ) {\displaystyle (n,k)} kódů. Tyto kódy opravují jednu chybu při vzdálenosti kódových slov d m i n ( b i , b j ) = 3 {\displaystyle d_{min}({\overrightarrow {b}}_{i},{\overrightarrow {b}}_{j})=3} a v rozšířené variantě d m i n ( b i , b j ) = 4 {\displaystyle d_{min}({\overrightarrow {b}}_{i},{\overrightarrow {b}}_{j})=4} .

Generování Hammingova kódu

Algoritmus pro generování Hammingova kódu:

  1. Všechny bitové pozice, jejichž číslo je rovné mocnině 2, jsou použity pro paritní bit (1, 2, 4, 8, 16, 32, …).
  2. Všechny ostatní bitové pozice náleží kódovanému informačnímu slovu (3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, …).
  3. Každý paritní bit je vypočítán z některých bitů informačního slova. Pozice paritního bitu udává sekvenci bitů, které jsou v kódovém slově zjišťovány a které přeskočeny.

Pro paritní bit p 1 {\displaystyle p_{1}} (pozice 1) se ve zbylém kódovém slově 1 bit přeskočí, 1 zkontroluje, 1 bit přeskočí, 1 zkontroluje, atd.
Pro paritní bit p 2 {\displaystyle p_{2}} (pozice 2) se přeskočí první bit, 2 zkontrolují, 2 přeskočí, 2 zkontrolují, atd.
Pro p 3 {\displaystyle p_{3}} (pozice 4) se přeskočí první 3 bity, 4 zkontrolují, 4 přeskočí, 4 zkontrolují, atd.

Hammingův kód (7,4)

Pro kód ( 7 , 4 ) {\displaystyle (7,4)} platí b = ( p 1 ( 2 0 ) , p 2 ( 2 1 ) , a 1 3 , p 3 ( 2 2 ) , a 2 5 , a 3 6 , a 4 7 ) {\displaystyle {\overrightarrow {b}}=\left(p_{1}^{(2^{0})},p_{2}^{(2^{1})},a_{1}^{3},p_{3}^{(2^{2})},a_{2}^{5},a_{3}^{6},a_{4}^{7}\right)} :

  • p 1 a 1 a 2 a 4 = 0 {\displaystyle p_{1}\oplus a_{1}\oplus a_{2}\oplus a_{4}=0} (podle bodu 3 sestaveno z b 1 , b 3 , b 5 , b 7 {\displaystyle b_{1},b_{3},b_{5},b_{7}} ),
  • p 2 a 1 a 3 a 4 = 0 {\displaystyle p_{2}\oplus a_{1}\oplus a_{3}\oplus a_{4}=0} ( b 2 , b 3 , b 6 , b 7 {\displaystyle b_{2},b_{3},b_{6},b_{7}} ),
  • p 3 a 2 a 3 a 4 = 0 {\displaystyle p_{3}\oplus a_{2}\oplus a_{3}\oplus a_{4}=0} ( b 4 , b 5 , b 6 , b 7 {\displaystyle b_{4},b_{5},b_{6},b_{7}} ).

Generující matice G H {\displaystyle \mathbb {G} _{H}} Hamming. kódu ( 7 , 4 ) {\displaystyle (7,4)} se sestrojí tak, že se postupně zakóduje posloupnost 1000 1 , 0100 2 , 0010 3 , 0001 4 {\displaystyle 1000_{1},0100_{2},0010_{3},0001_{4}} (proto, aby řádky byly lineárně nezávislé a tvořily bázi prostoru).

G H = (   1   2   3   4   5   6   7   1 p 1 1 p 2 1 1 p 3 1 0 0 0   2 p 1 2 p 2 2 0 p 3 2 1 0 0   3 p 1 3 p 2 3 0 p 3 3 0 1 0   4 p 1 4 p 2 4 0 p 3 4 0 0 1 ) = (   1   2   3   4   5   6   7   1 1 1 1 0 0 0 0   2 1 0 0 1 1 0 0   3 0 1 0 1 0 1 0   4 1 1 0 1 0 0 1 ) {\displaystyle \mathbb {G} _{H}=\left({\begin{matrix}&~_{1}&~_{2}&~_{3}&~_{4}&~_{5}&~_{6}&~_{7}\\~_{1}&p_{1_{1}}&p_{2_{1}}&1&p_{3_{1}}&0&0&0\\~_{2}&p_{1_{2}}&p_{2_{2}}&0&p_{3_{2}}&1&0&0\\~_{3}&p_{1_{3}}&p_{2_{3}}&0&p_{3_{3}}&0&1&0\\~_{4}&p_{1_{4}}&p_{2_{4}}&0&p_{3_{4}}&0&0&1\\\end{matrix}}\right)=\left({\begin{matrix}&~_{1}&~_{2}&~_{3}&~_{4}&~_{5}&~_{6}&~_{7}\\~_{1}&1&1&1&0&0&0&0\\~_{2}&1&0&0&1&1&0&0\\~_{3}&0&1&0&1&0&1&0\\~_{4}&1&1&0&1&0&0&1\\\end{matrix}}\right)}

Kontrolní matice H H {\displaystyle \mathbb {H} _{H}} Hamming. kódu ( 7 , 4 ) {\displaystyle (7,4)} se určí následovně. Po přijetí kódového slova b {\displaystyle {\overrightarrow {b}}} víme, že bity b 3 , b 5 , b 6 , b 7 {\displaystyle b_{3},b_{5},b_{6},b_{7}} obsahují informační slovo a zbylé redundantní bity jsou určeny tak, aby

s 1 = b 4 b 5 b 6 b 7 = 0 s 2 = b 2 b 3 b 6 b 7 = 0 s 3 = b 1 b 3 b 5 b 7 = 0 H H = (   1   2   3   4   5   6   7 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 ) . {\displaystyle {\begin{matrix}s_{1}=b_{4}\oplus b_{5}\oplus b_{6}\oplus b_{7}=0\\s_{2}=b_{2}\oplus b_{3}\oplus b_{6}\oplus b_{7}=0\\s_{3}=b_{1}\oplus b_{3}\oplus b_{5}\oplus b_{7}=0\\\end{matrix}}\Rightarrow \mathbb {H} _{H}=\left({\begin{matrix}~_{1}&~_{2}&~_{3}&~_{4}&~_{5}&~_{6}&~_{7}\\0&0&0&1&1&1&1\\0&1&1&0&0&1&1\\1&0&1&0&1&0&1\\\end{matrix}}\right).}

Vektor s = ( s 1 , s 2 , s 3 ) {\displaystyle {\overrightarrow {s}}=(s_{1},s_{2},s_{3})} se nazývá syndrom a pokud byla informace přijata bezchybně, jeho hodnota je s = ( 0 , 0 , 0 ) {\displaystyle {\overrightarrow {s}}=(0,0,0)} .

Rozšířený Hammingův kód (8,4)

Rozšíření binárního Hammingova kódu vychází z toho, že přidáme na začátek každého kódového slova nový symbol určený pro kontrolu parity celého kódového slova. Bit p 0 {\displaystyle p_{0}} je zvolen tak, aby p 0 b 1 b 2 b 3 b 4 b 5 b 6 b 7 {\displaystyle p_{0}\oplus b_{1}\oplus b_{2}\oplus b_{3}\oplus b_{4}\oplus b_{5}\oplus b_{6}\oplus b_{7}} vycházelo jako sudé číslo. Rozšířený kód dovoluje, tak jako předchozí opravit jednu chybu a navíc je schopen detekovat dvě chyby.

Generující matice G H {\displaystyle \mathbb {G} _{H}'} rozšířeného Hamming. kódu ( 8 , 4 ) {\displaystyle (8,4)} se sestrojí tak, že se postupně zakóduje posloupnost 1000 1 , 0100 2 , 0010 3 , 0001 4 {\displaystyle 1000_{1},0100_{2},0010_{3},0001_{4}} .

G H = (     0   1   2   3   4   5   6   7   1 p 0 1 p 1 1 p 2 1 1 p 3 1 0 0 0   2 p 0 2 p 1 2 p 2 2 0 p 3 2 1 0 0   3 p 0 3 p 1 3 p 2 3 0 p 3 3 0 1 0   4 p 0 4 p 1 4 p 2 4 0 p 3 4 0 0 1 ) = (     0   1   2   3   4   5   6   7   1 1 1 1 1 0 0 0 0   2 1 1 0 0 1 1 0 0   3 1 0 1 0 1 0 1 0   4 0 1 1 0 1 0 0 1 ) {\displaystyle \mathbb {G} _{H}'=\left({\begin{matrix}~&~_{0}&~_{1}&~_{2}&~_{3}&~_{4}&~_{5}&~_{6}&~_{7}\\~_{1}&p_{0_{1}}&p_{1_{1}}&p_{2_{1}}&1&p_{3_{1}}&0&0&0\\~_{2}&p_{0_{2}}&p_{1_{2}}&p_{2_{2}}&0&p_{3_{2}}&1&0&0\\~_{3}&p_{0_{3}}&p_{1_{3}}&p_{2_{3}}&0&p_{3_{3}}&0&1&0\\~_{4}&p_{0_{4}}&p_{1_{4}}&p_{2_{4}}&0&p_{3_{4}}&0&0&1\\\end{matrix}}\right)=\left({\begin{matrix}~&~_{0}&~_{1}&~_{2}&~_{3}&~_{4}&~_{5}&~_{6}&~_{7}\\~_{1}&1&1&1&1&0&0&0&0\\~_{2}&1&1&0&0&1&1&0&0\\~_{3}&1&0&1&0&1&0&1&0\\~_{4}&0&1&1&0&1&0&0&1\\\end{matrix}}\right)}

Dekódování a kontrola

Nejprve se po přijetí kódového slova b {\displaystyle {\overrightarrow {b}}} určí syndrom s = H H b T {\displaystyle {\overrightarrow {s}}=\mathbb {H} _{H}\cdot {\overrightarrow {b}}^{T}} . Například pro přijaté slovo b = ( 1010111 ) {\displaystyle {\overrightarrow {b}}=(1010111)} je syndrom

H H b T = ( 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 ) ( 1 0 1 0 1 1 1 ) = ( 1 1 0 ) {\displaystyle \mathbb {H} _{H}\cdot {\overrightarrow {b}}^{T}=\left({\begin{matrix}0&0&0&1&1&1&1\\0&1&1&0&0&1&1\\1&0&1&0&1&0&1\\\end{matrix}}\right)\cdot \left({\begin{matrix}1\\0\\1\\0\\1\\1\\1\\\end{matrix}}\right)=\left({\begin{matrix}1\\1\\0\\\end{matrix}}\right)}

Vidíme, že syndrom s {\displaystyle {\overrightarrow {s}}} je nenulový, tj. při přenosu došlo k chybě. Syndrom, který vyšel s = ( 1 , 1 , 0 ) {\displaystyle {\overrightarrow {s}}=(1,1,0)} odpovídá sloupci 6 kontrolní matice H H {\displaystyle \mathbb {H} _{H}} a z toho vyplývá, že je třeba opravit šestý bit kódového slova b = ( 10101 0 _ 1 ) {\displaystyle {\overrightarrow {b}}'=(10101{\underline {0}}1)} . Pro rozšířený Hammingův kód (8,4) kontrolní matici H H {\displaystyle \mathbb {H} _{H}} přidáme jednotkový řádek a nulový sloupec

H H   = ( 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 ) {\displaystyle \mathbb {H} _{H}\ =\left({\begin{matrix}0&0&0&1&1&1&1&0\\0&1&1&0&0&1&1&0\\1&0&1&0&1&0&1&0\\1&1&1&1&1&1&1&1\\\end{matrix}}\right)}

Externí odkazy