2009-06-15 10 views
4

Gibt es eine CRC-Bibliothek, die es dem Benutzer ermöglicht, Fehler nicht nur zu erkennen, sondern auch zu korrigieren? Ich suche nach einer C/C++ - oder Java-Bibliothek, idealerweise Open-Source.CRC-Fehlerkorrekturbibliothek?

+0

Just checking, ist aber CRC eine harte Anforderung hier, oder ist es eine allgemeine Anforderung für die Fehlerkorrektur/Erkennung? – skaffman

+0

Allgemeine Voraussetzung für Fehlerkorrektur/-erkennung, solange dies für Kommunikationsprotokolle auf niedriger Ebene sinnvoll ist. Letztes Mal habe ich überprüft, dass jeder CRC32 für diese verwendet. – Gili

+0

Sie sollten mehr über die Daten angeben, mit denen Sie arbeiten. Streamen Sie Daten oder speichern Sie? Wie laut ist die Übertragung? – heyitsme

Antwort

6

Ich glaube, dass CRCs kann nur Fehler erkennen, nicht korrigieren. Das trifft sicherlich auf die gängigste Implementierung zu. Sie wollen eine Art von error correction Technik, kein CRC. Ich bin mir nicht bewusst, Bibliotheken dafür, aber sie müssen leicht genug zu finden, sobald Sie wissen, was Sie suchen.

+2

Das klingt nicht richtig. Laut http://www.cs.nmsu.edu/~pfeiffer/classes/573/notes/ecc.html: "Jeder Fehlerprüfcode, der immer einen Zwei-Bit-Fehler erkennen kann, kann immer einen Ein-Bit-Fehler korrigieren" . Und http://www.dstrelated.com/showmessage/107079/1.php: "Um eine einzelne Fehlerkorrektur durchführen zu können, muss die Wortgröße mit ECC Bits kleiner oder gleich 2 ** N sein, wobei N der Wert ist Nummer der ECC-Bits " – Gili

+3

Das stimmt auf einer allgemeinen Ebene, aber der CRC-Algorithmus führt keine Korrektur durch. – skaffman

+2

Sie können sicherlich Fehlerkorrektur mit CRC. Verwenden Sie die Tatsache, dass CRC (A XOR B) = CRC (A) XOR CRC (B) ... sei B der Fehler, A die Nachricht gesendet, A XOR B ist die Nachricht erhalten. Dann CRC (B) = CRC (XOR B) XOR CRC (A). Es stimmt, dass der Hamming-Entfernungsbeweis nicht besonders auf alle Fehlerprüfcodes anwendbar ist (Beispiel wären sichere Hash-Codes, die nicht ohne großen Aufwand reserviert werden können), aber CRC hat keine solchen Schwierigkeiten. Dann brauchen Sie eine Nachschlagetabelle, um von CRC (B) zurück zu B zu gehen (für die Einzelfehlerkorrektur würde die Nachschlagetabelle den Index des einzelnen Fehlerbits enthalten). –

0

Ich glaube nicht, dass CRC oft für die Fehlerkorrektur verwendet wird, aber wenn Sie Dateien prüfen und reparieren wollen, können Sie immer Par2 ausprobieren, das oft im Usenet verwendet wird. Sie können eine Menge von Dokumentation und Implementierungen im Internet finden, zum Beispiel eine win32 library.

6

Sie wollen nicht CRC, sondern FEC (Vorwärtsfehlerkorrektur). Sie können eine Open Source-Implementierung in libfec finden.

3

Die beste technische Lösung zur Fehlerkorrektur heißt Turbocode. Weitere Informationen hierzu finden Sie unter http://en.wikipedia.org/wiki/Turbo_code.

Aber ich fürchte, Sie werden nicht viele freie Implementierungen davon finden.

Wenn Sie wirklich eine kostenlose wollen, einen Versuch http://rscode.sourceforge.net/

+0

Turbokodes sind ziemlich komplex, um hohe Codierwirkungsgrade zu erreichen. –