Communicatietheorie Partim Datacommunicatie

Slides:



Advertisements
Verwante presentaties
H3 Tweedegraads Verbanden
Advertisements

Vierde bijeenkomst Kleinste kwadraten methode Lineaire regressie
Digitaal wedstrijd formulier Presentatie scheidsrechters Versie sept 2013.
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Gelijkmatige toename en afname
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 1.
vwo A/C Samenvatting Hoofdstuk 6
Een manier om problemen aan te pakken
Entiteit-Relatie Model
Wouter van der Zwan Lezing Draaitabellen Wouter van der Zwan
Coördinaten Transformaties
1 Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen.
Tabellen Metingen schrijf je meestal op in een tabel
Base: bewerkingen 2 soorten - Oplopend- Aflopend.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Zoek- en sorteeralgoritmen & Hashing
en zijn magisch vierkant
vwo C Samenvatting Hoofdstuk 12
Lineaire vergelijkingen
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Hoofdstuk 6 Het voorspellen van prestaties Deel 2: Vermogenvoorspellingen op architectuurniveau Prof. dr. ir. Dirk Stroobandt Academiejaar
Communicatietheorie Partim Datacommunicatie
Oefeningen Datacommunicatie Les 2: Lineaire blokcodes
1 "Traitor Tracing" Boris Škorić TU Eindhoven Vakantiecursus De Exacte Benadering 24 Aug 2012.
Continue kansverdelingen
8C120 Inleiding Meten en Modelleren 8C120 Prof.dr.ir. Bart ter Haar Romeny Faculteit Biomedische Technologie Biomedische Beeld Analyse
Prof.dr.ir. Bart ter Haar Romeny
Leiderverkiezing Olympus College 14 april 2008 David N. Jansen.
Normalisatie Relationeel databaseontwerp:
Hoofdstuk 6 – Tabellen en grafieken
variabelen vaststellen
Hoofdstuk 1 Basisvaardigheden.
Hogere wiskunde Limieten college week 4
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
Inleidingsles Project Project Datacommunicatie Communicatietheorie Communicatietechniek Academiejaar Prof. M. Moeneclaey Prof. H.
1 Foutcontrole met feedback Communicatietheorie Partim Datacommunicatie.
Blok 7: netwerken Les 3 Christian Bokhove.
Statistiekbegrippen en hoe je ze berekent!!
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen van.
Haiku-Generator Les 1 – 12/02/2003 Jan De Bock.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
Varianties bij replicatie (herhaald testen)
Betrouwbaarheid.
The [31,21,5] error correcting cyclic code Door: Finbar S. Bogerd.
Op de maan opdracht 10.
Vergelijkingen oplossen
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 4 Cees Witteveen
ribWBK11t Toegepaste wiskunde Lesweek 01
Intermezzo: Werken met meetresultaten
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Gecijferdheid les 1.4 Grootst gemene deler Kleinst gemene veelvoud
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Kansverdelingen Kansverdelingen Inleiding In deze presentatie gaan we kijken naar hoe kansen zijn verdeeld. We gaan in op verschillende.
Netwerken 2 Enigma Netwerken paragraaf 4 en 5. Snelheid van een verbinding Communicatie is het verzenden van een bericht van een zender naar een ontvanger.
Netwerkstroming Algoritmiek. 2 Vandaag Netwerkstroming: definitie en toepassing Het rest-netwerk Verbeterende paden Ford-Fulkerson algoritme Minimum Snede.
Gegarandeerde Aflevering. p. 2  Referte : unieke identificatie van berichten, vragen en antwoorden Vraag / Antwoord : De afzender dient voor elke vraag.
H01: Informatie Digitaal Toetsweek1 : VT41, 50 min.
Datastructuren voor graafrepresentatie
Hoofdstuk 3 Lineaire formules en vergelijkingen
Youden Analyse.
Magische bits Bron: csunplugged.org.
Bewerkingen met matrices - Deel 3
Codesystemen Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology.
SQL Les 3 23 February 2019.
SQL Les 6 14 April 2019.
SQL Les 4 12 May 2019.
Blok 3 les 5.
Transcript van de presentatie:

Communicatietheorie Partim Datacommunicatie Kanaalcodering Communicatietheorie Partim Datacommunicatie

Overzicht Kanaalcodering Lineaire blokcodes Cyclische codes Capaciteit en kanaalcoderingstheorema

Overzicht Kanaalcodering Lineaire blokcodes Cyclische codes Capaciteit en kanaalcoderingstheorema

Lineaire blokcodes (n,k) lineaire blokcode Splits informatiesequentie op in blokken van k bits  informatiewoord b lengte k : b=(b1 … bk), bi {0,1}  2k woorden Zet b om in een vector c met lengte n  codewoord c lengte n: c=(c1 … cn), cj {0,1}  2n woorden  slechts 2k kiezen Verband b en c: lineaire transformatie  alle bewerkingen modulo-2 Codedebiet Rc=k/n Lineaire blokcodes

codewoord a = (a1, a2, a3, a1+a2+a3) ai {0,1} Voorbeeld 1: (n,n-1) code  voeg 1 pariteitsbit toe zodat de pariteit van het codewoord steeds even is Vb: (4,3) code codewoord a = (a1, a2, a3, a1+a2+a3) ai {0,1} codewoord b = (b1, b2, b3, b1+b2+b3) bi {0,1} codewoord c = (a1+ b1, a2 + b2, a3 + b3, a1 + b1 +a2 + b2 +a3 + b3) = (c1, c2, c3, c1+c2+c3)  Pariteitsbits bij c op dezelfde manier gedefinieerd als bij a eb b  c is een codewoord c1 c2 c3 Lineaire blokcodes

Eigenschap van lineaire blokcodes Som van 2 codewoorden = codewoord Nulwoord (= vector met n nullen) = codewoord (correspondeert met informatiewoord bestaande uit k nullen) Lineaire blokcodes

codewoord a = (a1, a2, a3, a1+a2+a3,a1+a2,a1) ai {0,1} Voorbeeld 2: (6,3) code codewoord a = (a1, a2, a3, a1+a2+a3,a1+a2,a1) ai {0,1}  tel codewoord b op  Pariteitsbits c4, c5 en c6 op dezelfde manier gedefinieerd als bij a  c is een codewoord Lineaire blokcodes

Encodeertabel = tabel met voor elk van de 2k informatiewoorden het bijbehorende codewoord Voorbeeld: (6,3) code c = (b1, b2, b3, b1+b2+b3,b1+b2,b1) Lineaire blokcodes

Hammingafstand dH(a,b) = aantal bitposities waarin a en b verschillen Definities Hammingafstand dH(a,b) = aantal bitposities waarin a en b verschillen Hamminggewicht wH(a) = aantal posities ‘1’ in a Verband dH(.,.) en wH(.): dH(a,b) = wH(a+b) Minimale Hammingafstand dH,min van een code ci = codewoord i, i=1,…,2k (lineariteit) = minimale gewicht van de (van nul verschillende) codewoorden Lineaire blokcodes

Voorbeeld: (6,3) code  dH,min= 2 2 3 4 5 Lineaire blokcodes

Lineaire blokcodes: generatormatrix De generatormatrix Lineariteit code  generatie codewoorden eenvoudig Modulo-2 som twee codewoorden = codewoord  uitbreiding: elke lineaire combinatie van codewoorden = codewoord Informatiebits onafhankelijk   set van k lineair onafhankelijke codewoorden (basisvectoren) vb: codewoorden corresponderend met bi=(0…010…0) = basis lineaire vectorruimte Alle 2k codewoorden = lineaire combinatie van de k basisvectoren positie i Lineaire blokcodes: generatormatrix

Lineaire blokcodes: generatormatrix Generatormatrix G van een (n,k) lineaire blokcode Elke rij = basisvector G = k x n matrix Verband b=(b1 … bk) en c=(c1 … cn): Opmerking: set basisvectoren niet uniek  elke set van lineair onafhankelijke codewoorden goed Systematische vorm generatormatrix Ik = k x k eenheidsmatrix P = k x (n-k) pariteitsmatrix  in codewoord: eerste (laatste) k codebits = informatiebits laatste (eerste) n-k codebits = pariteitsbits  (n,k) systematische code Lineaire blokcodes: generatormatrix

Lineaire blokcodes: generatormatrix G niet in systematische vorm  niet systematische code Equivalentie codes Twee codes met generatormatrices G en G' zijn equivalent als zij in elkaar kunnen omgevormd worden met behulp van rijbewerkingen en/of kolompermutaties Voorbeeld: (6,3) code c= (c1, c2, c3, c1+c2+c3, c1+c2, c1) Basiscodewoorden: b1=(1 0 0)  c1=(1 0 0 1 1 1) b2=(0 1 0)  c2=(0 1 0 1 1 0) b3=(0 0 1)  c3=(0 0 1 1 0 0) Generatormatrix: Basiscodewoorden: b'1=(1 0 0)  c'1=(1 0 0 1 1 1) b'2=(1 1 0)  c'2=(1 1 0 0 0 1) b'3=(1 1 1)  c'3=(1 1 1 1 0 1) Generatormatrix: rij 1 G = rij 1 G' rij 2 G = rij 1 G' + rij 2 G' rij 3 G = rij 2 G' + rij 3 G' Lineaire blokcodes: generatormatrix

Foutdetectie en -correctie Verstuur codewoord c over een kanaal  ontvangen vector r=(r1…rn) r = c + e e = foutvector, bevat ‘1’ op posities transmissiefouten Foutdetectie: ? Is r een codewoord ? JA: stel foutloze transmissie NEE: zeker transmissiefout MAAR: als kanaal verstuurde codewoord omzet in een ander codewoord? = NIET-GEDETECTEERDE FOUT Foutcorrectie: zoek meest waarschijnlijke codewoord MAAR: als aantal fouten te groot zodat gekozen codewoord aan ontvanger anders is dan verstuurde codewoord? = DECODEERFOUT Lineaire blokcodes

Decodeertabel = tabel met alle 2n vectoren r van lengte n en het codewoord dat dichtst bij r ligt Constructie Plaats alle 2k codewoorden in de eerste rij, te beginnen met het nulwoord. Neem één van de overgebleven woorden w met het kleinste gewicht en plaats dit woord onder de kolom met het nulwoord. Vul de rij op door het woord w op te tellen bij het codewoord bovenaan de kolom. Herhaal stappen 2 en 3 totdat alle 2n woorden in de tabel voorkomen. Lineaire blokcodes

Voorbeeld: decodeertabel (6,3) code Indien in laatste 2 rijen andere cosetleider met gewicht 2  rijen gepermuteerd 000000 001100 010110 011010 100111 101011 110001 111101 codewoorden cosetleiders 000001 000001 001101 010111 011011 100110 101010 110000 111100 000010 001110 010100 011000 100101 101001 110011 111111 000100 001000 010010 011110 100011 101111 110101 111001 010000 011100 000110 001010 110111 111011 100001 101101 coset 100000 101100 110110 111010 000111 001011 010001 011101 000011 001111 010101 011001 100100 101000 110010 111110 000101 001001 010011 011111 100010 101110 110100 111000 001001 000101 011111 010011 101110 100010 111000 110100 Lineaire blokcodes

Lineaire blokcodes: checkmatrix De checkmatrix Decodeertabel = niet handig als k of n groot Checkmatrix H : GHT=0 Eigenschappen: Code met H als generatormatrix en G als checkmatrix = duale code Systematische vorm: Voorbeeld: (6,3) code Checkmatrix: zelfde informatie als codewoord: c= (c1, c2, c3, c1+c2+c3, c1+c2, c1) kolom H = codebit op die positie eerste 3 bits = informatiebits rij 1: c4=c1+c2+c3 rij 2: c5=c1+c2 rij 3: c6=c1 Lineaire blokcodes: checkmatrix

Lineaire blokcodes: checkmatrix Codewoord = lineaire combinatie van rijen van G (=basiscodewoorden) modulo-2 som van kolommen H overeenkomend met posities ‘1’-en in c moet nul zijn  gevolg: minimale Hammingafstand dH,min (=d) van een code:  set van d kolommen in H waarvan som = 0  set van  d-1 kolommen in H waarvan som = 0 = elke set van  d-1 kolommen in H zijn lineair onafhankelijk Voorbeeld: (6,3) code c=(0 0 1 1 0 0) is codewoord d=2 Lineaire blokcodes: checkmatrix

Lineaire blokcodes: syndroom Het syndroom Definitie syndroom s=(s1 … sn-k): Eigenschappen: s=0  r is een codewoord s≠0  r is geen codewoord syndroom hangt enkel af van foutvector, niet van verstuurde codewoord = NIET-GEDETECTEERDE FOUT foutdetectie Lineaire blokcodes: syndroom

Lineaire blokcodes: syndroom decodeertabel: bereken syndroom van een coset (=rij)  elk element uit coset heeft zelfde syndroom  andere coset = ander syndroom Syndroomtabel = tabel met cosetleiders en bijbehorende syndromen rij j element i cosetleider = foutpatroon met kleinste gewicht dat aanleiding geeft tot syndroom Merk op: syndroomtabel (2n-k) factor 2k kleiner dan decodeertabel (2n) Lineaire blokcodes: syndroom

Lineaire blokcodes: syndroom Opstellen syndroomtabel zonder decodeertabel Rangschik de 2n mogelijke e volgens toenemend gewicht Bereken syndroom s=eHT voor opeenvolgende e Syndroom nog niet in tabel?  voeg e en s toe Herhaal 2 en 3 totdat alle 2n-k syndromen in tabel Lineaire blokcodes: syndroom

Lineaire blokcodes: syndroom Syndroomtabel  foutcorrectie Bereken s=eHT Zoek in syndroomtabel e behorend bij s e = meest waarschijnlijke foutpatroon Codewoord Lineaire blokcodes: syndroom

Lineaire blokcodes: syndroom Voorbeeld: (6,3) code c=(101011)  ontvang r=(101010) e=(000001)  =(101011) 1 (van 1) foutpatroon gewicht 0 5 (van 6) foutpatronen gewicht 1 2 (van 15) foutpatronen gewicht 2 Lineaire blokcodes: syndroom

Performantie van foutdetectie Foutdetectie: bereken syndroom s=0  foutloze transmissie verondersteld s≠0  zeker transmissiefout # fouten < dH,min  codewoord kan niet omgezet worden in ander codewoord (minimum aantal fouten nodig = dH,min)  # fouten < dH,min steeds detecteerbaar GEGARANDEERD FOUTDETECTEREND VERMOGEN = dH,min-1 Niet gedetecteerde fout: e≠0  s=0  kan enkel als e=codewoord ? Kans niet gedetecteerde fout? Lineaire blokcodes: foutdetectie

Binair symmetrisch kanaal (BSC) = kanaal met binaire ingang en binaire uitgang Bij gegeven ingangssequentie, uitgangbits statistisch onafhankelijk Kanaal geheugenloos: ne uitgangsbit enkel afhankelijk van ne ingangsbit Kanaal stationair: statistiek kanaal onafhankelijk van tijdsindex Pr[kanaalfout] = Pr[Y=0|X=1]Pr[X=1]+Pr[Y=1|X=0]Pr[X=0] = p p = foutprobabiliteit kanaal X 1 Y Pr[Y=0|X=0]=1-p Pr[Y=1|X=1]= 1-p Pr[Y=0|X=1]= p Pr[Y=1|X=0]= p Lineaire blokcodes: foutdetectie

Lineaire blokcodes: foutdetectie Stel foutvector e(i) treedt op (lengte e(i) =n) Kans niet gedetecteerde fout = kans dat e een codewoord ≠ 0 is kleinste macht p = dH,min (=d)  Pr[n.g.f]~pd p<<1 (foutdetecterend vermogen d-1) Lineaire blokcodes: foutdetectie

Lineaire blokcodes: foutdetectie Voorbeeld: (6,3) code  uit encodeertabel: 2 3 4 5 1 codewoord met gewicht 0 1 codewoord met gewicht 2 3 codewoorden met gewicht 3 2 codewoorden met gewicht 4 1 codewoord met gewicht 5 n=6 p klein: (1-p)1 px<<py als x>y Lineaire blokcodes: foutdetectie

Lineaire blokcodes: foutdetectie geen codering (d=1) Pr[n.g.f.]=1-(1-p)3 Voorbeeld: (6,3) code (vervolg) code uit voorbeeld (d=2) andere (6,3) code met d=3 d   Pr[n.g.f.]  Lineaire blokcodes: foutdetectie

Performantie van foutcorrectie Foutcorrectie: gebruik syndroomtabel om meest waarschijnlijke foutvector te bepalen  foutvector in syndroomtabel  decodering foutloos  Esyndr= set van foutvectoren in syndroomtabel Kans decodeerfout = kans foutvector niet in syndroomtabel met: = GEGARANDEERD FOUTCORRIGEREND VERMOGEN alle foutpatronen met gewicht t in syndroomtabel, sommige foutpatronen met gewicht > t mogelijk in syndroomtabel (zeker niet alle!) Lineaire blokcodes: foutcorrectie

Lineaire blokcodes: foutcorrectie Voorbeeld: (6,3) code  syndroomtabel 1 (van 1) foutpatroon gewicht 0 5 (van 6) foutpatronen gewicht 1 2 (van 15) foutpatronen gewicht 2 Binomium Newton: Lineaire blokcodes: foutcorrectie

Lineaire blokcodes: foutcorrectie geen codering (d=1) Pr[d.f.]=1-(1-p)3 Voorbeeld: (6,3) code (vervolg) code uit voorbeeld (d=2) andere (6,3) code met d=3 d   t   Pr[d.f.]  Lineaire blokcodes: foutcorrectie

Performantie van gecombineerde foutcorrectie en -detectie Foutdetectie = geen enkele fout corrigeren Foutcorrectie = alle fouten corrigeren, geen extra detecteren ? Sommige fouten corrigeren, andere detecteren ( retransmissie)? Voor foutvectoren in syndroomtabel:  foutvector corrigeren: behoud foutvector in syndroomtabel  foutvector enkel detecteren: schrap uit syndroomtabel Zuivere foutcorrectie = geen rijen schrappen zuivere foutdetectie = alle rijen (behalve s=0) schrappen # rijen geschrapt   Pr[d.f.]  maar Pr[retransmissie] Lineaire blokcodes: foutcorrectie en -detectie

Lineaire blokcodes: foutcorrectie en -detectie Voorbeeld: (6,3) code corrigeer enkel fouten met gewicht  1, andere fouten worden enkel gedetecteerd Schrap uit syndroomtabel alle foutvectoren met gewicht  1 Pr[correcte beslissing] = kans dat foutpatroon in syndroomtabel Pr[retransmissie] = kans dat foutpatroon s  syndroomtabel Pr[decodeerfout] = kans dat foutpatroon s  syndroomtabel, maar e  syndroomtabel / Pr[correcte beslissing]+ Pr[retransmissie]+ Pr[decodeerfout]=1 Lineaire blokcodes: foutcorrectie en -detectie

Lineaire blokcodes: foutcorrectie en -detectie Voorbeeld: (6,3) code (vervolg) Pr[correcte beslissing] = kans dat foutpatroon in syndroomtabel in syndroomtabel: 1 foutpatroon met gewicht 0 5 foutpatronen met gewicht 1 Pr[correcte beslissing] = 1(1-p)6 + 5p(1-p)5 Lineaire blokcodes: foutcorrectie en -detectie

Lineaire blokcodes: foutcorrectie en -detectie Voorbeeld: (6,3) code (vervolg) Pr[retransmissie] = kans dat foutpatroon s  syndroomtabel / rijen geschrapt uit syndroomtabel: s=(011) en s=(101) # foutpatronen  s ?  2k per s (e uit tabel + alle c) s=(011)  e = (000011) ^ {000011, 001111, 010101, 011001, 100100, 101000, 110010, 111110} s=(101)  e = (000101) {000101, 001001, 010011, 011111, 100010, 101110, 110100, 111000} 6 foutpatronen met gewicht 2 6 foutpatronen met gewicht 3 4 foutpatronen met gewicht 4 2 foutpatronen met gewicht 5 Pr[retransmissie] = 6p2(1-p)4 + 6p3(1-p)3+4p4(1-p)2+2p5(1-p)6p2 p<<1 Lineaire blokcodes: foutcorrectie en -detectie

Lineaire blokcodes: foutcorrectie en -detectie Voorbeeld: (6,3) code (vervolg) Pr[decodeerfout] = kans dat foutpatroon s  syndroomtabel, maar e  syndroomtabel / Pr[decodeerfout] = 1-(Pr[correcte beslissing]+Pr[retransmissie]) = 1 – ((1-p)6 + 5p(1-p)5) – (6p2(1-p)4 + 6p3(1-p)3+4p4(1-p)2+2p5(1-p)) = p(1-p)5 + 9p2(1-p)4 + 14p3(1-p)3+13p4(1-p)2+4p5(1-p)+p2 (Binomium)  p p<<1 Lineaire blokcodes: foutcorrectie en -detectie

Enkele bijzondere codes Single parity check codes Block check sum codes Lineaire blokcodes: bijzondere codes

Single parity check code (SPC) Eenvoudige foutdetecterende code  informatiewoord (lengte k) + 1 pariteitsbit = codewoord  (k+1,k) code, heeft ‘1’ in even aantal posities Ontvanger: bepaal pariteit r Even: stel geen transmissiefout Oneven: zeker transmissiefout Kans niet-gedetecteerde fout: n.g.f. treedt op als #fouten even  Pr[n.g.f.] klein als k voldoende klein  kans 2 bitfouten << kans 1 bitfout Toepassing: ASCII: 7 informatiebits + 1 pariteitsbit Variante: SPC code met oneven pariteit  codewoord oneven aantal ‘1’ Zelfde performantie als even SPC MAAR: geen lineaire blokcode Lineaire blokcodes: bijzondere codes

Block check sum code (BCS) k groot  SPC code niet betrouwbaar oplossing = block check sum Splits informatiewoord op in L blokken van lengte K Orden L blokken in KxL matrix Voeg aan elke rij 1 pariteitsbit (even) toe  lengte K+1 Voeg aan elke kolom 1 pariteitsbit (even) toe  lengte L+1  ((L+1)(K+1),LK) code pariteitsbits voor elke rij LK informatiebits pariteitsbits voor elke kolom Lineaire blokcodes: bijzondere codes

Lineaire blokcodes: bijzondere codes Foutdetectie bij BCS  alle fouten die de pariteit van minstens 1 rij en/of kolom verstoren zijn detecteerbaar Niet gedetecteerde fout = foutpatroon met even aantal fouten in elke rij/kolom  minstens 4 fouten: Pr[n.g.f.] ~ p4 Lineaire blokcodes: bijzondere codes

Overzicht Kanaalcodering Lineaire blokcodes Cyclische codes Capaciteit en kanaalcoderingstheorema

Cyclische codes Cyclische codes = subklasse lineaire blokcodes Eigenschappen: Lineariteit: modulo-2 som twee codewoorden = codewoord Cyclisch karakter: elke cyclische verschuiving van een codewoord = codewoord lineaire blokcode Stel: (c0,c1,…,cn-1) = codewoord van (n,k) cyclische code  (cn-1,c0,…,cn-2) … (c1,c2,…,c0) zijn ook codewoorden Cyclische codes

Cyclische codes: veeltermnotatie Codewoord c=(c0,c1,…,cn-1)  veeltermnotatie: c(x) = c0 + c1x + … + cn-1xn-1 Graad veelterm c(x)  n-1 ci  {0,1} Cyclisch karakter?  beschouw veelterm xc(x) xc(x) = c0x+ c1x2 + … + cn-1xn  ≠ codewoord: graad xc(x) kan n zijn als cn-1=1 ! Cyclische codes: veeltermnotatie

Cyclische codes: veeltermnotatie Deel xc(x) door xn+1 cn-1xn+…+c1x2 +c0x xn+1 cn-1xn + cn-1 cn-1 cn-2xn-1+…+c0x+cn-1 xc(x) = cn-1 (xn+1)+ c1(x)  c1 = (cn-1,c0,…,cn-2) = codewoord c over één positie cyclisch verschoven  c1(x) = xc(x) mod (xn+1) c1(x) Cyclische codes: veeltermnotatie

Cyclische codes: veeltermnotatie c1(x) = xc(x) mod (xn+1)  uitbreiding: ci(x) = xic(x) mod (xn+1) = ie cyclische verschuiving van c(x) = codewoord  xic(x) = q(x) (xn+1) + ci(x) Cyclische codes: veeltermnotatie

Cyclische codes: veeltermnotatie Voorbeeld: stel n=4 c = (1101)  c(x) = 1+x+x3 i=3  xic(x) = x3+x4+x6  delen door x4+1=xn+1 x6+x4+x3 x4+1 x6+x2 x2+1 x4+x3+x2 x4+1 x3+x2+1  x3c(x) mod (x4+1) = x3+x2+1  (1011) = c over 3 posities cyclisch naar rechts verschoven Cyclische codes: veeltermnotatie

Cyclische codes: generatorveelterm Definitie: Generatorveelterm g(x) van een (n,k) cyclische code graad g(x) = n-k g(x) niet deelbaar door x g(x) = factor van xn+1 Informatieveelterm: informatiewoord b=(b0,…,bk-1)  b(x) = b0+b1x+…+bk-1xk-1 Cyclische codes: generatorveelterm

Cyclische codes: generatorveelterm Verband informatieveelterm en codeveelterm c(x) = b(x) g(x) voor alle 2k informatieveeltermen Cyclisch? Stel c(x) = codewoord c1(x) = cyclische verschuiving van c(x) codewoord? c1(x) = xc(x) mod (xn+1) = codewoord? = xc(x) + cn-1 (xn+1) c1(x) deelbaar door g(x) dus codewoord deelbaar door g(x) want c(x) = codewoord deelbaar door g(x) want g(x) is factor van (xn+1) Cyclische codes: generatorveelterm

Cyclische codes: generatorveelterm Voorbeeld: code met n=7  x7+1=(x+1)(x3+x2+1)(x3+x+1) (7,4) code  graad g(x) = 3  vb: g1(x)=x3+x2+1 g2(x)=x3+x+1 b(x) = b0+b1x+b2x2+b3x3 c(x) = b(x)g1(x) = b0+b1x+(b0+b2)x2+(b0+b1+b2)x3+ +(b1+b2)x4+(b2+b3)x5+b3x6 niet systematische code! 2 keuzes Cyclische codes: generatorveelterm

Cyclische codes: generatorveelterm

Cyclische codes: checkveelterm xn+1 = g(x) h(x) graad h(x) = k h(x) niet deelbaar door x h(x)  reciproke veelterm van h(x) = xkh(x-1) = generatorveelterm van (n,n-k) duale code xkh(x-1) = hk + hk-1x + … + h1xk-1 + h0xk generatorveelterm checkveelterm Cyclische codes: checkveelterm

Cyclische codes: checkveelterm Voorbeeld: (7,4) code met g1(x) = x3+x2+1  h1(x) = (x+1)(x3+x+1)=x4+x3+x2+1  x4h(x-1) = x4+x2+x+1  (7,3) cyclische code  niet systematische code Codewoorden van de twee codes zijn orthogonaal: (7,4) : ca=(1100010) (7,3) : cb=(1101001)  ca cbT = 0 Cyclische codes: checkveelterm

Generator- en checkmatrix Generatormatrix G = set van k lineair onafhankelijke codewoorden G en g(x) beide bruikbaar voor generatie code Verband tussen G en g(x)? Cyclische code  g(x), xg(x), …, xk-1g(x) zijn codewoorden want deelbaar door g(x) graad  n-1 lineair onafhankelijk want alle andere graad Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix g(x), xg(x), …, xk-1g(x)  generatormatrix = verband G en g(x) Verband b en c? b=(b0,…,bk-1) c=(c0,…,cn-1)  c=bG g(x) xg(x) xkg(x) Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Voorbeeld: (7,4) code met g1(x) = x3+x2+1 g2(x) = x3+x+1 Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Generatormatrix = niet systematisch  G=[P|Ik] ? Methode om systematische cyclische code te bekomen: Vermenigvuldig b(x) met xn-k Deel xn-k b(x) door g(x)  rest r(x) Tel r(x) op bij xn-k b(x)  codewoord c(x)  c(x) = xn-k b(x) + [xn-k b(x) mod g(x)] termen xn-k…xn-1 termen x0…xn-k-1 k termen met hoogste graad = informatiebits n-k termen met laagste graad = pariteitsbits Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Rekenregels a(x) mod b(x): a1(x)+a2(x) mod b(x)=[a1(x) mod b(x)] + [a2(x) mod b(x)] a1(x).a2(x) mod b(x)=[ [a1(x) mod b(x)] .[a2(x) mod b(x)] mod b(x)] Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Voorbeeld: (7,4) code met g1(x)=x3+x2+1 Vermenigvuldig b(x) met xn-k b(x) = b0+b1x+b2x2+b3x3  xn-kb(x) = b0x3+b1x4+b2x5+b3x6 Deel xn-k b(x) door g1(x) x3b(x) mod g1(x) =b0[x3 mod g1(x)]+ b1[x4 mod g1(x)] +b2[x5 mod g1(x)]+ b3[x6 mod g1(x)] x3 mod g1(x) = [x3 mod (x3+x2+1)] = x2+1 x4 mod g1(x) = [x.x3 mod g1(x)]=[x.(x2+1) mod g1(x)] = [x3 mod g1(x)]+[x mod g1(x)]=x2+x+1 x5 mod g1(x))= [x.x4 mod g1(x)]=[x.(x2+x+1) mod g1(x)] = [x3 mod g1(x)]+[x2 mod g1(x)] +[x mod g1(x)]=x+1 x6 mod g1(x) = [x.x5 mod g1(x)]=[x.(x+1) mod g1(x)] = [x2 mod g1(x)]+[x mod g1(x)]=x2+x  x3b(x) mod g1(x) = b0 (x2+1)+ b1 (x2+x+1) +b2 (x+1)+ b3 (x2+x) = x2 (b0+b1+b3)+x(b1+b2+b3)+x0(b0+b1+b2) Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Vervolg voorbeeld: Tel r(x) op bij xn-k b(x)  codewoord c(x)  c(x) = xn-k b(x) + [xn-k b(x) mod g(x)] = b3x6+b2x5+b1x4+b0x3+x2(b0+b1+b3) +x(b1+b2+b3)+x0(b0+b1+b2) Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Checkmatrix = generatormatrix duale code  generatorveelterm duale code = xkh(x-1) Cyclische codes: generator- en checkmatrix

Cyclische codes: generator- en checkmatrix Voorbeeld: (7,4) code met g1(x) = x3+x2+1  h1(x) = (x+1)(x3+x+1)=x4+x3+x2+1  x4h(x-1) = x4+x2+x+1 Cyclische codes: generator- en checkmatrix

Generatie van cyclische codes Systematische cyclische code: Vermenigvuldig b(x) met xn-k Deel xn-k b(x) door g(x)  rest r(x) Tel r(x) op bij xn-k b(x)  codewoord c(x)  c(x) = xn-k b(x) + [xn-k b(x) mod g(x)]  Kan uitgevoerd worden met schuifregister Cyclische codes: generatie

Cyclische codes: generatie Generatie via generatorveelterm: c0 c1 cn-k-2 cn-k-1 Lees informatiebits in, begin met bk-1 Na k klokcycli: alle informatiebits ingelezen De n-k geheugenelementen bevatten de pariteitsbits = rest na deling xn-kb(x) door g(x) Cyclische codes: generatie

Cyclische codes: generatie Voorbeeld: (7,4) code met g(x)=x3+x+1 Encodeer b=(0101)  b(x)=x3+x xn-kb(x)= x6+x4 c(x) = x6+x4+x+1 c=(1100101) xn-kb(x) mod g(x) = x+1 Cyclische codes: generatie

Cyclische codes: generatie Voorbeeld: vervolg Encodeer b(x)=b0+b1x+b2x2+b3x3 Ingang cyclus Inhoud b3 1 b2 2 b2+b3 b1 3 b1+b3 b1+b2+b3 b0 4 b0+b2+b3 b0+b1+b2 Ingang cyclus Inhoud b3 1 b2 2 b2+b3 b1 3 b1+b3 b1+b2+b3 b0 4 b0+b2+b3 b0+b1+b2 Ingang cyclus Inhoud b3 1 b2 2 b2+b3 b1 3 b1+b3 b1+b2+b3 b0 4 b0+b2+b3 b0+b1+b2 Ingang cyclus Inhoud b3 1 b2 2 b2+b3 b1 3 b1+b3 b1+b2+b3 b0 4 b0+b2+b3 b0+b1+b2 Ingang cyclus Inhoud b3 1 b2 2 b2+b3 b1 3 b1+b3 b1+b2+b3 b0 4 b0+b2+b3 b0+b1+b2 c(x)= b3x6+b2x5 +b1x4+b0x3 +(b1+b2+b3)x2 +(b0+b1+b2)x +(b0+b2+b3) Cyclische codes: generatie

Cyclische codes: generatie Generatie via checkveelterm: Initialisatie: schakelaar in stand 1, lees k informatiebits in, begin met bk-1 Als alle informatiebits ingelezen, schakelaar in stand 2 Vanaf dat schakelaar in stand 2: n klokcycli om alle n codebits uit te lezen Cyclische codes: generatie

Voorbeeld: (7,4) code met g(x)=x3+x+1  h(x)=x4+x2+x+1 Encodeer b=(0101)  b(x)=x3+x Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 Schakelaar uitgang cyclus Inhoud 1 2 3 4 5 6 7 codebits: c=(1100101) Cyclische codes: generatie

Cyclische codes: generatie Voorbeeld: vervolg Encodeer b=(b0b1b2b3)  b(x)= b0+b1x+b2x2+b3x3 Schakelaar uitgang cyclus Inhoud 1 b0 b1 b2 b3 2 b1+b2+b3 b0+b1+b2 3 b0+b2+b3 4 5 6 7 Cyclische codes: generatie

Cyclische codes: generatie Generatie via schuifregister: generatorveelterm of checkveelterm?  aantal geheugenelementen in schuifregister bepaalt complexiteit k>n-k: generatorveelterm eenvoudiger (Rc>1/2) k<n-k: checkveelterm eenvoudiger (Rc<1/2) Cyclische codes: generatie

Berekening van het syndroom Lineaire blokcode  decoderen start met behulp van syndroom Cyclische code: r(x)=c(x)+e(x) definitie syndroom: s(x) = s0+s1x+…+sn-k-1xn-k-1  graad  n-k-1 definitie equivalent met s=rHT deelbaar door g(x) r(x) = r0+r1x+…+rn-1xn-1 s(x) = r(x) mod g(x) Cyclische codes: syndroom

Cyclische codes: syndroom Berekening syndroom via schuifregister s0 s1 sn-k-2 sn-k-1 Initialisatie: register bevat enkel nullen Lees n ontvangen bits in langs links, begin met rn-1 Na n klokcycli (alle ontvangen bits ingelezen)  geheugenelementen bevatten syndroom Cyclische codes: syndroom

Cyclische codes: syndroom Voorbeeld: (7,4) cyclische code, g2(x)=x3+x+1 r(x) = x5+x4+x2+1 x6 x5 x4 x3 x2 x6 x5 x4 x3 x2 x x6 x5 x4 x3 x2 x 1 x6 x5 x4 x3 x6 x5 x4 x6 x6 x5 syndroom : (001)=x2 Cyclische codes: syndroom

Bijzondere cyclische codes Cyclische Hammingcodes Maximale-lengte codes Cyclic redundancy codes Cyclische codes: bijzondere codes

Cyclische Hammingcodes Definities: Irreduceerbare veelterm = veelterm die NIET gefactoriseerd kan worden met veeltermen met coëfficiënten {0,1} Primitieve veelterm g(x) voor code met bloklengte n = als de kleinste waarde m waarvoor de irreduceerbare veelterm g(x) de veelterm xm+1 deelt gelijk is aan m=n Cyclische Hammingcode met bloklengte n = code waarvan de generatorveelterm een primitieve veelterm is Parameters cyclische Hammingcode: n = 2m-1 k = 2m-1-m m=2,3,… dH,min = 3 Cyclische codes: bijzondere codes

Cyclische codes: bijzondere codes Voorbeeld cyclische Hammingcode: n=7: g(x) is deler van x7+1 x7+1 = (x+1)(x3+x2+1)(x3+x+1) g1(x) en g2(x) : graad 3  (7,4) cyclische Hammingcode  Codes equivalent (kolompermutaties) Primitief: deel xm+1 door g1(x) of g2(x), mn-1 Niet primitief: deelt xm+1, m=1,2,3,… g1(x) g2(x) Cyclische codes: bijzondere codes

Cyclische codes: bijzondere codes Maximale-lengte code Maximale-lengte code = duale code van cyclische Hammingcode  checkveelterm maximale-lengte code = primitieve veelterm Parameters maximale-lengte code: n = 2m-1 k = m m=2,3,… dH,min = 2m-1 Cyclische codes: bijzondere codes

Cyclic redundancy check (CRC) code Cyclische codes: Kunnen veel waarschijnlijke fouten detecteren Eenvoudige implementatie Definitie burstfout met lengte B = (0…01XX…XX10…0) Fouten gedetecteerd door (n,k) CRC code: Alle burstfouten met lengte  n-k Fractie burstfouten met lengte n-k+1 (1-2-(n-k+1)) Fractie burstfouten met lengte > n-k+1 (1-2-(n-k+1)) Alle combinaties met  dH,min-1 fouten Als g(x) deelbaar door x+1: alle oneven aantal fouten B Cyclische codes: bijzondere codes

Cyclische codes: bijzondere codes