FC2ブログ

誤り訂正符号Blog

誤り訂正符号に関してなんでも

かぼちゃスポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


かぼちゃ具体的に計算してみる

前回、リードソロモン符号の生成多項式の作り方について述べましたが、この説明だけで本当にリードソロモン符号を使える方がどれだけいるのかというのは、はなはだ疑問であるので、もうちょっと具体的に計算をしてみます。

5進数をリードソロモン符号化する際の生成多項式は

G(x) = x2 + 4x + 3

であることを前回導きました。
これをつかって5進数で 31 という数字を符号化してみましょう。

以前の記事によると、情報多項式I(x)に情報点数(ケタ数) k = 2 の次数をかけた多項式をG(x)で割った余りR(x)を求めることが、第一ステップです。
31 を符号化するので

I(x) = 3x + 1

であり、

I(x)x2 = 3x3 + x2

ですので、これをG(x)で割って余りを求めると

R(x) = 35x + 33

となります。
第二ステップで

W(x) = I(x)x2 - R(x) = 3x3 + x2 - 35x - 33

と符号多項式を算出できます。
ここで係数を5で割って余りを取って

W(x) = 3x3 + x2 + 0x + 2

となります。
(-33 を 5 で割った余りは 2 です。数直線で考えるとすぐにご理解いただけます。)
ちなみに、この余りを取るという操作は生成多項式を作るときにもやりましたが、途中計算は通常の整数の演算で行って、 W(x) を求めた後に一度行うだけで問題ありません。
四則演算の前後で余りは変わらないので。

というわけでめでたくW(x)が求まったので、その係数を並べて 3102 という5進4桁の数を送ります。
(言うまでもないですが、上位2桁の 31 が情報部分、下位2桁の 02 がパリティ部分となっています)

そしてこれに誤りが加わって受信者が 3402 という数を受信したとして、誤りを訂正してみましょう。
受信多項式 Y(x) は

Y(x) = 3x3 + 4x2 + 0x + 2

となるので、これに生成多項式 G(x) の根である 2 と 4 を代入してみます。

Y(2) = 3×23 + 4×22 + 0×2 + 2 = 42
Y(4) = 3×43 + 4×42 + 0×4 + 2 = 258

また、誤りの数が1つであるという仮定のもと、

Y(x) = W(x) + exi     ...(1)

と置くと、

Y(2) = e×2i = 42     ...(2)
Y(4) = e×4i = 258

であり(W(2) = 0, W(4) = 0であることを利用)、

Y(4)/Y(2) = 2i = 258/42 = 4 (*注)

なので i = 2 と分かり、式(2)にこれを代入して e = 42/4 = 3 (*注) と分かります。

これを式(1)に代入してW(x)について解くと

W(x) = Y(x) - 3x2
      = 3x3 + 4x2 - 3x2 + 0x +2
      = 3x3 + x2 + 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 と考えても良いでしょう)

どうですか。
いよいよ騙されてる気がしてきましたね。
でもこれで良いのです。
この裏には興味深い代数学の世界があります。
が、それは追々と…。
スポンサーサイト


かぼちゃ素数進数のリードソロモン符号

さて、手筈はそろいました!
今回は「素数進数のリードソロモン符号」を紹介します。
*通常「素数進数の~」などと呼ばないのですが、ここではイメージしやすいように、あえてそう呼びました。

では、うだうだ言わずにその符号化法をさっさとお教えしましょう。

q を素数とします。
n 乗して q で割った余りを算出したとき、n = 1, 2, ..., q - 2では 1 以外で、n = q - 1 のとき 1 となる数を α とします。
誤り訂正可能数をt、符号長を q - 1 として、生成多項式 G(x) を以下のように構成したものをリードソロモン符号と呼びます。

G(x) = ( x - α ) ( x - α2 ) … ( x - α2t )

なお、符号化・復号で使用するすべての多項式の係数値は q で割った余りを取ることにします。

これだけだとなんのこっちゃ分からないと思うので、実例を示します。

ここでは q = 5 とします。
このとき、 22 mod 5 = 4,  23 mod 5 = 3,  24 mod 5 = 1であるので、 α = 2 です。
誤り訂正数 t = 1 とすると、結局生成多項式 G(x) は

G(x) = ( x - 2 )( x - 4 )

となります。
これを展開すると

G(x) = x2 - 6x + 8

で、各係数を5で割って余りを取ると

G(x) = x2 + 4x + 3

を使うことになります。
符号化・復号の計算方法は係数値を5で割った余りを取ること以外、前回までに述べた多項式の符号化・復号方法とまったく同じです。

多項式の係数はすべて5で割って余りを取ることになるので、結局多項式の係数を並べたものは5進数となり、それを送受信することになるわけですね。

【追記】
より一般的にはリードソロモン符号の生成多項式は任意の整数 r を用いて

G(x) = ( x - αr ) ( x - αr + 1 ) … ( x - α2t + r - 1 )

と書くことができます。
上で述べたのは r = 1 としたものです。
なお世間一般では、計算の簡単さから r = 0 とすることが多いようです。


 | HOME | 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。