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.) ?
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.
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(?,?,?)
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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.