Schifra Reed Solomon Encoder / Decoder



  • Hallo,
    auf der Suche nach einem Open Sourec Reed Solomon Codec bin ich auf Schifra (http://www.schifra.com/) gestoßen.

    Das Teil kann wohl alles dementsprechend kompliziert ist es da irgendwie duchzublicken. (für mich zumindest)

    ich verstehe nur eine kleinigkeit nicht, vielleicht kann mich jemand drauf hinweisen.
    Hier ein ausschnitt aus dem Example01

    /* Finite Field Parameters */
       const std::size_t field_descriptor                 =   8;
       const std::size_t generator_polynommial_index      = 120;
       const std::size_t generator_polynommial_root_count =  32;
    
       /* Reed Solomon Code Parameters */
       const std::size_t code_length = 255;
       const std::size_t fec_length  =  32;
       const std::size_t data_length = code_length - fec_length;
    

    field_descriptor = 8; ist wohl klar GF(2^8), immer 8 bit sind ein Symbol.

    Doch danach hörte erst mal auf und das sind die beiden Zeilen die ich nicht verstehe :
    generator_polynommial_index = 120;
    generator_polynommial_root_count = 32;
    ... hat sich von euch jemand das schon mal angeschaut, und weis was da eingestellt wird ?

    ich würde ja sagen die 120 sind das primitive element, aber das wird später mit primitive_polynomial_size05 und primitive_polynomial05 ausgwählt
    hier der entsprechende Code

    schifra::galois::field field(field_descriptor,schifra::galois::primitive_polynomial_size05,schifra::galois::primitive_polynomial05);
    

    ok, es steht generator_polynomal davor :

    wenn ich für meinen Code (255,239) nun ein Generatorpolynom habe das so aussieht :

    g(x) = (x+λ0)*(x+λ1)*(x+λ2)*..*(x+λ15)

    dann muss ich wohl bei generator_polynommial_root_count 16; eintragen.
    Aber was ich bei generator_polynommial_index angeben muss versteh ich net ganz ?

    Danke
    flix



  • hmm eig. ist das so nur die elegante Version um ein #define für feste Werte zu umgehen.



  • Hi,

    irgendwie geht es mir gar nicht um das Programmiertechnische sondern um die Werte, die zugewiesen werden .... einfach gefragt, warum wird der Variablen der Wert 120 zugewiesen ? .... Dazu muss man sich halt mit RS Codes auskennen.

    Wenn ich den Code weiterverfolge wird die 120 letztendlich zum berechnen des Generatorpolynoms verwendet :

    initial_index=generator_polynommial_index;
    num_elements=generator_polynommial_root_count ;
    for(std::size_t i = initial_index; i < initial_index + num_elements; ++i)
             {
                generator_polynomial *= (X + (ALPHA ^ static_cast<int>(i)));
             }
    

    okay mein generatorpolynom lautet :
    g(x) = (x+λ0)*(x+λ1)*(x+λ2)*..*(x+λ15)

    deswegen denk ich ich muss folgende Parameter einstellen :

    generator_polynommial_index = 0;
    generator_polynommial_root_count = 16;

    da gibts aber bei mir leider ein Fehler (Error - Critical encoding failure!)
    ....

    Danke,
    flix


Anmelden zum Antworten