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), mn-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