Vorwärtsfehlerkorrektur

Sep 29 2020

Ich habe einen Datenstrom mit folgenden Eigenschaften:

  • Binär
  • Dynamische Länge
  • Kommt in Blöcken von 20 Bits
  • Beliebige Bits können umdrehen und einen Fehler verursachen (es besteht keine größere Wahrscheinlichkeit, dass benachbarte Bits zusammen umdrehen).
  • Ich möchte ungefähr 16 Bit als Daten und 4 für Redundanz pro Block verwenden, aber ich bin offen, diese Nummer zu ändern
  • Die Wahrscheinlichkeit, dass ein Bit korrekt ist, liegt bei 97%
  • Idealerweise kann der Code 2 Bits pro Block korrigieren
  • Die Anzahl der Blöcke ist eher gering, normalerweise 1-6.

Was wäre ein guter Code für dieses Szenario? Ich dachte an Reed-Solomon, aber laut diesem Artikel wäre es eine schlechte Wahl:

if a data stream is not characterized by error bursts or drop-outs but by random single bit errors, 
a Reed-Solomon code is usually a poor choice. More effective codes are available for this case. 

Ich habe auch nachgesehen Bossen's b-adjacent algorithm, aber es scheint so konzipiert zu sein, dass benachbarte Bit-Flips eine höhere Wahrscheinlichkeit haben, dass sie auftreten.

Antworten

1 kodlu Sep 30 2020 at 18:40

Wenn Sie Ihre Fehler als Binomial modellieren, sehen wir uns an, was passiert, wenn Sie einen einzelnen Fehler korrigieren:

Die Wahrscheinlichkeit von 0 oder 1 Fehlern ist $$q=(1-p)^{20}+20(1-p)^{19}p$$ das ist ungefähr $0.88$ zum $p=0.03,$ Ihre codierte Fehlerwahrscheinlichkeit bei der Korrektur eines Fehlers ist also $0.12$.

Die Fehlerwahrscheinlichkeit ohne Codierung beträgt $1-(1-p)^{20}$ das ist um $0.456$ Wenn Sie also Codierung verwenden, erhalten Sie eine ziemliche Verbesserung.

Nach diesem hier gegebenen Papier$r\geq 3,$ und $2^{r-1}+1\leq n\leq 2^r-1,$ es gibt eine $[n,n-r,3]$verkürzter Hamming-Code mit einigen schönen Eigenschaften zur Erkennung doppelter Fehler. Wann$n=20,$ das gibt $r=5,$ Also hast du eine $[n,n-r,3]=[20,15,3]$ Einzelfehlerkorrektur verkürzter Hamming-Code und Sie können senden $k=15$ Bits pro Längenblock $n=20.$