Frage

Ich weiß, die ganze Absicht der Verwendung von CRC-Fehlererkennung ist zu tun, aber ich hörte, wie jemanden fest, dass es verwendet werden kann, grundlegende Fehlerkorrektur zusätzlich zur Fehlererkennung zu tun. Ich war gespannt, ob dies der Fall war, und wenn ja, wie stark ist es? Ich meine, verweisen wir in der Regel zu CRC als fähig x-Bit-Erkennung durchführen, aber ich bin gespannt, ob es der Durchführung x-Bit-Korrektur kann. Wenn ja, wie funktioniert das? Danke.

War es hilfreich?

Lösung

Es ist möglich, Ein-Bit-Fehlerkorrektur mit einem CRC zu tun. Angenommen, man hat eine CRC „Register“ und hat Funktionen des CRC-Algorithmus vorwärts und rückwärts ein wenig zu einem Zeitpunkt, zu ignorieren eingehenden Daten

laufen
int crc_forward(int old_value, int data_bit)
{
  if (old_value & 0x8000)
    return ((old_value ^ 0x8000) SHL 1) ^ 0x1021 ^ data_bit;
  else
    return (old_value SHL 1) ^ data_bit;
}

int crc_reverse(int old_value)
{
  if (old_value & 1)
    return (old_value SHR 1) ^ 0x8810;
  else
    return old_value SHR 1;
}

Angenommen, man hat ein Paket, das so berechnet wird, dass der CRC auf einen Wert initialisiert wird und für jedes Bit crc_forward läuft (MSB zuerst) sollte Null ergeben. Wenn man einen CRC-Wert ungleich Null wird, kann man den Algorithmus in umgekehrter Richtung (ohne Berücksichtigung von Datenbits) laufen, bis der berechnete CRC-Wert ist 1, die die Position des fehlerhaften Bit ist.

Beachten Sie, dass dieser Ansatz für die Software-Fehlerkorrektur in Dinge wie NAND-Flash angemessen sein kann. Beschäftigen sie nutzbringend für Hardware-Fehlerkorrektur, müßte man entweder in der Lage seiner Leseoperationen zu verzögern, bis die ECC verarbeitet werden kann, sonst würde man eine Tabelle von ‚Syndrom‘ Werten und Bitpositionen muß.

Andere Tipps

Sie tun können, Multi-Bit-Fehlerkorrektur mit CRCs. Mit Blick auf wikipedia, mit Verweisen auf koopmans Arbeit kann ein CRC erkennt seine hamming_distance-1-Fehler auf. Die Hamming-Distanz ist abhängig von der Nutzlast Länge, und das CRC-Polynom verwendet wird. So zum Beispiel Koopmans Polynom 0xBA0DC66B kann lange in Nachrichten bis zu 16.360 Bits bis zu 5 Bits Fehlern erkennen. Der Algorithmus in den beiden vorangegangenen Meldungen beschrieben kann, um so viele Bits erweitert wird je nach Bedarf, aber die Zeit steigt exponentiell mit der Anzahl von Bits zu beheben.

  1. berechnen Fehler CRC = CRC_gotten ^ CRC_expected.
  2. Schauen Sie durch alle möglichen 1-Bit-Nachrichten (dh alle 0s, a 1, und alle 0s) (es gibt NACHRICHTEN Fälle zu bewerten. Beachten Sie diese BITS ist nicht BYTES) und das Fehler-Bit ist die Meldung, die den Fehler CRC erzeugt.
  3. Umkehren der erfasste Bit um den Fehler zu korrigieren.

Wenn Sie nicht 1 Bit Anpassung des CRC-Fehler, Blick durch all 2-Bit, 3-Bit bis zu Ihrem hamming_distance-1 finden. Beachten Sie, dass diese langsam schnell bekommt, für 2 Bits NACHRICHTEN quadriert, in Würfel geschnitten 3 Bits bis fünften Potenz für fünf Bits.

Ich habe vor kurzem arbeitete auf CRC16 Fehlererkennung und Einzel-Bit-Fehlerkorrektur.

Hier ist die Grundidee:

  1. Angenommen, Sie einen einzelnen Bitfehler haben.
  2. Wenn die Daten + crc keinen Fehler enthält, wird der CRC 0 sein, sonst ist es nicht.
  3. Wir definieren die CRC gesendet als CRCs und CRC empfangen als CRCR.
  4. Dann werden die Fehlerbits durch CRCox = CRCs ^ CRCr gegeben werden.
  5. Das Ergebnis umfasst sowohl CRC-Fehler und Datenfehler.
  6. Haben Sie schauen, was Beziehung zwischen CRCox und der Bitfehler ist.

Ist das klar? Ich habe ein Papier darüber. Wenn Sie mehr wissen wollen, lassen Sie es mich wissen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top