前回、リードソロモン符号の生成多項式の作り方について述べましたが、この説明だけで本当にリードソロモン符号を使える方がどれだけいるのかというのは、はなはだ疑問であるので、もうちょっと具体的に計算をしてみます。
5進数をリードソロモン符号化する際の生成多項式は
G(x) = x
2 + 4x + 3
であることを前回導きました。
これをつかって5進数で 31 という数字を符号化してみましょう。
以前の記事によると、情報多項式I(x)に情報点数(ケタ数) k = 2 の次数をかけた多項式をG(x)で割った余りR(x)を求めることが、第一ステップです。
31 を符号化するので
I(x) = 3x + 1
であり、
I(x)x
2 = 3x
3 + x
2ですので、これをG(x)で割って余りを求めると
R(x) = 35x + 33
となります。
第二ステップで
W(x) = I(x)x
2 - R(x) = 3x
3 + x
2 - 35x - 33
と符号多項式を算出できます。
ここで係数を5で割って余りを取って
W(x) = 3x
3 + x
2 + 0x + 2
となります。
(-33 を 5 で割った余りは 2 です。数直線で考えるとすぐにご理解いただけます。)
ちなみに、この余りを取るという操作は生成多項式を作るときにもやりましたが、途中計算は通常の整数の演算で行って、 W(x) を求めた後に一度行うだけで問題ありません。
四則演算の前後で余りは変わらないので。
というわけでめでたくW(x)が求まったので、その係数を並べて 3102 という5進4桁の数を送ります。
(言うまでもないですが、上位2桁の 31 が情報部分、下位2桁の 02 がパリティ部分となっています)
そしてこれに誤りが加わって受信者が 3402 という数を受信したとして、誤りを訂正してみましょう。
受信多項式 Y(x) は
Y(x) = 3x
3 + 4x
2 + 0x + 2
となるので、これに生成多項式 G(x) の根である 2 と 4 を代入してみます。
Y(2) = 3×2
3 + 4×2
2 + 0×2 + 2 = 42
Y(4) = 3×4
3 + 4×4
2 + 0×4 + 2 = 258
また、誤りの数が1つであるという仮定のもと、
Y(x) = W(x) + ex
i     ...(1)
と置くと、
Y(2) = e×2
i = 42     ...(2)
Y(4) = e×4
i = 258
であり(W(2) = 0, W(4) = 0であることを利用)、
Y(4)/Y(2) = 2
i = 258/42 = 4 (*注)
なので i = 2 と分かり、式(2)にこれを代入して e = 42/4 = 3 (*注) と分かります。
これを式(1)に代入してW(x)について解くと
W(x) = Y(x) - 3x
2       = 3x
3 + 4x
2 - 3x
2 + 0x +2
      = 3x
3 + x
2 + 0x + 2
となり、もとの符号多項式を得られました。
めでたし!めでたし!
(*注)258/42 = 4, 42/4 = 3 に "?" と思われた方へ。
素晴らしい洞察力です!よく読み飛ばしませんでしたね!
ここでは ”5 で割った余りを取る世界”を考えているため、ちょっと特殊な計算が必要になります。
258/42 というのは分子分母それぞれの数字を5で割った余りを取り、3/2を計算していることと同じです。
普通に考えれば3/2 = 1.5 ですが、小数が出てくると計算が破綻してしまいます。
これは困った。
ところで割り算とは掛け算の逆演算、すなわち 3/2 を求めるということは
2x = 3
という方程式で x を求めることと同じです。
x = 4 のとき、左辺は 8 になり、5 で割った余りを取ると 3 なので、x = 4 は ”5 で割った余りを取る世界において”上記方程式の解となります。
よって、3/2 = 4 です。
(3/2 = 8/2 = 4 と考えても良いでしょう)
どうですか。
いよいよ騙されてる気がしてきましたね。
でもこれで良いのです。
この裏には興味深い代数学の世界があります。
が、それは追々と…。