So wenden Sie den Reed-Solomon-Algorithmus unter Verwendung von zxing in C # an

  • Ich möchte binäre Daten über einen verrauschten Kanal übertragen.

    Ich habe gelesen, dass ein guter ECC-Algorithmus zur Fehlererkennung Reed-Solomon ist. Das Problem ist, dass ich die Eingabe für diesen Algorithmus nicht verstehe.

    Hier ist mein naiver Fehlversuch mit zxing.net:

     int[] toEncode = { 123,232,432};
    var gf = GenericGF.AZTEC_DATA_12;
    ReedSolomonEncoder rse = new ReedSolomonEncoder(gf);
    rse.encode(toEncode, 2);
    
    ReedSolomonDecoder rsd = new ReedSolomonDecoder(gf);
    rse.encode(toEncode, 2);
     

    Bitte erläutern Sie mir die Eingabe für Encoder und Decoder.

    04 July 2014
    flyman
1 answer
  • Ist dies die Implementierung, die Sie hier verwenden: ReedSolomonEncoder.cs ?

    Wenn dies der Fall ist, müssen Sie ein Array übergeben, um N Ganzzahlen mit M Datenkorrektur-Ganzzahlen zu kodieren der Länge N + M. Ihre Daten sollten sich in den ersten N-Indizes befinden, und die Codes scheinen am Ende in den letzten M-Einträgen hinzugefügt zu werden.

    Beachten Sie außerdem die folgende Einschränkung im Encoder :

    Update: Eine neuere Version ist hier: http : //zxingnet.codeplex.com/ . Die neueste Version von ReedSolomonEncoder.cs hat diese Einschränkung nicht.

    Diese Klasse implementiert Reed-Solomon-Codierungsschemata, die bei der Verarbeitung verwendet werden. QR-Codes . Eine sehr kurze Beschreibung der Reed Solomon-Codierung finden Sie hier: Reed-Solomon-Codes .

    Eine Codierungsauswahl von "QR_CODE_FIELD_256" (die wahrscheinlich für Sie eine vernünftige Wahl ist) bedeutet, dass Fehlerkorrekturcodes in Bytes ("Symbolen") Ihres Typs generiert werden message, was bedeutet, dass Ihre maximale Nachrichtenlänge (zu codierende Daten plus Fehlerkorrekturcodes) 255 Byte lang ist. Wenn Sie mehr Daten senden, müssen Sie sie in Blöcke aufteilen.

    Update 2: Bei Verwendung von QR_CODE_FIELD_256 müssen Ihre Ganzzahlen ebenfalls zwischen 0 und 255 liegen. Um einen allgemeinen Byte-Stream zu codieren, müssen Sie jedes Byte in eine separate Ganzzahl eingeben Bei dem ganzzahligen Array übergeben Sie das int-Array (plus Platz für Fehlerkorrekturcodes) durch den Encoder und wandeln Sie es anschließend in ein (größeres) Byte-Array um. Und umgekehrt: Dekodierung.

    05 July 2014
    dbcJerry Nixon - MSFT