リードソロモンコードをデコードするウェルチベルレカンプアルゴリズムでは、不明な場所のb iにeエラーがあるメッセージを表す点のリストが与えられます(eはアルゴリズムに与えられます)。出力は、エラーが発生した点を除く、指定されたすべての点を通過する多項式です。
この方法には、次の形式の線形方程式系を解くことが含まれます。
Eの次数がeでQの次数が最大でe + kであるすべてのについて。変数はEおよびQの係数です。
次数があることを確認するには、通常、の係数が1 であるという制約を上記の線形システムに追加します。ただし、実際にはは必ずしもわかりません。これに対処する1つの非効率的な(ただし多項式時間の)方法は、解が見つかるまで(n + k − 1 )/ 2 − 1で始まるすべての値に対してを試すことです。
私の質問は:eを決定するより効率的な方法はありますか?または、正確な値の代わりに上限を使用できるようにする線形システムに変更はありますか?
特に、この特定のデコーダーをリードソロモンコードに使用したいのですが、他の手法に基づく完全に異なるアルゴリズムではありません。
DWの答えに応えて、これが私の実際の例です。すべてが7を法として行われます。
plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]
したがって、エラーは3番目のポイントにあります。
とき問題の多項式であります
とを接続マトリクス状にシステムを与えます。
[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
最後の行は制約です。取得したガウス消去法を適用する
[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]
そして、両方の自由変数に1を選ぶと、次の解ベクトルが得られます。
[2, 2, 1, 4, 1, 0, 1, 1]
に変換します
E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4
また、はQを除算しません。なお、Qは、のような要因(T + 6 )(T 3 + 2 、T 2 + 2 、T + 3 )
場合、良い解決策が得られます。
system is:
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0]
[0, 1, 0, 0, 0, 0, 1]
reduced system is:
[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]
solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0
上記の反例は私が最初から書いたコードによって生成されたものですが(基本的に私が最初に試したものです)、ソリューションが手動で有効であることを確認できるため、私のコードにバグがある場合でも、クレームに対する有効な反例です。を使用すると機能します。