Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdGerda Dijkstra Laatst gewijzigd meer dan 10 jaar geleden
1
Communicatietheorie Partim Datacommunicatie
Kanaalcodering Communicatietheorie Partim Datacommunicatie
2
Overzicht Kanaalcodering
Lineaire blokcodes Cyclische codes Capaciteit en kanaalcoderingstheorema
3
Overzicht Kanaalcodering
Lineaire blokcodes Cyclische codes Capaciteit en kanaalcoderingstheorema
4
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
5
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
6
Eigenschap van lineaire blokcodes Som van 2 codewoorden = codewoord
Nulwoord (= vector met n nullen) = codewoord (correspondeert met informatiewoord bestaande uit k nullen) Lineaire blokcodes
7
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
8
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
9
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
10
Voorbeeld: (6,3) code dH,min= 2 2 3 4 5 Lineaire blokcodes
11
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
12
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
13
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=( ) b2=(0 1 0) c2=( ) b3=(0 0 1) c3=( ) Generatormatrix: Basiscodewoorden: b'1=(1 0 0) c'1=( ) b'2=(1 1 0) c'2=( ) b'3=(1 1 1) c'3=( ) 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
14
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
15
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
16
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
17
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
18
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=( ) is codewoord d=2 Lineaire blokcodes: checkmatrix
19
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
20
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
21
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
22
Lineaire blokcodes: syndroom
Syndroomtabel foutcorrectie Bereken s=eHT Zoek in syndroomtabel e behorend bij s e = meest waarschijnlijke foutpatroon Codewoord Lineaire blokcodes: syndroom
23
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
24
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
25
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
26
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
27
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
28
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
29
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
30
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
31
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
32
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
33
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
34
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
35
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, , , , , , , } s=(101) e = (000101) {000101, , , , , , , } 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
36
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
37
Enkele bijzondere codes
Single parity check codes Block check sum codes Lineaire blokcodes: bijzondere codes
38
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
39
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
40
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
41
Overzicht Kanaalcodering
Lineaire blokcodes Cyclische codes Capaciteit en kanaalcoderingstheorema
42
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
43
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
44
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
45
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
46
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
47
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
48
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
49
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
50
Cyclische codes: generatorveelterm
51
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
52
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=( ) (7,3) : cb=( ) ca cbT = 0 Cyclische codes: checkveelterm
53
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
54
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
55
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
56
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
57
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
58
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
59
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
60
Cyclische codes: generator- en checkmatrix
Checkmatrix = generatormatrix duale code generatorveelterm duale code = xkh(x-1) Cyclische codes: generator- en checkmatrix
61
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
62
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
63
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
64
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=( ) xn-kb(x) mod g(x) = x+1 Cyclische codes: generatie
65
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
66
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
67
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=( ) Cyclische codes: generatie
68
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
69
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
70
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
71
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
72
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
73
Bijzondere cyclische codes
Cyclische Hammingcodes Maximale-lengte codes Cyclic redundancy codes Cyclische codes: bijzondere codes
74
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
75
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
76
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
77
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
78
Cyclische codes: bijzondere codes
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.