Algorithmensammlung Codierungstheorie von Alfred Franz und Hauke Hund Sommersemester 2007 Inhaltsverzeichnis Hamming-Code.................................................................................................................................... 2 Codewort überprüfen und ggf. korrigieren...................................................................................... 2 BCH-Code............................................................................................................................................ 2 Einen BCH-Code mit gegebenem e und G1(u) erzeugen................................................................2 Zu gegebenen Nachrichtenstellen die Kontrollstellen berechenen..................................................2 Abramsen-Code.................................................................................................................................... 3 Überprüfen ob ein Codewort richtig ist........................................................................................... 3 Ein Codewort mit Fehler korrigieren...............................................................................................3 Fire-Code.............................................................................................................................................. 3 Fire-Code anhand von G1(u) bestimmen.........................................................................................3 Codewort überprüfen....................................................................................................................... 3 Codewort korrigieren.......................................................................................................................3 Reduziblität von G(u)........................................................................................................................... 4 Primitivität von G(u)............................................................................................................................ 4 Zyklische Eigenschaften von G(u) bestimmen.....................................................................................5 Beispiel: .......................................................................................................................................... 5 Schieberegisterverfahren...................................................................................................................... 6 Generatorworte erstellen...................................................................................................................... 7 Matrix-Verfahren..................................................................................................................................8 Huffman-Code...................................................................................................................................... 8 Fano-Shannon-Code............................................................................................................................. 9 1 Hamming-Code (Ein Hamming-Code erkennt und korrigiert 1-Bit-Fehler) - Zuerst die Eigenschaften des Hamming-Codes anhand von G(u) bestimmen: • Grad k (Kontrollstellen) • Codewortlänge n = 2^k – 1 • Nachrichtenstellen m = n – k • G(u) - Dann kann anhand der Stellen die komplette Bitfolge erstellt werden. Codewort überprüfen und ggf. korrigieren - Um zu testen ob es sich um ein Codewort handelt muß das Codewort durch G(u) geteilt werden: Wenn kein Rest (Fehlersyndorm) rauskommt ist die Bitfolge ein Codewort. - Wenn kein Codewort => Korrektur z.B. mit rückgekoppeltem Schieberegister (Verfahren): 1. RS0 bestimmen: Das Fehlersyndrom + k Nullen durch G(u) teilen 2. Ein Schieberegister (Bauart G(u)) mit RS0 füttern und so lange takten bis 1 0 ... 0 (1-Bit-Fehler) herauskommt. Handelt es sich um einen 1-Bit-Fehler zeigt die Anzahl der Takte die Position des Fehlers an (z.B. 5ter Takt = Fehler an Bit 5). BCH-Code Einen BCH-Code mit gegebenem e und G1(u) erzeugen n von G(u): k von G(u) für e = 2: k von G(u) für e = i: m: Schritt (1): Schritt (2): Schritt (3): für e = 2: für e = 3: usw. n=2 k1−1 k =k1k2 k =k1k2...ki m=n−k (Gesamtlänge des Codeworts) (Anzahl der Kontrollstellen) (Gesamtlänge des Codes) Galois-Feld aufstellen. G2(u) mit Hilfe von a2 aufstellen. ggf. auch G3(u), usw. G(u) = G1(u) * G2(u) G(u) = G1(u) * G2(u) * G3(u) Zu gegebenen Nachrichtenstellen die Kontrollstellen berechenen (Divisionsverfahren) ● Die Nachrichtenstellen mit Nullen zu voller Nachrichtenlänge auffüllen und das Ergebnis durch G(u) teilen. Der Rest sind die Nachrichtenstellen. 2 Abramsen-Code (Ein Abramsen-Code erkennt und korrigiert 1-Bit-Fehler, und kann benachbarte 2-Bit-Fehler erkennen) Zuerst die Eigenschaften des Codes bestimmen: • • • • G(u) = G1(u) · (u + 1) Kontrollstellen k = grad(G(u)) Codewortlänge n = 2k−1 − 1 Nachrichtenstellen m = n − k Überprüfen ob ein Codewort richtig ist Das Codewört durch G(u) teilen: Bleibt kein Rest übrig ist es ein Codewort. Bleibt ein Rest übrig ist es kein Codwort, den Rest nennt man Fehlersyndrom. Ein Codewort mit Fehler korrigieren Eine Möglichkeit ist das Schieberegisterverfahren (siehe eigenes Kapitel) Fire-Code Fire-Code anhand von G1(u) bestimmen k = grad(G(u)) n = kgV ( 2 k1−1 , k2) (Bsp.: kgV (15 , 5) = 15) m= n-k G u=G 1 u ⋅u k2 1 k2 bestimmen: k1 = grad(G1(u)) Bedingung: b <= k1 k2 > 2b - 2 (Kontrollstellen) (Codewortlänge) (Nachrichtenstellen) (b gegeben) (k2 kann gewählt werden) Codewort überprüfen Codewort durch G(u) teilen. Kommt Rest 0 raus ist es ein Codewort, sonst nicht. Codewort korrigieren geht z.B. mit dem Schieberegisterverfahren => siehe Kapitel Schieberegisterverfahren 3 Reduzierbarkeit von G(u) G(u) ist reduzibel wenn teilbar durch (u) oder (u+1). ● u=1 ● u + 1 = 11 Primitivität von G(u) entweder: aus Liste ablesen, Liste irreduzibler Polynome: oder: - Grad des Polynoms g bestimmen - Periode des Polynoms p bestimmen g = grad(G(u)) p bestimmt man wie folgt: Die Periode p eines Polynoms G(u) ist der kleinste Wert p, für den gilt: das Polynom u p 1 ist ohne Rest durch G(u) teilbar. Für reduzible Polynome beginnt man mit p=g, für irreduzible Polynome beginnt man mit p=1. Wenn die Teilung einen Rest ergibt erhöht man das p jeweils um 1. - Das Polynom G(u) ist primitiv wenn gilt: 2 g −1= p 4 Zyklische Eigenschaften von G(u) bestimmen - Das normale Golois-Feld aufstellen - Alle Kombination, die da noch nicht vorkamen einzeln betrachen. - aufmalen, auch die Kombinationen die nur auf einen Zyklus abbilden Beispiel: Zyklische Eigenschaften von M(u) = u4 + u2 + u = 10110 5 Schieberegisterverfahren - zuerst RS0 bestimmen: Den Rest aus der Division Codewort : G(u) nehmen, mit k Nullen auffüllen und nochmals durch G(u) teilen. Der rauskommende Rest ist RS0 (Startwert des Schieberegisters). - Aus G(u) ein Schieberegister bauen. Beispiel: - Schieberegister Schritt für Schritt ausführen, bis 100.... oder 11000.... ausführen. Aber nie mehr Durchläufe als Stellen im Codewort! 100.... zeigt 1-Bitfehler an. In diesem Fall ist die Anzahl der Durchläufe gibt die Stelle des Fehlers an. (z.B. RS=11 (bei RS0 begonnen), dann ist das 12te Bit falsch.) 1100.... zeigt 2-Bitfehler an. Je nach Code evtl. keine Korrektur möglich. Beim Abramsen-Code: Das fehlerhafte Codewort durch 11 teilen, wenn kein Rest rauskommt handelt es sich tatsächlich um einen 2-Bit-Fehler, sonst ist keine Aussage möglich (kein korrigier oder erkennbarer Fehler) 6 Generatorworte erstellen Abbildung 1: Beispiel Generatorworte erstellen 7 Matrix-Verfahren Abbildung 2: Veranschaulichung Matrix-Verfahren - Galois-Feld kippen, dann hat man die Matrix. Zum kontrollieren und korrigieren ein Codewort darüber schreiben und nach dem Verfahren in Abbildung 1 durchrechnen. - Zum Erstellen der Kontrollstellen die Nachrichtenstellen mit Nullern ergänzen und ebenfalls Durchrechnen, das Ergebnis sind, begonnen mit der obersten Zahl die Nachrichtenstellen. Huffman-Code Abbildung 3: Beispiel zum Huffman Code Schritt 1: Schritt 2: nach der Häufigkeit nach sortieren die beiden kleinsten zusammenfassen und die Summe wieder einsortieren, den beiden 0 und 1 zuordnen (siehe Beispiel) solange wiederholen, bis alles abgearbeitet ist 8 Fano-Shannon-Code Schritt 1: Schritt 2: Schritt 3: Der Häufigkeit nach sortieren Das Feld so teilen, dass die Differenz der Summen der Häufigkeiten oberhalb und unterhalb des Strichs möglichst gering ist. (Oben und unten sollten möglichst ähnliche Häufigkeitssummen stehen.) Oben 0, unten 1 zuweisen. => Für beide Teile wieder bei Schritt 1 beginnen, bis es nur noch einzelne Häufigkeiten gibt. Abbildung 4: Beispiel zum Fano-Shannon-Code 9
© Copyright 2024 ExpyDoc