Campus Flensburg

Informatik in Flensburg studieren...

 

Neues Studienangebot

Web- und Softwaretechnologie

 

Wir bieten Ihnen ein praxis­orientiertes Informatik-Studium mit Schwerpunkt auf modernsten Webtechnologien.

Sehen Sie sich einmal den Studienplan an.

 

Ihr Abschluss
nach 7 Semestern:
Bachelor of Science

 

Weitere Informatik-Studienangebote an der Fachhochschule Flensburg:

MedieninformatikMedieninformatik

Informations- und Kommunikationstechnik

Wirtschaftsinformatik

 

 

Codierungstheorie

CRC-Verfahren

 Inhalt  aufwärts

Bei der Speicherung und Übertragung von binär dargestellten Daten können durch Störungen einzelne Bits verfälscht werden. Um derartige Fehler zu erkennen, werden an die Daten Prüfbits angehängt.

Das einfachste Mittel zur Erkennung von Fehlern bei der Übertragung von Wörtern aus boolesche Menge+ ist das Anhängen eines Paritätsbits. Dies entspricht einer Codierung  c : boolesche Menge+ Pfeil boolesche Menge+    mit

c(x)  =   geschweifte Klammer
x0       falls x eine gerade Anzahl von Einsen enthält
x1    falls x eine ungerade Anzahl von Einsen enthält

für alle x Element boolesche Menge+.

Nach dem Anhängen des zusätzlichen Bits haben alle Codewörter gerade Parität, d.h. eine gerade Anzahl von Einsen. Wird ein Wort mit ungerader Parität empfangen, so muss bei der Übertragung ein Fehler aufgetreten sein (z.B. eine Verfälschung eines einzelnen Bits). Dieser Fehler wird auf diese Weise erkannt.

Wird dagegen ein Wort mit gerader Parität empfangen, so sind zwei Fälle möglich: entweder es handelt sich um ein fehlerfrei übertragenes Codewort, oder es ist ein Fehler aufgetreten, der aber die Parität nicht verändert hat (z.B. durch Verfälschung von zwei Bits). Ein solcher Fehler wird nicht erkannt.

Unter der Annahme, dass Fehler mit einer geraden bzw. ungeraden Anzahl von verfälschten Bits gleich wahrscheinlich sind, werden im Mittel durch diese Art der Codierung 50% aller Fehler erkannt (nämlich diejenigen, in denen eine ungerade Anzahl von Bits verfälscht ist, denn hierdurch wird die Parität verändert), und 50% aller Fehler werden nicht erkannt.

 

Durch Anhängen von mehr als nur einem Prüfbit lässt sich die Fehler­erkennungs­rate drastisch steigern. Das CRC-Verfahren stellt eine Methode dar, um diese Prüfbits zu erzeugen.1)

 

Algebraische Grundlagen

Auf der Menge boolesche Menge werden Verknüpfungen Exklusiv-Oder und · definiert; hierbei entspricht die Verknüpfung Exklusiv-Oder der Addition modulo 2 bzw. dem logischen Exklusiv-Oder, die Verknüpfung · entspricht der Multiplikation bzw. dem logischen Und.

Definition:  Verknüpfungen  Exklusiv-Oder  und  ·  in boolesche Menge

 

Exklusiv-Oder01
001
110
 
  · 01
000
101

Die Menge boolesche Menge bildet mit diesen Operationen einen Körper, d.h. eine mathematische Struktur, in der man nach den gewohnten Rechenregeln addieren, subtrahieren, multiplizieren und dividieren kann.

Im Folgenden betrachten wir Polynome über dem Körper (boolesche Menge, Exklusiv-Oder, ·).

Die Menge boolesche Menge[x] aller Polynome über boolesche Menge ist ein Ring, d.h. eine Struktur, in der man addieren, subtrahieren und multiplizieren kann (z.B. ist die Menge ganze Zahlen der ganzen Zahlen auch ein Ring). Die Rechen­operationen in boolesche Menge[x] gehen aus den Rechenregeln des Körpers boolesche Menge hervor.

Beispiel:  (Polynom-Addition in boolesche Menge[x])

f   =   x2 Exklusiv-Oder x   =   0·x3 Exklusiv-Oderx2 Exklusiv-Oderx1 Exklusiv-Oderx0
g   =   x3 Exklusiv-Oder x   =   1·x3 Exklusiv-Oderx2 Exklusiv-Oderx1 Exklusiv-Oderx0
 f Exklusiv-Oder g   =   x3 Exklusiv-Oder x2  =   1·x3 Exklusiv-Oderx2 Exklusiv-Oderx1 Exklusiv-Oderx0

Beispiel:  (Polynom-Multiplikation in boolesche Menge[x])

f   =   x3 Exklusiv-Oder x
g   =   x2 Exklusiv-Oder 1
   f · g   =   x5 Exklusiv-Oder x3 Exklusiv-Oder x3 Exklusiv-Oder x   =   x5 Exklusiv-Oder x

Anders als in einem Körper kann man aber in einem Ring nicht dividieren, sondern es gibt (wie in ganze Zahlen) nur eine Division mit Rest.

Satz:  Seien f und g Polynome, gungleich0. Dann gibt es eine eindeutige Darstellung

 f  =  q · g + r   mit   grad(r) < grad(g)

d.h. das Polynom r ist der Rest bei Division von f durch g, das Polynom q ist der Quotient.

Beispiel:  (Division mit Rest in boolesche Menge[x])

 f   =   x5
g   =   x2 Exklusiv-Oder 1
f   =   q · g Exklusiv-Oder r   =   (x3 Exklusiv-Oder x) · (x2 Exklusiv-Oder 1)  Exklusiv-Oder  x

Definition:  Sei boolesche Mengen[xenthalten boolesche Menge[x] die Menge der Polynome p mit grad(p) < n. Dann entspricht jedem Polynom p Element boolesche Mengen[x] in natürlicher Weise ein Wort w Element boolesche Mengen, bestehend aus den Koeffizienten von p:

p  =  an-1xn-1 Exklusiv-Oder . . . Exklusiv-Oder a0x0

w  =  an-1 . . . a0

Wir identifizieren daher Polynome aus boolesche Mengen[x] und Wörter aus boolesche Mengen miteinander.

Beispiel:  Sei  p  =  x3 Exklusiv-Oder x Element boolesche Menge6[x]. Dann ist

w  =  0 0 1 0 1 0

das entsprechende Wort aus boolesche Menge6.

Definition:  Sei g ein Polynom aus boolesche Mengen[x]. Der von g erzeugte Code C enthalten boolesche Mengen ist die Menge aller Wörter, die Vielfachen von g in boolesche Mengen[x] entsprechen. Das Polynom g heißt Generator­polynom von C.

Beispiel:  Sei  g = x Exklusiv-Oder 1  und n = 4. Die folgende Tabelle zeigt alle Vielfachen von g in boolesche Menge4[x] sowie die entsprechenden Codewörter aus boolesche Menge4.

(x Exklusiv-Oder 1) · 0 =   0 0 0 0 0
(x Exklusiv-Oder 1) · 1 =   x Exklusiv-Oder 1 0 0 1 1
(x Exklusiv-Oder 1) · x =   x2 Exklusiv-Oder x 0 1 1 0
(x Exklusiv-Oder 1) · (x Exklusiv-Oder 1) =   x2 Exklusiv-Oder 1 0 1 0 1
(x Exklusiv-Oder 1) · x2 =   x3 Exklusiv-Oder x2 1 1 0 0
(x Exklusiv-Oder 1) · (x2 Exklusiv-Oder 1) =   x3 Exklusiv-Oder x2 Exklusiv-Oder x Exklusiv-Oder 1 1 1 1 1
(x Exklusiv-Oder 1) · (x2 Exklusiv-Oder x) =   x3 Exklusiv-Oder x 1 0 1 0
(x Exklusiv-Oder 1) · (x2 Exklusiv-Oder x Exklusiv-Oder 1) =   x3 Exklusiv-Oder 1 1 0 0 1

Der erzeugte Code entspricht einem 3-Bit-Binärcode mit angehängtem Paritätsbit.

 

Der CRC-Algorithmus

Mithilfe des CRC-Algorithmus wird aus einer gegebenen Nachricht in systematischer Weise das zugehörige Codewort konstruiert. Zugrunde gelegt wird das Generator­polynom; das erzeugte Codewort entspricht einem Vielfachen des Generator­polynoms. Dies ist das Kriterium für die Fehler­erkennung: alle Wörter, die nicht Vielfachen des Generator­polynoms entsprechen, werden als fehlerhaft zurückgewiesen.

 

Algorithmus CRC
Eingabe:Nachricht der Länge k (entsprechend einem Polynom p vom Grad < k), Generator­polynom g vom Grad m
Ausgabe:Codewort der Länge n = k + m (entsprechend einem Polynom h vom Grad < n)
Methode:
  1. Multipliziere p mit xm (m Nullen an die Nachricht anhängen):
    1.  f  =  p·xm.
  2. Teile das Ergebnis f durch das Generator­polynom g und bilde den Rest r:
    1.  f  =  q·g Exklusiv-Oder r     mit grad(r) < grad(g)  =  m.
  3. Addiere r zu f:
    1.  h  =  f Exklusiv-Oder r  =  q·g Exklusiv-Oder r Exklusiv-Oder r  =  q·g.

 

Das Ergebnis h entspricht dem gesuchten Codewort; h ist durch g teilbar.

Durch die Addition von r in Schritt 3 findet nur innerhalb der letzten m Stellen eine Veränderung statt, da grad(r) < m ist. Das Codewort besteht also aus der ursprünglichen Nachricht mit angehängten m Prüfbits. Damit ist die Dekodierung eines Codewortes sehr einfach: Durch Weglassen der Prüfbits ergibt sich wieder die Nachricht.

Die Fehler­erkennung wird durchgeführt, indem das dem empfangenen Wort entsprechende Polynom durch das Generator­polynom geteilt wird. Ist der Rest ungleich Null, so ist ein Fehler aufgetreten.

Beispiel:  Gegeben sei das Generator­polynom g = x5 Exklusiv-Oder x2 Exklusiv-Oder x Exklusiv-Oder 1, entsprechend dem Wort 1 0 0 1 1 1, sowie die Nachricht 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1.

  1. Multipliziere das Polynom p, das der Nachricht entspricht, mit x5 (5 Nullen an die Nachricht anhängen).
  2. Teile das Ergebnis f durch das Generator­polynom g und bilde den Rest r.

    10010111001110100000
    100111
    0000101100
        100111
        00101111
          100111
          00100010
            100111
            000101100
               100111
               00101100
                 100111
                 0010110

    Das Wort 1 0 1 1 0 entspricht dem Rest r.

  3. Addiere r zu f. Das Ergebnis h entspricht dem gesuchten Codewort 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 1 0 1 1 0.

 

Implementierung in Hardware

Die Polynom­division lässt sich, nach dem im obigen Beispiel verwendeten normalen Divisions­verfahren, überraschend einfach in Hardware realisieren.

In Bild 1 dargestellt ist ein Schiebe­register, in das von rechts das zu dividierende Polynom h hinein geschoben wird. Wenn eine 1 in der vordersten Schiebe­register­zelle erscheint, wird das Generator­polynom (in Bild 1 das Polynom 1 0 0 1 1 1) mit dieser 1 multipliziert (Und-Gatter) und an der entsprechenden Position von dem zu dividierenden Polynom h subtrahiert (Xor-Gatter). Der verbleibende Rest zusammen mit der nächst­folgenden Stelle von h wird anschließend um eine Position nach links geschoben. Wenn in der vordersten Schiebe­register­zelle eine 0 erscheint, wird das 0-fache des Generator­polynoms subtrahiert, d.h. es geschieht nichts, außer dass der Schiebe­register­inhalt geschoben wird.

Es ist leicht zu sehen, dass durch diese Hardware genau das o.a. Divisions­verfahren realisiert wird. Wenn das zu dividierende Polynom h zu Ende ist, d.h. keine Stellen mehr in das Schiebe­register eingegeben werden, steht im Schiebe­register der Divisionsrest.

Die Schaltung kann sowohl zur Codierung als auch zur Fehler­erkennung verwendet werden. Zur Fehler­erkennung wird durch eine Oder-Schaltung überprüft, ob der Divisionsrest gleich Null oder ungleich Null ist. Zur Codierung wird der Divisionsrest an die Nachricht angehängt. Vor Beginn einer Division muss das Schiebe­register gelöscht werden.

Schaltung zur Polynomdivision
Bild 1:  Schaltung zur Polynom­division

 

Vereinfachte Schaltung (Linear Feed-Back Shift Register – LFSR)
Bild 2:  Vereinfachte Schaltung (Linear Feed-Back Shift Register – LFSR)

Die Schaltung von Bild 1 kann vereinfacht werden, wenn das Generator­polynom festliegt. Dann können alle Und-Gatter mit einer 1 am Eingang durch eine einfache Draht­verbindung ersetzt werden. Alle Und-Gatter mit einer 0 am Eingang liefern am Ausgang konstant 0 und können daher wegfallen; die entsprechenden Xor-Gatter mit dieser 0 am Eingang können durch Draht­verbindungen ersetzt werden. Das vorderste Xor-Gatter kann ebenfalls entfallen, da sein Ausgang nicht verwendet wird (er ist im übrigen immer 0).

Bild 2 zeigt die vereinfachte Schaltung, ein rückgekoppeltes Schiebe­register (Linear Feed-Back Shift RegisterLFSR), für das Generator­polynom 1 0 0 1 1 1.

 

Erkennung von Fehlern

Bei Auftreten eines Fehlers werden in dem gesendeten Wort ein oder mehrere Bits invertiert. Wird das Wort als Polynom aufgefasst, entspricht das Invertieren eines Bits der Addition eines Fehlerpolynoms, das eine 1 an dieser Position hat.

Beispiel:  Durch Addition des Fehlerpolynoms 1 0 1 0 0 werden zwei Bits verfälscht.

 1011000110001
Exklusiv-Oder        10100
 1011000100101

Das gesendete Polynom h ist durch das Generator­polynom g teilbar. Somit ist das empfangene Polynom h' = hExklusiv-Odere genau dann durch das Generator­polynom teilbar, wenn das Fehlerpolynom e durch das Generator­polynom teilbar ist.

Wenn also das Fehlerpolynom ungleich Null ist und durch das Generator­polynom teilbar ist, wird der Fehler nicht erkannt. Umgekehrt wird der Fehler erkannt, wenn das Fehlerpolynom nicht durch das Generator­polynom teilbar ist.

Satz:  Ist xExklusiv-Oder1 Teiler des Generator­polynoms g, so wird jede ungerade Anzahl von Fehlern erkannt.

Beweis:  Eine ungerade Anzahl von Fehlern entspricht einem Fehlerpolynom e mit einer ungeraden Anzahl von Einsen. Polynome mit einer ungeraden Anzahl von Einsen sind nicht durch xExklusiv-Oder1 teilbar. Dies kann man sich leicht anhand des Divisions­verfahrens klarmachen. Damit ist e nicht durch xExklusiv-Oder1 teilbar, also erst recht nicht durch g, d.h. der Fehler wird erkannt.

Eine wichtige Eigenschaft des CRC-Verfahrens ist die Fähigkeit, Mehrfachfehler zu erkennen, bei denen die verfälschten Bits innerhalb eines begrenzten Bereiches auftreten.

Definition:  Ein Fehlerbündel der Länge b ist ein Fehler, bei dem die Position des ersten und des letzten falschen Bits den Abstand b-1 haben. Das einem Fehlerbündel der Länge b entsprechende Fehlerpolynom lässt sich schreiben als

e  =   e1 · xi   mit grad(e1) = b-1

Beispiel:  
Nachricht: h = 1 1 0 1 0 0 1 0 1 0 1 0
Fehlerbündel der Länge 5: e = 1 0 0 1 1 0 0 0
verfälschte Nachricht: h Exklusiv-Oder e = 1 1 0 1 1 0 1 1 0 0 1 0

Es ist   e  =  x7 Exklusiv-Oder x4 Exklusiv-Oder x3  =  (x4 Exklusiv-Oder x Exklusiv-Oder 1) · x3  =  e1 · x3

Satz:  Ist x kein Teiler des Generator­polynoms g, so wird jedes Fehlerbündel der Länge bkleiner gleichgrad(g) erkannt.

Beweis:  Es liege ein Fehlerbündel der Länge bkleiner gleichgrad(g) vor. Das entsprechende Fehlerpolynom sei

e  =  e1 · xi   mit grad(e1) = b-1

Angenommen, der Fehler wird nicht erkannt. Dann teilt das Generator­polynom g das Fehlerpolynom e, d.h. es gilt

 g | e 
 folgt  g | xi · e1
 folgt  g | e1,    da x nicht Teiler von g
 folgt  grad(g)kleiner gleichgrad(e1) = b-1,    im Widerspruch dazu, dass bkleiner gleichgrad(g) ist.

In der Praxis werden u.a. folgende Generator­polynome verwendet:

CRC-16 (Magnetband) x16 Exklusiv-Oder x15 Exklusiv-Oder x2 Exklusiv-Oder 1
CRC-CCITT (Disketten) x16 Exklusiv-Oder x12 Exklusiv-Oder x5 Exklusiv-Oder 1
CRC-Ethernet x32 Exklusiv-Oder x26 Exklusiv-Oder x23 Exklusiv-Oder x22 Exklusiv-Oder x16 Exklusiv-Oder x12 Exklusiv-Oder x11 Exklusiv-Oder x10 Exklusiv-Oder x8 Exklusiv-Oder x7 Exklusiv-Oder x5 Exklusiv-Oder x4 Exklusiv-Oder x2 Exklusiv-Oder x Exklusiv-Oder 1

 

Literatur

[RF 89]T.R.N. Rao, E. Fujiwara: Error-Control Coding for Computer Systems. Prentice Hall (1989)
[Lan 06]H.W. Lang: Algorithmen in Java. 2. Auflage, Oldenbourg (2006)

Das CRC-Verfahren finden Sie auch in meinem Buch über Algorithmen.
Weiterevertikaler Abstand Themen des Buches: Sortieren, Textsuche, Parsen und Übersetzen, Graphen­algorithmen, Arithmetik, Codierung, Kryptografie, parallele Sortier­algorithmen.
[Weitere Informationen]   [Bestellen]

Buch  

 


1)  CRC steht für cyclic redundancy check.

 

Weiter mit:   [Huffman-Code]   oder   up del.icio.us digg.com Google Ma.gnolia Mister Wong StumbleUpon YahooMyWeb LinkARENA

 

homeH.W. Lang   FH Flensburg   lang@fh-flensburg.de   Impressum   ©   Created: 10.03.1997   Updated: 29.03.2011
Valid HTML 4.01 Transitional