D - Koblenz
Transcrição
D - Koblenz
Übungen zur Vorlesung Grundlagen der Rechnernetze Zusätzliche Übungen Hamming-Abstand d Der Hamming-Abstand d zwischen zwei Codewörtern c1 und c2 ist die Anzahl der Bits, in denen sich die beiden Codewörter unterscheiden. Beispiel : c1 10001001 c2 10100000 00101001 Hamming Abstand d(10001001, 10100000) = 3 Hamming-Abstand D eines vollständigen Codes C Der Hamming-Abstand D eines vollständigen Codes C = {c1, c2, . . . , cn} ist der minimale Hamming-Abstand d zweier Codewörter c1 und c2. D(C) = min{ d(c1, c2), c1, c2 ∈ C, c1 = c2} Hamming-Abstand Code C: Distanzen d: Zeichen a b c d e Codewort 0000 0000 0000 0111 0011 1000 1100 0001 0001 1110 Zeichen a b c d e Hamming-Distanz D = 3 Anzahl garantiert korrigierbarer Bitfehler = 1 a b c d - 3 3 3 e 4 3 - 6 3 3 3 4 6 4 3 - 6 3 6 - 7 3 7 - 4 Hamming-Abstand Die Fähigkeit eines Hamming-Codes, Fehler zu erkennen und Fehler zu beheben, hängt von seinem Hamming-Abstand ab. Erkennen von n-Bit Fehlern: Ein Abstand von n + 1 wird benötigt Beheben von n-Bit Fehlern: Ein Abstand von 2n + 1 wird benötigt Konstruktion eines Hamming-Codes ● ● ● Gegeben: Datenwörter von m-Bit Länge Datenwörter sind durch eine Hammingcodierung so abzusichern, dass alle 1-Bit Fehler sicher korrigiert werden können Gesucht: Um r Redundanzbits angereicherte legale Codewörter der Länge n = m + r mit einem Hamming-Abstand D = 3 Konstruktion eines Hamming-Codes ● legale Codewörter = korrekt und ohne Fehler übertragene Codewörter ● illegale Codewörter = durch 1-Bit Fehler verfälschte Codewörter ● legale und illegale Codewörter müssen disjunkte Mengen bilden ● zu jedem illegalen Codewort gibt es höchstens ein legales Codewort mit Hamming-Abstand d = 1 Wieviel Redundanz braucht man? Das zu sichernde Datenwort bestehe aus m Bits. Das Codewort der Länge n besteht dann aus m Datenbits plus r Prüfbits: n = m + r, m Datenbits, r Prüfbits Frage: Wie viele Prüfbits werden benötigt, um jeden 1-Bit-Fehler beheben zu können? Wieviel Redundanz braucht man? n = m + r, m Datenbits, r Prüfbits ● ● Es gibt 2m legale Codewörter der Länge n Bits. Pro legalem Codewort gibt es mindestens n illegale Codewörter mit Hamming-Abstand 1. (Invertieren eines Bits soll zu einem illegalem Codewort führen.) ● 2n ist die Gesamtzahl der darstellbaren Codewörter. n = m + r, m Datenbits, r Prüfbits (n + 1) 2m = 2n = 2m+r (n illegale + 1 legales Wort) (n + 1) = 2r (m + r + 1) ≤ 2r Das ergibt die untere Grenze für die erforderliche Anzahl der Prüfbits r Wieviel Redundanz braucht man? Beispiele: Datenbreite Prüfbits Codebreite Prüfbits/Datenbits 4 3 7 75% 8 4 12 50% 16 5 21 31% 32 6 38 19% 64 7 71 11% 128 8 136 6% 256 9 265 4% ● ● ● Konstruktion eines Hamming-Codes r Prüfbits ergeben 2r verschiedene Prüfwerte Codewortbreite m + r ist auf jeden Fall kleiner als 2r Ziel: Aus dem Prüfwert, also den r Prüfbits, auf einfache Art ● erkennen, ob ein Fehler bei der Übertragung aufgetreten ist und ● die Position des gekippten Bits ermitteln. Konstruktion eines Hamming-Codes ● ● Der Hamming-Code besteht aus m Daten-Bits (D0,D1, . . . ,Dm−1) und r Redundanz-Bits (R0,R1,..Rr−1), zusammen n = m + r Bits. Diese Bits werden von 1 (nicht von 0 an!) bis m wie folgt Durchnummeriert: ● Redundanzbit Ri bekommt die Nummer 2i ● Die Datenbits (D ,D ,… D ) erhalten der Reihenfolge nach 0 1 m−1 die jeweils freien Nummern, also D0 die Nummer 3, D1 die Nummer 5 usw. ● Diese Nummern entsprechen genau den n Bitpositionen im Codewort. Beispiel: ● ● ● Datenwörter der Länge 8, also Daten-Bits (D0,D1, . . .,D7). Es werden 4 Redundanz-Bits gebraucht (8 + 4 + 1 = 13 ≤ 24 =16 ). Anordnung der Bits im Codewort Bitposition 1 2 3 4 5 6 7 8 9 10 11 12 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 D5 D6 D7 ● ● ● ● Jedes Redundanz-Bit wird nach dem even parity Verfahren berechnet unter Einbeziehung bestimmter Daten-Bits. Diese Datenbits befinden sich an bestimmten Bitpositionen im Codewort. Man sagt : Jedes Redundanz-Bit überwacht eine Reihe bestimmter Bitpositionen. Dabei gilt: Redundanz-Bit Ri überwacht Bitposition k genau dann, wenn in der Binärdarstellung von k an Stelle i eine 1 ist. (Stellen werden beginnend mit 0 für das niederwertigste Bit gezählt.) Beispiel 1: Bitposition 5 (Datenbit D1) ● 510 = 01012 ● Eine 1 befindet sich an den Stellen 0 und 2. ● Position 5 wird also von den Redundanz-Bits R0 und R2 überwacht. Beispiel 2: Redundanz-Bit R1 (Bitposition 2) ● Überwacht werden alle Bitpositionen mit einer 1 an Stelle 1 in der Binärdarstellung ● ● Das sind 00102, 00112, 01102, 01112, 10102 und 10112, also die Positionen 2, 3, 6, 7, 10 und 11. 11102 und 11112 also 14 und 15 überschreiten die Codewortbreite, brauchen also nicht berücksichtigt zu werden. Bitposition 1 2 3 4 5 6 7 8 9 10 11 12 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 D5 D6 D7 R0 1 0 1 0 1 0 1 0 1 0 1 0 R1 0 1 1 0 0 1 1 0 0 1 1 0 R2 0 0 0 1 1 1 1 0 0 0 0 1 R3 0 0 0 0 0 0 0 1 1 1 1 1 Binärdarstellung der Bitposition hier Position 510 = 01012 Bitposition 1 2 3 4 5 6 7 8 9 10 11 12 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 D5 D6 D7 R0 1 0 1 0 1 0 1 0 1 0 1 0 R1 0 1 1 0 0 1 1 0 0 1 1 0 R2 0 0 0 1 1 1 1 0 0 0 0 1 R3 0 0 0 0 0 0 0 1 1 1 1 1 R0 D0 D1 D3 D4 D6 = 0 ↔ R0 = D0 D1 D3 D4 D6 Bitposition 1 2 3 4 5 6 7 8 9 10 11 12 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 D5 D6 D7 R0 1 0 1 0 1 0 1 0 1 0 1 0 R1 0 1 1 0 0 1 1 0 0 1 1 0 R2 0 0 0 1 1 1 1 0 0 0 0 1 R3 0 0 0 0 0 0 0 1 1 1 1 1 R1 D0 D2 D3 D5 D6 = 0 ↔ R1 = D0 D2 D3 D5 D6 Aufgabe 8 Bitposition 1 2 3 4 5 6 7 8 9 10 11 12 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 D5 D6 D7 R0 1 0 1 0 1 0 1 0 1 0 1 0 R1 0 1 1 0 0 1 1 0 0 1 1 0 R2 0 0 0 1 1 1 1 0 0 0 0 1 R3 0 0 0 0 0 0 0 1 1 1 1 1 R2 D1 D2 D3 D7 = 0 ↔ R2 = D1 D2 D3 D7 Aufgabe 8 Bitposition 1 2 3 4 5 6 7 8 9 10 11 12 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 D5 D6 D7 R0 1 0 1 0 1 0 1 0 1 0 1 0 R1 0 1 1 0 0 1 1 0 0 1 1 0 R2 0 0 0 1 1 1 1 0 0 0 0 1 R3 0 0 0 0 0 0 0 1 1 1 1 1 R3 D4 D5 D6 D7 = 0 ↔ R3 = D4 D5 D6 D7 Berechnung der Prüfbits R0 = D0 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 R1 = D0 ⊕ D2 ⊕ D3 ⊕ D5 ⊕ D6 R2 = D1 ⊕ D2 ⊕ D3 ⊕ D7 R3 = D4 ⊕ D5 ⊕ D6 ⊕ D7 Hamming-Code: Codierung Schritt 1: ● Berechne die Prüfbits R i Schritt 2 ● Setze die Daten- und Prüfbits an die entsprechenden Bitpositionen im Codewort Hamming-Code: Decodierung Schritt 1 ● Überprüfen der Paritätsgleichungen ● Setze Testwert auf 0 i ● Für alle R : Ist R falsch, addiere 2 zum Testwert i i Schritt 2 ● Eventuell Korrektur vornehmen ● Ergibt sich ein Testwert von 0, war die Übertragung korrekt ● Ergibt sich ein Testwert ungleich 0, ist das Bit an der Position gekippt, welche dem Testwert entspricht, also invertiere dieses Bit Schritt 3 ● Extrahiere die Datenbits Beispiel Codieren Sie folgende Datenblöcke (D0, . . . ,D4) indem Sie die Redundanzbits (R0,... ,R3) berechnen und an den entsprechenden Positionen einfügen (Die Positionen 1 bis 9 geben Sie bitte wie in der Tabelle von links nach rechts an): 1) (01101) : 1) (D0, D1, D2, D3, D4) = ( 0 1 1 0 1) R0 = D0 ⊕ D1 ⊕ D3 ⊕ D4 R1 = D0 ⊕ D2 ⊕ D3 R2 = D1 ⊕ D2 ⊕ D3 R3 = D4 =0 =1 =0 =1 Bitposition 1 2 3 4 5 6 7 8 9 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 (Codewort) 0 1 0 0 1 1 0 1 1 27 1) (D0, D1, D2, D3, D4) = ( 0 1 1 0 1) Bitposition 1 2 3 4 5 6 7 8 9 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 x x 0 x 1 1 0 x 1 (Codewort) Pos:R3R2R1R0 01 0 1 =5 01 1 0 =6 10 0 1 =9 1 01 0 Bitposition 1 2 3 4 5 6 7 8 9 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 (Codewort) 0 1 0 0 1 1 0 1 1 Beispiel Decodieren Sie die folgende empfangenen Codewörter: 1) 111001000 : Aufgabe 13 2) ( 111001000 ) Bitposition 1 2 3 4 5 6 7 8 9 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 (Codewort) 1 1 1 0 0 1 0 0 0 R0 = D0 ⊕ D1 ⊕ D3 ⊕ D4 R1 = D0 ⊕ D2 ⊕ D3 R2 = D1 ⊕ D2 ⊕ D3 R3 = D4 =1 =0 =1 =0 richtig falsch falsch richtig gekipptes Bit: 01102 = 610⇒ ändere D2 von 1 auf 0. Nachricht (D0,D1,D2,D3,D4) = (10000) 30 1) ( 111001000 ) Bitposition 1 2 3 4 5 6 7 8 9 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 (Codewort) 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1=1 0=2 1=3 0=6 0 ← falsch → 610 → D2 => 0 Nachricht (D0,D1,D2,D3,D4) = (10000) 2) ( 111001000 ) Bitposition 1 2 3 4 5 6 7 8 9 Inhalt R0 R1 D0 R2 D1 D2 D3 R3 D4 (Codewort) 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1=1 0=2 1=3 0 ← korrekt Nachricht (D0,D1,D2,D3,D4) = (10000) Bitfolgen interpretiert als Polynome Beispiel: 10011010 entspricht dem Polynom : M(x) = 1 x7 + 0 x6 + 0 x5 + 1 x4 + 1 x3 + 0 x2 + 1 x1 + 0 x0 = x7 + x4 + x3 + x1 polynomielle Arithmetik modulo 2 ● Koeffizienten entweder 0 oder 1 ● kein Übertrag zu berücksichtigen ● Addition und Subtraktion identisch, XOR Wollen wir eine Bitfolge M(x) angereichert mit CRC-Information übertragen, senden wir eine um k Bits verlängerte Bitfolge M'(x), welche ohne Rest durch C(x) teilbar ist. 1. Multipliziere M(x) mit xk, d.h. hänge k Nullen an M(x) an. Sei T (x) dieses Produkt. 2. Teile T (x) durch C(x) und berechne den Rest R(x). 3. Subtrahiere den Rest R(x) von T (x). Das Ergebnis ist das gesuchte M'(x). Was wird also übertragen, wenn gilt: 1) M (x) = 1 0 0 1 1 0 1 0 C (x) = 1 1 0 1 M' (x) = ? 1) Was wird also übertragen, wenn gilt: M(x) = 1 0 0 1 1 0 1 0 und C(x) = 1 1 0 1 = 1∙x3 + 1∙x2 +0∙x1 +1∙x0 => x3+x2+x0 C(x) ist vom Grad 3, also an M(x) 3 Nullen anhängen. => T(x) = 1 0 0 1 1 0 1 0 0 0 0 T (x) : 1 0 0 1 1 0 1 0 0 0 0 C (x) : 1 1 0 1 1 0 0 1 1 0 1 0 0 0 0 : 1 1 0 1 = 1 1 1 1 1 0 0 1← Quotient Q(x) 1101 1001 1101 1000 1101 1011 1101 1100 1101 1000 1101 1 0 1 ← Rest R (x) 1) M(x) = 1 0 0 1 1 0 1 0 und C(x) = 1 1 0 1 C(x) ist vom Grad 3, also an M(x) 3 Nullen anhängen. => T(x) = 1 0 0 1 1 0 1 0 0 0 0 R(x) = 1 0 1 => M'(x) = T(x) − R(x) = 1 0 0 1 1 0 1 0 0 0 0 − 1 0 1 M'(x) =10011010101 T (x) : 1 0 0 1 1 0 1 0 0 0 0 C (x) : 1 1 0 1 1 0 0 1 1 0 1 0 1 0 1 : 1 1 0 1 = 1 1 1 1 1 0 0 1 ← Q(x) 1101 1001 1101 1000 1101 1011 1101 1100 1101 1101 1101 0 ← R (x) Welche Fehler können mit CRC erkannt werden? ● ● Alle Einzelbitfehler, solange die Terme xk und x0 Koeffizienten ungleich Null haben. Alle Doppelbitfehler, solange C(x) einen Faktor mit mindestens drei Termen hat. ● Jede ungerade Fehlerzahl, solange C(x) den Faktor (x + 1) enthält. ● Jeden Burstfehler, bei denen die Burstlänge weniger als k Bit beträgt. Leichte Hardware-Implementation mittels Master-Slave Flip-Flops und XOR-Gattern ● XOR-Gatter vor Bit n, wenn im Generator der Term xn enthalten ist ● Nachricht bitweise einschieben ● Rest steht zum Schluß in Master-Slave-Flip-Flops ● Anzahl Flip-Flops : → Anzahl Bits - 1, XOR-Gatter () : → vor jedem Term xn (Anzahl Einsen - 1) ● Beispiel: Generator x5 x4 x2 x0 (110101) ● Es werden 5 Flip-Flops und 3 XOR Gatter benötigt.