De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Communicatietheorie Partim Datacommunicatie

Verwante presentaties


Presentatie over: "Communicatietheorie Partim Datacommunicatie"— Transcript van de presentatie:

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), mn-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


Download ppt "Communicatietheorie Partim Datacommunicatie"

Verwante presentaties


Ads door Google