送信データ T(X) は前の例では次のようでした。
T(X) = 3Ch, 15h, 74h, BCh, 1Fh, 2Dh, 3Eh, DDh, BDh, 1Bh
これに一つのエラーが発生したとします。エラーデータ E(X) は、
E(X) = 00h, 00h, 00h, 15h, 00h, 00h, 00h, 00h, 00h, 00h
つまり後ろから 7 番目のデータに 15h だけデータが足されるとするわけです。
多項式表現だと、
E(X) = (15h)・X^6
ということになります。
受信データはこれらを加算したものですから、
R(X) = 3Ch, 15h, 74h, A9h, 1Fh, 2Dh, 3Eh, DDh, BDh, 1Bh
になります。( BCh xor 15h = A9h )
これらをαべき乗表現に変えます。桁およびαは省略します。
R(X) = 77, 141, 10, 135, 113, 18, 29, 64, 162, 25
シンドロームを計算します。
S0:
77, 147, 56, 230, 235, 164, 173, 135, 239, 141
-------------------------------------------------
0, 0 | 77, 141, 10, 135, 113, 18, 29, 64, 162, 25
77, 77
--------
147, 10, 135, 113, 18, 29, 64, 162, 25
147, 147
--------
56, 135, 113, 18, 29, 64, 162, 25
56, 56
--------
230, 113, 18, 29, 64, 162, 25
230, 230
--------
235, 18, 29, 64, 162, 25
235, 235
----------
164, 29, 64, 162, 25
164, 164
--------
173, 64, 162, 25
173, 173
--------
135, 162, 25
135, 135
--------
239, 25
239, 239
--------
141
となって、S0 = α^141 = 15h = 0001 0101 となりました。確かにエラー量ですね。
以下同様に、
S1 = α^147
S2 = α^153
S3 = α^159
となりました。
ちなみに S3 は今回は使いません。
で、エラーが 1 バイトだけかどうかは S2 * S0 - (S1)^2 で確認できる、としましたが、
S2 * S0 = α^141 * α^153 = α^294 = α^39
(S1)^2 = (α^147)^2 = α^294 = α^39
よってそれぞれが等しくなったので差分はゼロ、1 バイトしかエラーがないと見なせます。
そうするとエラー量 S0 で 15h といえて、
S1 / S0 = α^147 / α^141 = α^6
ということで、6 桁目が誤っていることが分かります。
受信データの 6 桁目(後ろから数えて 6 + 1 = 7 番目)は A9h でしたから、
A9h + 15h = BCh
と訂正することができました。
1 バイトエラーならば今回の要領で比較的簡単と言えます。しかしこれが 2 個以上となるととたんにやっかいになります。これは次回以降にします。
T(X) = 3Ch, 15h, 74h, BCh, 1Fh, 2Dh, 3Eh, DDh, BDh, 1Bh
これに一つのエラーが発生したとします。エラーデータ E(X) は、
E(X) = 00h, 00h, 00h, 15h, 00h, 00h, 00h, 00h, 00h, 00h
つまり後ろから 7 番目のデータに 15h だけデータが足されるとするわけです。
多項式表現だと、
E(X) = (15h)・X^6
ということになります。
受信データはこれらを加算したものですから、
R(X) = 3Ch, 15h, 74h, A9h, 1Fh, 2Dh, 3Eh, DDh, BDh, 1Bh
になります。( BCh xor 15h = A9h )
これらをαべき乗表現に変えます。桁およびαは省略します。
R(X) = 77, 141, 10, 135, 113, 18, 29, 64, 162, 25
シンドロームを計算します。
S0:
77, 147, 56, 230, 235, 164, 173, 135, 239, 141
-------------------------------------------------
0, 0 | 77, 141, 10, 135, 113, 18, 29, 64, 162, 25
77, 77
--------
147, 10, 135, 113, 18, 29, 64, 162, 25
147, 147
--------
56, 135, 113, 18, 29, 64, 162, 25
56, 56
--------
230, 113, 18, 29, 64, 162, 25
230, 230
--------
235, 18, 29, 64, 162, 25
235, 235
----------
164, 29, 64, 162, 25
164, 164
--------
173, 64, 162, 25
173, 173
--------
135, 162, 25
135, 135
--------
239, 25
239, 239
--------
141
となって、S0 = α^141 = 15h = 0001 0101 となりました。確かにエラー量ですね。
以下同様に、
S1 = α^147
S2 = α^153
S3 = α^159
となりました。
ちなみに S3 は今回は使いません。
で、エラーが 1 バイトだけかどうかは S2 * S0 - (S1)^2 で確認できる、としましたが、
S2 * S0 = α^141 * α^153 = α^294 = α^39
(S1)^2 = (α^147)^2 = α^294 = α^39
よってそれぞれが等しくなったので差分はゼロ、1 バイトしかエラーがないと見なせます。
そうするとエラー量 S0 で 15h といえて、
S1 / S0 = α^147 / α^141 = α^6
ということで、6 桁目が誤っていることが分かります。
受信データの 6 桁目(後ろから数えて 6 + 1 = 7 番目)は A9h でしたから、
A9h + 15h = BCh
と訂正することができました。
1 バイトエラーならば今回の要領で比較的簡単と言えます。しかしこれが 2 個以上となるととたんにやっかいになります。これは次回以降にします。