Inleiding
Deze opdracht maakt deel uit van het opleidingsonderdeel Digitale Communicatie. Het doel van deze opdracht is Hamming-code toe te passen wanneer men data schrijft naar de EEPROM van de Arduino. Deze Hamming-code zorgt voor error-correctie en er kan gevalideerd worden als de terug opgeroepen data correct is. Er wordt ook onderzoek gedaan naar mogelijk errors die kunnen optreden. Oorspronkelijk wordt Hamming-code [7,4] waar 4 bits voor data is en 4 pariteit bits vertrekkende van hier zal er een extra pariteit bit worden toegevoegd om de effecten hiervan te onderzoeken.
1 EEPROM
1.1 Beknopt
EEPROM, Electrically Erasable Programmable Read-Only Memory, is een niet-vluchtig geheugen. Dit wordt gebruikt om kleine hoeveelheden data op te slaan. Het voordeel is dat individuele bytes gelezen, gewist en herschreven kunnen worden.
1.2 Werking
Om op te EEPROM te schrijven of lezen op de Arduino moet men eerst de EEPROM.h includen.
Volgende code is een voorbeeld hoe men kan schrijven op de EEPROM:
#include
void setup()
{
for (int i = 0; i < 255; i++)
EEPROM.write(i, i);
} void loop()
{
}
'
Volgende code is een voorbeeld hoe men kan lezen van de EEPROM:
#include
int a = 0;
int value;
void setup()
{
Serial.begin(9600);
}
void loop()
{
value = EEPROM.read(a);
Serial.print(a);
Serial.print(“t”);
Serial.print(value);
Serial.println();
a = a + 1;
if (a == 512)
a = 0;
delay(500);
}
1.3 Voor- en nadelen
1.3.1 Voordelen
De EEPROM kan gelezen, gewist en herschreven worden.
Het is vrij simpel om een EEPROM programma te maken.
1.3.2 Nadelen
Er staat een limiet op het aantal keer dat de EEPROM kan herschreven worden.
2 Hamming-code
2.1 Beknopt
De Hamming code is een FEC of Forward Error Correction. Een FEC is een systeem waarbij de data zo wordt gecodeerd, dat de detectie en correctie van fouten in de datastroom in de ontvanger kan worden opgelost. Zo is het mogelijk om in een simplex systeem de informatie betrouwbaar over te sturen.
2.2 Werking
2.2.1 Pariteitsbit
De Hamming-code heeft als eigenschap dat het een aantal pariteitsbits of databits voorziet van een flink aantal extra bits die op een specifieke manier van de databits zijn afgeleid. De payload wordt dus flink groter en hier moeten we rekening mee houden. In dit voorbeeld gaan we uit van een Hamming (7,4) code. Hierbij worden aan 4 databits nog 3 codebits toegevoegd. Deze code is vrij ineffici??nt in vergelijking met bijvoorbeeld de Hamming (11,7) of Hamming (20,15). De Hamming (7,4) heeft maar liefst 43% redundantie. De Hamming (20,15) nog maar 25%.
De 3 redundante bits bij de Hamming-code(7,4) worden parity genoemd; p1, p2 en p3. P1 is de parity van de databits D0,D1 en D3. P2 is de parity van de databits D0,D2 en D3. P3 is de parity van de databits D1,D2 en D3.
De totale serie ziet er uit zoals in de tabel. Er vallen meteen twee problemen op. De Hamming-code voor de waarde 0 en F, levert in beide gevallen een onacceptabel resultaat op. De ontvanger heeft als taak de verzonden bits te reconstrueren maar kan dat alleen als de data informatie bevat over de kloksnelheid. Er is geen communicatie, anders dan de data zelf, om aan de ontvanger het kloksignaal door te geven. Soms kunnen we de ontvanger een beetje in de juiste richting bijsturen, maar helemaal strak krijgen we het nooit. De ontvanger heeft een klokfrequentie er nodig voor bitsyncronisatie. Omdat de ontvanger de klokfrequentie reconstrueert uit de data, moeten we er voor zorgen dat de data maximaal 3 ‘1’-en of 3 ‘0’-en achter elkaar bevat. De resultaten voor 0 en F, maar ook voor 3 en C voldoen hier dus niet aan.
2.2.2 Codering
De werking van de Hamming-code berust op het principe van afgeleide overtolligheid. De code is zo goed doordat er niet zomaar bits zijn toegevoegd, maar de bits zijn afgeleid van het origineel. Elk resultaat is dus uniek en er worden maar een paar codes uit het hele pallet van mogelijke codes gebruikt. Op 6 databits worden 3 Hamming codebits toegevoegd. Het hele pallet aan codes is dus 128 (2^7). Het aantal Hamming codes is echter maar 16. De Hamming afstand (Hamming distance) is daarmee evengroot als het aantal toegevoegde bits: 3. De Hamming afstand betekent dat er minstens 3 bits fout gereconstrueerd moeten zijn, voordat de code op een andere code lijkt.
Voorbeeld:
De Hamming code voor 8 [P1,P2,D0,P3,D1,D2,D3] = 1101001
De Hamming code voor 9 [P1,P2,D0,P3,D1,D2,D3] = 0011001
Verschil: 1110000 = 3 bits
De volgorde van de kolommen maakt in deze berekening niets uit, zolang ze maar voor elk getal hetzelfde zijn.
2.3 Voor- en nadelen
2.3.1 Voordeel
De redundantie staat de ontvanger toe om aan aantal fouten te detecteren die kunnen voor komen in een boodschap en deze te corrigeren zonder dat het bericht opnieuw gestuurd moet worden. Forward Error Correction of FEC geeft de ontvanger de mogelijkheid om fouten te corrigeren zonder dat er een reverse channel nodig is voor retransmission van de data, maar de data is groter wat zorgt voor een grotere bandbreedte.
2.3.2 Nadeel
Een eigenschap van de Hamming-code is dat we 1 bitfout kunnen detecteren en corrigeren en dat we 2 bitfouten alleen kunnen detecteren. In ons geval dus 1 bitfout op de 7 bits: 4 databits + 3 beschermingsbits. Dat betekent dat we een beschermingsverhouding hebben van 1:7. De kans dat er een bit fout is, is dus veel kleiner dan een Hamming (20,15) waarbij de beschermingsverhouding nog maar 1:20 is, bijna 3x zo groot dus. De winst van de verminderde redundantie van een grotere Hamming-code zit dus in een gereduceerde bescherming van de databits.