Forum: FPGA, VHDL & Co. Ist ein universeller Reed-Solomon-Coder möglich ?


von Hans-werner M. (hanswerner)


Lesenswert?

Ich habe u.a. auf Opencores Implementierungen von Reed-Solomon-Codern 
gefunden. Diese setzen jeweils einen speziellen Reed-Solomon-Coder um. 
Lässt sich ein universeller Reed-Solomon-Coder für einen FPGA 
programmieren? Also einer bei dem ich die Anzahl der Bits als Eingänge 
definieren kann z.B. RS(255,239) oder RS(255,247) oder ist dies ein 
unmögliches Unterfangen ?
Wenn es theoretisch möglich wäre, was spricht dagegen (Komplexität, 
Ausführungsgeschwindigkeit etc.) ?

von Bürovorsteher (Gast)


Lesenswert?

Gegenfrage: wer braucht das und wofür?
Bei den Implementierungen dürfte es wirksame und weniger wirksame Kodes 
geben. Ein RS(255,247) ist eine eher wenig leistungsfähige Kodierung.
Nicht umsonst beschränkt sich die Welt der Anwender auf einige wenige 
erprobte Implementierungen.

Dagegen spricht eindeutig die Komplexität.

von smörre (Gast)


Lesenswert?

was genau ist denn der anwendungsbereich?

von Hans-werner M. (hanswerner)


Lesenswert?

Vielen Dank an Bürovorsteher.

Dagegen spricht eindeutig die Komplexität.

Gut, nehm ich mal so hin.

Ein RS(255,247) ist eine eher wenig leistungsfähige Kodierung.

Richtig, je weniger zusätzliche Bits ich für eine Fehlersicherung oder 
Fehlerkorrektur verwenden, desto weniger leistungsfähig (Bei gleichem 
Verfahren). Gut erkannt.

Nicht umsonst beschränkt sich die Welt der Anwender auf einige wenige
erprobte Implementierungen.

Welche denn ? Welche Reed-Solomon-Coder werden denn in den aktuellen 
Protokollen hauptsächlich eingesetzt ? Keine Implementierung bitte, 
sondern nur die Anzahl der Bits.

RS(?,?) oder auch RS(?,?,?)

von Bürovorsteher (Gast)


Lesenswert?

Ditales Fernsehen Europa/DVB: (204, 188)
Ditales Fernsehen Amis/ATSC: (207, 187)
ITU J.83: (127, 122)
um nur ein paar bekannte und oft benutzte zu nennen.

Für diese Kodierungen sind das Galois-Feld und der Startwert des 
Generatorpolynoms auch fest vorgegeben.
Sehr spezielle Materie, sehr öde, sollte man den Spezis überlassen.
Als Anwender hatte ich lediglich mit DVB zu tun.

von Georg A. (Gast)


Lesenswert?

RS-Codierung ist ja algorithmisch recht trivial, das lässt sich ja alles 
über zwei Tabellen und ein paar Spar-Modulo-Funktionen *) erledigen. Da 
könnte man schon eine "on-the-fly"-konfigurierbare Struktur machen, 
zumindest für identische Bitbreiten. Häufig ist ja auch nur die 
Nutzdatenlänge gegenüber dem "Originalcode" verkürzt (DVB zB.).

Die Dekodierung dagegen ist ziemlich lästig, erst recht in HW. Da 
bekommt man schon ohne Rekonfiguration einen Knoten ins Hirn...

*) Spar-Modulo, weil Eingangswertebereich sehr eingeschränkt...

von Harro (Gast)


Lesenswert?

Es sollte aber doch möglich sein, dass in SW mit einem SoftCore zu 
machen. Immerhin gibt es eine Reihe von existenten SW Implementierungen.

Mch würden diesbezügliche Alternativen / Codierungen schon 
interessieren.

von Georg A. (georga)


Lesenswert?

Was suchst du jetzt? Verschiedene Implementierungen von RS-Codern oder 
verwandte Methoden für Fehlerschutz?

Wie gesagt, die Basis eines RS-Coders sind Tablelookups und XORs und 
einfache Modulos. Additionen tauchen auch noch auf, kann man aber über 
mehrere Tabellen erschlagen (wenn man muss). Alles kein Problem in SW, 
in C sind das so umara 10-15 Zeilen. Das "Problem" am RS für eine 
schwache CPU (aka Softcore...) ist nur, dass für jeden Eingangswert 
diese Lookups/XORs mit der Anzahl der Redundanzwerte nötig sind. Beim 
DVB-RS also 188*16, ruiniert den Durchsatz dann schon etwas... Das kann 
man zwar einfach parallelisieren, aber dann nur mit eigener HW (FPGA, 
...) oder SIMD (was aber wieder kein normaler Softcore hat).

Ansonsten gibts neben RS AFAIK wenig praktisch verwendete Verfahren, die 
"nativ" Burstfehler tolerieren. Turbocodes fallen mir noch ein, die tun 
beim Dekodieren aber ziemlich weh. BCH gibts auch noch (DVB-S2 macht 
LDPC+BCH statt ConvolutionalCoding+RS bei DVB-S), aber das ist eine Art 
Verallgemeinerung von RS und läuft beim Codieren fast gleich.

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.