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 langeren Nutzer-Datenwort.
Sei
eine primitive
-te
Einheitswurzel
in einem
Erweiterungskorper
des
endlichen Korpers
. Seien
,
, und C der zyklische Code, dessen
Generatorpolynom
das Produkt der verschiedenen
Minimalpolynome
von
ist. (Dann besteht C also aus allen
mit
), dann nennt man C einen
BCH-Code
mit
geplantem Minimalabstand
, wobei C den Minimalabstand
hat.
Fur den Fall
spricht man von einem BCH-Code im
gewohnlichen Sinn
.
Falls ein m existiert mit
(d. h.
ist ein Erzeuger der multiplikativen Gruppe eines Korpers
), so spricht man von einem
primitiven
BCH-Code.
Ein
Reed-Solomon-Code
ist ein primitiver BCH-Code im gewohnlichen Sinn, fur den
gilt. Hier sind die Minimalpolynome also von der Form
.
- 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.
- Der BCH-Code wird zur Sicherung der Nutzdaten in den DVB-S-Standards genutzt. Die Daten werden zunachst BCH-, dann LDPC-kodiert. Der BCH korrigiert hierbei die Restfehlerbits, die nach der LDPC-Korrektur verbleiben konnen.
- Die Funkruf-Protokolle
POCSAG
und
FLEX
verwenden den BCH(31,21)-Code
Als Beispiel sei ein
BCH-Code gegeben. Die Parameter
sind dabei wie folgt zu interpretieren. Der Code erzeugt Codeworter mit einer Lange von
Bits
, wovon
Bits die kodierte Information enthalten und
Bits Redundanz zur Korrektur von Ubertragungsfehlern dienen. Der Parameter
gibt die minimale Hammingsdistanz des Codes an.
Es gilt: Es konnen Ubertragungsfehler von bis zu
Einzelbitfehlern erkannt werden, es konnen Ubertragungsfehler von bis zu
Einzelbitfehlern korrigiert werden. Bundelfehler von bis zu
Bits
werden erkannt.
Ein BCH-Code wird in der Regel durch sein Generatorpolynom beschrieben. Im gegebenen Beispiel lautet das Generatorpolynom
. Die Anzahl der Prufbits
lasst sich ubrigens immer aus dem Generatorpolynom ablesen. Es gilt
.
Fur die Dimension des Codes gilt:
.
Zum Kodieren mit BCH-Kodes konnen das Multiplikations- oder das Divisionsverfahren verwendet werden.
Beim Multiplikationsverfahren wird das zu kodierende Quellkodewort aus
Bits
einfach mit dem Generatorpolynom des BCH-Codes multipliziert. Es gilt:
. Dabei steht
fur das kodierte Kanalkodewort,
steht fur das unkodierte Quellkodewort. Die Multiplikation kann sowohl mit Polynomen als auch mit einer binaren Darstellung der Polynome durchgefuhrt werden.
Hier wollen wir ein Beispiel in binarer Darstellung durchrechnen:
Das gegebene Generatorpolynom
lasst sich binar als die Folge
darstellen (die Folge ist dabei zu interpretieren als
).
Als zu kodierendes Quellkodewort dient in unserem Beispiel
bzw.
.
Um das kodierte Kanalkodewort zu erhalten, mussen wir jetzt also einfach
mit
multiplizieren:
Das Divisionsverfahren ermoglicht es zu einem gegebenen Quellkodewort genau jenes Kanalkodewort zu ermitteln, welches das gegebene Quellkodewort als Prafix hat, weswegen man sagt, das Verfahren liefert einen systematischen Kode. Fur ein gegebenes Generatorpolynom
und ein Quellkodewort
errechnet man das zugehorige Kanalkodewort
nach Divisionsverfahren wie folgt:
Das heißt, man muss den Rest der Polynom-Division
ermitteln und diesen von
subtrahieren. Am Beispiel von oben:
Die Division in Koeffizienten-Schreibweise lautet dann:
100101100000000 : 111010001 = 1100111
111111010
001010110
010101100
101011000
100010010
110000110
--------
01010111
Damit gilt
.
Die Dekodierung kann mittels verschiedener Verfahren nach folgendem Muster erfolgen:
- Bestimmung des Syndromwertes (Divisionsrest), indem das empfangene Kanalkodewort
durch das Generatorpolynom
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
Ubliche Algorithmen zur Dekodierung von BCH-Codes sind der
Berlekamp-Massey-Algorithmus
oder der
Peterson-Gorenstein-Zierler-Algorithmus
.
Wenn das Codewort vom obigen Beispiel ohne Fehler ubertragen wird, bleibt als Rest der Division
Null. Die Division in Koeffizienten-Schreibweise lautet dann:
<!-- Berechnungen konnen hier nachgerechnet werden: http://www.flechtmann.net/crc/index.php -->
100101101010111 : 111010001 = 1100111
111010001
001010011
010100110
111010001
100111001
111010001
--------
'''00000000'''
Wurde das Codewort wahrend der Ubertragung verfalscht, beispielsweise zu 10
1
101
01
1010111 (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'''
- 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
.