Hammingkod

Hammingkod är en typ av felrättande kod, av typen blockkodning, som skapades av Richard Hamming och publicerades i april 1950 i Bell System Technical Journal. Hammingkoden är speciell eftersom den är en så kallad perfekt kod, det vill säga att den ger bästa förhållandet mellan kodord och kontrollbitar för den valda längden och där ordet har hammingavståndet tre.

Hammingkoden är ofta hamming(7,4) eftersom ett kodord på 4 bitar kompletteras med tre kontrollbitar så att man kan rätta ett enkelt bitfel.

Lägger man sedan till en extra paritetsbit till ordet, vilken räknar om det är ett jämnt eller udda antal ettor, kan man även detektera om det är två fel. Då kan man dock inte rätta det utan bara meddela att det är två fel. Skulle det bli tre fel så visar koden det som om det är ett fel och rättar fel, men sannolikheten för tre fel är så liten att man bortser från det. Denna kod kallas då hamming(8,4).

Principer

För att skriva i hammingkod följer man följande struktur:

  1. Alla bitar i kodordet som är i basen två är kontrollbitar, det vill säga 1, 2, 4, 8, 16...
  2. De resterande bitarna är databitar, det vill säga 3, 5, 6, 7, 9, 10...
  3. kontrollbitarna kontrollerar pariteten hos speciella bitar i kodordet utifrån sin egen position, det vill säga den räknar om det finns ett jämnt eller udda antal ettor. Ett udda antal ger pariteten 1 medan jämnt antal ger paritetet 0.
  4. Bestäm vad som är minst signifikanta siffra (LSB) innan du börjar koda, och var säker på att mottagaren vet om det också, det vill säga om du börjar från höger eller vänster.

Denna generella regel kan visualiseras i en tabell:

Bit position 1234567891011121314151617181920 ...
Encoded data bits p1 p2d1 p4d2d3d4 p8d5d6d7d8d9d10d11 p16d12d13d14d15
Parity
bit
coverage
p1 XXXXXXXXXX
p2 XXXXXXXXXX
p4 XXXXXXXXX
p8 XXXXXXXX
p16 XXXXX

Exempel

kodord: 1001110

Modulo-2 räkning

Man kan även lösa det med modulo-2-räkning. Genom att göra på det sättet är det lättare att hitta felen. Detta görs på följande sätt:

Man ser om det är ett jämnt eller udda antal ettor i kolumnerna.

Avkodning och felrättning

Man kan avkoda och upptäcka var felet sitter om det bara är ett fel som har uppstått. Eftersom sannolikheten för att det är flera fel på en så liten kodsekvens fungerar det bra. För att avkoda ordet och se om det är rätt skriver man upp alla bitars position med paritet med binära siffror, precis som ovan, och räknar ut vad svaret blir. Blir det 0000 är det rätt kodat, men skulle det bli ettor i svaret så visar det var felet sitter:

Vid ett bitfel på position 6 så ändras den siffran från en etta till en nolla. Då blir talet som mottages följande: 10011011011. Vid kontrollen får man följande uträkning:

vilket är den binära siffran för position 6. Då vet avkodaren att den siffran som står där skall bytas ut mot den andra möjliga siffran vilket i detta fallet är en etta.

Referenser

  1. ↑ ”Introduktion till Viterbialgoritmen i enlighet med IEEE 802.11a”. Linköpings universitet. http://liu.diva-portal.org/smash/get/diva2:22173/FULLTEXT01. Läst 4 februari 2013.
  2. ↑ ”Richard Wesley Hamming”. Richard Wesley Hamming. School of Mathematics and Statistics University of St Andrews, Scotland. http://www-history.mcs.st-andrews.ac.uk/Biographies/Hamming.html. Läst 20 december 2012.
  3. ↑ ”se lemma 12”. Introduction to Coding Theory. Carnegie Mellon’s School of Computer Science. http://www.cs.cmu.edu/~venkatg/teaching/codingtheory/notes/notes1.pdf. Läst 21 december 2012.
  4. 1 2 Wallander, Per (2001). 17 lektioner i TELEKOMMUNIKATION. Per Wallander Antenn AB. sid. 176-77. ISBN 91-86296-10-8
  5. ↑ ”Introduktion till feldetekterande och felkorrigerande koder”. Introduktion till feldetekterande och felkorrigerande koder. Högskolan Karlskrona Ronneby. http://www.fukt.bsnet.se/~mr_a/arbeten/errordetection.pdf. Läst 21 december 2012.
  6. 1 2 ”Calculating the Hamming Code”. Calculating the Hamming Code. School of Computing and Information Science, Florida International University. http://users.cs.fiu.edu/~downeyt/cop3402/hamming.html. Läst 21 december 2012.