CRC: Unterschiede in Artikel auf mikrocontroller.net & Wikipedia

Gast #3772637
Hallo,

ich möchte Daten mittels CRC absichern. Dazu hab ich mir den hiesigen 
sowie den Wikipedia-Artikel zu Gemüte geführt, aber nach meinem 
Verständnis widersprechen sich die Informationen.

1) http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung
2) http://www.mikrocontroller.net/articles/CRC

Beispiel:
In 2) steht einmal "Zum Beispiel bedeutet CRC16, dass das 
Generator-Polynom vom Grad 16 ist, sprich es hat 17 Bit." und direkt im 
nächsten Abschnitt "...wobei N die Anzahl Bits des Generatorpolynoms 
ist. (CRC16 -> 16 Bits)", also erst 17 und dann 16 Bit.
In 2) steht beim Beispiel mit einem Polynom 5.Grades -> "Gerechnet wird 
aber immer nur mit den unteren 5 Bit, hier also 00110.", es wird also 
die führende Eins weggelassen - in 1) wird im Beispiel ebenfalls ein 
Polynom 5.Grades verwendet, dort wird die Eins aber nicht weggelassen... 
Interessanterweise wird wiederum im echten Rechenbeispiel in 2) die Eins 
verwendet...

Insgesamt also verwirrend. Welcher Artikel stimmt denn nun?

Ralf
Gast
Ralf schrieb:
> Beispiel:
> In 2) steht einmal "Zum Beispiel bedeutet CRC16, dass das
> Generator-Polynom vom Grad 16 ist, sprich es hat 17 Bit." und direkt im
> nächsten Abschnitt "...wobei N die Anzahl Bits des Generatorpolynoms
> ist. (CRC16 -> 16 Bits)", also erst 17 und dann 16 Bit.
Da ist in der Tat etwas verwirrend. Ich würde
"wobei N die Anzahl Bits des Generatorpolynoms ist" durch
"wobei N der Grad des Generatorpolynoms ist" ersetzen.

Also CRC N, Grad N, höchste Potenz N, Prüfbits N, Länge/Bits des 
Polynoms N+1.

> In 2) steht beim Beispiel mit einem Polynom 5.Grades -> "Gerechnet wird
> aber immer nur mit den unteren 5 Bit, hier also 00110.", es wird also
> die führende Eins weggelassen

Vielleicht ist das Beispiel in der englischen WP besser geeignet. Man 
sieht sofort, dass die erste Stelle nicht berechnet werden muß, da sich 
dort entweder automatisch eine "0" ergibt (Input="1") oder für die 
Berechnung nicht relevant ist (Input="0").
Du kannst die Einzelschritte auch explizit durchführen und prüfen, ob 
das Ergebnis gleichbleibt.
1
00010111101100 000
2
   1011
3
00000001101100 000 <--- note that the divisor moves over to align with the next 1 in the dividend (since quotient for that step was zero)
4
       1011             (in other words, it doesn't necessarily move one bit per iteration)
5
00000000110100 000

http://en.wikipedia.org/wiki/Cyclic_redundancy_check#Computation

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.