Foutenverbeterende codes

Stel, je wilt de  boodschap HELLO doorgeven van de ene computer aan de andere. Dat kan bijvoorbeeld door gebruik te maken van een tabel die de boodschap omzet in binaire tekens. De ontvanger kan de boodschap dan decoderen met dezelfde tabel. Een voorbeeld van zo een tabel is de ASCII-tabel:

Maar er kunnen  fouten  bij het verzenden optreden; zo kan de letter H = 0100 1000 ontvangen worden als 01001010, wat de letter J geeft!

Een manier om te weten of er een fout is opgetreden, is het toevoegen van een extra bit aan de boodschap, het zogenaamde pariteitsbit. Voor een even pariteit code zorgen we ervoor dat het aantal 1-en altijd even is.

Zo wordt H = 0100 1000 0 ( de laatste nul is het pariteitsbit dat ervoor zorgt dat het totaal aantal enen even is). Als je nu 0100 1010 0 ontvangt, weet je dat er een fout in de verzending zit omdat er een oneven aantal enen staat. We spreken van een fout ontdekkende code : we weten dat er minstens 1 foute bit in de boodschap zit, maar we kunnen die niet verbeteren omdat we niet weten waar de fout zit

Het was de Amerikaanse wiskundige Richard Hamming (1915-1998) die een oplossing vond voor dit probleem.

Om een 4 bits rij d_1d_2d_3d_4 te coderen gebruikte hij 3 cirkels:

Hij plaatste de gegeven bits zoals hierboven gegeven en voegde er dan de even pariteitsbits p_1,p_2 en p_3 aan toe. Voor 1001 wordt de code dan 1001001. Als er nu een fout zit in het verzenden en er wordt 1011001 ontvangen, dan kan je door de pariteit te controleren in de drie cirkels zien dat de fout zit in de blauwe en rode,  maar niet in de groene cirkel. Dus bit d_3 was fout en de verzonden boodschap was dan 1001!

Dit is fouten verbeterende code. men noemt het de (7,4) Hamming code. De notatie (7,4) betekent dat elke 4 bits informatie gecodeerd worden als een 7 bit rijtje.