bugfix> c++ > 投稿

私はからリードソロモンアルゴリズムをテストしていますこのリポジトリ 何かが外部的に変更された場合に情報を回復するため。

想定:

m = bits per symbol
k = data
r = redundance 
n = bits per block = r + k = 2^m - 1
t = error correction = (n - k) / 2

次のパラメーターを使用して、情報を体系化および復元できます。

m = 8
n = 255
r = 135
k = 120
t = 67

完璧に機能し、67個のエラーを回復できます。

私の仮定は次のとおりです。

  • データのみが破損し、冗長性はありません。
  • 完全に回復するには、n = 3 * k-> r = 2 * k。
  • n = 255なので、この場合のrは170になります。
  • したがって、GF(2 ^ m)とRS [n、k、n-k + 1]が必要です。使用するにはGF(2 ^ 8)とRS [255、85、171]

これらのパラメーターを使用すると、エラーが発生します。

Error - Failed to create sequential root generator!

これは、ライブラリ関数make_sequential_root_generator_polynomial:

const std::size_t field_descriptor                =   8;    /* m = bit per symbol */
const std::size_t generator_polynomial_index      = 120;
const std::size_t generator_polynomial_root_count = 170;    /* root shall be equal to redundance */
const schifra::galois::field field(field_descriptor,
                                   schifra::galois::primitive_polynomial_size06,
                                   schifra::galois::primitive_polynomial06);
    if (
         !schifra::make_sequential_root_generator_polynomial(field,
                                                             generator_polynomial_index,
                                                             generator_polynomial_root_count,
                                                             generator_polynomial)
       )
    {
       std::cout << "Error - Failed to create sequential root generator!" << std::endl;
       return false;
    }

私の問題は、アルゴリズムが失敗する理由がわからないことです。トピックについて読んだ後、コンセプトの問題、バグがあると思うここに そしてここに、なぜ不可能なのかわかりません。

これは不可能だという仮定や理論に従って使用することは可能ですか?

回答 1 件
  • 質問の現在のコードは設定されているため失敗しています

    generator_polynomial_index = 120;
    
    

    120(インデックス)+ 170(ルートカウント)は> 255(フィールドサイズ)、チェックインされる

    make_sequential_root_generator_polynomial()
    
    

    generator_polynomial_indexは、自己相反生成多項式を使用することが目的でない限り、通常0(最初の連続ルート= 1)または1(最初の連続ルート=フィールドプリミティブ= 2)に設定されます。

    自己相反的なポリの場合でも、ルートが170の場合、generator_polynomial_index = 128-(170/2)= 43です。120に設定すると異常に高くなります。

    根は255を法とする順次累乗であるため、これが機能する可能性があるため、2 ^ 120、2 ^ 121、...、2 ^ 253、2 ^ 254、2 ^ 255 = 2 ^ 0、2 ^ 256 = 2 ^ 1、...、これは奇数の根の自己相反多項式で行われますgenerator_polynomial_index =(255-(根の数/ 2))が、おそらく残りのコードこれに問題があります。

あなたの答え