Forum: Mikrocontroller und Digitale Elektronik Frage zu VorwärtsFehlerKorrektur?


von Schräger Lukas (Gast)


Lesenswert?

Hallo,

gibt es eine Möglichkeit, die FEC "Anschaulich" zu erklären? Also
ohne das gesamte griechischen Alphabet, merkwürdige "Ringkörper"
und "Generator-Polynome"?

Gibt es nicht ein Modell, welches Nicht-Mathematikern, die auf
dem Level der einfache Kurvendiskussion stehengeblieben sind,
ungefähr verdeutlichen kann, was da im wesentlichen passiert?

Ich denke da an so einfache Modelle wie z.B. bei der Triangulation.
Wenn man das mal aufmalt oder sich bildlich vorstellt, wird einem
schnell klar, warum man durch Laufzeitunterschiede eine Position
im Raum bestimmen kann. Auch wenn man sowohl mathematisch als auch
informatisch natürlich noch Meilenweit davon entfernt ist, so etwas
zu implementieren.

Ich habe schon eine Menge über FEC gelesen und eigentlich nur zwei
Arten von Erklärungen gefunden: Der eine Teil der Erklärungen geht
kaum über die Wirkungsweise von FEC hinaus. Der andere Teil geht
sofort dermaßen ins mathematische Detail, dass einem der Kopf raucht.

Vielen Dank!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ganz einfache Erklärung:

Man hat eine Anzahl von möglichen Datenblöcken, z.B. 8 Bit lange 
Textzeichen. Um Fehler bei der Übertragung dieser Daten erkennen und 
korrigieren zu können, ordnet man jedem Zeichen einen 50 Bit langen 
Codeblock zu, den man z.B. zufällig (!) wählt. Für jedes zu übertragende 
Zeichen sendet man den zugeordneten Codeblock. Bei der Übertragung 
werden ein paar Bit verfälscht, und die Codeblöcke kommen am Empfänger 
fehlerhaft an. Der Sender muss nun herausfinden, welches Zeichen wohl 
gemeint war. Dazu geht er einfach alle möglichen Zeichen durch, und 
schaut welches am besten mit dem empfangenen Block übereinstimmt.

Das ist das Grundprinzip der blockbasierten FEC. Der einzige Grund warum 
die Algorithmen so kompliziert werden ist, dass es in der Praxis bei 
mehreren tausend Bit langen Blöcken völlig unmöglich ist, alle möglichen 
Codeblöcke vorab in Sender und Empfänger zu speichern, und man deshalb 
"Tricks" braucht um das zu vermeiden.

Hilft das weiter? Oder wo genau hakt es?

von Schräger Lukas (Gast)


Lesenswert?

Hi,

danke für Deine Hilfe...mir ging es - wenn ich mich selbst
richtig verstanden habe ;) - um Reed Solomon. Da war doch
irgendetwas mit aufeinanderfolgenden Nullstellen und 50 Bit
Overhead pro Byte ist ganz schön viel. Was Du da erklärt hast,
verstehe ich ja auf Anhieb, aber ich wollte eher wissen, ob man
es sich irgendwie mit Kurven und Nullstellen bildlich vorstellen
kann, wie bei n Bit pro Block genau r Bit Redundanz anhängt werden
und dann bis zu x fehlerhafte Bit erkannt und korrigiert werden.
Dabei sollte n deutlich größer sein als r und x natürlich möglichst
groß sein. Und da dachte ich mir, dass es dort mathematische Tricks
gibt, um durch Einfügen bestimmter Redundanz-Informationen auf
mathematischem Wege die Störung "herauszurechen", und zwar
weitestgehend unabhängig davon, an welcher Stelle im Block
die Störung auftritt.
In verschiedenen Skripten wird dann eiffrig von Stützstellen
und Lagrange-Interpolation geredet, aber davon verstehe
dann immer sogut wie nichts.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Schräger Lukas wrote:
> danke für Deine Hilfe...mir ging es - wenn ich mich selbst
> richtig verstanden habe ;) - um Reed Solomon. Da war doch
> irgendetwas mit aufeinanderfolgenden Nullstellen und 50 Bit
> Overhead pro Byte ist ganz schön viel.

Das war doch nur ein Beispiel. Die wichtigste Erkenntnis bei der ganzen 
Sache ist, dass es im Prinzip immer das gleiche ist, egal ob 50, 8, 10 
oder n+r: man versucht den Block zu finden, aus dem der empfangene Block 
mit größter Wahrscheinlichkeit hervorgegangen ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.