Low-Density-Parity-Check-Code

Codierung , die Fehler-Korrekturen unterstützt

Low-Density-Parity-Check-Codes, auch als LDPC oder Gallager-Codes bezeichnet, sind lineare Blockcodes zur Vorwärtsfehlerkorrektur. Sie wurden 1962 von Robert Gray Gallager im Rahmen seiner Dissertation am MIT entwickelt[1][2].

Low-Density-Parity-Check-Codes beschreiben mit Hilfe einer Matrix viele zusammenhängende Paritätsprüfungen. Es wird dabei das Prinzip einer Kontrollmatrix angewandt: , wobei die Kontrollmatrix (parity-check matrix) und die Folge der empfangenen Codesymbole (repräsentiert als Zeilenvektor) darstellt. H ist nur dünn besetzt (daher die Bezeichnung low-density).

Nachdem sie lange vergessen waren, erlebten sie eine Renaissance, als Rüdiger Urbanke und Thomas J. Richardson 2001 zeigten, dass sie nahe der Shannon-Grenze operieren konnten und als irreguläre LDPC effizient implementiert werden konnten. Zu den irregulären LDPC gehören die Tornado Codes für Erasure Coding (Michael Luby, Michael Mitzenmacher, Daniel A. Spielman, Amin Shokrollahi 2001).

Notation Bearbeiten

 

  •   = Codewortlänge
  •   = Anzahl der Paritätsbits
  •   = Anzahl an Informationsstellen
  •   = Coderate

Begriffsdefinition Bearbeiten

  •   oder   Quellcodewort (Infowort)
  •   redundanter Teil des Kanalcodewortes
  •   Kanalcodewort
  •   Empfangsfolge
  •   Kontrollmatrix

Reguläre und nicht reguläre Codes Bearbeiten

Wichtige Kennzeichen des LDPC-Codes sind die Anzahl der 1-Bits pro Zeile ( ) sowie die 1-Bits pro Spalte ( ) in der Kontrollmatrix  . Für diese Kennzeichen gilt:

  sowie  

Ist   konstant für alle Zeilen und   konstant für alle Spalten von  , so wird dieser Code regulär genannt.

Für einen regulären LDPC-Code gilt  .

Variiert die Anzahl der Einsen, handelt es sich um einen irregulären Code. Typischerweise sind irreguläre LDPC-Code leistungsfähiger als reguläre.

Codierung Bearbeiten

Es gilt eine zu sendende Folge   zu finden, die der Gleichung   genügt.

Eine mögliche Form der Codierung funktioniert folgendermaßen: Das Kanalcodewort   ist zusammengesetzt aus den zu sendenden Daten   (welche bekannt sind) und dem redundanten Teil  . Da   oben genannte Formel erfüllen muss, muss   entsprechend berechnet werden:

  • Sei   und  
  • Es soll gelten:  
  • Dies kann umgeformt werden:  
  • Daraus ergibt sich  

In Worten ausgedrückt muss dabei der invertierte quadratische – der erste – Teil Hk der Kontrollmatrix mit dem verbleibenden Rest Hl der Kontrollmatrix und den zu sendenden Daten al multipliziert werden.

Decodierung Bearbeiten

Hierbei gilt es ebenso, das Problem   zu lösen. Hierzu werden häufig iterative Graph-basierte Algorithmen gewählt. Nach der Übertragung des Kanalcodewortes   über einen Übertragungskanal, z. B. einen AWGN-Kanal (additives weißes gaußsches Rauschen), wird in der Regel das Wort  , bestehend aus reellen Werten, empfangen. Aus diesen wird, im Regelfall mit Hilfe eines iterativen Verfahrens, eine Näherungslösung berechnet. Durch die Gleichungsmatrix H werden N Gleichungen vorgegeben; jede dieser Gleichungen erlaubt es, unabhängige Informationen zu den enthaltenen Elementen zu berechnen. Nun werden diese Informationen in den anderen Gleichungsberechnungen wiederverwendet. Zu beachten ist dabei, dass die Informationen, die mit einer Gleichung berechnet wurden, in der nächsten Iteration vor der erneuten Berechnung entfernt werden müssen.

Konstruktion von LDPC-Codes Bearbeiten

LDPC-Codes werden durch ihre Kontrollmatrix H beschrieben. Einen LDPC-Code zu entwickeln heißt also, eine geeignete Kontrollmatrix zu finden oder zu konstruieren. Die zum Erstellen von Codewörtern benötigte Generatormatrix G kann mit Hilfe des Gauß-Jordan Verfahrens aus H hergeleitet werden. Zur Generierung von Kontrollmatrizen eignen sich u. a. die folgenden Verfahren, welche teilweise darauf basieren, die Kontrollmatrix als Tanner-Graph[3] zu versinnbildlichen und diesen unter Zuhilfenahme verschiedener Algorithmen zu bearbeiten:

Um die Anzahl der in der Matrix vorkommenden Einsen verhältnismäßig gering zu halten, können auch noch sogenannte Row Splitting und Column Splitting Algorithmen eingesetzt werden.[7]

Im LDPC-Code können die Paritätsprüfungen als dünnbesetzte Paritätsprüfmatrix mit   Spalten und   Zeilen ausgedrückt werden. Das heißt, dass die Anzahl der Elemente 1 viel geringer ist als die Anzahl der Elemente 0. Es gibt drei Parameter, die die dünnbesetzte Paritätsprüfungsmatrix definieren, nämlich  ,   und  . Dort ist   die Länge des Codeworts,   die Anzahl der Elemente 1 in jeder Spalte und   die Anzahl der Elemente 1 in jeder Zeile. Damit die Matrix als dünnbesetzt bezeichnet wird, muss   und   gelten. Damit diese Bedingungen erfüllt sind, muss die Paritätsprüfmatrix sehr groß sein.

Es gibt reguläre und irreguläre Paritätsprüfungsmatrixen. Eine Paritätsprüfungsmatrix ist regelmäßig, wenn die Anzahl   der Elemente 1 in jeder Spalte und die Anzahl   der Elemente 1 in jeder Zeile gleich ist. Wenn diese Anzahlen nicht gleich sind, ist die Paritätsprüfungsmatrix irregulär. Für reguläre Matrizen ist die Dekodierung weniger komplex.

Jede Spalte der Matrix   repräsentiert einen Bitknoten und jede Zeile der Matrix   repräsentiert einen Kontrollknoten. Bitknoten geben die Elemente des Codesworts an. Kontrollknoten geben die Bedingungen der Paritätsprüfung an. Jede 1 zeigt an, dass es eine Verbindung (Kante) zwischen dem Bitknoten und dem Kontrollknoten gibt. Ein Beispiel Paritätsprüfungsmatrix mit  ,   und   ist[8]

 

Tanner-Graphen Bearbeiten

LDPC-Codes können auch mit bipartiten Graphen dargestellt werden. Weil bei LDPC-Codes nur sehr wenige Bits beteiligt sind, ergibt sich auf diese Weise eine einfache und elegante Darstellung, die sogenannten Tanner-Graphen. Dabei werden die Elemente der zwei Mengen in unterschiedliche Klassen von Knoten eingeteilt, wobei Verbindungen nur Knoten aus unterschiedlichen Klassen mit Kanten verbunden werden. Diese zwei Klassen von Knoten werden in einem Tanner-Graph als Bitknoten und Kontrollknoten bezeichnet. Von einem Kontrollknoten führen Kanten, entsprechend der zugehörigen Prüfgleichung, zu allen Bitknoten.

Jeder Bitknoten repräsentiert also eine Bitstelle im Codewort, während jeder Kontrollknoten für eine Paritätsgleichung steht. Die Verbindung eines Knotens im Tanner-Graph mit einem beliebigen anderen Knoten wird Kante genannt. Mehrere Kanten können einen Pfad in einem Tanner-Graph bilden, welcher auf sich zurückführt. Solche Knoten- bzw. Kantenfolgen, die wieder zum Ausgangspunkt zurückführen, werden als Zyklus bezeichnet. Die Länge des kürzesten Zyklus im Tanner-Graph ist die Taillenweite. Bedingt durch den Aufbau des Tanner-Graph ist die Taillenweite immer gerade und mindestens gleich 4. Generell aber gilt, dass sich kurze Zyklen negativ auf den iterativen Decodierungsprozess auswirken. Daher sollten kurze Zyklen vermieden werden.[9]

Praktischer Einsatz von LDPC-Codes Bearbeiten

LDPC-Codes werden in unterschiedlichen Gebieten der Technik angewendet. In der Regel werden sie verkettet eingesetzt. So dienen LDPC-Codes beispielsweise zur fehlerkorrigierenden Datenübertragung von digitalen Fernsehsignalen nach DVB-S2 und bei Digital Terrestrial Multimedia Broadcast (DTMB). Neben neueren WLAN-Standards wie dem IEEE 802.11n[10] („n-WLAN“ oder „n-Draft WLAN“) implementiert auch der WLAN-ähnliche Standard 802.16e[11] (Wimax) LDPC-Codes. Weitere Standards sind GMR-1, IEEE 802.3an, IEEE 802.22, CMMB, sowie WiMedia 1.5.[12]

Im Amateurfunkdienst werden LDPC-Codes angewendet in den Übertragungsprotokollen FT8 und FT4 zur Fehlerkorrektur der Datenübertragung in Kombination mit einer zyklischen Redundanzprüfung (CRC) zur Fehlererkennung.

Literatur Bearbeiten

  • Robert G. Gallager: Low-Density Parity-Check Codes. M.I.T. Press Classic Series, Cambridge MA, 1963 (M.I.T. Press research monographs 21, ZDB-ID 597839-7), (andere Fassung; PDF; 655 kB).
  • David J. C. MacKay: Information theory, inference and learning algorithms. Cambridge University Press, Cambridge u. a. 2003, ISBN 0-521-64298-1 (auch online verfügbar).
  • Todd K. Moon: Error Correction Coding. Mathematical Methods and Algorithms. Wiley-Interscience, Hoboken NJ, 2005, ISBN 0-471-64800-0.
  • Amin Shokrollahi: LDPC Codes: An Introduction. In: Keqin Feng u. a. (Hrsg.): Coding, cryptography and combinatorics. Birkhäuser, Basel u. a. 2004, ISBN 3-7643-2429-5, S. 85–112 (Progress in computer science and applied logic 23), (PDF).

Einzelnachweise Bearbeiten

  1. Robert G. Gallager: Low-Density Parity-Check Codes. (Memento vom 16. März 2007 im Internet Archive) (PDF; 1,1 MB) in IRE Transactions on Information Theory, Seiten 21 bis 28, 1962
  2. Robert G. Gallager: Low-Density Parity-Check Codes. – 1963
  3. Jian Sun: An Introduction to Low Density Parity Check (LDPC) Codes (Memento vom 13. Januar 2012 im Internet Archive)
  4. Alex Balatsoukas-Stimming: The Progressive Edge Growth Algorithm (Memento vom 30. Oktober 2012 im Internet Archive) (PDF; 261 kB)
  5. David MacKay: C – Implementierung des PEG Algorithmus für LDPC Codes
  6. Design and Implementation of LDPC Codes (PDF; 255 kB)
  7. a b Design of LDPC Codes (PDF; 563 kB)
  8. Saumya Borwankar, Dhruv Shah, Institute of technology, Nirma University: Low Density Parity Check Code (LDPC Codes) Overview
  9. Michael Petter, Technische Universität Graz: Untersuchung und Simulation von Low-Density Parity-Check-Codes
  10. IEEE: IEEE Standard 802.11n (Memento vom 3. Februar 2013 im Internet Archive)
  11. IEEE: IEEE Standard 802.16e
  12. Liste standardisierter LDPC-Codes mit Eigenschaften und Erklärungen