BCH-Code
BCH-Codes (Bose-Chaudhuri-Hocquenghem-Codes) sind zyklische fehlerkorrigierende Codes, welche in der digitalen Signalverarbeitung und Datenspeicherung eingesetzt werden. Der Name BCH ergibt sich aus den Anfangsbuchstaben der drei Wissenschaftler, die diesen Code entwickelt haben: R. C. Bose, D. K. Ray-Chaudhuri und A. Hocquenghem (1908–1990). BCH-Codes korrigieren mehrere 1-Bit-Fehler in einem längeren Nutzer-Datenwort.
Definition
Sei Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \beta} eine primitive -te Einheitswurzel in einem Erweiterungskörper des endlichen Körpers Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \mathbb F_q} . Seien Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle l,\delta \in \mathbb{N}} , , und C der zyklische Code, dessen Generatorpolynom das Produkt der verschiedenen Minimalpolynome von Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \beta^l, \dots, \beta^{l+\delta-2}} ist. (Dann besteht C also aus allen Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle f \in \mathbb F_q[x]/(x^n-1)} mit Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle f(\beta ^{l})=\dots =f(\beta ^{l+\delta -2})=0} ), dann nennt man C einen BCH-Code mit geplantem Minimalabstand Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \delta} , wobei C den Minimalabstand Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle d\geq \delta } hat.
Für den Fall Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle l = 1} spricht man von einem BCH-Code im gewöhnlichen Sinn.
Falls ein m existiert mit Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n = q^m - 1} (d. h. Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \beta} ist ein Erzeuger der multiplikativen Gruppe eines Körpers Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \mathbb F_{q^m}} ), so spricht man von einem primitiven BCH-Code.
Ein Reed-Solomon-Code ist ein primitiver BCH-Code im gewöhnlichen Sinn, für den gilt. Hier sind die Minimalpolynome also von der Form Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle x-\beta^i \in \mathbb F_q[x], i=1\ldots\delta-1} .
Einsatzbereiche
- Die sogenannten Reed-Solomon-Codes sind spezielle BCH-Codes und werden z. B. zur Fehlerkorrektur auf Audio-CDs eingesetzt.
- Der BCH-Code wird auch bei der Sicherung der TPS-Daten im DVB-T-Standard genutzt.
- Die Funkruf-Protokolle POCSAG und FLEX verwenden den BCH(31,21)-Code
BCH(15, 7, 5)
Als Beispiel sei ein Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle (n = 15, k = 7, d_{min} = 5)} BCH-Code gegeben. Die Parameter Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n, k, d_{min}} sind dabei wie folgt zu interpretieren. Der Code erzeugt Codewörter mit einer Länge von Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n = 15} Bits, wovon Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle k = 7} Bits die kodierte Information enthalten und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n -k} Bits Redundanz zur Korrektur von Übertragungsfehlern dienen. Der Parameter Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle d_{min}} gibt die minimale Hammingsdistanz des Codes an.
Es gilt: Es können Übertragungsfehler von bis zu Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle d_\mathrm{min} - 1} Einzelbitfehlern erkannt werden, es können Übertragungsfehler von bis zu Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle (d_\mathrm{min} - 1) / 2} Einzelbitfehlern korrigiert werden. Bündelfehler von bis zu Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle f_\mathrm{b} \le k} Bits werden erkannt.
Ein BCH-Code wird in der Regel durch sein Generatorpolynom beschrieben. Im gegebenen Beispiel lautet das Generatorpolynom . Die Anzahl der Prüfbits n-k lässt sich übrigens immer aus dem Generatorpolynom ablesen. Es gilt Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle n-k = \operatorname{Grad}(g)} .
Für die Dimension des Codes gilt: Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \dim C = n-\operatorname{Grad}(g) = 15-8 = 7 = k} .
Kodieren
Zum Kodieren mit BCH-Kodes können das Multiplikations- oder das Divisionsverfahren verwendet werden.
Multiplikationsverfahren
Beim Multiplikationsverfahren wird das zu kodierende Quellkodewort aus Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle l=7} Bits einfach mit dem Generatorpolynom des BCH-Codes multipliziert. Es gilt: Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a(x) = a^*(x) \cdot g(x)} . Dabei steht Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a(x)} für das kodierte Kanalkodewort, Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a^*(x)} steht für das unkodierte Quellkodewort. Die Multiplikation kann sowohl mit Polynomen als auch mit einer binären Darstellung der Polynome durchgeführt werden.
Hier wollen wir ein Beispiel in binärer Darstellung durchrechnen:
Das gegebene Generatorpolynom lässt sich binär als die Folge darstellen (die Folge ist dabei zu interpretieren als Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle g(x) = 1 \cdot x^8 + 1 \cdot x^7 + 1 \cdot x^6 + 0 \cdot x^5 + 1 \cdot x^4 + 0 \cdot x^3 + 0 \cdot x^2 + 0 \cdot x^1 + 1 \cdot x^0} ).
Als zu kodierendes Quellkodewort dient in unserem Beispiel Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle a^{*}=1001011} bzw. Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a^*(x) = 1 \cdot x^6 + 0 \cdot x^5 + 0 \cdot x^4 + 1 \cdot x^3 + 0 \cdot x^2 + 1 \cdot x^1 + 1 \cdot x^0} .
Um das kodierte Kanalkodewort zu erhalten, müssen wir jetzt also einfach Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a^*} mit Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle g} multiplizieren:
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a = a^* \cdot g = 1001011 \cdot 111010001 = 111100010111011}
Divisionsverfahren
Das Divisionsverfahren ermöglicht es zu einem gegebenen Quellkodewort genau jenes Kanalkodewort zu ermitteln, welches das gegebene Quellkodewort als Präfix hat, weswegen man sagt, das Verfahren liefert einen systematischen Kode. Für ein gegebenes Generatorpolynom Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle g } und ein Quellkodewort Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a^* } errechnet man das zugehörige Kanalkodewort Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a } nach Divisionsverfahren wie folgt:
Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a := a^* \cdot x^k - \left( a^* \cdot x^k \right) \bmod g }
Das heißt, man muss den Rest der Polynom-Division Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \left( a^* \cdot x^k \right) : g } ermitteln und diesen von Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a^* \cdot x^k } subtrahieren. Am Beispiel von oben:
Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle {\begin{array}{ccccc}g&=&x^{8}+x^{7}+x^{6}+x^{4}+1&{\mathrel {\widehat {=}}}&111010001\\a^{*}&=&x^{6}+x^{3}+x+1&{\mathrel {\widehat {=}}}&1001011\\a^{*}\cdot x^{k}&=&x^{14}+x^{11}+x^{9}+x^{8}&{\mathrel {\widehat {=}}}&100101100000000\end{array}}}
Die Division in Koeffizienten-Schreibweise lautet dann:
100101100000000 : 111010001 = 1100111 111111010 001010110 010101100 101011000 100010010 110000110 -------- 01010111
Damit gilt Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle a=100101100000000-01010111=\underbrace {1001011} _{a^{*}}01010111}
.
Dekodieren
Die Dekodierung kann mittels verschiedener Verfahren nach folgendem Muster erfolgen:
- Bestimmung des Syndromwertes (Divisionsrest), indem das empfangene Kanalkodewort Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a(x)} durch das Generatorpolynom Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle g(x)} dividiert wird. Ist der Rest ungleich 0 liegen ein oder mehrere Fehler vor.
- Bestimmen des Fehlerpolynoms.
- Bestimmung der Nullstellen des Fehlerpolynoms zur Ermittlung der Fehlerpositionen im Codewort.
- Bestimmung der Fehlerwerte
Übliche Algorithmen zur Dekodierung von BCH-Codes sind der Berlekamp-Massey-Algorithmus oder der Peterson-Gorenstein-Zierler-Algorithmus.
Beispiel
Wenn das Codewort vom obigen Beispiel ohne Fehler übertragen wird, bleibt als Rest der Division Null. Die Division in Koeffizienten-Schreibweise lautet dann:
<!-- Berechnungen können hier nachgerechnet werden: http://www.flechtmann.net/crc/index.php --> 100101101010111 : 111010001 = 1100111 111010001 001010011 010100110 111010001 100111001 111010001 -------- '''00000000'''
Würde das Codewort während der Übertragung verfälscht, beispielsweise zu 101101011010111 (Stellen 3, 7 und 8), ergibt sich nach der Polynomdivision ein von 0 verschiedenes Fehlersyndrom:
101101011010111 : 111010001 = 1111100 101110100 101001011 100110100 111001011 000110101 001101011 -------- '''01101001'''
Literatur
- Shu Lin, Daniel J. Costello: Error Control Coding. Fundamentals and applications. 2. Auflage. Prentice Hall, Upper Saddle River NJ 2004, ISBN 0-13-042672-5.
- Robert H. Morelos-Zaragoza: The Art of Error Correcting Coding. 2. Auflage. Wiley, New York NY 2006, ISBN 0-470-01558-6.