• No results found

leerlingentekst

N/A
N/A
Protected

Academic year: 2021

Share "leerlingentekst"

Copied!
120
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Leerlingentekst

(2)
(3)

Inhoudsopgave

Leerlingentekst foutenverbeterende codes

3

Inhoudsopgave 3

1 Inleiding in de wereld van codes 7

1.1 Omzetten van berichten in rijen van symbolen . . . 7

1.1.1 Doorzenden van tekst . . . 7

1.1.2 Doorzenden van geluid . . . 10

1.1.3 Doorzenden van beelden . . . 11

1.2 Boodschap doorsturen met bijkomende informatie . . . 11

1.2.1 NAVO-spellingsalfabet . . . 12

1.2.2 Herhaling . . . 13

1.3 Codes die fouten detecteren en/of corrigeren . . . 14

1.3.1 De repetitiecode . . . 14

1.3.2 De pariteitscode . . . 15

1.4 Fouten ontstaan bij doorsturen . . . 15

1.4.1 E´en-fout verbeterend . . . 16

1.4.2 Meerdere-fouten verbeterend . . . 18 1.4.3 Kernidee . . . 19 1.5 Effici¨entie . . . 20 1.6 Projecten . . . 22 2 Rekenen in Z2 23 2.1 Rekenen in Z2 . . . 23 2.2 Vectoren over Z2 . . . 25 2.2.1 Vectoren . . . 25

2.2.2 Bewerkingen met vectoren . . . 25

2.3 Matrices over Z2 . . . 26

3 De Hammingcode 29 3.1 Encoderen . . . 29

3.2 Venn-diagrammen en matrices als hulpmiddel . . . 31

3.2.1 Venn-diagrammen . . . 31 3.2.2 Matrices (UITBREIDING) . . . 33 3.3 De matrices G en H . . . 35 3.3.1 De voortbrengende matrix G . . . 35 3.3.2 De controlematrix H . . . 36 3.3.3 Verband tussen G en H . . . 37

(4)

3.4 Decoderen van de (7,4)-Hammingcode . . . 37

3.4.1 Decoderen aan de hand van de definitie . . . 37

3.4.2 Fouten detecteren m.b.v. Venn-diagrammen en matrices . . . 39

3.5 Toepassing van de (7,4)-Hammingcode . . . 41

3.5.1 Doel en opzet . . . 41

3.5.2 De (7,4)-Hammingcode gebruikt om tekst te beveiligen . . . 41

3.6 Veralgemening . . . 43 3.7 Projecten . . . 43 4 Priemvelden 45 4.1 Inleiding . . . 45 4.2 Z7 . . . 46 4.3 Z6 . . . 47 4.4 Priemvelden . . . 49 4.5 Toepassingen op modulorekenen . . . 51 4.5.1 Bankrekeningnummers . . . 51

4.5.2 De ISBN-code van 10 cijfers . . . 51

4.5.3 INFO: De ISBN-code van 13 cijfers . . . 52

4.6 Projecten . . . 53

5 Uitbreidingsvelden 55 5.1 Constructie van F8, het veld met 8 elementen. . . 55

5.1.1 Opbouw van een verzameling met 8 elementen . . . 55

5.1.2 Optellen in F8 . . . 57

5.1.3 Vermenigvuldigen in F8 . . . 58

5.1.4 Primitief element . . . 59

5.1.5 F8 is een veld . . . 60

5.2 Constructie van F16, het veld met 16 elementen . . . 61

6 Reed-Solomoncode 63 6.1 Het uitbreidingsveld F16 . . . 64 6.2 Encoderingsprocedure . . . 64 6.2.1 Inleiding . . . 64 6.2.2 De procedure . . . 66 6.2.3 Werking CD . . . 67 6.3 Decoderingsprocedure . . . 68

6.3.1 Fouten bij het doorzenden van de boodschap . . . 68

6.3.2 Decoderingsprocedure . . . 69

6.4 Samenvattend voorbeeld . . . 71

6.4.1 Encoderen . . . 72

6.4.2 Foutjes bij het doorzenden via het kanaal . . . 72

6.4.3 Decoderen . . . 72

6.5 Projecten . . . 73

Bijlagen

77

(5)

INHOUDSOPGAVE 5

B ASCII-code 81

C Lege Venn-diagrammen voor oefeningen 83

D Verzendformulieren 85

D.1 Verzendformulier voor de (7,4)-Hammingcode . . . 85

D.2 Verzendformulier voor de (6,4) Reed-Solomoncode . . . 86

E De CD 87 E.1 Materiaal . . . 87

E.2 Van geluid naar CD en omgekeerd . . . 88

E.2.1 Van geluid naar CD . . . 88

E.2.2 Van CD naar geluid . . . 90

E.2.3 Negatieve signalen . . . 90

E.3 Geschiedenis . . . 91

Bijlage: Oplossingen van de oefeningen

95

Hoofdstuk 1 . . . 95 Hoofdstuk 2 . . . 101 Hoofdstuk 3 . . . 103 Hoofdstuk 4 . . . 108 Hoofdstuk 5 . . . 110 Hoofdstuk 6 . . . 112

(6)
(7)

Hoofdstuk 1

Inleiding in de wereld van codes

Allerlei berichten worden voortdurend doorgezonden, via internet, via SMS, via satelliet, van je CD naar je CD-speler, van een DVD naar je DVD-speler, ... . De ‘wegen’ waarlangs dit gebeurt, noemt men kanalen. Om boodschappen door te kunnen zenden, moeten deze boodschappen eerst worden omgezet in een universele taal die voor elk toestel begrijpbaar is. Zoals jullie vroeger in de lessen technologische opvoeding en informatica al leerden, is de taal die de computer begrijpt het binaire talstelsel. Dit toestel werkt enkel met de cijfers 0 en 1. Nadat onze boodschap is omgezet in een rij van nullen en enen, kan de boodschap worden doorgezonden. Het doorzenden van berichten verloopt niet altijd foutloos. Dat betekent dat in het bericht foutjes kunnen sluipen. Sommige symbolen zijn dan per ongeluk veranderd. Hopelijk wijkt de ontvangen boodschap slechts lichtjes af van de verzonden boodschap. Men zou dus graag deze foutjes willen ontdekken en corrigeren. De oplossing voor dit probleem wordt gegeven door gebruik te maken van foutenverbeterende codes. In de volgende hoofdstukken van de tekst gaan jullie zelf deze foutenverbeterende codes beter leren kennen. Dit gebeurt begeleid via de tekst, maar ook via de oefeningen die tussendoor gegeven worden. Telkens je een oefening tegenkomt, moet je deze foutloos kunnen maken voordat je verder gaat met het volgende stukje tekst. Oefeningen met een ♥ zijn iets moeilijkere oefeningen, die je niet moet, maar zeker wel mag maken. Veel plezier !

1.1

Omzetten van berichten in rijen van symbolen

Algemeen worden berichten (tekst, geluid of beeld) omgezet in een rij van getallen. Deze getallen worden dan via hun binaire voorstelling behandelbaar voor computers en kanalen. We maken in deze tekst enkel gebruik van de symbolen 0 en 1, waardoor we zeggen dat het gebruikte alfabet in dit geval gelijk is aan {0, 1}. Elk symbool 0 of 1 stelt ´e´en bit voor. De rij van cijfers die ´e´en component (hetzij ´e´en letter, ´e´en toon of ´e´en pixel) van ons bericht voorstelt, noemen we een woord.

1.1.1

Doorzenden van tekst

Veronderstel dat we een Nederlandse tekst willen doorzenden. Dan zoeken we eerst een manier om de letters van ons alfabet om te zetten in rijen van nullen en enen. Je zou de 26 letters uit ons alfabet kunnen vervangen door hun rangnummer, dat wil zeggen a= 1, b= 2, ..., z= 26. Daarna schrijf je de verkregen getallen in het binair talstelsel (zie bijlage

(8)

A). We herhalen even kort hoe dit in zijn werk gaat.

Als we kijken naar hoe het decimaal talstelsel in elkaar zit, dan merken we op dat bij-voorbeeld 37 105 kan geschreven worden als

3 · 104 + 7 · 103+ 1 · 102+ 0 · 101+ 5 · 100.

Als we enkel de cijfers voor de machten van tien achter elkaar zetten, krijgen we 37105dec.

Het onderscript dec wordt toegevoegd om erop te wijzen dat we gebruik maken van machten van 10. Als we nu gebruik maken van machten van 2 in plaats van machten van 10, verkrijgen we het binaire talstelsel. Omdat we werken met machten van twee, mogen we enkel de cijfers 0 en 1 v´o´or de machten plaatsen. Bijvoorbeeld:

2dec= 1 · 21+ 0 · 20 = 10bin

26dec= 1 · 24+ 1 · 23+ 0 · 22+ 1 · 21+ 0 · 20 = 11010bin.

Oefening 1. Zet de getallen

21 36 69 37105♥

om in hun binaire schrijfwijze aan de hand van een eenvoudige methode.

Ook omgekeerd kunnen we een getal, gegeven in zijn binaire schrijfwijze, omzetten naar zijn decimale schrijfwijze omdat we enkel de juiste macht van twee moeten toevoegen afhankelijk van de positie van de cijfers in het getal. Bijvoorbeeld:

1101bin = 1 · 23+ 1 · 22+ 0 · 21+ 1 · 20 = 13dec.

Oefening 2. Zet de getallen

100111 10101010 0001

om in hun decimale schrijfwijze aan de hand van een eenvoudige methode.

Nu zullen we deze (binaire) schrijfwijze gebruiken om de letters van ons alfabet om te zetten in een rij van nullen en enen. We willen wel dat elke letter wordt voorgesteld door een even lange rij van nullen en enen. Daarom zullen we links het binaire getal aanvullen met een minimaal aantal nullen. Merk op dat dit overeenkomt met onze intu¨ıtie. Het decimaal getal 47 kunnen we evengoed noteren als 00047. Zo zal ook het binair getal 110 op hetzelfde neerkomen als 00110. Rest ons de vraag hoeveel bits we maximaal nodig hebben. Daarvoor kijken we naar het aantal bits dat we nodig hebben om het hoogste getal voor te stellen. In dit geval is 26 het hoogste getal en dit stelt de letter ‘z’ voor. We zetten 26 binair om en vinden 11010. Zodanig dat elke letter omgezet zal worden in een woord, hebben we dus maximaal 5 bits nodig. Elk woord wordt dus voorgesteld door 5 bits. De letter ‘d’ zetten we dan bijvoorbeeld om naar het woord 00100.

(9)

1.1 Omzetten van berichten in rijen van symbolen 9

die we hierboven gedaan hebben. Internationaal is er immers afgesproken om elk karak-ter (letkarak-ter, hoofdletkarak-ter, leestekens, cijfers, . . . ) met 8 bits of 1 byte voor te stellen. Dit heet de ASCII-code 1, zie tabel 1.1. Merk op dat de ASCII-code wel code wordt genoemd,

maar dit is geen code in de betekenis die we in deze leerlingentekst voor een code zullen gebruiken.

De letter k komt bijvoorbeeld volgens de ASCII-code overeen met 107dec = 01101011bin.

Verder in de tekst zal af en toe gebruik gemaakt worden van de ASCII-code. Daarom is tabel 1.1 eveneens opgenomen in bijlage B.

Oefening 3. Zet je naam volgens de ASCII-code om in een rij van nullen en enen. Let goed op, want nu bestaat ´e´en letter van je naam uit een achttal van nullen en enen. Merk op dat je alle nullen en enen achter elkaar mag schrijven vermits de computer toch weet dat acht opeenvolgende bits overeenkomen met ´e´en karakter.

Tabel 1.1: De ASCII-tabel.

Karakter ASCII-code Karakter ASCII-code

Decimale code Binaire code Decimale code Binaire code spatie 032 00100000 . 046 00101110 ! 033 00100001 ? 063 00111111 A 065 01000001 a 097 01100001 B 066 01000010 b 098 01100010 C 067 01000011 c 099 01100011 D 068 01000100 d 100 01100100 E 069 01000101 e 101 01100101 F 070 01000110 f 102 01100110 G 071 01000111 g 103 01100111 H 072 01001000 h 104 01101000 I 073 01001001 i 105 01101001 J 074 01001010 j 106 01101010 K 075 01001011 k 107 01101011 L 076 01001100 l 108 01101100 M 077 01001101 m 109 01101101 N 078 01001110 n 110 01101110 O 079 01001111 o 111 01101111 P 080 01010000 p 112 01110000 Q 081 01010001 q 113 01110001 R 082 01010010 r 114 01110010 S 083 01010011 s 115 01110011 T 084 01010100 t 116 01110100 U 085 01010101 u 117 01110101 V 086 01010110 v 118 01110110 W 087 01010111 w 119 01110111 X 088 01011000 x 120 01111000 Y 098 01011001 y 121 01111001 Z 090 01011010 z 122 01111010

(10)

1.1.2

INFO:

Doorzenden van geluid

Geluid, waaronder muziek, is zeer vaak opgeslagen in digitale vorm. Om te weten hoe geluid wordt opgeslagen, moeten we eerst bekijken hoe geluid opgebouwd is.

Figuur 1.1: Een geluidsgolf.

Geluid wordt geproduceerd door middel van een drukgolf. Deze drukgolf zorgt voor de be-weging van het trommelvlies zodat we iets kunnen horen. Figuur 1.1 is een voorstelling van een geluidsgolf. Zoals je kan zien, is de horizontale as de tijdsas (uitgedrukt in seconden) en de verticale as de amplitude (uitgedrukt in miljoensten van ´e´en Pascal). De amplitude geeft de maximale druk op een bepaald tijdstip weer. Deze drukverschillen zijn ontzettend klein. Het is dan ook zo dat een beweging van het trommelvlies zo klein als de diameter van een waterstofatoom (0, 1 nm = 0, 1 · 10−9 m) al hoorbaar is. Als de amplitude positief is, dan betekent dit dat de dichtheid van de lucht groter is dan normaal, terwijl negatieve waarden een kleinere druk dan gemiddeld voorstellen. Merk op dat dichtheid en druk nauw met elkaar verwant zijn via de algemene gaswet (pV = nRT en m = nM zodanig dat ρ = m

V = p RTM ).

Nu wordt deze geluidsgolf gedigitaliseerd door de grafiek te benaderen door een trapfunctie, zie figuur 1.2 links. In elke korte tijdspanne van ∆ (hier ´e´en seconde) benaderen we de golfamplitude door de gemiddelde waarde van de amplitude over dat tijdsinterval. Als ∆ klein genoeg is, dan benadert de trapfunctie de golf zo goed, dat een mens het verschil tussen beide niet meer kan horen. Bij de CD maakt men gebruik van een sample-frequentie gelijk aan 44,1 kHz. Dat komt overeen met ∆ = 2, 26 · 10−5 seconden. Per seconde wordt dus 44 100 keer de amplitude opgemeten.

Figuur 1.2: Een gedigitaliseerde geluidsgolf.

Nadat zo’n golf gedigitaliseerd is, kan de golf voorgesteld worden door een rij van getallen die overeenkomen met de hoogtes van de treden, zie figuur 1.2 (rechts). Hoe deze infor-matie op een CD wordt geplaatst, vind je in bijlage E.

(11)

1.2 Boodschap doorsturen met bijkomende informatie 11

1.1.3

INFO:

Doorzenden van beelden

We bekijken nu een foto van Mars, zie de linkse foto in figuur 1.3. De rechtse foto is een vergroting van een deel van de linkse foto. De pixels in de rechtse foto zijn zo groot dat je ze kunt zien.

Deze foto werd doorgeseind via een satelliet naar de aarde. Hoe dit precies gebeurt, leggen we hieronder uit.

Figuur 1.3: Foto van Mars.

Elke foto is opgebouwd uit pixels, waarbij ´e´en pixel overeenkomt met ´e´en punt van je beeld. Veel punten bij elkaar geven een beeld. Een foto wordt dan ‘pixel per pixel’ doorgestuurd naar de aarde. Elke pixel krijgt een zekere waarde voor zijn grijstint mee. Deze waarden worden omgezet in hun binaire schijfwijze waarna deze rijtjes van nullen en enen kunnen doorgezonden worden. Als je goed kijkt naar de rechtse foto in figuur 1.3, dan zie je duidelijk dat de foto is opgedeeld in vakjes. E´en vakje heeft een vaste grijswaarde en is dus ´e´en pixel.

1.2

Boodschap doorsturen met bijkomende informatie

Een boodschap, bestaande uit een lange rij van nullen en enen, wil men doorseinen via een kanaal, bijvoorbeeld: telefoonlijn, internetkabel, straling, . . . . Tijdens het doorzenden, kan het gebeuren dat door ruis, bijvoorbeeld storing, vingerafdrukken op een CD, . . . , allerlei symbolen verkeerd worden ge¨ınterpreteerd. Nu willen we een idee geven van de systemen die zijn bedacht om de ontvanger in staat te stellen deze fouten op te sporen en eventueel te verbeteren.

(12)

Het idee is het volgende. We voegen extra informatie over onze boodschap toe aan onze boodschap. We zenden dus niet enkel de boodschap, maar eveneens de extra informatie door. Aan de hand van deze informatie kan de ontvanger fouten opsporen en eventueel ver-beteren. Het toevoegen van extra informatie noemt men encoderen. De bits die toegevoegd worden aan de boodschap, noemen we redundante bits, controlebits of correctiebits. De rij van nullen en enen verkregen na toevoeging van de extra informatie (=redundante bits) noemt men het codewoord van die boodschap. Het achterhalen van wat de boodschap was, noemt men decoderen.

Zonder dat we het beseffen, wordt er voortdurend gebruik gemaakt van dit principe. We bekijken dan ook eerst enkele methodes uit onze naaste omgeving waarmee we fouten opsporen en verbeteren als boodschappen worden doorgezonden via een kanaal.

1.2.1

NAVO-spellingsalfabet

Je hebt vast en zeker al eens gehoord van het NAVO-spellingsalfabet of het marifoonal-fabet (zie tabel 1.2).

Tabel 1.2: Het NAVO-spellingsalfabet

A Alfa G Golf L Lima Q Quebec V Victor

B Bravo H Hotel M Mike R Romeo W Whisky

C Charlie I India N November S Sierra X X-ray

D Delta J Juliett O Oscar T Tango Y Yankee

E Echo K Kilo P Papa U Uniform Z Zuler

F Foxtrot

Het spellingsalfabet van de NAVO (Noord-Atlantische Verdragsorganisatie) dient om met behulp van spraak met zo min mogelijk fouten een boodschap te kunnen spellen, dit bijvoorbeeld bij een zeer slecht verstaanbare telefoonverbinding. Het door de NAVO gehanteerde spellingsalfabet is zo opgesteld dat woorden uit het alfabet niet of nauwelijks te verwisselen zijn.

Het woord ‘geheim’ wordt bijvoorbeeld doorgezonden als ‘Golf, Echo, Hotel, Echo, India, Mike’. Het Amerikaanse en Britse leger hadden zo’n alfabet bedacht tijdens de Eerste Wereldoorlog. Deze methode om de betrouwbaarheid van de overdracht van informatie te vergroten, werkt aan de hand van toevoeging van informatie of redundantie. Merk op dat dit het basisidee is achter alle foutenverbeterende codes.

Oefening 4. Hoe zou je je naam spellen als je gebruik maakt van het NAVO-spellingsalfabet?

(13)

1.2 Boodschap doorsturen met bijkomende informatie 13

1.2.2

Herhaling

Als iemand je niet verstaat, herhaal je wat je zei. Het ligt dus voor de hand om ons rijtje symbolen te herhalen. Maar dat lost het probleem niet echt op.

Oefening 5. Als we de letter ‘c’ willen doorzenden en we maken gebruik van de ASCII-code, dan vertalen we ‘c’ naar . . . We maken van deze boodschap een codewoord door de boodschap te herhalen, we vinden het codewoord

. . . , dat 2 bytes lang is. Veronderstel nu

dat bij het doorzenden een fout optreedt in de vijfde bit, waardoor we het woord

. . . ontvangen. De ontvangen reeks nullen

en enen is geen codewoord meer omdat er een fout opgetreden is. De ontvanger kan echter niet uitmaken of nu de vijfde of de dertiende (13 = 5 + 8) bit fout is. Inderdaad, hij ziet dat de vijfde en de dertiende bit van elkaar verschillen, maar kan niet zeggen welke bit (de vijfde of de dertiende) fout werd doorgezonden. Hij veronderstelt dat het doorgezonden

codewoord gelijk is aan . . . of aan

. . . , wat we decoderen (d.w.z. toegevoegde

informatie terug laten vallen) als . . . of als . . . .

. . Opzoeken in de ASCII tabel geeft ons de volgende letters . of . .

De ontvanger heeft nu twee even lange rijtjes bits die mogelijk op enkele plaatsen ver-schillen. Hij kan dus vaststellen op welke posities de ruis foutjes heeft veroorzaakt, maar kan die niet zomaar verbeteren. Immers, welke bit is juist en welke is fout?

Soms kun je toch vaststellen (uit de ‘context’) wat de boodschap had moeten zijn, maar als die context ontbreekt, helpt simpele herhaling je niet.

Oefening 6. In plaats van een letter kunnen we een woord doorzenden. Neem het woord ‘EU’. Dit schrijven we, door gebruik te maken van de ASCII-code, als . . . .

. . . Decoderen geeft ons een dubbel zo lange rij van nullen en enen. Merk op dat je eerst de vorige letter herhaalt, vooraleer je de volgende letter

neerschrijft. We krijgen het codewoord . . . .

. . . We veronderstellen dat er foutjes

zijn opgetreden in de zevende en enendertigste bit. Met andere woorden we ontvangen

het woord . . . .

. . . , wat dus geen codewoord meer is. Per twee bytes kunnen we achterhalen welke mogelijke letters er doorgezonden zijn. Merk op dat dit er telkens twee zijn, net zoals in het vorige voorbeeld. We verkrijgen . of . en . of . .

Kan je vanuit de context -het is een bestaande afkorting- achterhalen wat de boodschap is?

Samenvatting

• encoderen: toevoegen van extra informatie of redundante bits

• redundante bits: bits die we aan onze boodschap toevoegen tijdens het encoderen • decoderen: toegevoegde informatie terug laten vallen

(14)

1.3

Codes die fouten detecteren en/of corrigeren

In deze paragraaf bespreken we twee eenvoudige foutenverbeterende codes.

1.3.1

De repetitiecode

Zoals hierboven reeds aan bod kwam, zal het herhalen van de boodschap enkel leiden tot het kunnen opsporen van de fout en niet tot het verbeteren. Men noemt dit een foutende-tectiecode. Toch willen we ook fouten kunnen verbeteren. Een eenvoudige remedie is om het bericht 3 keer te versturen: als de ontvanger op een positie dan niet 3 keer dezelfde bit ziet, concludeert hij niet alleen dat daar kennelijk ruis is opgetreden, maar ook dat het meest waarschijnlijk is dat de bit die hij er tweemaal ziet de juiste is. Immers, de kans is maar heel klein dat er een fout optrad, en dus nog veel kleiner dat er twee keer een fout op die positie is opgetreden! Deze ‘meerderheid van stemmen’ werkt alleen maar goed als fouten random en met kleine kans optreden. Om nog zekerder te zijn, kan de zender het bericht 5 keer sturen, maar dan voel je aan dat het zonde van tijd (en dus geld) is. Je zou liever een ander bericht in dezelfde tijd willen sturen dan nogmaals hetzelfde.

Veronderstel bijvoorbeeld dat we de woorden 010110101001110 en 000000100100001 ont-vangen waarbij we weten dat de boodschap 2 keer herhaald werd. Vermits elk woord uit 15 bits bestaat, weten we dat de boodschap 5 bits lang is. We delen op en schrijven deze stukjes onder elkaar om eenvoudig te kunnen vergelijken. We vinden:

01011 01010 01110 01010 10dec J 00000 01001 00001 00001 1dec A

Voor de eerste letter zien we dat de derde bit 2 keer als een 0 werd doorgezonden en 1 keer als een 1. Hoogstwaarschijlijk is de derde bit van de boodschap een 0. We her-halen deze redenering voor de eerste, tweede, vierde en vijfde bit. We vinden de bood-schap 01010=10dec. Helemaal analoog vinden we voor het tweede deel van de boodschap

00001=1dec. De tiende letter van het alfabet is de J en de eerste letter de A. De

doorge-zonden boodschap is ‘J A’.

Oefening 7.

a) Zoek in de volgende voorbeelden de fout als je weet dat de boodschappen respec-tievelijk 2 en 5 keer herhaald werden. Ga eveneens op zoek naar de boodschap (tweeletterwoord).

010111111100111101001011: 2 keer herhaald (gebruik ASCII-code)

011111111101010110110001100010: 5 keer herhaald (gebruik rangnummer). b) Wat is het verschil tussen het twee keer herhalen van uw boodschap en het vijf keer

(15)

1.4 Fouten ontstaan bij doorsturen 15

1.3.2

De pariteitscode

Stel dat we gebruik maken van de principes in 1.1.1 om letters om te zetten in cijfers. Als we de letter ‘a’ willen doorzenden, dan zetten we eerst zijn rangnummer om in zijn binaire schrijfwijze. We weten dat a = 1 = 00001. Analoog wordt de letter ‘t’ omgezet naar het woord t = 20 = 10100. De pariteitscode gaat ´e´en extra bit toevoegen afhankelijk van het aantal enen in het oorspronkelijke woord. Deze ene bit bevat dus informatie over de bood-schap. Als we een oneven aantal enen hebben in het oorspronkelijk woord, zoals dat het geval is voor de letter a, dan voegen we een pariteitsbit 1 toe op de meest linkse plaats. Het codewoord (is boodschap plus toegevoegde bit) voor a wordt dan 100001. Anderzijds, als het aantal enen in het oorspronkelijke woord even is, voegen we een pariteitsbit 0 toe op de meest linkse plaats. Bijvoorbeeld het codewoord voor t is 010100.

boodschap codewoord

00001 → oneven aantal enen → 1 op meest linkse plaats → 100001

10100 → even aantal enen → 0 op meest linkse plaats → 010100

Zo krijgen we codewoorden waarvan het aantal enen steeds even is. Een fout kan dan eenvoudig worden opgespoord door het aantal enen te tellen. Toch is het niet mogelijk om deze ene fout te verbeteren, vermits er zes kandidaat codewoorden zijn.

Oefening 8. Schrijf deze zes kandidaat codewoorden neer voor het woord 001011 in de veronderstelling dat er juist ´e´en bit foutief is.

We besluiten dat deze code eveneens een voorbeeld is van een foutendetectiecode 2: ze

stelt ons in staat om een fout te detecteren, maar niet om ze te verbeteren. We weten immers niet welk van de (zes) kandidaat codewoorden werd doorgezonden en omdat we dit niet kunnen uitmaken, kunnen we de fout dus niet verbeteren.

Oefening 9. Zoek tussen de volgende voorbeelden de boodschap waarin een fout opge-treden is:

a) 10101010 b) 10001010 c) 00010111 d) 01010101.

1.4

Opsporen en corrigeren van fouten ontstaan bij

het doorsturen van een boodschap

In de volgende paragraaf gaan we dieper in op hoe we fouten kunnen verbeteren. Het idee is niet moeilijk en lijkt op geschreven taal. Als je in een tekst het woord “gesvhiedenid” leest, zie je direct dat twee maal de verkeerde toets is aangeslagen. Je vindt de twee fouten en verbetert ze (v = c, d = s). Dat we dit kunnen, komt omdat we maar ´e´en woord van twaalf letters kennen dat lijkt op wat er stond.

2Ook de repetitiecode waarbij de boodschap twee keer herhaald wordt, is een foutendetectiecode, zie

(16)

We leggen dus vast wat tot onze taal behoort en wat niet. We kiezen daarom eerst een geschikt alfabet waarmee we onze woorden van onze taal gaan opbouwen. In onze voorbeelden is het geschikt alfabet {0, 1}. Hiermee maken we dan woorden, bijvoorbeeld 01010001. Sommige woorden hebben een betekenis, andere niet. De woorden die een betekenis hebben, voldoen aan bepaalde voorschriften en behoren tot onze taal. Deze woorden noemt men codewoorden. De verzameling van alle codewoorden noemt men een code.

Voor de pariteitscode voldoen bijvoorbeeld alle codewoorden aan het volgende voorschrift: het aantal enen van een codewoord is even. De verzameling van al deze codewoorden (i.e. alle woorden die voldoen aan ons voorschrift) noemt men -in dit geval- de pariteitscode. In de rest van deze paragraaf gaan we ontdekken hoeveel fouten een code kan verbeteren. Dit zullen we doen aan de hand van het aantal plaatsen waar codewoorden van elkaar verschillen.

1.4.1

en-fout verbeterend

Een code kan ´e´en fout ontdekken en verbeteren als zij voldoet aan twee eigenschappen.

1. Ontdekken

Als er op ´e´en positie een fout optreedt, moet er een woord ontstaan dat niet in de code zit. Op die manier merkt de ontvanger dat er een fout moet zijn opgetreden.

2. Verbeteren

Een woord met maar ´e´en fout moet altijd maar op ´e´en manier aangepast kunnen worden door ´e´en bit te veranderen zodat er een codewoord ontstaat.

Samengevat, als er maar ´e´en fout is opgetreden, is er maar ´e´en codewoord dat er maar op ´e´en plaats van verschilt. D´at is dan het codewoord dat de ontvanger kiest als het meest waarschijnlijk verstuurde woord.

Als er slechts ´e´en codewoord mag bestaan dat op maar ´e´en plaats verschilt van het ont-vangen woord (waarin ´e´en fout is opgetreden), dan wil dit zeggen dat alle codewoorden op ten minste drie plaatsen verschillen. We bekijken volgend voorbeeld ter illustratie.

Veronderstel dat we een code willen ontwerpen voor de verschillende studierichtingen die je in een aso in de derde graad kan volgen. We veronderstellen dat dit er slechts 8 zijn. Gegeven is de volgende tabel:

(17)

1.4 Fouten ontstaan bij doorsturen 17

decimaal binair afkorting volledige benaming

0 000 HW Humane Wetenschappen

1 001 WW Wetenschappen Wiskunde

2 010 LM Latijn Moderne talen

3 011 EM Economie Moderne talen

4 100 MW Moderne talen Wiskunde

5 101 GM Grieks Moderne talen

6 110 EW Economie Wiskunde

7 111 LW Latijn Wiskunde

Aan deze acht boodschappen kennen we 8 verschillende codewoorden toe op volgende wijze:

000 → 000 000 100 → 100 011

001 → 001 110 101 → 101 101

010 → 010 101 110 → 110 110

011 → 011 011 111 → 111 000

Merk op dat we aan elk binair getal (tussen 0 en 7) drie bits toevoegen. Deze 3 bits bevatten extra informatie over onze boodschap. Hoe deze drie bits precies bepaald werden, is hier van geen belang. Onze code (taal) bestaat dus uit de volgende acht codewoorden:

000000 010101 100011 110110

001110 011011 101101 111000.

Oefening 10.

a) Ga na dat alle codewoorden op zijn minst op 3 plaatsen verschillen. Probeer dit in te zien voor een aantal voorbeeldjes.

b) Is het woord 010111 een codewoord?

c) Op welk(e) codewoord(en) gelijkt dit woord het meest?

Het codewoord waarop dit ontvangen woord het meest lijkt, zullen we aannemen als het verzonden woord. Als dit woord gelijk is aan het verzonden woord dan is dit een ´e´en-foutverbeterende code. Voor dit voorbeeld is het inderdaad zo dat de codewoorden allemaal op minstens drie plaatsen verschillen zodat de code ´e´en fout correct kan ver-beteren.

Meestal is er geen lijst van codewoorden gegeven waardoor we op een andere manier te werk zullen moeten gaan. Veronderstel wel dat we weten hoeveel plaatsen de code-woorden minimaal van elkaar verschillen. Dan geeft figuur 1.4 een illustratie van hoe je kan ontdekken hoeveel fouten een code kan verbeteren. De figuur is als volgt opgebouwd. De grote zwarte bollen staan voor de codewoorden. Elk klein grijs bolletje staat voor een woord dat op ´e´en plaats van het vorige bolletje verschilt. Zo staat bijvoorbeeld het eerste bolletje voor het codewoord 000000 en het tweede bolletje voor het woord 000100. Het

(18)

Figuur 1.4: Schematische voorstelling.

Figuur 1.5: Voorbeeld.

derde bolletje is een woord dat op ´e´en plaats verschilt van het vorige bolletje, bijvoor-beeld 000101. Het vierde bolletje is opnieuw een grote zwarte bol, zodanig dat dit een codewoord is. In dit geval, kan dat bijvoorbeeld 010101 zijn, zie figuur 1.5.

Oefening 11. Maak een schematische voorstelling (zoals in figuur 1.5) van de code-woorden 100011 en 101101.

Hoe kunnen deze figuren ons helpen? Veronderstel dat er ´e´en fout is opgetreden bij het doorzenden van de boodschap. De zender zendt bijvoorbeeld het codewoord 000000 en de ontvanger ontvangt het woord 000100. De ontvanger merkt eerst en vooral op dat dit geen codewoord is, omdat het geen woord is dat in het bovenstaande lijstje staat. Hij gaat op zoek naar het codewoord dat er het dichtst bijligt. Of nog, hij zoekt het codewoord dat door zo weinig mogelijk bits te veranderen (i.e. zo weinig mogelijk fouten) naar het ontvangen woord kan omgevormd worden. Het codewoord 000000 verschilt slechts ´e´en plaats van 000100 en het codewoord 010101 verschilt twee plaatsen van 000100, zie figuur 1.5. Het is dus het meest waarschijnlijk dat het codewoord 000000 werd doorgezonden, wat inderdaad correct is. Deze code is in staat om ´e´en fout te verbeteren.

Veronderstel dat er bij het doorzenden twee fouten zijn opgetreden. We ontvangen het woord 000101 in plaats van het doorgezonden codewoord 000000. De ontvanger telt weerom hoeveel plaatsen het ontvangen woord verschilt van de dichtstbijzijnde code-woorden. Het woord 000101 verschilt op twee plaatsen met het codewoord 000000 en verschilt op ´e´en plaats met het codewoord 010101. De ontvanger denkt dat het code-woord 010101 werd doorgezonden, maar dit is niet waar. We concluderen dat deze code niet in staat is om twee fouten te verbeteren.

1.4.2

Meerdere-fouten verbeterend

Is het ook mogelijk om meer dan ´e´en fout te kunnen verbeteren? In vorige paragraaf zagen we dat het aantal fouten dat we kunnen verbeteren, afhangt van het aantal plaatsen dat

(19)

1.4 Fouten ontstaan bij doorsturen 19

de codewoorden van elkaar verschillen.

Oefening 12. Probeer te achterhalen hoeveel fouten je maximaal mag maken als de codewoorden op minstens

a) vier, b) vijf,

c) zes

plaatsen van elkaar verschillen? HINT: Gebruik figuur 1.6.

d♥) Stel daarna een algemene formule op voor het aantal fouten t dat we

kunnen verbeteren als we werken met een code wiens codewoorden op zijn minst op d plaatsen verschillen?

Figuur 1.6: Schematische voorstelling.

Als we dus codewoorden waarin twee fouten zijn opgetreden, willen verbeteren, dan moeten we een code gebruiken waarvoor elk tweetal verschillende codewoorden op ten-minste vijf plaatsen verschillen.

1.4.3

Kernidee

Het aantal plaatsen waar codewoorden van elkaar verschillen, bepaalt het aantal fouten dat we kunnen opsporen en verbeteren. Om ervoor te zorgen dat codewoorden het gewen-ste aantal plaatsen van elkaar verschillen, zullen we extra symbolen toevoegen aan elke rij symbolen. Dit is het basisidee achter foutenverbeterende codes: aan een rijtje bits voegen we bits, zogenaamde redundante bits, toe om fouten te kunnen ontdekken en herstellen. Daarna zetten we het codewoord terug om naar een rij van symbolen door de redundante bits weg te laten, dit proces noemt men decoderen.

(20)

Samenvatting • Definities:

- Informatiebits zijn de bits van een codewoord die de boodschap/informatie bevatten.

- Redundante bits, correctiebits, controlebits zijn de bits die we aan een bood-schap (bestaande uit nullen en enen) toevoegen tijdens het encoderen.

• Eigenschappen:

- Alle codewoorden zijn even lang. Alle codewoorden verschillen op zoveel mo-gelijk plaatsen van elkaar.

- Noem d het aantal plaatsen dat de codewoorden minimaal van elkaar verschillen en t het aantal fouten dat we kunnen verbeteren, dan geldt dat t het grootste gehele getal is waarvoor geldt dat 2t + 1 ≤ d.

1.5

Effici¨

entie

De kernvraag bij het ontwerpen van foutenverbeterende codes is: hoe kun je zoveel mo-gelijk fouten verbeteren door zo weinig momo-gelijk bits toe te voegen? Dat laatste meet je door naar de informatieverhouding, afgekort met de letter r, te kijken. De informatiever-houding is gelijk aan de verinformatiever-houding tussen het aantal informatiebits van een woord en het aantal bits van dat woord met toegevoegde, redundante bits. Omdat we veronderstellen dat er extra bits worden toegevoegd, ligt deze verhouding steeds tussen 0 en 1.

De informatieverhouding r is gelijk aan:

r = aantal informatiebits

aantal informatiebits + aantal toegevoegde bits =

lengte boodschap lengte codewoord Merk op dat we om een boodschap te versturen 1r keer zoveel bits nodig hebben als zonder codering, dus 1r keer zoveel tijd of 1r keer zoveel energie.

Oefening 13. Waaraan is de informatieverhouding gelijk voor een repetitiecode waarbij we alles twee keer herhalen? En voor de pariteitscode in oefening 9?

Oefening 14. Wat is er specifiek aan een code waarvoor de informatieverhouding dicht bij 0 gelegen is?

Oefening 15. Wat is er specifiek aan een code waarvoor de informatieverhouding dicht bij 1 gelegen is?

(21)

1.5 Effici¨entie 21 Samenvatting

• Repetitiecode:

Opbouw: Herhaal de boodschap k keer.

Effici¨entie: De informatieverhouding is gelijk aan ...

Nadeel: ... Voordeel: ...

• Pariteitscode:

Opbouw: Voeg ´e´en bit toe op de meest linkse plaats van je boodschap afhankelijk van het aantal enen in de boodschap.

Effici¨entie: De informatieverhouding is gelijk aan ... als je boodschap n bits lang is. Nadeel: ... Voordeel: ...

(22)

1.6

Projecten

1. In de praktijk worden vaak twee codes na elkaar gebruikt. Veronderstel bijvoor-beeld dat we de repetitiecode waarbij we alles ´e´en keer herhalen (dat wil zeggen de boodschap 10 wordt doorgezonden als 1010) na de pariteitscode toepassen.

a) Zet de boodschap TOETS om aan de hand van het binaire rangnummer dat elke letter van ons alfabet op een natuurlijke wijze meekrijgt. Merk op dat elke letter van het alfabet overeenkomt met 5 bits.

b) Pas de pariteitscode toe op elk groepje bits dat ´e´en letter voorstelt.

c) Pas tot slot (op de rij bits gevonden in b) de repetitiecode toe op elk groepje bits.

2. Vul onderstaande figuur in door gebruik te maken van de woorden:

codewoord doorzenden ruis

decoderen zender

ontvangen woord ontvangen boodschap

ontvanger originele boodschap

(23)

Hoofdstuk 2

Rekenen in Z

2

2.1

Rekenen in Z

2

Vanaf de lagere school al leren we rekenen. Eerst hebben we leren rekenen in N, vervol-gens in Z, Q, R en sommigen onder jullie misschien zelfs in C. In al deze verzamelingen hebben we leren optellen, aftrekken, vermenigvuldigen, delen,. . .

In dit hoofdstuk gaan we leren rekenen in een nieuw rekensysteem. Dit rekensysteem bevat slechts 2 getallen, namelijk 0 en 1. Deze getallen 0 en 1 komen niet overeen met de getallen 0 en 1 uit Z, Q, R of C omdat zij een andere betekenis hebben. De verzameling van alle getallen in dit nieuwe rekensysteem, dus de verzameling {0, 1}, noteren we met Z2.

Rekenen in dit nieuwe rekensysteem doe je op dezelfde manier als in de gekende reken-systemen, maar je herleidt de uitkomst steeds tot 0 of 1 door een gepast aantal keer 2 af te trekken van of op te tellen bij de uitkomst. Bijvoorbeeld: 1 + 1 is nu niet gelijk aan 2, maar aan 0. Even uitkomsten worden dus m.a.w. herleid tot 0 en oneven uitkomsten tot 1. Merk op dat optellen en aftrekken in Z2 op hetzelfde neerkomt aangezien in Z2 geldt

dat −1 = 1. Dit wil zeggen dat als we 1 optellen of aftrekken, dit hetzelfde resultaat geeft en 0 optellen of aftrekken komt duidelijk ook op hetzelfde neer.

Oefening 17. Vul de volgende optellings- en vermenigvuldigingstabel in:

+ 0 1 0 . . 1 . . · 0 1 0 . . 1 . .

Deze vormen de basis voor alle andere bewerkingen in Z2.

Het nieuwe rekensysteem, dus de verzameling Z2, uitgerust met deze aangepaste optelling

(24)

Oefening 18. Maak volgende bewerkingen in Z2, +, · : 1. (1 + 1) + 0 = ... 1 + (1 + 0) = ... 1 + 1 + 0 = ... (1 · 1) · 0 = ... 1 · (1 · 0) = ... 1 · 1 · 0 = ... 2. 1 + 0 = ... 0 + 1 = ... 1 · 0 = ... 0 · 1 = ... 3. 1 · (1 + 0) = ... 1 · 1 + 1 · 0 = ... 4. 0 + 1 = ... 0 · 0 = ...

Deze manier van rekenen noemen we modulorekenen, meer bepaald rekenen modulo 2.

Samenvatting

Vanaf nu rekenen we in Z2 = {0, 1}. Dit is een verzameling die slechts uit twee

getallen bestaat. We rekenen in deze verzameling als volgt: als we een getal verkrijgen dat niet 0 of 1 is, dan bekijken we de rest na deling door 2 zodat dit getal toch overeenkomt met 0 of 1. Bijvoorbeeld: 1 + 1 + 1 + 1 + 1 = 5 mod 2 = 1.

Wat is in dit nieuwe rekensysteem het tegengestelde van 0? We zoeken dan een getal x zo dat x + 0 = 0. Het gezochte getal is 0 zelf. We vinden m.a.w. dat het tegengestelde van 0 gelijk is aan 0 zelf of, in symbolen: −0 = 0.

Wat is in dit nieuwe rekensysteem het tegengestelde van 1? We zoeken dan een getal x zo dat x + 1 = 0. Het gezochte getal is 1 zelf. We vinden m.a.w. dat het tegengestelde van 1 gelijk is aan 1 zelf of, in symbolen: −1 = 1.

Wat is in dit nieuwe rekensysteem het omgekeerde van 0? We zoeken dan een getal x zo dat x · 0 = 1. We kunnen echter zo’n getal niet vinden. We vinden m.a.w. dat het omgekeerde van 0 niet bestaat in Z2.

Wat is in dit nieuwe rekensysteem het omgekeerde van 1? We zoeken dan een getal x zo dat x · 1 = 1. Het gezochte getal is 1 zelf. We vinden m.a.w. dat het omgekeerde van 1 gelijk is aan 1 zelf of, in symbolen: 1−1 = 1.

Samenvatting

a) Het tegengestelde van 0 is gelijk aan 0 en 1 is het tegengestelde van 1. Dit is zo omdat 0 + 0 = 0 en 1 + 1 = 0.

b) 0 heeft geen omgekeerde en het omgekeerde van 1 is 1. Dit is zo omdat 0 · 0 = 0 6= 1 , 0 · 1 = 0 6= 1 en 1 · 1 = 1.

(25)

2.2 Vectoren over Z2 25

2.2

Vectoren over Z

2

2.2.1

Vectoren

Herinner je dat je niet enkel met individuele getallen hebt gewerkt, maar ook met koppels en drietallen die respectievelijk een punt in het vlak of een punt in de ruimte weergaven als je werkte in een assenstelsel. Zo stelde een tweetal, de co¨ordinaten van een punt in het vlak voor en was R2 de verzameling van de koppels met co¨ordinaten in R. Een drietal

stelde de co¨ordinaten van een punt in de ruimte voor en R3 was de verzameling van de drietallen met co¨ordinaten in R.

Zie figuur 2.1.

Figuur 2.1: Voorstelling van een punt in het vlak en een punt in de ruimte.

We bekijken nu twee-en drietallen waarbij de co¨ordinaten gekozen zijn in Z2 in plaats van

in R. We krijgen punten in respectievelijk Z22 en Z32. We noemen zo’n tweetal of drietal

ook een vector.

Oefening 19. Hoeveel elementen zitten er in Z2

2? En hoeveel in Z32?

Stel deze elementen ook grafisch voor.

HINT: Schrijf de verschillende elementen op of gebruik telproblemen!

2.2.2

Bewerkingen met vectoren

Met vectoren uit R2 en R3 kunnen we rekenen. De optelling gebeurt component per

component, bijvoorbeeld:

(3, 5) + (2, 1) = (3 + 2, 5 + 1) = (5, 6).

We tellen de eerste co¨ordinaat bij de eerste co¨ordinaat op en de tweede co¨ordinaat bij de tweede co¨ordinaat.

Twee vectoren uit R2 of R3 kunnen we niet zinvol met elkaar vermenigvuldigen op vol-gende manier:

(26)

Maar we kunnen een vector wel vermenigvuldigen met een getal, bijvoorbeeld uit R. We krijgen bijvoorbeeld:

−2 · (3, 5) = (−2 · 3, −2 · 5) = (−6, −10).

Hierbij vermenigvuldigen we de eerste co¨ordinaat met dat getal en we vermenigvuldigen eveneens de tweede co¨ordinaat met dat getal.

Oefening 20. Voer volgende berekeningen uit in R2 of in R3 :

a) (1, 2, 3) + (−6, 2, 0) = b) 3 · (5, −6) = c) (6, 4) − (−3, 5) = . We defini¨eren de optelling in Z2

2 en Z32 op net dezelfde manier. We maken daarbij gebruik

van de optelling in Z2. Bijvoorbeeld :

(1, 0, 1) + (0, 1, 1) = (1 + 0, 0 + 1, 1 + 1) = (1, 1, 2) = (1, 1, 0).

We kunnen eveneens vectoren uit Z22 of Z32 vermenigvuldigen met een getal uit Z2. Zo is

bijvoorbeeld :

1 · (0, 1) = (1 · 0, 1 · 1) = (0, 1).

Oefening 21. Voer volgende berekeningen uit in Z2

2 of in Z32 :

a) 0·(1, 0, 1) = b) (1, 0)−(0, 1) = c) 0·(1, 0, 1)−1·(0, 1, 1)+1·(1, 1, 0) = .

2.3

Matrices over Z

2

Zoals met vectoren, zie vorige paragraaf, kunnen we ook werken met matrices over Z2. We

kennen reeds matrices over R. De volgende matrix is een voorbeeld van een 2 × 3-matrix over R:

1 0 2

0 3 −1 

∈ R2×3.

We kunnen twee matrices over R bij elkaar optellen als ze hetzelfde aantal rijen en kolom-men hebben. We kunnen twee matrices over R met elkaar verkolom-menigvuldigen als het aantal kolommen van de eerste matrix gelijk is aan het aantal rijen van de tweede matrix. Tot slot kunnen we een matrix met een getal vermenigvuldigen. We geven enkele voorbeelden: Voorbeeld 1. optellen     9 8 7 −6 5 4 −4 2     +     6 −4 1 3 1 5 1 1     =     9 + 6 8 − 4 7 + 1 −6 + 3 5 + 1 4 + 5 −4 + 1 2 + 1     =     15 4 8 −3 6 9 −3 3     Voorbeeld 2. vermenigvuldigen 1 1 2 2 4 6    2 10 4 −5 1 0  =  8 5 26 0 

(27)

2.3 Matrices over Z2 27

Voorbeeld 3. vermenigvuldigen met een getal

2 ·   1 2 3 4 5 6 7 8 9 0 −1 −2  =   2 4 6 8 10 12 14 16 18 0 −2 −4  

Oefening 22. Bereken volgende aftrekking en vermenigvuldigingen van matrices over R:

a)1 0 2 0 3 −1  −0 2 1 5 −6 7  = b) 2·1 0 3 −4  = c)   2 −2 −3 3 1 −1  ·8 −2 1 0 6 2  =

In een matrix over Z2zijn de elementen gekozen in Z2. De volgende matrix is bijvoorbeeld

een 3 × 5-matrix over Z2:

  1 0 0 1 0 0 1 1 0 0 0 1 1 1 1  ∈ Z3×52 .

Simultaan vertalen we dit naar optellen en vermenigvuldigen van matrices over Z2.

Oefening 23. Bereken volgende optelling en vermenigvuldigingen van matrices over Z2:

a)1 0 0 0 1 1  +0 0 1 1 0 1  = b) 0 ·1 0 1 0  = c)     1 0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 1 0 0 1     ·       1 0 0 0 1 1 0 1 1 1 0 1 0 0 1       =

Oefening 24. Hoeveel verschillende 3 × 2-matrices bestaan er over Z2?

Samenvatting Definities:

- Z2 = {0, 1}

- Zn

2 zijn alle vectoren over Z2 van lengte n

(28)
(29)

Hoofdstuk 3

De Hammingcode

Twee zeer bekende en veel gebruikte klassen van foutenverbeterende codes zijn: de Ham-mingcodes en de Reed-Solomoncodes. De eerste hiervan werd door France-Telecom ge-bruikt voor de verzending van Minitel, de voorloper van het moderne Internet. Reed-Solomoncodes worden gebruikt in CD’s.

3.1

Encoderen

De ‘beste’ code die we tot hier toe gevonden hadden, was een code met informatiever-houding 12, zie paragraaf 1.4.1. Het kan echter zuiniger: als je bijvoorbeeld aan elke vier informatiebits (de oorspronkelijke boodschap), drie correctiebits (extra bits om fouten te kunnen verbeteren) toevoegt (dus met informatieverhouding 47), dan kun je ook een code maken waarin je in elk woord ´e´en opgetreden fout kan verbeteren.

In plaats van een lijst (i.e. code) van codewoorden met symbolen uit Z2 te geven zoals

dat in 1.4.1 gedaan werd, volgt hier hoe je een codewoord kan maken.

De eerste vier bits (a1, a2, a3, a4) ∈ Z42 zijn de informatiebits, die je willekeurig uit Z2

mag kiezen. Aan deze vier bits voeg je drie bits (c5, c6, c7) ∈ Z32 toe, die correctiebits,

controlebits of redundante bits genoemd worden. Deze controlebits bekom je door als volgt drie informatiebits bij elkaar op te tellen in Z2 :

c5 = a1+ a3+ a4

c6 = a1+ a2+ a4

c7 = a1+ a2+ a3.

De bovenstaande ‘regel’ definieert de Hammingcode. Deze code maakt deel uit van een grote familie van soortgelijke codes. Meer specifiek zullen we deze code de (7,4)-Hammingcode noemen. De 4 verwijst naar het aantal informatiebits en de 7 verwijst naar de lengte van de codewoorden (dus het aantal informatiebits plus het aantal correctiebits). In het algemeen schrijven we een Hammingcode als de (n, k)-Hammingcode, waarbij n de lengte van de codewoorden aanduidt en k het aantal informatiebits.

Merk op dat het subscript van de informatie- en correctiebits aangeeft op welke plaats de bit staat (geteld van links naar rechts). De letter a wijst op het feit dat het over een

(30)

informatiebit gaat, de c wijst op het feit dat het over een correctiebit gaat. We zien dat de eerste correctiebit eigenlijk de pariteitsbit is in Z2 van de eerste, de derde en de vierde

bit. De tweede correctiebit is de pariteitsbit in Z2 van de eerste, de tweede en de vierde

bit en de derde correctiebit is de pariteitsbit in Z2 van de eerste, tweede en derde bit.

Merk op dat de informatiebit a1 in elke som voorkomt. Zo wordt bijvoorbeeld aan de

informatiebits (1, 0, 1, 1) de correctiebits (1 + 1 + 1, 1 + 0 + 1, 1 + 0 + 1) = (1, 0, 0) := 1001

toegevoegd zodat de boodschap (1, 0, 1, 1) := 1011 wordt doorgezonden als het codewoord 1011100.

Oefening 25. Maak bij de volgende viertallen informatiebits de controlebits volgens de methode van Hamming:

1010 0001 1111

Vervolgens gaan we achterhalen uit hoeveel codewoorden deze code bestaat. Merk daarbij op dat we de informatiebits van een codewoord gewoon kunnen kiezen uit Z2 en

dat de controlebits dan bepaald kunnen worden volgens de ‘regel’ die we hiervoor gegeven hebben. De controlebits kunnen we dus niet kiezen, maar worden bepaald door de gekozen informatiebits.

Oefening 26. Uit hoeveel codewoorden bestaat de (7,4)-Hammingcode? HINT: Gebruik telproblemen!

De volgende vraag die we ons stellen is of de (7,4)-Hammingcode ´e´en-foutverbeterend is. Zoals we in het eerste hoofdstuk (zie 1.4 op pagina 15) gezien hebben, is een code ´e´en-foutverbeterend als de codewoorden minstens op drie plaatsen van elkaar verschillen. Dit gaan we vervolgens na voor de (7,4)-Hammingcode.

We bekijken daarom eerst het geval dat twee boodschappen ( = enkel de reeks in-formatiebits) precies op ´e´en plaats van elkaar verschillen. Stel dat de a1 van beide

boodschappen verschillend is. We krijgen dus a1a2a3a4 en a01a2a3a4. Als we dan de

c5, c6 en c7 van beide boodschappen berekenen, zien we dat, aangezien de a1 van de eerste

boodschap verschillend is van de a1 van de tweede boodschap, ook de c5, c6 en c7 van

beide boodschappen verschillend zijn. De gevormde codewoorden verschillen vervolgens op vier plaatsen.

Dan bekijken we het geval waarbij de a2 van beide boodschappen verschillend is. De

a2 wordt gebruikt bij het bepalen van de controlebits c6 en c7. Er volgt dat de a2, c6 en

de c7 van beide boodschappen verschillend zijn als a2 verschillend is en dus verschillen de

gevormde codewoorden op drie plaatsen.

Overtuig jezelf van het feit dat de gevallen waarbij a3 of a4 verschillend zijn analoog zijn

aan het voorgaande geval (a2 is verschillend). Bij deze twee gevallen is het dus ook zo dat

de gevormde codewoorden op drie plaatsen verschillen.

1De notatie ‘:=’ staat voor ‘per definitie gelijk aan’, of nog we veronderstellen dat beide zaken gelijk

(31)

3.2 Venn-diagrammen en matrices als hulpmiddel 31

Oefening 27. Stel dat de boodschappen op twee plaatsen verschillen. Ga voor volgende gevallen na dat de gevormde codewoorden minstens op drie plaatsen verschillen:

a. a1 en a2 verschillen b. a1 en a3 verschillen c. a1 en a4 verschillen d. a2 en a3 verschillen e. a2 en a4 verschillen f. a3 en a4 verschillen

HINT: Een aantal gevallen zijn analoog!

Na deze oefening kunnen we concluderen dat wanneer de boodschappen op ´e´en of op twee plaatsen verschillend zijn, de gevormde codewoorden ten minste op drie plaatsen verschillen.

Als de boodschappen zelf al op drie of vier plaatsen van elkaar verschillen, verschillen de codewoorden vanzelf op en minste drie plaatsen.

CONCLUSIE: Dit wil zeggen dat alle codewoorden op zijn minst op drie plaatsen ver-schillen en dus kan deze code ´e´en fout verbeteren. Merk nogmaals op dat deze eigen-schap enkel mogelijk is door het feit dat we extra bits toevoegen aan een boodeigen-schap om zo een codewoord te verkrijgen.

3.2

Venn-diagrammen en matrices als hulpmiddel

Een eenvoudig hulpmiddel dat we kunnen gebruiken in het kader van de Hammingcodes zijn Venn-diagrammen.

3.2.1

Venn-diagrammen

Bekijk figuur 3.1. Daarin zien we drie overlappende Venn-diagrammen, genummerd met Romeinse cijfers van I tot en met III, getekend. Elke deelverzameling die wordt afgebakend

(32)

door deze drie Venn-diagrammen wordt eveneens genummerd, van 1 tot en met 7. Schrijf in elke deelverzameling de overeenkomstige bit van je boodschap neer. Nummer de bits van je boodschap van links naar rechts. Je krijgt dan voor het codewoord 1100100 het Venn-diagram zoals in figuur 3.2. Als we deze figuur van naderbij bekijken, merken we

Figuur 3.2: Voorstelling van codewoord 1100100.

een ‘rekenregel’ voor codewoorden op: in elk Venn-diagram staat een even aantal enen. Inderdaad, dit is een rechtstreeks gevolg van de regels waaraan de controlebits (c5, c6, c7)

moeten voldoen. Als

   c5 = a1 +a3 +a4 c6 = a1 +a2 +a4 c7 = a1 +a2 +a3,

dan zal, omdat optellen en aftrekken in Z2 op hetzelfde neerkomt (want −1 = 1 in Z2),

gelden dat    0 = a1 +a3 +a4 −c5 = a1 +a3 +a4 +c5 0 = a1 +a2 +a4 −c6 = a1 +a2 +a4 +c6 0 = a1 +a2 +a3 −c7 = a1 +a2 +a3 +c7.

Omdat we in Z2 rekenen, zal de som van vier bits gelijk zijn aan nul als het resultaat van

de som even is, maar dit komt precies overeen met een even aantal enen. Merk tot slot op dat de eerste gelijkheid overeenkomt met Venn-diagram III, de tweede met Venn-diagram I en de derde met Venn-diagram II.

Dit geeft ons eveneens een eenvoudige manier om de controlebits te bepalen. Als we de eerste vier bits op hun juiste plaats in figuur 3.1 op pagina 31 invullen, dan vinden we de overige 3 bits door ervoor te zorgen dat in elk Venn-diagram een even aantal enen staat. Tot slot zetten we alle bits in de juiste volgorde achter elkaar. Op die manier vinden we het codewoord horende bij onze boodschap.

We gaan bijvoorbeeld op zoek naar het codewoord horende bij de boodschap 1011. Eerst vullen we de informatiebits op de juiste plaats in het Venn-diagram in, zie figuur 3.3 (links). We zien dat er in het eerste Venn-diagram twee enen staan. Dit is reeds een even aantal en daarom kiezen we de zesde bit gelijk aan 0.

In het tweede Venn-diagram staan eveneens twee enen. De zevende bit wordt ook een 0. In het derde Venn-diagram staat een oneven aantal enen, namelijk drie. We nemen de vijfde bit gelijk aan een 1 zodat ook in het derde Venn-diagram een even aantal enen staan. Op die manier verkrijgen we figuur 3.3 (rechts). We zetten de bits in hun juiste volgorde en krijgen het codewoord 1011100.

(33)

3.2 Venn-diagrammen en matrices als hulpmiddel 33

Figuur 3.3: Zoeken naar het codewoord bij de boodschap 1011.

Oefening 28. Zoek het codewoord horende bij de boodschap 0101 1. a.h.v. de definitie.

2. a.h.v. een Venn-diagram (je kan de lege Venn-diagrammen uit bijlage C hiervoor gebruiken).

Wat merk je op?

3.2.2

Matrices (UITBREIDING)

Zoals we in andere wiskundelessen matrices gebruikten om stelsels op te lossen of te onderzoeken, kunnen we matrices ook hier gebruiken om ons probleem te vereenvoudigen. We kijken naar het stelsel dat we in de vorige paragraaf kregen:

   0 = a1 +a3 +a4 +c5 0 = a1 +a2 +a4 +c6 0 = a1 +a2 +a3 +c7.

Definieer dan H als de volgende 3 × 7-matrix over Z2:

H =   1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1  ∈ Z3×72 .

We laten nu zien dat een rij c van symbolen een codewoord is als het een oplossing is van het volgende stelsel:

HcT =   0 0 0  .

Merk op dat we een rijvector afkorten met ´e´en vette letter. Hierin staat T voor het transponeren 2. In dit geval staat c voor een rijvector en wordt cT een kolomvector,

2Bijvoorbeeld:

A = 5 2 0 −6 10 1 

(34)

namelijk als c = a1 a2 a3 a4 c5 c6 c7, dan is cT =           a1 a2 a3 a4 c5 c6 c7           .

Nu we dit weten, kunnen we nagaan dat voor elk codewoord c geldt dat HcT =

  0 0 0  . Stel c = a1 a2 a3 a4 c5 c6 c7 dan geldt:

HcT =   0 0 0   ⇔   1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1             a1 a2 a3 a4 c5 c6 c7           =   0 0 0   ⇔    a1 +a3 +a4 +c5 = 0 a1 +a2 +a4 +c6 = 0 a1 +a2 +a3 +c7 = 0 ⇔    a1 +a3 +a4 = −c5 a1 +a2 +a4 = −c6 a1 +a2 +a3 = −c7 ⇔    a1 +a3 +a4 = c5 a1 +a2 +a4 = c6 a1 +a2 +a3 = c7

We stellen dus vast dat de voorwaarde HcT equivalent is met de definitie van de

con-trolebits uit het begin van de paragraaf.

Oefening 29. Ga na dat 0111000 een codewoord is door: 1. de definitie te gebruiken.

2. een matrix als hulpmiddel te gebruiken. Wat merk je op?

dan is de getransponeerde matrix AT gegeven door

AT =   5 −6 2 10 0 1  .

(35)

3.3 De matrices G en H 35

3.3

UITBREIDING:

De voortbrengende en de

controlema-trix van de (7,4)-Hammingcode

In de beschrijving van Hammingcodes spelen twee matrices een belangrijke rol: de voort-brengende matrix G en de controlematrix H. De controlematrix hebben we in vorige paragraaf aangehaald.

3.3.1

De voortbrengende matrix G

De voortbrengende matrix G is een 4 × 7-matrix wiens rijen de codewoorden zijn van de vectoren (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0) en (0, 0, 0, 1): G =     1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0    ∈ Z 4×7 2 .

Vanwaar komt nu de naam voortbrengende matrix? Deze benaming is afkomstig van het feit dat elk codewoord kan gevormd worden door een lineaire combinatie te nemen van de rijen van deze matrix. De code wordt met andere woorden voortgebracht door deze matrix. In het vervolg van de paragraaf tonen we dit aan.

De verzameling Z42 bevat alle mogelijke boodschappen. Als we een lineaire combinatie

nemen van de boodschappen (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0) en (0, 0, 0, 1), kunnen we om het even welke boodschap uit Z4

2krijgen. Als we bijvoorbeeld naar de boodschap (1, 0, 1, 0)

kijken, dan zoeken we a, b, c en d ∈ Z2 zodat (1, 0, 1, 0) = a(1, 0, 0, 0) + b(0, 1, 0, 0) +

c(0, 0, 1, 0) + d(0, 0, 0, 1). Dit is vrij eenvoudig. We hebben een ´e´en op de eerste en op de derde plaats. Dus moeten we de eerste en de derde vector bij elkaar optellen. We besluiten dat a = c = 1 en b = d = 0.

Oefening 30. Zoek de getallen a, b, c en d ∈ Z2 voor de boodschap (0, 1, 1, 1) zodat

(0, 1, 1, 1) = a(1, 0, 0, 0) + b(0, 1, 0, 0) + c(0, 0, 1, 0) + d(0, 0, 0, 1).

We kunnen de vier ’basisboodschappen’ nu omzetten naar codewoorden door de drie redundante bits toe te voegen, respectievelijk

(1, 0, 0, 0, 1, 1, 1), (0, 1, 0, 0, 0, 1, 1), (0, 0, 1, 0, 1, 0, 1) en (0, 0, 0, 1, 1, 1, 0). Boodschap → Codewoord (1, 0, 0, 0) → (1, 0, 0, 0, 1, 1, 1) (0, 1, 0, 0) → (0, 1, 0, 0, 0, 1, 1) (0, 0, 1, 0) → (0, 0, 1, 0, 1, 0, 1) (0, 0, 0, 1) → (0, 0, 0, 1, 1, 1, 0)

(36)

De vier codewoorden vormen de rijen van de matrix G.

We weten dat elke boodschap een lineaire combinatie is van deze ’basisboodschappen’. Het codewoord van deze boodschap is dan dezelfde lineaire combinatie (d.w.z. zelfde cofficinten) van de codewoorden van de ’basisboodschappen’. Bijvoorbeeld, we weten dat

(1, 0, 1, 0) = (1, 0, 0, 0) + (0, 0, 1, 0) zodat het codewoord van (1, 0, 1, 0) gegeven is door: (1, 0, 0, 0, 1, 1, 1) + (0, 0, 1, 0, 1, 0, 1) = (1, 0, 1, 0, 0, 1, 0). Als we dit controleren door de redundante bits te bepalen, zien we dat dit inderdaad het codewoord horende bij de boodschap (1, 0, 1, 0) is.

Oefening 31. Vind aan de hand van de lineaire combinatie van de boodschap (0, 1, 1, 1) het codewoord horende bij deze boodschap en controleer dit.

Algemeen hebben we dus afgeleid dat voor een boodschap

a = (a1, a2, a3, a4) = a1(1, 0, 0, 0) + a2(0, 1, 0, 0) + a3(0, 0, 1, 0) + a4(0, 0, 0, 1),

het codewoord horende bij deze boodschap gegeven is door c

= a1(1, 0, 0, 0, 1, 1, 1) + a2(0, 1, 0, 0, 0, 1, 1) + a3(0, 0, 1, 0, 1, 0, 1) + a4(0, 0, 0, 1, 1, 1, 0).

We kunnen c ook berekenen m.b.v. een matrixvermenigvuldiging:

c = a1 a2 a3 a4      1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0     = aG.

Oefening 32. Controleer dat dit op hetzelfde neerkomt door het matrixproduct uit te rekenen.

Oefening 33. ♥Hoe kan je aan de opbouw van G zien dat de eerste vier bits van een codewoord overeenkomen met de boodschap?

3.3.2

De controlematrix H

De controle matrix H is een 3 × 7-matrix wiens 3 rijen, zoals hierboven reeds vermeld, zo gekozen zijn dat voor elk codewoord c geldt dat HcT = 0. Ter herinnering :

H =   1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1  ∈ Z 3×7 2 .

(37)

3.4 Decoderen van de (7,4)-Hammingcode 37

3.3.3

Verband tussen de voortbrengende matrix G en de

con-trolematrix H

Omdat de rijen van G overeenkomen met de codewoorden van (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0) en (0, 0, 0, 1), zal het product van H en ´e´en van deze rijen steeds de nulvector opleveren:

H(1, 0, 0, 0, 1, 1, 1)T = (0, 0, 0)T, H(0, 1, 0, 0, 0, 1, 1)T = (0, 0, 0)T, H(0, 0, 1, 0, 1, 0, 1)T = (0, 0, 0)T, H(0, 0, 0, 1, 1, 1, 0)T = (0, 0, 0)T.

We kunnen deze vier vergelijkingen weergeven in ´e´en matrixproduct als volgt:

H     1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0     T =     0 0 0 0 0 0 0 0 0 0 0 0     T =   0 0 0 0 0 0 0 0 0 0 0 0   of nog HGT = 0,

waarbij 0 een nulmatrix is van de gepaste dimensie, hier een 3 × 4-matrix.

3.4

Decoderen van de (7,4)-Hammingcode

In deze paragraaf zullen we ontdekken hoe we ´e´en opgetreden fout kunnen opzoeken en verbeteren. Merk nogmaals op dat we slechts ´e´en fout kunnen verbeteren.

3.4.1

Decoderen aan de hand van de definitie

We zullen aan de hand van de definitie de fout kunnen achterhalen. Toch zullen er ook eenvoudigere methodes bestaan zoals het gebruik maken van Venn-diagrammen en matri-ces (onze hulpmiddelen). Deze technieken zullen in de volgende paragraaf aan bod komen. We splitsen ons probleem in twee delen op, namelijk een fout in de informatiebits en een fout in de controlebits. Beide problemen zullen een andere aanpak vergen.

1. Fout in de controlebits

Het vergt wel wat inzicht om een fout in een ontvangen woord te achterhalen aan de hand van de definitie van de Hammingcode. Constateren dat er een fout is gebeurd, is niet zo moeilijk. Inderdaad, je controleert of de drie gelijkheden voldaan zijn:

c5 = a1+ a3+ a4

c6 = a1+ a2+ a4

c7 = a1+ a2+ a3.

Als dit niet het geval is, is er een fout opgetreden. Voor het ontvangen woord 1100101 krijgen we bijvoorbeeld

(38)

1 =? 1 + 0 + 0 = 1

0 =? 1 + 1 + 0 = 0

1 =? 1 + 1 + 0 = 0.

De eerste twee gelijkheden zijn correct, de derde gelijkheid klopt niet. We besluiten dat het ontvangen woord geen codewoord is. Vanaf nu zullen we logisch redeneren om zo de foute bit te achterhalen. Als we de zevende bit gelijk nemen aan 0 in plaats van aan 1, kloppen de vereiste gelijkheden wel. Dit geeft dus een codewoord dat op slechts ´e´en plaats afwijkt van het ontvangen woord. Omdat codewoorden in de Hammingcode op minstens drie plaatsen van elkaar verschillen, is dit het enige codewoord waarvoor dit geldt. We besluiten dus dat 1100100 het doorgezonden codewoord is, tenminste als we aannemen dat er bij het doorsturen slechts ´e´en fout gebeurd is.

Oefening 34. Zoek de fout in het ontvangen woord 1010000 aan de hand van de definitie.

2. Fout in de informatiebits

In de vorige situatie zat er een fout in de controlebits zodanig dat er slechts ´e´en van de drie vereiste gelijkheden niet klopte. Dat is anders wanneer er een fout optreedt in ´e´en van de informatiebits. We bekijken een voorbeeld. Veronderstel dat we het woord 1001010 ontvangen. We vullen de drie vergelijkingen in en verkrijgen:

0 =? 1 + 0 + 1 = 0

1 =? 1 + 0 + 1 = 0

0 =? 1 + 0 + 0 = 1.

De tweede en de derde gelijkheid kloppen niet. We constateren dat er een fout is opgetreden bij het doorzenden van het codewoord. We gaan er weer van uit dat er slechts ´e´en bit verkeerd is doorgestuurd. We gebruiken ons gezond verstand om de foute bit te achterhalen. We weten dat de tweede bit enkel een rol speelt in de tweede en de derde vergelijking. Inderdaad, de tweede bit komt enkel daar voor. Dus als we de tweede bit van een 0 naar een 1 veranderen, dan krijgen we drie geli-jkheden die kloppen. We concluderen dat 1101010 het doorgezonden codewoord was. Oefening 35. Welke bit moet aangepast worden indien de eerste en de derde ver-gelijking niet kloppen?

Oefening 36. Zoek de fout in het ontvangen woord 1100011 aan de hand van de definitie.

Samenvatting

- Hammingcode: 1 fout verbeterend, slechts 1 bit aanpassen - 1 gelijkheid klopt niet: fout in ´e´en controlebit (c5, c6 of c7)

(39)

3.4 Decoderen van de (7,4)-Hammingcode 39

3.4.2

Fouten detecteren m.b.v. Venn-diagrammen en matrices

In het begin van dit hoofdstuk (zie paragraaf 3.2) zagen we hulpmiddelen om onze code voor te stellen. Deze hulpmiddelen gaan we ook hier kunnen gebruiken om fouten op te sporen en te verbeteren in ontvangen woorden.

1. Venn-diagrammen

Denk terug aan onze schrijfwijze met behulp van Venn-diagrammen. Als we een ont-vangen woord waarin ´e´en fout is opgetreden, invullen in het Venn-diagram, kunnen we aan de hand van onze regel (even aantal enen in elk Venn-diagram) controleren of dit al dan niet een codewoord is. Kunnen we ook aan onze figuur zien waar de fout zit? Ja! Vul bijvoorbeeld het verzonden woord 1000100 in (zie figuur 3.4 op pagina 39). Dit woord kan onmogelijk een codewoord zijn omdat niet in ´elk Venn-diagram

Figuur 3.4: E´en fout in een ontvangen woord op een onbekende plaats.

een even aantal enen staat. Merk op dat in Venn-diagram I en in Venn-diagram II het aantal enen oneven is en het aantal enen in Venn-diagram III even is. Zo weten we dat bit 2 fout is omdat deze bit zowel in Venn-diagram I als in Venn-diagram II ligt, maar niet in Venn-diagram III. Als we een 1 in plaats van een 0 nemen voor de tweede bit zal er in elk Venn-diagram inderdaad een even aantal enen staan.

Samenvatting:

• Zoek in welk Venn-diagrammen het aantal enen oneven is.

• Zoek de bit die enkel in die Venn-diagrammen staat en dus niet voorkomt in andere Venn-diagrammen.

• Als deze bit wordt aangepast, zal het aantal enen in elk Venn-diagram even zijn. Oefening 37. De volgende woorden verschillen op precies ´e´en positie van een code-woord uit de Hammingcode. Bepaal de eerste vier (informatie)bits in deze gevallen.

a) 1100 001 b) 1000 101 c) 0001 000 d) 1110 110.

HINT: Je kan hiervoor gebruik maken van de figuren in bijlage C.

Deze methode is inderdaad veel eenvoudiger en effici¨enter dan de methode uitgelegd in 3.4.1.

(40)

2. Matrices (UITBREIDING)

Om in te zien waar matrices ons kunnen helpen bij het decoderingsproces, starten we vanuit twee -toch wel subtiele- observaties. Deze observaties vormen de kern van onze procedure. De eerste is vrij direct: een element c ∈ Z7

2 van de code

zon-der fouten wordt teniet gedaan door vermenigvuldiging met de controle matrix H: HcT = 0. Dit volgt uit de definitie van de controlematrix H (zie 3.3.2).

We maken eerst een opmerking voor we verder gaan met onze tweede observatie. Zij w het ontvangen woord, dan is het berekenen van H wT een techniek die vaak

gebruikt wordt in codetheorie. Het product H wT noemt men het syndroom 3 van

het woord w. Het bijzondere aan dit syndroom is dat het enkel afhangt van de fouten en niet van het doorgezonden woord. Dat zullen we in de volgende paragraaf a.d.h.v. een voorbeeld bespreken. In alle gevallen kan ´e´en fout achterhaald worden door het syndroom van naderbij te bekijken.

De tweede observatie is een diepgaander resultaat. Zij c∈ Z7

2 een element van

de code (zonder fouten) en c(5)∈ Z72 verkregen door 1 op te tellen bij de vijfde bit van c. Neem bijvoorbeeld c = 1001001, dan is c(5) = 1001101. Dan is c(5) een

woord met ´e´en fout op de vijfde positie. Er geldt dat H(c(5))T ∈ Z3

2 onafhankelijk

is van c. Inderdaad, het woord c(5) kunnen we schrijven als volgt:

c(5)=c+ 0 0 0 0 1 0 0 en dus H(c(5))T = HcT + H           0 0 0 0 1 0 0           = 0 + H           0 0 0 0 1 0 0           = H(5),

waarbij H(5)de 5de kolom van H voorstelt. We besluiten dat het syndroom H(c(5))T

de 5de kolom van H oplevert. Merk op dat alle kolommen van H verschillend zijn (zie paragraaf 3.3.2 op pagina 36). Veronderstel dat er een fout op de 5de positie van

het ontvangen woord c(5) optreedt. Dan zullen we de 5de kolom van H als uitkomst

voor het syndroom H(c(5))T van c(5) krijgen en hieruit kunnen besluiten dat de fout op de 5de positie plaatsvond.

Samengevat gaat het decoderingsproces als volgt:

bereken HwT

. &

HwT = 0 HwT is gelijk aan de ide kolom van H

↓ ↓

w is een codewoord verander wi van 0 naar 1 of van 1 naar 0

3De term syndroom komt uit de geneeskunde en beschrijft een ziekte, hier gelijk aan de fout, die

(41)

3.5 Toepassing van de (7,4)-Hammingcode 41

Oefening 38. In de volgende ontvangen woorden is precies ´e´en fout geslopen. Bepaal de eerste vier (informatie)bits in deze gevallen door gebruik te maken van een matrixproduct.

a) 1100 001 b) 1000 101 c) 0001 000 d) 1110 110

Ook deze methode is veel eenvoudiger en effici¨enter dan de methode uitgelegd in 3.4.1.

3.5

Toepassing van de (7,4)-Hammingcode

3.5.1

Doel en opzet

Stel nu dat we een lange boodschap willen doorsturen naar een ontvanger waarbij we gebruik maken van de Hammingcode. Deze code zullen we gebruiken om fouten te detecteren en -eventueel- te verbeteren indien het over ´e´en opgetreden fout gaat. De ontvanger zal de ontvangen boodschap controleren op fouten, -eventueel- ver-beteren en omzetten naar de oorspronkelijke boodschap.

Hierbij gaan we als volgt te werk: de rij wordt gesplitst in blokjes van vier bits. Tussen twee opeenvolgende viertallen wordt plaats gemaakt voor drie extra bits, vastgelegd door de Hammingcode. Deze rij wordt doorgezonden. Bijvoorbeeld:

Informatie 11001101010000101010. . . Opsplitsen 1100 1101 0100 0010 1010. . . Beschermen 1100100 | {z } codewoord 1101010 0100011 0010101 1010010. . . Zenden 11001001101010010001100101011010010. . .

De ontvanger splitst wat hij krijgt in zeventallen, gebruikt de afgesproken regels om te zien of alles klopt en zo niet om ´e´en fout te verbeteren. Daarna laat hij van de zeventallen de laatste drie bits weg. Bijvoorbeeld:

Ontvangen 11000001001010010101100101010010010. . .

Opsplitsen 1100000 1001010 0101011 0010101 0010010. . .

Controleren en aanpassen 1100100 1101010 0100011 0010101 1010010. . .

Boodschap 11001101010000101010. . .

3.5.2

De (7,4)-Hammingcode gebruikt om tekst te

beveili-gen

We kunnen de (7,4)-Hammingcode gebruiken om boodschappen in tekstvorm te en-coderen, zodat achteraf in beperkte mate fouten kunnen verbeterd worden als er iets mis liep bij de verzending van de boodschap.

(42)

Om de tekst om te zetten in een rij van nullen en enen, gebruiken we de ASCII-code waarbij elke letter wordt omgezet in een achttal van nullen en enen. Dit achttal kunnen we opsplitsen in twee viertallen zodanig dat de Hammingcode op deze twee viertallen kan gebruikt worden, net zoals beschreven in vorige paragraaf.

We willen de boodschap ‘SOS’ bijvoorbeeld doorzenden. We vertalen deze bood-schap naar een rij van nullen en enen door gebruik te maken van tabel 1.1.

Informatie 01010011 01001111 01010011 Opsplitsen 0101 0011 0100 1111 0101 0011 Beschermen 0101011 | {z } codewoord 0011110 0100110 1111111 0101011 0011110 Zenden 010101100111100100110111111101010110011110

Veronderstel dat deze boodschap wordt doorgezonden via een soort Morse code. We maken hierbij gebruik van een zaklamp. Deze laten we lang branden als we een ´e´en versturen en kort branden als we een nul versturen. De meeste signalen werden door de ontvanger juist ge¨ınterpreteerd. Soms dacht de ontvanger echter dat de lamp lang had gebrand wanneer zij kort had gebrand en dacht hij dat ze kort had gebrand als ze lang had gebrand. De volgende rij van symbolen wordt door de ontvanger neergeschreven.

Ontvangen 011101100111000101110011111101010110011110

Opsplitsen 0111011 0011100 0101110 0111111 0101011 0011110

Controleren en aanpassen 0101011 0011110 0100110 1111111 0101011 0011110

Boodschap 01010011 01001111 01010011

Deze boodschap komt overeen met de letters ‘SOS’, wat onze oorspronkelijke bood-schap was.

Op de volgende website vind je een mooie applet over de Hammingcode. Je kan hierop naar hartelust experimenteren met deze code. Opgepast, want de redun-dante bits worden op een andere manier berekend omdat de formules bijvoorbeeld omgewisseld kunnen worden.

http://193.190.56.244/∼jgenoe/Cursus/Hamming applet/hammingcode.html

Oefening 39. Verzin een boodschap en vertaal deze met behulp van de ASCII-code (zie tabel 1.1). Encodeer de code zoals hierboven en verstuur de code met enkele foutjes naar ´e´en van je medeleerlingen. Je vindt een verzendformulier in bijlage D pagina 85. Ontcijfer de boodschap die jij gekregen hebt.

(43)

3.6 Veralgemening 43

3.6

UITBREIDING:

Veralgemening

Voor elke k ∈ N kunnen we de (2k− 1, 2k− k − 1)-Hammingcode defini¨eren. Deze

bestaat uit codewoorden van lengte 2k− 1 waarvan 2k− k − 1 informatiebits. In

alle gevallen kan deze code ´e´en fout verbeteren. Zij is zeer economisch voor grote waarden van k. Voor k = 7 is het bijvoorbeeld voldoende om 7 bits toe te voegen aan een boodschap van 120 bits opdat ´e´en fout verbeterd kan worden. Het is precies die Hammingcode (met k = 7) die gebruikt werd door France-Telecom voor de verzending van Minitel, de voorloper van het moderne Internet.

Oefening 40. Bereken de informatieverhouding van de Hammingcode voor k = 7 zodat je kan zien dat deze code zeer economisch is.

Oefening 41. Hoe lezen we uit de notatie voor de Hammingcode met k = 7 af dat de boodschap uit 120 bits bestaat?

3.7

Projecten

1. Veronderstel dat we volgende variant op onze versie van de Hammingcode gebruiken:    c5 = a2+ a3 + a4 c6 = a1+ a3 + a4 c7 = a1+ a2 + a4

i. Welke van de volgende Venn-diagrammen hoort bij deze Hammingcode?

a) b)

c) d)

ii. Encodeer de volgende boodschappen aan de hand van bovenstaande Ham-mingcode:

Afbeelding

Tabel 1.1: De ASCII-tabel.
Figuur 1.2: Een gedigitaliseerde geluidsgolf.
Figuur 1.3: Foto van Mars.
Tabel 1.2: Het NAVO-spellingsalfabet
+7

Referenties

GERELATEERDE DOCUMENTEN

1) Voor ouders en hun huidige toeslagpartner die een tegemoetkoming of compensatie hebben ontvangen van de Belastingdienst/Toeslagen. Voor hen is het moratorium een jaar van kracht

[r]

They succeeded in establishing the actual positions of the South African combat group to such an extent that whenever the South Africans moved their artillery into range,

Number of unique monolingual words 6 912 Number of unique bilingual words 1 409 Number of unique multilingual (3+ languages) words 552 Total number of unique words 8 873 Average

En bestuurders zelf: u zou vaker dan nu de tijd kunnen nemen om risico’s in kaart te brengen en te analyseren - niet alleen op het gebied van risicomanagement maar überhaupt

Als wij één grote zwakte hebben in de wereld buiten het westen, is het dat we in hun ogen hypocriet zijn; dat we vrijheid voor onszelf claimen en maar het hen misgunnen door steun

De aanvullende pensioenen zullen soberder en/of min- der zeker worden, omdat financiële schokken in de toekomst niet meer met premieverhogingen kunnen worden opgevangen..

3 De zienswijze te bean|oorden zoals opgenomen in de ''Nota behandeling zienswijzen en ambtelijke aanpassingen (procesnota) bestemmingsplan Bedrijventerrein Homoet, te herziening''