エラー訂正コード
符号理論 において 、 ボーズ・ショードリー・オッケンゲム符号 ( BCH符号)は 、有限体 ( ガロア体 とも呼ばれる)上の 多項式 を使用して構築される 巡回 誤り訂正符号 の一種である。BCH符号は、1959年にフランスの数学者 アレクシ・オッケンゲム によって発明され 、1960年に ラージ・チャンドラ・ボース と DKレイ・ショードリー によって独立に発明された。 [1] [2] [3] ボーズ・ショードリー・オッケンゲムという 名前 (および頭字語の BCH )は、発明者の姓の頭文字に由来している(レイ・ショードリーの場合は誤っている)。
BCH コードの主な特徴の 1 つは、コード設計時に、コードによって訂正可能なシンボル エラーの数を正確に制御できることです。特に、複数のビット エラーを訂正できるバイナリ BCH コードを設計できます。BCH コードのもう 1 つの利点は、 シンドローム デコード と呼ばれる 代数的 手法によって簡単にデコードできることです。これにより、小型で低電力の電子ハードウェアを使用して、これらのコードのデコーダーの設計が簡素化されます。
BCHコードは、衛星通信、 [4] コンパクトディスク プレーヤー、 DVD 、 ディスクドライブ 、 USBフラッシュドライブ 、 ソリッドステートドライブ 、 [5] 2 次元バーコード などのアプリケーションで使用されます 。
定義と説明
原始狭義BCHコード
素数 q と 素数べき q m (正の整数 m と dで d ≤ q m − 1 ) が与えられた とき、 有限体 (またはガロア体) GF( q ) 上の、コード長 n = q m − 1 で 距離 が少なくとも d である原始狭義 BCH コードが 次の方法で構築されます。
α を GF( q m ) の 原始元 と する 。任意の正の整数 i に対して、 m i ( x ) を α i の GF( q ) に係数を持つ 最小多項式 とする 。BCH 符号の 生成多項式は、 最小公倍数 g ( x ) = lcm( m 1 ( x ),…, m d − 1 ( x ))として定義される。 g ( x )は GF( q ) に係数を持つ多項式であり、 x n − 1 を割り切ること がわかる 。したがって、 g ( x ) によって定義される 多項式符号は 巡回符号である。
例
q = 2 、 m = 4 (したがって n = 15 )とする 。 原始元 α (z)= zを用いて、約分多項式 z 4 + z + 1 に基づいて、 GF (16)= GF(2 4 )の d の異なる値を検討する
。GF (2) の 係数を持つ最小多項式 m i ( x ) は14個あり、
メートル
私
(
α
私
)
モッド
(
ず
4
+
ず
+
1
)
=
0.
{\displaystyle m_{i}\left(\alpha ^{i}\right){\bmod {\left(z^{4}+z+1\right)}}=0.}
最小多項式は
メートル
1
(
x
)
=
メートル
2
(
x
)
=
メートル
4
(
x
)
=
メートル
8
(
x
)
=
x
4
+
x
+
1
、
メートル
3
(
x
)
=
メートル
6
(
x
)
=
メートル
9
(
x
)
=
メートル
12
(
x
)
=
x
4
+
x
3
+
x
2
+
x
+
1
、
メートル
5
(
x
)
=
メートル
10
(
x
)
=
x
2
+
x
+
1
、
メートル
7
(
x
)
=
メートル
11
(
x
)
=
メートル
13
(
x
)
=
メートル
14
(
x
)
=
x
4
+
x
3
+
1.
{\displaystyle {\begin{aligned}m_{1}(x)&=m_{2}(x)=m_{4}(x)=m_{8}(x)=x^{4}+x+1,\\m_{3}(x)&=m_{6}(x)=m_{9}(x)=m_{12}(x)=x^{4}+x^{3}+x^{2}+x+1,\\m_{5}(x)&=m_{10}(x)=x^{2}+x+1,\\m_{7}(x)&=m_{11}(x)=m_{13}(x)=m_{14}(x)=x^{4}+x^{3}+1.\end{aligned}}}
BCHコードの 生成多項式は次のようになる。
d
=
2
、
3
{\displaystyle d=2,3}
グ
(
x
)
=
l
c
メートル
(
メートル
1
(
x
)
、
メートル
2
(
x
)
)
=
メートル
1
(
x
)
=
x
4
+
x
+
1.
{\displaystyle g(x)={\rm {lcm}}(m_{1}(x),m_{2}(x))=m_{1}(x)=x^{4}+x+1.\,}
最小 ハミング距離は少なくとも 3 で、最大 1 つのエラーを訂正します。生成多項式は 4 次なので、このコードには 11 のデータ ビットと 4 つのチェックサム ビットがあります。これは (15, 11) BCH コード
とも呼ばれます。
BCHコードの 生成多項式は次のようになる。
d
=
4
、
5
{\displaystyle d=4,5}
グ
(
x
)
=
l
c
メートル
(
メートル
1
(
x
)
、
メートル
2
(
x
)
、
メートル
3
(
x
)
、
メートル
4
(
x
)
)
=
メートル
1
(
x
)
メートル
3
(
x
)
=
(
x
4
+
x
+
1
)
(
x
4
+
x
3
+
x
2
+
x
+
1
)
=
x
8
+
x
7
+
x
6
+
x
4
+
1.
{\displaystyle {\begin{aligned}g(x)&={\rm {lcm}}(m_{1}(x),m_{2}(x),m_{3}(x),m_{4}(x))=m_{1}(x)m_{3}(x)\\&=\left(x^{4}+x+1\right)\left(x^{4}+x^{3}+x^{2}+x+1\right)=x^{8}+x^{7}+x^{6}+x^{4}+1.\end{aligned}}}
最小ハミング距離は少なくとも 5 で、最大 2 つのエラーを訂正します。生成多項式は 8 次なので、このコードには 7 つのデータ ビットと 8 つのチェックサム ビットがあります。これは (15, 7) BCH コードとも呼ばれます。
BCHコードの 生成多項式は次のようになる。
d
=
6
、
7
{\displaystyle d=6,7}
グ
(
x
)
=
l
c
メートル
(
メートル
1
(
x
)
、
メートル
2
(
x
)
、
メートル
3
(
x
)
、
メートル
4
(
x
)
、
メートル
5
(
x
)
、
メートル
6
(
x
)
)
=
メートル
1
(
x
)
メートル
3
(
x
)
メートル
5
(
x
)
=
(
x
4
+
x
+
1
)
(
x
4
+
x
3
+
x
2
+
x
+
1
)
(
x
2
+
x
+
1
)
=
x
10
+
x
8
+
x
5
+
x
4
+
x
2
+
x
+
1.
{\displaystyle {\begin{aligned}g(x)&={\rm {lcm}}(m_{1}(x),m_{2}(x),m_{3}(x),m_{4}(x),m_{5}(x),m_{6}(x))=m_{1}(x)m_{3}(x)m_{5}(x)\\&=\left(x^{4}+x+1\right)\left(x^{4}+x^{3}+x^{2}+x+1\right)\left(x^{2}+x+1\right)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1.\end{aligned}}}
最小ハミング距離は少なくとも 7 で、最大 3 つのエラーを訂正します。生成多項式は 10 次であるため、このコードには 5 つのデータ ビットと 10 のチェックサム ビットがあります。これは (15, 5) BCHコードとも表記されます。(この特定の生成多項式は、 QR コード の「フォーマット情報」で実際に使用されています 。)
以上のBCHコードの 生成多項式は次のようになる。
d
=
8
{\displaystyle d=8}
グ
(
x
)
=
l
c
メートル
(
メートル
1
(
x
)
、
メートル
2
(
x
)
、
。
。
。
、
メートル
14
(
x
)
)
=
メートル
1
(
x
)
メートル
3
(
x
)
メートル
5
(
x
)
メートル
7
(
x
)
=
(
x
4
+
x
+
1
)
(
x
4
+
x
3
+
x
2
+
x
+
1
)
(
x
2
+
x
+
1
)
(
x
4
+
x
3
+
1
)
=
x
14
+
x
13
+
x
12
+
⋯
+
x
2
+
x
+
1.
{\displaystyle {\begin{aligned}g(x)&={\rm {lcm}}(m_{1}(x),m_{2}(x),...,m_{14}(x))=m_{1}(x)m_{3}(x)m_{5}(x)m_{7}(x)\\&=\left(x^{4}+x+1\right)\left(x^{4}+x^{3}+x^{2}+x+1\right)\left(x^{2}+x+1\right)\left(x^{4}+x^{3}+1\right)=x^{14}+x^{13}+x^{12}+\cdots +x^{2}+x+1.\end{aligned}}}
このコードは最小ハミング距離が 15 で、7 つのエラーを訂正します。データ ビットは 1 ビット、チェックサム ビットは 14 ビットです。これは(15, 1) BCH コードとも呼ばれます 。実際、このコードには 000000000000000 と 111111111111111 (単純な 繰り返しコード ) の 2 つのコードワードしかありません。
一般的なBCHコード
一般的な BCH コードは、2 つの点で原始的な狭義の BCH コードと異なります。
まず、の原始要素である という要件 を緩和することができます。この要件を緩和すると、コードの長さは から の 要素の 順序 に変わります 。
α
{\displaystyle \alpha}
グ
ふ
(
q
メートル
)
{\displaystyle \mathrm {GF} (q^{m})}
q
メートル
−
1
{\displaystyle q^{m}-1}
o
r
d
(
α
)
、
{\displaystyle \mathrm {ord} (\alpha ),}
α
。
{\displaystyle \alpha .}
第二に、生成多項式の連続根は 、
α
c
、
…
、
α
c
+
d
−
2
{\displaystyle \alpha^{c},\ldots,\alpha^{c+d-2}}
α
、
…
、
α
d
−
1
。
{\displaystyle \alpha ,\ldots ,\alpha ^{d-1}.}
定義。 が素数べき乗 である 有限体を決めます。 が を 法 とする 乗法順序 で ある ような正の整数を選びます。
グ
ふ
(
q
)
、
{\displaystyle GF(q),}
q
{\displaystyle q}
メートル
、
ん
、
d
、
c
{\displaystyle m,n,d,c}
2
≤
d
≤
ん
、
{\displaystyle 2\leq d\leq n,}
グ
c
d
(
ん
、
q
)
=
1
、
{\displaystyle {\rm {gcd}}(n,q)=1,}
メートル
{\displaystyle m}
q
{\displaystyle q}
ん
。
{\displaystyle n.}
以前と同様に、を の 原始 の 乗根 と し 、 を のすべての に対する の 最小 多項式 とします。BCH
コードの生成多項式は、最小公倍数として定義されます 。
α
{\displaystyle \alpha}
ん
{\displaystyle n}
グ
ふ
(
q
メートル
)
、
{\displaystyle GF(q^{m}),}
メートル
私
(
x
)
{\displaystyle m_{i}(x)}
グ
ふ
(
q
)
{\displaystyle GF(q)}
α
私
{\displaystyle \alpha^{i}}
私
。
{\displaystyle i.}
グ
(
x
)
=
l
c
メートル
(
メートル
c
(
x
)
、
…
、
メートル
c
+
d
−
2
(
x
)
)
。
{\displaystyle g(x)={\rm {lcm}}(m_{c}(x),\ldots ,m_{c+d-2}(x)).}
注: 簡略化された定義のように、 は 1であり、 を法とする の順序 は したがって、
簡略化された定義は、実際には一般的な定義の特殊なケースです。
ん
=
q
メートル
−
1
{\displaystyle n=q^{m}-1}
グ
c
d
(
ん
、
q
)
{\displaystyle {\rm {gcd}}(n,q)}
q
{\displaystyle q}
ん
{\displaystyle n}
メートル
。
{\displaystyle m.}
特別なケース
を持つ BCH コードは、 狭義の BCH コード と呼ばれます 。
c
=
1
{\displaystyle c=1}
を持つ BCH コードは プリミティブ と呼ばれます 。
ん
=
q
メートル
−
1
{\displaystyle n=q^{m}-1}
BCH 符号の 生成多項式は、の係数を持ちます。一般に、 を生成多項式として 上の巡回符号は、 上の BCH 符号と呼ばれます。 の 連続
するべきを根として持つ 、
上の BCH符号 は、デコーダ(シンドローム)アルファベットがチャネル(データと生成多項式)アルファベットと同じで、 のすべての要素が で ある リード・ソロモン符号の一種です 。 [6] リード・ ソロモン符号のもう 1 つのタイプは、 BCH 符号ではない
オリジナル ビューのリード・ソロモン符号 です。
グ
(
x
)
{\displaystyle g(x)}
グ
ふ
(
q
)
。
{\displaystyle \mathrm {GF} (q).}
グ
ふ
(
q
p
)
{\displaystyle \mathrm {GF} (q^{p})}
グ
(
x
)
{\displaystyle g(x)}
グ
ふ
(
q
p
)
。
{\displaystyle \mathrm {GF} (q^{p})。}
グ
ふ
(
q
メートル
)
{\displaystyle \mathrm {GF} (q^{m})}
グ
(
x
)
{\displaystyle g(x)}
α
{\displaystyle \alpha}
グ
ふ
(
q
メートル
)
{\displaystyle \mathrm {GF} (q^{m})}
プロパティ
BCH 符号の生成多項式の次数は最大 です 。さらに、 および の場合 、生成多項式の次数は最大 です 。
(
d
−
1
)
メートル
{\displaystyle (d-1)m}
q
=
2
{\displaystyle q=2}
c
=
1
{\displaystyle c=1}
d
メートル
/
2
{\displaystyle dm/2}
BCH コードの最小ハミング距離は少なくとも です 。
d
{\displaystyle d}
BCH コードは巡回的です。
エンコーディング
生成多項式の倍数である多項式はすべて有効な BCH 符号語であるため、BCH エンコーディングは生成多項式を因数として持つ多項式を見つけるプロセスにすぎません。
BCH コード自体は、多項式の係数の意味について規定していません。概念的には、BCH デコード アルゴリズムの唯一の関心事は、受信したコードワードとのハミング距離が最小である有効なコードワードを見つけることです。したがって、BCH コードは、実装者がエンコードされた多項式にメッセージを埋め込む方法に応じて、 体系的なコード として実装することも、そうでない場合も
あります。
非体系的符号化:要素としてのメッセージ
生成子の倍数である多項式を見つける最も簡単な方法は、任意の多項式と生成子の積を計算することです。この場合、メッセージのシンボルを係数として使用して、任意の多項式を選択できます。
s
(
x
)
=
p
(
x
)
g
(
x
)
{\displaystyle s(x)=p(x)g(x)}
例として、 POCSAG などが使用する (31, 21) バイナリ BCH コードで使用するために選択された生成多項式 を考えます 。21 ビットのメッセージ {101101110111111101} をエンコードするには、まず 上の多項式として表現します 。
g
(
x
)
=
x
10
+
x
9
+
x
8
+
x
6
+
x
5
+
x
3
+
1
{\displaystyle g(x)=x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{3}+1}
G
F
(
2
)
{\displaystyle GF(2)}
p
(
x
)
=
x
20
+
x
18
+
x
17
+
x
15
+
x
14
+
x
13
+
x
11
+
x
10
+
x
9
+
x
8
+
x
6
+
x
5
+
x
4
+
x
3
+
x
2
+
1
{\displaystyle p(x)=x^{20}+x^{18}+x^{17}+x^{15}+x^{14}+x^{13}+x^{11}+x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{3}+x^{2}+1}
次に、( についても )計算します。
G
F
(
2
)
{\displaystyle GF(2)}
s
(
x
)
=
p
(
x
)
g
(
x
)
=
(
x
20
+
x
18
+
x
17
+
x
15
+
x
14
+
x
13
+
x
11
+
x
10
+
x
9
+
x
8
+
x
6
+
x
5
+
x
4
+
x
3
+
x
2
+
1
)
(
x
10
+
x
9
+
x
8
+
x
6
+
x
5
+
x
3
+
1
)
=
x
30
+
x
29
+
x
26
+
x
25
+
x
24
+
x
22
+
x
19
+
x
17
+
x
16
+
x
15
+
x
14
+
x
12
+
x
10
+
x
9
+
x
8
+
x
6
+
x
5
+
x
4
+
x
2
+
1
{\displaystyle {\begin{aligned}s(x)&=p(x)g(x)\\&=\left(x^{20}+x^{18}+x^{17}+x^{15}+x^{14}+x^{13}+x^{11}+x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{3}+x^{2}+1\right)\left(x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{3}+1\right)\\&=x^{30}+x^{29}+x^{26}+x^{25}+x^{24}+x^{22}+x^{19}+x^{17}+x^{16}+x^{15}+x^{14}+x^{12}+x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{2}+1\end{aligned}}}
したがって、送信されるコードワードは {1100111010011110111101110101} です。
受信機はこれらのビットを係数として使用し 、有効なコードワードを保証するためにエラー訂正を行った後、再計算することができる。
s
(
x
)
{\displaystyle s(x)}
p
(
x
)
=
s
(
x
)
/
g
(
x
)
{\displaystyle p(x)=s(x)/g(x)}
体系的なエンコーディング: プレフィックスとしてのメッセージ
体系的なコードとは、メッセージがコードワード内のどこかにそのまま現れるコードです。したがって、体系的な BCH エンコーディングでは、まずメッセージ多項式をコードワード多項式内に埋め込み、次に残りの(メッセージ以外の)項の係数を調整して が で割り切れるようにします 。
s
(
x
)
{\displaystyle s(x)}
g
(
x
)
{\displaystyle g(x)}
このエンコード方法は、被除数から剰余を引くと除数の倍数になるという事実を活用します。したがって、 前と同じようにメッセージ多項式を取り、それを乗算すると (メッセージを剰余から「シフト」するため)、 多項式の
ユークリッド除算を使用して次の式が得られます。
p
(
x
)
{\displaystyle p(x)}
x
n
−
k
{\displaystyle x^{n-k}}
p
(
x
)
x
n
−
k
=
q
(
x
)
g
(
x
)
+
r
(
x
)
{\displaystyle p(x)x^{n-k}=q(x)g(x)+r(x)}
ここで、 は有効なコードワードである ことがわかります。 は 常に より小さい次数 ( の次数 )であるため、メッセージ係数を変更することなく から を安全に減算できます。したがって、 は次 のように
表されます。
q
(
x
)
g
(
x
)
{\displaystyle q(x)g(x)}
r
(
x
)
{\displaystyle r(x)}
n
−
k
{\displaystyle n-k}
g
(
x
)
{\displaystyle g(x)}
p
(
x
)
x
n
−
k
{\displaystyle p(x)x^{n-k}}
s
(
x
)
{\displaystyle s(x)}
s
(
x
)
=
q
(
x
)
g
(
x
)
=
p
(
x
)
x
n
−
k
−
r
(
x
)
{\displaystyle s(x)=q(x)g(x)=p(x)x^{n-k}-r(x)}
上(つまり、バイナリ BCH コードの場合)、このプロセスは 巡回冗長検査 を追加することと区別がつかず、体系的なバイナリ BCH コードがエラー検出の目的でのみ使用される場合、BCH コードは 巡回冗長検査の数学 の一般化にすぎないことがわかります 。
G
F
(
2
)
{\displaystyle GF(2)}
体系的コーディングの利点は、受信側が エラー訂正を実行した後、最初の係数の後のすべてを破棄することで元のメッセージを復元できることです。
k
{\displaystyle k}
デコード
BCH コードをデコードするためのアルゴリズムは多数あります。最も一般的なアルゴリズムは次の概要に従います。
受信したベクトルの シンドローム s jを計算する
シンドロームから エラー数 t とエラー位置多項式 Λ(x)を決定する
エラー位置多項式の根を計算してエラー位置 X iを見つけます。
これらのエラー位置での エラー値 Y iを計算する
エラーを修正する
これらのステップのいくつかでは、デコード アルゴリズムが、受信したベクトルにエラーが多すぎて修正できないと判断する場合があります。たとえば、適切な t の値が見つからない場合、修正は失敗します。切り捨てられた (プリミティブではない) コードでは、エラーの位置が範囲外になることがあります。受信したベクトルにコードが修正できる以上のエラーがある場合、デコーダーは、送信されたメッセージではない、一見有効なメッセージを知らないうちに生成することがあります。
症候群を計算する
受信ベクトルは正しいコードワード と未知のエラーベクトル の和である。 シンドローム値は 多項式として考え、それを次のように評価することによって形成される。 したがって、シンドロームは [7]である。
R
{\displaystyle R}
C
{\displaystyle C}
E
.
{\displaystyle E.}
R
{\displaystyle R}
α
c
,
…
,
α
c
+
d
−
2
.
{\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2}.}
s
j
=
R
(
α
j
)
=
C
(
α
j
)
+
E
(
α
j
)
{\displaystyle s_{j}=R\left(\alpha ^{j}\right)=C\left(\alpha ^{j}\right)+E\left(\alpha ^{j}\right)}
〜の ために
j
=
c
{\displaystyle j=c}
c
+
d
−
2.
{\displaystyle c+d-2.}
は の倍数で ある のゼロな ので、 シンドローム値を調べるとエラー ベクトルが分離され、それを解き始めることができます。
α
j
{\displaystyle \alpha ^{j}}
g
(
x
)
,
{\displaystyle g(x),}
C
(
x
)
{\displaystyle C(x)}
C
(
α
j
)
=
0.
{\displaystyle C\left(\alpha ^{j}\right)=0.}
エラーがない場合、 すべての シンドロームがゼロであれば、デコードは完了です。
s
j
=
0
{\displaystyle s_{j}=0}
j
.
{\displaystyle j.}
エラー位置多項式を計算する
非ゼロのシンドロームがある場合は、エラーがあります。デコーダーは、エラーの数とそれらのエラーの位置を把握する必要があります。
単一のエラーがある場合、これを と書きます。 は エラーの位置、 は その大きさです。最初の2つのシンドロームは次のようになります。
E
(
x
)
=
e
x
i
,
{\displaystyle E(x)=e\,x^{i},}
i
{\displaystyle i}
e
{\displaystyle e}
s
c
=
e
α
c
i
s
c
+
1
=
e
α
(
c
+
1
)
i
=
α
i
s
c
{\displaystyle {\begin{aligned}s_{c}&=e\,\alpha ^{c\,i}\\s_{c+1}&=e\,\alpha ^{(c+1)\,i}=\alpha ^{i}s_{c}\end{aligned}}}
これらを組み合わせることで、 (リード・ソロモン符号の場合は完全に決定する)
についての計算と情報の提供が可能になります。
e
{\displaystyle e}
i
{\displaystyle i}
2つ以上のエラーがある場合、
E
(
x
)
=
e
1
x
i
1
+
e
2
x
i
2
+
⋯
{\displaystyle E(x)=e_{1}x^{i_{1}}+e_{2}x^{i_{2}}+\cdots \,}
未知のもの に対する結果として生じるシンドロームをどうやって解決し始めるかはすぐには明らかではない。
e
k
{\displaystyle e_{k}}
i
k
.
{\displaystyle i_{k}.}
最初のステップは、計算されたシンドロームと互換性があり、最小限の ロケータ多項式と互換性のあるものを見つけることです。
t
,
{\displaystyle t,}
Λ
(
x
)
=
∏
j
=
1
t
(
x
α
i
j
−
1
)
{\displaystyle \Lambda (x)=\prod _{j=1}^{t}\left(x\alpha ^{i_{j}}-1\right)}
このタスクによく使用される 3 つのアルゴリズムは次のとおりです。
Peterson-Gorenstein-Zierler アルゴリズム
ベルレカンプ・マッシーアルゴリズム
杉山ユークリッド互除法
Peterson-Gorenstein-Zierler アルゴリズム
ピーターソンのアルゴリズムは、一般化されたBCH復号化手順のステップ2です。ピーターソンのアルゴリズムは、 多項式の
エラーロケータ多項式係数を計算するために使用されます。
λ
1
,
λ
2
,
…
,
λ
v
{\displaystyle \lambda _{1},\lambda _{2},\dots ,\lambda _{v}}
Λ
(
x
)
=
1
+
λ
1
x
+
λ
2
x
2
+
⋯
+
λ
v
x
v
.
{\displaystyle \Lambda (x)=1+\lambda _{1}x+\lambda _{2}x^{2}+\cdots +\lambda _{v}x^{v}.}
次にPeterson-Gorenstein-Zierlerアルゴリズムの手順を説明します。 [8] 少なくとも2 t個の シンドローム s c , …, s c +2 t −1 が あるとします。v = t とします。
まず、シンドローム値を要素とする行列
を生成する。
S
v
×
v
{\displaystyle S_{v\times v}}
S
v
×
v
=
[
s
c
s
c
+
1
…
s
c
+
v
−
1
s
c
+
1
s
c
+
2
…
s
c
+
v
⋮
⋮
⋱
⋮
s
c
+
v
−
1
s
c
+
v
…
s
c
+
2
v
−
2
]
.
{\displaystyle S_{v\times v}={\begin{bmatrix}s_{c}&s_{c+1}&\dots &s_{c+v-1}\\s_{c+1}&s_{c+2}&\dots &s_{c+v}\\\vdots &\vdots &\ddots &\vdots \\s_{c+v-1}&s_{c+v}&\dots &s_{c+2v-2}\end{bmatrix}}.}
要素を持つベクトル
を生成する
c
v
×
1
{\displaystyle c_{v\times 1}}
C
v
×
1
=
[
s
c
+
v
s
c
+
v
+
1
⋮
s
c
+
2
v
−
1
]
.
{\displaystyle C_{v\times 1}={\begin{bmatrix}s_{c+v}\\s_{c+v+1}\\\vdots \\s_{c+2v-1}\end{bmatrix}}.}
未知の多項式係数を次のように表すとします
。
Λ
{\displaystyle \Lambda }
Λ
v
×
1
=
[
λ
v
λ
v
−
1
⋮
λ
1
]
.
{\displaystyle \Lambda _{v\times 1}={\begin{bmatrix}\lambda _{v}\\\lambda _{v-1}\\\vdots \\\lambda _{1}\end{bmatrix}}.}
行列方程式を形成する
S
v
×
v
Λ
v
×
1
=
−
C
v
×
1
.
{\displaystyle S_{v\times v}\Lambda _{v\times 1}=-C_{v\times 1\,}.}
行列の行列式 がゼロでない場合、実際にこの行列の逆行列を見つけて、未知の値の値を解くことができます 。
S
v
×
v
{\displaystyle S_{v\times v}}
Λ
{\displaystyle \Lambda }
従う
ならば
det
(
S
v
×
v
)
=
0
,
{\displaystyle \det \left(S_{v\times v}\right)=0,}
もし
v
=
0
{\displaystyle v=0}
それから
空のエラーロケータ多項式を宣言する
ピーターソン手順を停止します。
終わり
セット
v
←
v
−
1
{\displaystyle v\leftarrow v-1}
ピーターソンの解読の始まりから、より小さな
S
v
×
v
{\displaystyle S_{v\times v}}
の値が得られたら 、エラーロケータ多項式が得られます。
Λ
{\displaystyle \Lambda }
ピーターソン手順を停止します。
因数分解誤差位置多項式
これで多項式が得られたので、 Chien 検索 アルゴリズムなどを使用して、その根を形式内で 総当たり方式で見つけることができます 。基本要素の指数乗 により、受信したワード内でエラーが発生する位置がわかります。そのため、この多項式は「エラー ロケータ」多項式と呼ばれます。
Λ
(
x
)
{\displaystyle \Lambda (x)}
Λ
(
x
)
=
(
α
i
1
x
−
1
)
(
α
i
2
x
−
1
)
⋯
(
α
i
v
x
−
1
)
{\displaystyle \Lambda (x)=\left(\alpha ^{i_{1}}x-1\right)\left(\alpha ^{i_{2}}x-1\right)\cdots \left(\alpha ^{i_{v}}x-1\right)}
α
{\displaystyle \alpha }
Λ( x ) の零点は α − i1 , …, α − iv で ある。
エラー値を計算する
エラー位置がわかったら、次のステップはそれらの位置のエラー値を決定することです。次に、エラー値を使用してそれらの位置で受信した値を修正し、元のコードワードを復元します。
バイナリBCHの場合(すべての文字が読み取り可能)は、これは簡単です。これらの位置で受信ワードのビットを反転するだけで、修正されたコードワードが得られます。より一般的なケースでは、エラーの重みは 線形システムを解くことで決定できます。
e
j
{\displaystyle e_{j}}
s
c
=
e
1
α
c
i
1
+
e
2
α
c
i
2
+
⋯
s
c
+
1
=
e
1
α
(
c
+
1
)
i
1
+
e
2
α
(
c
+
1
)
i
2
+
⋯
⋮
{\displaystyle {\begin{aligned}s_{c}&=e_{1}\alpha ^{c\,i_{1}}+e_{2}\alpha ^{c\,i_{2}}+\cdots \\s_{c+1}&=e_{1}\alpha ^{(c+1)\,i_{1}}+e_{2}\alpha ^{(c+1)\,i_{2}}+\cdots \\&{}\ \vdots \end{aligned}}}
フォーニーアルゴリズム
しかし、フォーニーアルゴリズム と呼ばれるより効率的な方法があります 。
させて
S
(
x
)
=
s
c
+
s
c
+
1
x
+
s
c
+
2
x
2
+
⋯
+
s
c
+
d
−
2
x
d
−
2
.
{\displaystyle S(x)=s_{c}+s_{c+1}x+s_{c+2}x^{2}+\cdots +s_{c+d-2}x^{d-2}.}
v
⩽
d
−
1
,
λ
0
≠
0
Λ
(
x
)
=
∑
i
=
0
v
λ
i
x
i
=
λ
0
∏
k
=
0
v
(
α
−
i
k
x
−
1
)
.
{\displaystyle v\leqslant d-1,\lambda _{0}\neq 0\qquad \Lambda (x)=\sum _{i=0}^{v}\lambda _{i}x^{i}=\lambda _{0}\prod _{k=0}^{v}\left(\alpha ^{-i_{k}}x-1\right).}
そして誤差評価多項式 [9]
Ω
(
x
)
≡
S
(
x
)
Λ
(
x
)
mod
x
d
−
1
{\displaystyle \Omega (x)\equiv S(x)\Lambda (x){\bmod {x^{d-1}}}}
ついに:
Λ
′
(
x
)
=
∑
i
=
1
v
i
⋅
λ
i
x
i
−
1
,
{\displaystyle \Lambda '(x)=\sum _{i=1}^{v}i\cdot \lambda _{i}x^{i-1},}
どこ
i
⋅
x
:=
∑
k
=
1
i
x
.
{\displaystyle i\cdot x:=\sum _{k=1}^{i}x.}
シンドロームがエラーワードによって説明できる場合、エラーワードは位置 でのみ非ゼロになる可能性があり 、エラー値は
i
k
{\displaystyle i_{k}}
e
k
=
−
α
i
k
Ω
(
α
−
i
k
)
α
c
⋅
i
k
Λ
′
(
α
−
i
k
)
.
{\displaystyle e_{k}=-{\alpha ^{i_{k}}\Omega \left(\alpha ^{-i_{k}}\right) \over \alpha ^{c\cdot i_{k}}\Lambda '\left(\alpha ^{-i_{k}}\right)}.}
狭義の BCH コードの場合、 c = 1 なので、式は次のように簡略化されます。
e
k
=
−
Ω
(
α
−
i
k
)
Λ
′
(
α
−
i
k
)
.
{\displaystyle e_{k}=-{\Omega \left(\alpha ^{-i_{k}}\right) \over \Lambda '\left(\alpha ^{-i_{k}}\right)}.}
フォーニーアルゴリズムの計算の説明
これは、 ラグランジュ補間 と 関数生成 の手法に基づいています。
簡単にするために、 および を 仮定 する と 、
S
(
x
)
Λ
(
x
)
,
{\displaystyle S(x)\Lambda (x),}
λ
k
=
0
{\displaystyle \lambda _{k}=0}
k
>
v
,
{\displaystyle k>v,}
s
k
=
0
{\displaystyle s_{k}=0}
k
>
c
+
d
−
2.
{\displaystyle k>c+d-2.}
S
(
x
)
Λ
(
x
)
=
∑
j
=
0
∞
∑
i
=
0
j
s
j
−
i
+
1
λ
i
x
j
.
{\displaystyle S(x)\Lambda (x)=\sum _{j=0}^{\infty }\sum _{i=0}^{j}s_{j-i+1}\lambda _{i}x^{j}.}
S
(
x
)
Λ
(
x
)
=
S
(
x
)
{
λ
0
∏
ℓ
=
1
v
(
α
i
ℓ
x
−
1
)
}
=
{
∑
i
=
0
d
−
2
∑
j
=
1
v
e
j
α
(
c
+
i
)
⋅
i
j
x
i
}
{
λ
0
∏
ℓ
=
1
v
(
α
i
ℓ
x
−
1
)
}
=
{
∑
j
=
1
v
e
j
α
c
i
j
∑
i
=
0
d
−
2
(
α
i
j
)
i
x
i
}
{
λ
0
∏
ℓ
=
1
v
(
α
i
ℓ
x
−
1
)
}
=
{
∑
j
=
1
v
e
j
α
c
i
j
(
x
α
i
j
)
d
−
1
−
1
x
α
i
j
−
1
}
{
λ
0
∏
ℓ
=
1
v
(
α
i
ℓ
x
−
1
)
}
=
λ
0
∑
j
=
1
v
e
j
α
c
i
j
(
x
α
i
j
)
d
−
1
−
1
x
α
i
j
−
1
∏
ℓ
=
1
v
(
α
i
ℓ
x
−
1
)
=
λ
0
∑
j
=
1
v
e
j
α
c
i
j
(
(
x
α
i
j
)
d
−
1
−
1
)
∏
ℓ
∈
{
1
,
⋯
,
v
}
∖
{
j
}
(
α
i
ℓ
x
−
1
)
{\displaystyle {\begin{aligned}S(x)\Lambda (x)&=S(x)\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\left\{\sum _{i=0}^{d-2}\sum _{j=1}^{v}e_{j}\alpha ^{(c+i)\cdot i_{j}}x^{i}\right\}\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\left\{\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}\sum _{i=0}^{d-2}\left(\alpha ^{i_{j}}\right)^{i}x^{i}\right\}\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\left\{\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}{\frac {\left(x\alpha ^{i_{j}}\right)^{d-1}-1}{x\alpha ^{i_{j}}-1}}\right\}\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}{\frac {\left(x\alpha ^{i_{j}}\right)^{d-1}-1}{x\alpha ^{i_{j}}-1}}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\\&=\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}\left(\left(x\alpha ^{i_{j}}\right)^{d-1}-1\right)\prod _{\ell \in \{1,\cdots ,v\}\setminus \{j\}}\left(\alpha ^{i_{\ell }}x-1\right)\end{aligned}}}
未知数を計算したいので 、項を削除することで文脈を単純化することができます 。これにより、誤差評価多項式が得られます。
e
j
,
{\displaystyle e_{j},}
(
x
α
i
j
)
d
−
1
{\displaystyle \left(x\alpha ^{i_{j}}\right)^{d-1}}
Ω
(
x
)
≡
S
(
x
)
Λ
(
x
)
mod
x
d
−
1
.
{\displaystyle \Omega (x)\equiv S(x)\Lambda (x){\bmod {x^{d-1}}}.}
おかげで 私たちは
v
⩽
d
−
1
{\displaystyle v\leqslant d-1}
Ω
(
x
)
=
−
λ
0
∑
j
=
1
v
e
j
α
c
i
j
∏
ℓ
∈
{
1
,
⋯
,
v
}
∖
{
j
}
(
α
i
ℓ
x
−
1
)
.
{\displaystyle \Omega (x)=-\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{j\}}\left(\alpha ^{i_{\ell }}x-1\right).}
ラグランジュ補間法 のおかげで、和は1つの被加数に縮退する。
Λ
{\displaystyle \Lambda }
x
=
α
−
i
k
{\displaystyle x=\alpha ^{-i_{k}}}
Ω
(
α
−
i
k
)
=
−
λ
0
e
k
α
c
⋅
i
k
∏
ℓ
∈
{
1
,
⋯
,
v
}
∖
{
k
}
(
α
i
ℓ
α
−
i
k
−
1
)
.
{\displaystyle \Omega \left(\alpha ^{-i_{k}}\right)=-\lambda _{0}e_{k}\alpha ^{c\cdot i_{k}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{k\}}\left(\alpha ^{i_{\ell }}\alpha ^{-i_{k}}-1\right).}
を得るには、 積を取り除く必要があります。 の計算済みの根から直接積を計算することもできます が、より単純な形式を使用することもできます。
e
k
{\displaystyle e_{k}}
α
−
i
j
{\displaystyle \alpha ^{-i_{j}}}
Λ
,
{\displaystyle \Lambda ,}
正式な派生語 として
Λ
′
(
x
)
=
λ
0
∑
j
=
1
v
α
i
j
∏
ℓ
∈
{
1
,
⋯
,
v
}
∖
{
j
}
(
α
i
ℓ
x
−
1
)
,
{\displaystyle \Lambda '(x)=\lambda _{0}\sum _{j=1}^{v}\alpha ^{i_{j}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{j\}}\left(\alpha ^{i_{\ell }}x-1\right),}
再び、被加数は1つだけになります
Λ
′
(
α
−
i
k
)
=
λ
0
α
i
k
∏
ℓ
∈
{
1
,
⋯
,
v
}
∖
{
k
}
(
α
i
ℓ
α
−
i
k
−
1
)
.
{\displaystyle \Lambda '\left(\alpha ^{-i_{k}}\right)=\lambda _{0}\alpha ^{i_{k}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{k\}}\left(\alpha ^{i_{\ell }}\alpha ^{-i_{k}}-1\right).}
それで最後に
e
k
=
−
α
i
k
Ω
(
α
−
i
k
)
α
c
⋅
i
k
Λ
′
(
α
−
i
k
)
.
{\displaystyle e_{k}=-{\frac {\alpha ^{i_{k}}\Omega \left(\alpha ^{-i_{k}}\right)}{\alpha ^{c\cdot i_{k}}\Lambda '\left(\alpha ^{-i_{k}}\right)}}.}
この式は、形式
の形式微分を計算するときに便利です。
Λ
{\displaystyle \Lambda }
Λ
(
x
)
=
∑
i
=
1
v
λ
i
x
i
{\displaystyle \Lambda (x)=\sum _{i=1}^{v}\lambda _{i}x^{i}}
得られるもの:
Λ
′
(
x
)
=
∑
i
=
1
v
i
⋅
λ
i
x
i
−
1
,
{\displaystyle \Lambda '(x)=\sum _{i=1}^{v}i\cdot \lambda _{i}x^{i-1},}
どこ
i
⋅
x
:=
∑
k
=
1
i
x
.
{\displaystyle i\cdot x:=\sum _{k=1}^{i}x.}
拡張ユークリッドアルゴリズムに基づく復号
多項式Λとエラーロケータ多項式の両方を見つける代替プロセスは、杉山康夫による 拡張ユークリッド互除法 の適応に基づいています。 [10] 判読できない文字の修正も簡単にアルゴリズムに組み込むことができます。
読み取り不可能な文字の位置をとします 。これらの位置を局所化する多項式を作成します。
読み取り不可能な位置の値を 0 に設定し、シンドロームを計算します。
k
1
,
.
.
.
,
k
k
{\displaystyle k_{1},...,k_{k}}
Γ
(
x
)
=
∏
i
=
1
k
(
x
α
k
i
−
1
)
.
{\displaystyle \Gamma (x)=\prod _{i=1}^{k}\left(x\alpha ^{k_{i}}-1\right).}
フォーニーの公式で既に定義したように、
S
(
x
)
=
∑
i
=
0
d
−
2
s
c
+
i
x
i
.
{\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}.}
多項式と の最小公約数を求める拡張ユークリッドの互除法を実行してみましょう。
目標は最小公約数を見つけることではなく、 最大次数の多項式 と となる多項式を見つけることです。
の低次保証 は 、拡張された( による )定義条件を満たす でしょう。
S
(
x
)
Γ
(
x
)
{\displaystyle S(x)\Gamma (x)}
x
d
−
1
.
{\displaystyle x^{d-1}.}
r
(
x
)
{\displaystyle r(x)}
⌊
(
d
+
k
−
3
)
/
2
⌋
{\displaystyle \lfloor (d+k-3)/2\rfloor }
a
(
x
)
,
b
(
x
)
{\displaystyle a(x),b(x)}
r
(
x
)
=
a
(
x
)
S
(
x
)
Γ
(
x
)
+
b
(
x
)
x
d
−
1
.
{\displaystyle r(x)=a(x)S(x)\Gamma (x)+b(x)x^{d-1}.}
r
(
x
)
{\displaystyle r(x)}
a
(
x
)
{\displaystyle a(x)}
Γ
{\displaystyle \Gamma }
Λ
.
{\displaystyle \Lambda .}
Fourney の公式の
の代わりに を定義し て使用すると、誤差値が得られます。
Ξ
(
x
)
=
a
(
x
)
Γ
(
x
)
{\displaystyle \Xi (x)=a(x)\Gamma (x)}
Ξ
{\displaystyle \Xi }
Λ
(
x
)
{\displaystyle \Lambda (x)}
このアルゴリズムの主な利点は、 Forney の式に必要な
計算を同時に実行できることです。
Ω
(
x
)
=
S
(
x
)
Ξ
(
x
)
mod
x
d
−
1
=
r
(
x
)
{\displaystyle \Omega (x)=S(x)\Xi (x){\bmod {x}}^{d-1}=r(x)}
デコードプロセスの説明
目標は、読み取り可能な位置で受信ワードとできるだけ異なるコードワードを見つけることです。受信ワードを最も近いコードワードとエラーワードの合計として表現する場合、読み取り可能な位置でゼロ以外の数が最小のエラーワードを見つけようとします。シンドロームは 条件によってエラーワードを制限します
。
s
i
{\displaystyle s_{i}}
s
i
=
∑
j
=
0
n
−
1
e
j
α
i
j
.
{\displaystyle s_{i}=\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}.}
これらの条件を別々に記述することも、多項式を作成することもできます。
S
(
x
)
=
∑
i
=
0
d
−
2
s
c
+
i
x
i
{\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}}
指数付近の係数 を比較すると
0
{\displaystyle 0}
d
−
2.
{\displaystyle d-2.}
S
(
x
)
=
{
0
,
⋯
,
d
−
2
}
E
(
x
)
=
∑
i
=
0
d
−
2
∑
j
=
0
n
−
1
e
j
α
i
j
α
c
j
x
i
.
{\displaystyle S(x){\stackrel {\{0,\cdots ,\,d-2\}}{=}}E(x)=\sum _{i=0}^{d-2}\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}\alpha ^{cj}x^{i}.}
位置に判読不能な文字があると仮定すると、シンドロームの集合を次 の式で定義される シンドロームの集合に 置き換えることができる。 エラーワードに対して、元のシンドロームの集合によるすべての制約が 成り立つと仮定すると、
k
1
,
{\displaystyle k_{1},}
{
s
c
,
⋯
,
s
c
+
d
−
2
}
{\displaystyle \{s_{c},\cdots ,s_{c+d-2}\}}
{
t
c
,
⋯
,
t
c
+
d
−
3
}
{\displaystyle \{t_{c},\cdots ,t_{c+d-3}\}}
t
i
=
α
k
1
s
i
−
s
i
+
1
.
{\displaystyle t_{i}=\alpha ^{k_{1}}s_{i}-s_{i+1}.}
{
s
c
,
⋯
,
s
c
+
d
−
2
}
{\displaystyle \{s_{c},\cdots ,s_{c+d-2}\}}
t
i
=
α
k
1
s
i
−
s
i
+
1
=
α
k
1
∑
j
=
0
n
−
1
e
j
α
i
j
−
∑
j
=
0
n
−
1
e
j
α
j
α
i
j
=
∑
j
=
0
n
−
1
e
j
(
α
k
1
−
α
j
)
α
i
j
.
{\displaystyle t_{i}=\alpha ^{k_{1}}s_{i}-s_{i+1}=\alpha ^{k_{1}}\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}-\sum _{j=0}^{n-1}e_{j}\alpha ^{j}\alpha ^{ij}=\sum _{j=0}^{n-1}e_{j}\left(\alpha ^{k_{1}}-\alpha ^{j}\right)\alpha ^{ij}.}
新しい症候群のセットはエラーベクトルを制限する
f
j
=
e
j
(
α
k
1
−
α
j
)
{\displaystyle f_{j}=e_{j}\left(\alpha ^{k_{1}}-\alpha ^{j}\right)}
元のシンドロームのセットがエラーベクトルを制限したのと同じ方法で、 が ゼロで ある 座標を除いて、 エラー位置を見つけるという目的のために、シンドロームのセットを同様に変更して、判読できない文字をすべて反映させることができます。これにより、シンドロームのセットが短くなります。
e
j
.
{\displaystyle e_{j}.}
k
1
,
{\displaystyle k_{1},}
f
k
1
=
0
,
{\displaystyle f_{k_{1}}=0,}
f
j
{\displaystyle f_{j}}
e
j
=
0.
{\displaystyle e_{j}=0.}
k
.
{\displaystyle k.}
多項式定式化では、シンドローム集合 をシンドローム集合に置き換えると 、
{
s
c
,
⋯
,
s
c
+
d
−
2
}
{\displaystyle \{s_{c},\cdots ,s_{c+d-2}\}}
{
t
c
,
⋯
,
t
c
+
d
−
3
}
{\displaystyle \{t_{c},\cdots ,t_{c+d-3}\}}
T
(
x
)
=
∑
i
=
0
d
−
3
t
c
+
i
x
i
=
α
k
1
∑
i
=
0
d
−
3
s
c
+
i
x
i
−
∑
i
=
1
d
−
2
s
c
+
i
x
i
−
1
.
{\displaystyle T(x)=\sum _{i=0}^{d-3}t_{c+i}x^{i}=\alpha ^{k_{1}}\sum _{i=0}^{d-3}s_{c+i}x^{i}-\sum _{i=1}^{d-2}s_{c+i}x^{i-1}.}
したがって、
x
T
(
x
)
=
{
1
,
⋯
,
d
−
2
}
(
x
α
k
1
−
1
)
S
(
x
)
.
{\displaystyle xT(x){\stackrel {\{1,\cdots ,\,d-2\}}{=}}\left(x\alpha ^{k_{1}}-1\right)S(x).}
を に置き換えた後 、べき乗付近の係数に対する式が必要となる。
S
(
x
)
{\displaystyle S(x)}
S
(
x
)
Γ
(
x
)
{\displaystyle S(x)\Gamma (x)}
k
,
⋯
,
d
−
2.
{\displaystyle k,\cdots ,d-2.}
判読不能な文字の場合と同様に、与えられた位置の影響を排除するという観点からエラー位置を探すことも考えられます。 影響を排除するとすべてゼロからなるシンドロームの集合が得られるような位置を見つけた場合、これらの座標にのみエラーを持つエラーベクトルが存在します。 これらの座標の影響を排除する多項式を とすると、次の式が得られます。
v
{\displaystyle v}
Λ
(
x
)
{\displaystyle \Lambda (x)}
S
(
x
)
Γ
(
x
)
Λ
(
x
)
=
{
k
+
v
,
⋯
,
d
−
2
}
0.
{\displaystyle S(x)\Gamma (x)\Lambda (x){\stackrel {\{k+v,\cdots ,d-2\}}{=}}0.}
ユークリッドアルゴリズムでは、最大で(読み取り可能な位置で)エラーを訂正しようとします。エラー数が大きいほど、受信語から同じ距離内にコードワードが多く存在する可能性があるためです。したがって、 私たちが探している に対して、方程式は、から始まるべき乗近くの係数に対して成立する必要があります
。
1
2
(
d
−
1
−
k
)
{\displaystyle {\tfrac {1}{2}}(d-1-k)}
Λ
(
x
)
{\displaystyle \Lambda (x)}
k
+
⌊
1
2
(
d
−
1
−
k
)
⌋
.
{\displaystyle k+\left\lfloor {\frac {1}{2}}(d-1-k)\right\rfloor .}
Forney の式では、 スカラーを掛けても同じ結果が得られます。
Λ
(
x
)
{\displaystyle \Lambda (x)}
ユークリッドのアルゴリズムでは、次数と同じ数の異なる根を持つよりも高い次数を 見つけることが起こり得ます 。この場合、フォーニーの公式はすべての根のエラーを訂正できますが、とにかくそのような多くのエラーを訂正することは危険です (特に受信語に他の制限がない場合)。通常、 より高い次数を取得した後、エラーを訂正しないことに決めます。 根の多重度が高い場合、または根の数が次数より少ない場合、訂正は失敗する可能性があります。フォーニーの公式が送信されたアルファベットの外側でエラーを返すことでも失敗が検出されます。
Λ
(
x
)
{\displaystyle \Lambda (x)}
1
2
(
d
−
1
−
k
)
{\displaystyle {\tfrac {1}{2}}(d-1-k)}
Λ
(
x
)
{\displaystyle \Lambda (x)}
Λ
(
x
)
{\displaystyle \Lambda (x)}
エラーを修正する
エラー値とエラー位置を使用してエラーを修正し、エラー位置のエラー値を減算して修正されたコード ベクトルを形成します。
デコード例
判読不能な文字のないバイナリコードのデコード
およびを伴う GF(2 4 ) の BCH コードを考えます。(これは QR コード で使用されます 。) 送信されるメッセージを [1 1 0 1 1]、または多項式表記法でとします。
「チェックサム」シンボルは で割っ て剰余をとることで計算され、結果は または [ 1 0 0 0 0 1 0 1 0 0 ] になります。これらはメッセージに追加されるため、送信されるコードワードは [ 1 1 0 1 1 0 0 0 0 1 0 1 0 0 ] になります。
d
=
7
{\displaystyle d=7}
g
(
x
)
=
x
10
+
x
8
+
x
5
+
x
4
+
x
2
+
x
+
1
{\displaystyle g(x)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1}
M
(
x
)
=
x
4
+
x
3
+
x
+
1.
{\displaystyle M(x)=x^{4}+x^{3}+x+1.}
x
10
M
(
x
)
{\displaystyle x^{10}M(x)}
g
(
x
)
{\displaystyle g(x)}
x
9
+
x
4
+
x
2
{\displaystyle x^{9}+x^{4}+x^{2}}
ここで、送信時に2つのビットエラーがあったと仮定すると、受信コードワードは[1 0 0 1 1 1 0 0 0 1 1 0 1 0 0]となります。多項式表記では次のようになります。
R
(
x
)
=
C
(
x
)
+
x
13
+
x
5
=
x
14
+
x
11
+
x
10
+
x
9
+
x
5
+
x
4
+
x
2
{\displaystyle R(x)=C(x)+x^{13}+x^{5}=x^{14}+x^{11}+x^{10}+x^{9}+x^{5}+x^{4}+x^{2}}
エラーを修正するには、まずシンドロームを計算します。次の 式をとれば 、
次の拡張行列の行を削減して、Peterson 手順を適用します。
α
=
0010
,
{\displaystyle \alpha =0010,}
s
1
=
R
(
α
1
)
=
1011
,
{\displaystyle s_{1}=R(\alpha ^{1})=1011,}
s
2
=
1001
,
{\displaystyle s_{2}=1001,}
s
3
=
1011
,
{\displaystyle s_{3}=1011,}
s
4
=
1101
,
{\displaystyle s_{4}=1101,}
s
5
=
0001
,
{\displaystyle s_{5}=0001,}
s
6
=
1001.
{\displaystyle s_{6}=1001.}
[
S
3
×
3
|
C
3
×
1
]
=
[
s
1
s
2
s
3
s
4
s
2
s
3
s
4
s
5
s
3
s
4
s
5
s
6
]
=
[
1011
1001
1011
1101
1001
1011
1101
0001
1011
1101
0001
1001
]
⇒
[
0001
0000
1000
0111
0000
0001
1011
0001
0000
0000
0000
0000
]
{\displaystyle \left[S_{3\times 3}|C_{3\times 1}\right]={\begin{bmatrix}s_{1}&s_{2}&s_{3}&s_{4}\\s_{2}&s_{3}&s_{4}&s_{5}\\s_{3}&s_{4}&s_{5}&s_{6}\end{bmatrix}}={\begin{bmatrix}1011&1001&1011&1101\\1001&1011&1101&0001\\1011&1101&0001&1001\end{bmatrix}}\Rightarrow {\begin{bmatrix}0001&0000&1000&0111\\0000&0001&1011&0001\\0000&0000&0000&0000\end{bmatrix}}}
ゼロ行があるため、 S 3×3 は特異ですが、コードワードに 2 つのエラーしか導入されていないため、これは驚くことではありません。ただし、行列の左上隅は [ S 2×2 | C 2×1 ] と同じであり、解が生成されます。
結果として得られるエラー位置多項式は 、および にゼロを持つ次のようになります。
の指数は、 エラーの位置に対応します。この例では、可能な値は 1 のみであるため、エラー値を計算する必要はありません。
λ
2
=
1000
,
{\displaystyle \lambda _{2}=1000,}
λ
1
=
1011.
{\displaystyle \lambda _{1}=1011.}
Λ
(
x
)
=
1000
x
2
+
1011
x
+
0001
,
{\displaystyle \Lambda (x)=1000x^{2}+1011x+0001,}
0100
=
α
−
13
{\displaystyle 0100=\alpha ^{-13}}
0111
=
α
−
5
.
{\displaystyle 0111=\alpha ^{-5}.}
α
{\displaystyle \alpha }
判読できない文字によるデコード
同じシナリオですが、受信したワードに 2 つの判読できない文字 [ 1 0 0 ? 1 1 ? 0 0 1 1 0 1 0 0 ] があるとします。判読できない文字をゼロに置き換え、それらの位置を反映する多項式を作成します。 シンドローム とを計算します (GF(2 4 ) 同型に依存しない log 表記を使用します。計算チェックには、前の例で使用したのと同じ加算表現を使用できます。の 累乗の 16 進数表記は、1、2、4、8、3、6、C、B、5、A、7、E、F、D、9 の順で、加算はビット単位の XOR に基づきます。)
Γ
(
x
)
=
(
α
8
x
−
1
)
(
α
11
x
−
1
)
.
{\displaystyle \Gamma (x)=\left(\alpha ^{8}x-1\right)\left(\alpha ^{11}x-1\right).}
s
1
=
α
−
7
,
s
2
=
α
1
,
s
3
=
α
4
,
s
4
=
α
2
,
s
5
=
α
5
,
{\displaystyle s_{1}=\alpha ^{-7},s_{2}=\alpha ^{1},s_{3}=\alpha ^{4},s_{4}=\alpha ^{2},s_{5}=\alpha ^{5},}
s
6
=
α
−
7
.
{\displaystyle s_{6}=\alpha ^{-7}.}
α
{\displaystyle \alpha }
シンドローム多項式を作ってみましょう
S
(
x
)
=
α
−
7
+
α
1
x
+
α
4
x
2
+
α
2
x
3
+
α
5
x
4
+
α
−
7
x
5
,
{\displaystyle S(x)=\alpha ^{-7}+\alpha ^{1}x+\alpha ^{4}x^{2}+\alpha ^{2}x^{3}+\alpha ^{5}x^{4}+\alpha ^{-7}x^{5},}
計算する
S
(
x
)
Γ
(
x
)
=
α
−
7
+
α
4
x
+
α
−
1
x
2
+
α
6
x
3
+
α
−
1
x
4
+
α
5
x
5
+
α
7
x
6
+
α
−
3
x
7
.
{\displaystyle S(x)\Gamma (x)=\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}.}
拡張ユークリッドの互除法を実行します。
(
S
(
x
)
Γ
(
x
)
x
6
)
=
(
α
−
7
+
α
4
x
+
α
−
1
x
2
+
α
6
x
3
+
α
−
1
x
4
+
α
5
x
5
+
α
7
x
6
+
α
−
3
x
7
x
6
)
=
(
α
7
+
α
−
3
x
1
1
0
)
(
x
6
α
−
7
+
α
4
x
+
α
−
1
x
2
+
α
6
x
3
+
α
−
1
x
4
+
α
5
x
5
+
2
α
7
x
6
+
2
α
−
3
x
7
)
=
(
α
7
+
α
−
3
x
1
1
0
)
(
α
4
+
α
−
5
x
1
1
0
)
(
α
−
7
+
α
4
x
+
α
−
1
x
2
+
α
6
x
3
+
α
−
1
x
4
+
α
5
x
5
α
−
3
+
(
α
−
7
+
α
3
)
x
+
(
α
3
+
α
−
1
)
x
2
+
(
α
−
5
+
α
−
6
)
x
3
+
(
α
3
+
α
1
)
x
4
+
2
α
−
6
x
5
+
2
x
6
)
=
(
(
1
+
α
−
4
)
+
(
α
1
+
α
2
)
x
+
α
7
x
2
α
7
+
α
−
3
x
α
4
+
α
−
5
x
1
)
(
α
−
7
+
α
4
x
+
α
−
1
x
2
+
α
6
x
3
+
α
−
1
x
4
+
α
5
x
5
α
−
3
+
α
−
2
x
+
α
0
x
2
+
α
−
2
x
3
+
α
−
6
x
4
)
=
(
α
−
3
+
α
5
x
+
α
7
x
2
α
7
+
α
−
3
x
α
4
+
α
−
5
x
1
)
(
α
−
5
+
α
−
4
x
1
1
0
)
(
α
−
3
+
α
−
2
x
+
α
0
x
2
+
α
−
2
x
3
+
α
−
6
x
4
(
α
7
+
α
−
7
)
+
(
2
α
−
7
+
α
4
)
x
+
(
α
−
5
+
α
−
6
+
α
−
1
)
x
2
+
(
α
−
7
+
α
−
4
+
α
6
)
x
3
+
(
α
4
+
α
−
6
+
α
−
1
)
x
4
+
2
α
5
x
5
)
=
(
α
7
x
+
α
5
x
2
+
α
3
x
3
α
−
3
+
α
5
x
+
α
7
x
2
α
3
+
α
−
5
x
+
α
6
x
2
α
4
+
α
−
5
x
)
(
α
−
3
+
α
−
2
x
+
α
0
x
2
+
α
−
2
x
3
+
α
−
6
x
4
α
−
4
+
α
4
x
+
α
2
x
2
+
α
−
5
x
3
)
.
{\displaystyle {\begin{aligned}&{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}\\x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}x^{6}\\\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+2\alpha ^{7}x^{6}+2\alpha ^{-3}x^{7}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{-5}x&1\\1&0\end{pmatrix}}\\&\qquad {\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\\alpha ^{-3}+\left(\alpha ^{-7}+\alpha ^{3}\right)x+\left(\alpha ^{3}+\alpha ^{-1}\right)x^{2}+\left(\alpha ^{-5}+\alpha ^{-6}\right)x^{3}+\left(\alpha ^{3}+\alpha ^{1}\right)x^{4}+2\alpha ^{-6}x^{5}+2x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\left(1+\alpha ^{-4}\right)+\left(\alpha ^{1}+\alpha ^{2}\right)x+\alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-5}+\alpha ^{-4}x&1\\1&0\end{pmatrix}}\\&\qquad {\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\left(\alpha ^{7}+\alpha ^{-7}\right)+\left(2\alpha ^{-7}+\alpha ^{4}\right)x+\left(\alpha ^{-5}+\alpha ^{-6}+\alpha ^{-1}\right)x^{2}+\left(\alpha ^{-7}+\alpha ^{-4}+\alpha ^{6}\right)x^{3}+\left(\alpha ^{4}+\alpha ^{-6}+\alpha ^{-1}\right)x^{4}+2\alpha ^{5}x^{5}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}{\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}\end{pmatrix}}.\end{aligned}}}
我々は最大3次の多項式に到達しており、
(
−
(
α
4
+
α
−
5
x
)
α
−
3
+
α
5
x
+
α
7
x
2
α
3
+
α
−
5
x
+
α
6
x
2
−
(
α
7
x
+
α
5
x
2
+
α
3
x
3
)
)
(
α
7
x
+
α
5
x
2
+
α
3
x
3
α
−
3
+
α
5
x
+
α
7
x
2
α
3
+
α
−
5
x
+
α
6
x
2
α
4
+
α
−
5
x
)
=
(
1
0
0
1
)
,
{\displaystyle {\begin{pmatrix}-\left(\alpha ^{4}+\alpha ^{-5}x\right)&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&-\left(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}\right)\end{pmatrix}}{\begin{pmatrix}\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}={\begin{pmatrix}1&0\\0&1\end{pmatrix}},}
私たちは得る
(
−
(
α
4
+
α
−
5
x
)
α
−
3
+
α
5
x
+
α
7
x
2
α
3
+
α
−
5
x
+
α
6
x
2
−
(
α
7
x
+
α
5
x
2
+
α
3
x
3
)
)
(
S
(
x
)
Γ
(
x
)
x
6
)
=
(
α
−
3
+
α
−
2
x
+
α
0
x
2
+
α
−
2
x
3
+
α
−
6
x
4
α
−
4
+
α
4
x
+
α
2
x
2
+
α
−
5
x
3
)
.
{\displaystyle {\begin{pmatrix}-\left(\alpha ^{4}+\alpha ^{-5}x\right)&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&-\left(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}\right)\end{pmatrix}}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}\end{pmatrix}}.}
したがって、
S
(
x
)
Γ
(
x
)
(
α
3
+
α
−
5
x
+
α
6
x
2
)
−
(
α
7
x
+
α
5
x
2
+
α
3
x
3
)
x
6
=
α
−
4
+
α
4
x
+
α
2
x
2
+
α
−
5
x
3
.
{\displaystyle S(x)\Gamma (x)\left(\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}\right)-\left(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}\right)x^{6}=\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}.}
心配しないで ください。 の根を力ずくで見つけます。 根は であり 、 です (たとえば、見つけた後、 対応する monom で 割ることができ 、結果として得られる monom の根は簡単に見つけることができます)。
Λ
(
x
)
=
α
3
+
α
−
5
x
+
α
6
x
2
.
{\displaystyle \Lambda (x)=\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}.}
λ
0
≠
1.
{\displaystyle \lambda _{0}\neq 1.}
Λ
.
{\displaystyle \Lambda .}
α
2
,
{\displaystyle \alpha ^{2},}
α
10
{\displaystyle \alpha ^{10}}
α
2
{\displaystyle \alpha ^{2}}
Λ
{\displaystyle \Lambda }
(
x
−
α
2
)
{\displaystyle \left(x-\alpha ^{2}\right)}
させて
Ξ
(
x
)
=
Γ
(
x
)
Λ
(
x
)
=
α
3
+
α
4
x
2
+
α
2
x
3
+
α
−
5
x
4
Ω
(
x
)
=
S
(
x
)
Ξ
(
x
)
≡
α
−
4
+
α
4
x
+
α
2
x
2
+
α
−
5
x
3
mod
x
6
{\displaystyle {\begin{aligned}\Xi (x)&=\Gamma (x)\Lambda (x)=\alpha ^{3}+\alpha ^{4}x^{2}+\alpha ^{2}x^{3}+\alpha ^{-5}x^{4}\\\Omega (x)&=S(x)\Xi (x)\equiv \alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}{\bmod {x^{6}}}\end{aligned}}}
式を使ってエラー値を調べてみましょう
e
j
=
−
Ω
(
α
−
i
j
)
Ξ
′
(
α
−
i
j
)
,
{\displaystyle e_{j}=-{\frac {\Omega \left(\alpha ^{-i_{j}}\right)}{\Xi '\left(\alpha ^{-i_{j}}\right)}},}
私たち
のルーツは どこにあるのか
α
−
i
j
{\displaystyle \alpha ^{-i_{j}}}
Ξ
(
x
)
.
{\displaystyle \Xi (x).}
Ξ
′
(
x
)
=
α
2
x
2
.
{\displaystyle \Xi '(x)=\alpha ^{2}x^{2}.}
e
1
=
−
Ω
(
α
4
)
Ξ
′
(
α
4
)
=
α
−
4
+
α
−
7
+
α
−
5
+
α
7
α
−
5
=
α
−
5
α
−
5
=
1
e
2
=
−
Ω
(
α
7
)
Ξ
′
(
α
7
)
=
α
−
4
+
α
−
4
+
α
1
+
α
1
α
1
=
0
e
3
=
−
Ω
(
α
10
)
Ξ
′
(
α
10
)
=
α
−
4
+
α
−
1
+
α
7
+
α
−
5
α
7
=
α
7
α
7
=
1
e
4
=
−
Ω
(
α
2
)
Ξ
′
(
α
2
)
=
α
−
4
+
α
6
+
α
6
+
α
1
α
6
=
α
6
α
6
=
1
{\displaystyle {\begin{aligned}e_{1}&=-{\frac {\Omega (\alpha ^{4})}{\Xi '(\alpha ^{4})}}={\frac {\alpha ^{-4}+\alpha ^{-7}+\alpha ^{-5}+\alpha ^{7}}{\alpha ^{-5}}}={\frac {\alpha ^{-5}}{\alpha ^{-5}}}=1\\e_{2}&=-{\frac {\Omega (\alpha ^{7})}{\Xi '(\alpha ^{7})}}={\frac {\alpha ^{-4}+\alpha ^{-4}+\alpha ^{1}+\alpha ^{1}}{\alpha ^{1}}}=0\\e_{3}&=-{\frac {\Omega (\alpha ^{10})}{\Xi '(\alpha ^{10})}}={\frac {\alpha ^{-4}+\alpha ^{-1}+\alpha ^{7}+\alpha ^{-5}}{\alpha ^{7}}}={\frac {\alpha ^{7}}{\alpha ^{7}}}=1\\e_{4}&=-{\frac {\Omega (\alpha ^{2})}{\Xi '(\alpha ^{2})}}={\frac {\alpha ^{-4}+\alpha ^{6}+\alpha ^{6}+\alpha ^{1}}{\alpha ^{6}}}={\frac {\alpha ^{6}}{\alpha ^{6}}}=1\end{aligned}}}
事実、それは 驚くべきことではありません。
e
3
=
e
4
=
1
,
{\displaystyle e_{3}=e_{4}=1,}
したがって、修正されたコードは [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0] になります。
少数のエラーで判読不能な文字をデコードする
エラー数が少ない場合のアルゴリズムの動作を示しましょう。受信した単語が [ 1 0 0 ? 1 1 ? 0 0 0 1 0 1 0 0 ] であるとします。
再び、判読できない文字をゼロに置き換え、それらの位置を反映する多項式を作成します。
シンドロームを計算し 、
シンドローム多項式を作成します。
Γ
(
x
)
=
(
α
8
x
−
1
)
(
α
11
x
−
1
)
.
{\displaystyle \Gamma (x)=\left(\alpha ^{8}x-1\right)\left(\alpha ^{11}x-1\right).}
s
1
=
α
4
,
s
2
=
α
−
7
,
s
3
=
α
1
,
s
4
=
α
1
,
s
5
=
α
0
,
{\displaystyle s_{1}=\alpha ^{4},s_{2}=\alpha ^{-7},s_{3}=\alpha ^{1},s_{4}=\alpha ^{1},s_{5}=\alpha ^{0},}
s
6
=
α
2
.
{\displaystyle s_{6}=\alpha ^{2}.}
S
(
x
)
=
α
4
+
α
−
7
x
+
α
1
x
2
+
α
1
x
3
+
α
0
x
4
+
α
2
x
5
,
S
(
x
)
Γ
(
x
)
=
α
4
+
α
7
x
+
α
5
x
2
+
α
3
x
3
+
α
1
x
4
+
α
−
1
x
5
+
α
−
1
x
6
+
α
6
x
7
.
{\displaystyle {\begin{aligned}S(x)&=\alpha ^{4}+\alpha ^{-7}x+\alpha ^{1}x^{2}+\alpha ^{1}x^{3}+\alpha ^{0}x^{4}+\alpha ^{2}x^{5},\\S(x)\Gamma (x)&=\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+\alpha ^{-1}x^{6}+\alpha ^{6}x^{7}.\end{aligned}}}
拡張ユークリッドの互除法を実行してみましょう。
(
S
(
x
)
Γ
(
x
)
x
6
)
=
(
α
4
+
α
7
x
+
α
5
x
2
+
α
3
x
3
+
α
1
x
4
+
α
−
1
x
5
+
α
−
1
x
6
+
α
6
x
7
x
6
)
=
(
α
−
1
+
α
6
x
1
1
0
)
(
x
6
α
4
+
α
7
x
+
α
5
x
2
+
α
3
x
3
+
α
1
x
4
+
α
−
1
x
5
+
2
α
−
1
x
6
+
2
α
6
x
7
)
=
(
α
−
1
+
α
6
x
1
1
0
)
(
α
3
+
α
1
x
1
1
0
)
(
α
4
+
α
7
x
+
α
5
x
2
+
α
3
x
3
+
α
1
x
4
+
α
−
1
x
5
α
7
+
(
α
−
5
+
α
5
)
x
+
2
α
−
7
x
2
+
2
α
6
x
3
+
2
α
4
x
4
+
2
α
2
x
5
+
2
x
6
)
=
(
(
1
+
α
2
)
+
(
α
0
+
α
−
6
)
x
+
α
7
x
2
α
−
1
+
α
6
x
α
3
+
α
1
x
1
)
(
α
4
+
α
7
x
+
α
5
x
2
+
α
3
x
3
+
α
1
x
4
+
α
−
1
x
5
α
7
+
α
0
x
)
{\displaystyle {\begin{aligned}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}&={\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+\alpha ^{-1}x^{6}+\alpha ^{6}x^{7}\\x^{6}\end{pmatrix}}\\&={\begin{pmatrix}\alpha ^{-1}+\alpha ^{6}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}x^{6}\\\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+2\alpha ^{-1}x^{6}+2\alpha ^{6}x^{7}\end{pmatrix}}\\&={\begin{pmatrix}\alpha ^{-1}+\alpha ^{6}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{3}+\alpha ^{1}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\left(\alpha ^{-5}+\alpha ^{5}\right)x+2\alpha ^{-7}x^{2}+2\alpha ^{6}x^{3}+2\alpha ^{4}x^{4}+2\alpha ^{2}x^{5}+2x^{6}\end{pmatrix}}\\&={\begin{pmatrix}\left(1+\alpha ^{2}\right)+\left(\alpha ^{0}+\alpha ^{-6}\right)x+\alpha ^{7}x^{2}&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\alpha ^{0}x\end{pmatrix}}\end{aligned}}}
我々は最大3次の多項式に到達しており、
(
−
1
α
−
1
+
α
6
x
α
3
+
α
1
x
−
(
α
−
7
+
α
7
x
+
α
7
x
2
)
)
(
α
−
7
+
α
7
x
+
α
7
x
2
α
−
1
+
α
6
x
α
3
+
α
1
x
1
)
=
(
1
0
0
1
)
,
{\displaystyle {\begin{pmatrix}-1&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&-\left(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}\right)\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&1\end{pmatrix}}={\begin{pmatrix}1&0\\0&1\end{pmatrix}},}
私たちは得る
(
−
1
α
−
1
+
α
6
x
α
3
+
α
1
x
−
(
α
−
7
+
α
7
x
+
α
7
x
2
)
)
(
S
(
x
)
Γ
(
x
)
x
6
)
=
(
α
4
+
α
7
x
+
α
5
x
2
+
α
3
x
3
+
α
1
x
4
+
α
−
1
x
5
α
7
+
α
0
x
)
.
{\displaystyle {\begin{pmatrix}-1&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&-\left(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}\right)\end{pmatrix}}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\alpha ^{0}x\end{pmatrix}}.}
したがって、
S
(
x
)
Γ
(
x
)
(
α
3
+
α
1
x
)
−
(
α
−
7
+
α
7
x
+
α
7
x
2
)
x
6
=
α
7
+
α
0
x
.
{\displaystyle S(x)\Gamma (x)\left(\alpha ^{3}+\alpha ^{1}x\right)-\left(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}\right)x^{6}=\alpha ^{7}+\alpha ^{0}x.}
心配しない で ください 。
Λ
(
x
)
=
α
3
+
α
1
x
.
{\displaystyle \Lambda (x)=\alpha ^{3}+\alpha ^{1}x.}
λ
0
≠
1.
{\displaystyle \lambda _{0}\neq 1.}
Λ
(
x
)
{\displaystyle \Lambda (x)}
α
3
−
1
.
{\displaystyle \alpha ^{3-1}.}
させて
Ξ
(
x
)
=
Γ
(
x
)
Λ
(
x
)
=
α
3
+
α
−
7
x
+
α
−
4
x
2
+
α
5
x
3
,
Ω
(
x
)
=
S
(
x
)
Ξ
(
x
)
≡
α
7
+
α
0
x
mod
x
6
{\displaystyle {\begin{aligned}\Xi (x)&=\Gamma (x)\Lambda (x)=\alpha ^{3}+\alpha ^{-7}x+\alpha ^{-4}x^{2}+\alpha ^{5}x^{3},\\\Omega (x)&=S(x)\Xi (x)\equiv \alpha ^{7}+\alpha ^{0}x{\bmod {x^{6}}}\end{aligned}}}
多項式の根である 式 を使用してエラー値を調べてみましょう
e
j
=
−
Ω
(
α
−
i
j
)
/
Ξ
′
(
α
−
i
j
)
,
{\displaystyle e_{j}=-\Omega \left(\alpha ^{-i_{j}}\right)/\Xi '\left(\alpha ^{-i_{j}}\right),}
α
−
i
j
{\displaystyle \alpha ^{-i_{j}}}
Ξ
(
x
)
.
{\displaystyle \Xi (x).}
Ξ
′
(
x
)
=
α
−
7
+
α
5
x
2
.
{\displaystyle \Xi '(x)=\alpha ^{-7}+\alpha ^{5}x^{2}.}
私たちは
e
1
=
−
Ω
(
α
4
)
Ξ
′
(
α
4
)
=
α
7
+
α
4
α
−
7
+
α
−
2
=
α
3
α
3
=
1
e
2
=
−
Ω
(
α
7
)
Ξ
′
(
α
7
)
=
α
7
+
α
7
α
−
7
+
α
4
=
0
e
3
=
−
Ω
(
α
2
)
Ξ
′
(
α
2
)
=
α
7
+
α
2
α
−
7
+
α
−
6
=
α
−
3
α
−
3
=
1
{\displaystyle {\begin{aligned}e_{1}&=-{\frac {\Omega \left(\alpha ^{4}\right)}{\Xi '\left(\alpha ^{4}\right)}}={\frac {\alpha ^{7}+\alpha ^{4}}{\alpha ^{-7}+\alpha ^{-2}}}={\frac {\alpha ^{3}}{\alpha ^{3}}}=1\\e_{2}&=-{\frac {\Omega \left(\alpha ^{7}\right)}{\Xi '\left(\alpha ^{7}\right)}}={\frac {\alpha ^{7}+\alpha ^{7}}{\alpha ^{-7}+\alpha ^{4}}}=0\\e_{3}&=-{\frac {\Omega \left(\alpha ^{2}\right)}{\Xi '\left(\alpha ^{2}\right)}}={\frac {\alpha ^{7}+\alpha ^{2}}{\alpha ^{-7}+\alpha ^{-6}}}={\frac {\alpha ^{-3}}{\alpha ^{-3}}}=1\end{aligned}}}
驚くべきことではない
事実。
e
3
=
1
{\displaystyle e_{3}=1}
したがって、修正されたコードは [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0] になります。
引用
^ リード&チェン 1999、189ページ
^ ホッケンゲム 1959
^ ボーズ&レイ・チャウドゥリ 1960
^ 「フォボス着陸船コーディングシステム:ソフトウェアと分析」 (PDF) 。 2022年10月9日時点のオリジナルより アーカイブ (PDF) 。 2012年 2月25日 閲覧。
^ Marelli, Alessia; Micheloni, Rino (2018). 「ソリッドステートドライブの BCH コード」。 ソリッドステートドライブ (SSDS) の内部 。Springer Series in Advanced Microelectronics。第 37 巻。pp. 369–406。doi : 10.1007/ 978-981-13-0599-3_11。ISBN 978-981-13-0598-6 . 2023年 9月23日 閲覧 。
^ ギルnd、3ページ
^ リドル&ピルツ 1999、229ページ
^ ゴレンスタイン、ピーターソン、ツィールラー 1960
^ ギルnd、p.47
^ 杉山康夫、笠原将夫、平沢重一、滑川俊彦。ゴッパ符号を解読するための鍵方程式を解く方法。情報と制御、27:87–99、1975。
参考文献
一次資料
二次資料
Gill, John (nd)、EE387 ノート #7、配布資料 #28 (PDF) 、スタンフォード大学、pp. 42–45、2022-10-09 のオリジナルからアーカイブ (PDF) 、 2010 年 4 月 21 日取得 [ リンク切れ ] コースノートは2012年に作り直されているようです: http://www.stanford.edu/class/ee387/ 2013-06-05に Wayback Machineでアーカイブされました
ゴレンスタイン、ダニエル ; ピーターソン、W. ウェスリー ; ツィラー、ニール (1960)、「2 つのエラーを訂正するボーズ-チャウドゥリ コードは準完全である」、 情報制御 、 3 (3): 291–294、 doi : 10.1016/s0019-9958(60)90877-9
リドル、ルドルフ、ピルツ、ギュンター(1999)、 応用抽象代数 (第2版)、ジョン・ワイリー
リード、アーヴィング S. ; チェン、シュエミン (1999)、 データネットワークのエラー制御コーディング 、ボストン、マサチューセッツ州: クルーワー アカデミック パブリッシャー 、 ISBN 0-7923-8528-4
さらに読む
Blahut, Richard E. (2003)、 「データ伝送のための代数コード (第2版)」、 ケンブリッジ大学出版局 、 ISBN 0-521-55374-1
ギルバート、WJ; ニコルソン、WK (2004)、 現代代数学の応用 (第 2 版)、ジョン ワイリー
Lin, S.; Costello, D. (2004)、 エラー制御コーディング:基礎と応用 、Englewood Cliffs、NJ:Prentice-Hall
MacWilliams, FJ; Sloane, NJA (1977)、 The Theory of Error-Correcting Codes 、ニューヨーク、NY: North-Holland Publishing Company
Rudra、Atri、CSE 545、誤り訂正コード:組合せ論、アルゴリズムとアプリケーション、バッファロー大学、2012-12-18 にオリジナルからアーカイブ