BCH符号をつくってみよう
GF(2^4)の原始多項式はX^4+X+1
GF(2)に原始根αを導入してGF(2^4)拡大体をつくる。
G(X)=X^4+X+1とおくとG(X)=0の根は原始根αなのでG(α)=0
α^4+α+1=0
α^4=α+1
これでBCH符号をつくってみよう。
α^4=α+1を使って最大次の次数が3次になるように拡大体をつくる。
まずGF(2^4)のガロア拡大体を全部計算する
0
1
α
α^2
α^3
α^4=α+1
α^5=α^2+α
α^6=α^3+α^2
α^7=α^4+α^3=α+1+α^3
α^8=α^2+α+α^4=α^2+α+α+1=α^2+1
α^9=α^3+α
α^10=α^4+α^2=α+1+α^2
α^11=α^2+α+α^3
α^12=α^3+α^2+α^4=α^3+α^2+α+1
α^13=α^4+α^3+α^2+α=α+1+α^3+α^2+α=α^3+α^2+1
α^14=α^4+α^3+α=α+1+α^3+α=α^3+1
α^15=α^4+α=α+1+α=1
ここでα^15=1になって0を除く最初の項にもどる
ここで計算したものから0を除いたものはX^15=1の15個の根です。
0を含めるために、X^16+X=0の根とする人もいます。
そして、0,1、α・・・α^14の16個の元がもとまりした。
0を除いてほかの元は1、α、α^2、α^3だけであらわされています。
じゃ、これを2進数(α進数)であらわしてみましょう
8の位をα^3があるとき1、ないとき0
4の位をα^2があるとき1、ないとき0
2の位をαがあるとき1、ないとき0
1の位をα^0=1があるとき1、ないとき0
とあらわします
0・・・・0000
1・・・・0001
α・・・・0010
α^2・・0100
α^3・・1000
α^4・・0011
α^5・・0110
α^6・・1100
α^7・・1011
α^8・・0101
α^9・・1010
α^10・0111
α^11・1110
α^12・1111
α^13・1101
α^14・1001
となります。
準備がととのったところで生成多項式をつくります。
符号多項式は生成多項式で割り切れるようにつくります。だから符号多項式は、生成多
項式を因数にもっています。生成多項式にαを代入して0になれば符号多項式もαを代入
して0になります。符号多項式はべき乗数が連続した元(α、α^2、α^3・・・)を
それぞれ代入して0になるようにつくると符号に誤りが発生しても誤りを訂正
できます。なので生成多項式はべき乗数が連続した元をそれぞれ代入して0になるよう
につくります。
符号多項式をF(X)とすると0になるF(α)、F(α^2)、F(α^3)、F(α^4)をシンド
ロームといいます。誤りが発生すると、シンドロームは普通0になりません。
F(α)とF(α^2)が0になるように生成多項式を作ると最大1個の誤りを訂正できます。
F(α)とF(α^2)とF(α^3)とF(α^4)が0になるように生成多項式を作ると最大2個の
誤りを訂正できます。
F(α)、・・・F(α^6)が0になるように生成多項式を作ると最大3個の誤りを訂正
できます。
つまり訂正できる最大の誤りの個数の2倍だけシンドローム計算が必要です。
まずF(α)とF(α^2)が0になるには、
生成多項式に(X-α)と(Xーα^2)の積が含まれていなくてはなりません。
BCH符号は、生成多項式の係数が1か0です。αのべき乗が係数にあってはだめで
す。
そこでGF(2^n)でなりたつf(X^2)=f(X)^2という性質を使います。
この性質より、αが根になるなら、α^2もα^4もα^8・・・も根なのです。
(x-α)(x-α^2)(xーα^4)(X-α^8)(X-α^16)
(X-α^32)・・・
α^15=1なので
これは(x-α)(x-α^2)(xーα^4)(X-α^8)(X-α^(15+1))
(X-α^(15*2)+2))・・・
となり
(X-α)(X-α^2)(xーα^4)(X-α^8)(X-α)(X-α^2)・・・
となってα、α^2、α^4、α^8がくりかえされることになります
ここで最小多項式というのがあります。
最小多項式というのは、この繰り返しがないいちばん次数が低い多項式で、しかもその
性質は展開するとかならず係数が0か1になる、つまりGF(2)での係数になることが知ら
れています。
ということでαを根とする最小多項式は次の式になることがわかりました。
(x-α)(X-α^2)(xーα^4)(X-α^8)
=(x^2-(α+α^2)X+α^3)(X^2-(α^4+α^8)X+α^12)
ガロア拡大体の足し算は、2進数表現したときのそれぞれのビットのEXORというこ
となので上でつくったガロア拡大体の表を使って
α+α^2=α^5
0010
0100
0110
α^4+α^8=α^5
0011
0101
0110
(x^2+α^5X+α^3)(X^2+α^5X+α^12)
=X^4+α^5X^3+α^12X^2
+α^5X^3+α^10X^2+α^17X
+α^3X^2+α^8X+α^15
=X^4
+(α^5+α^5)X^3
+(α^12+α^10+α^3)X^2
+(α^17+α^8)X
+α^15
α^12+α^10+α^3=0
1111
0111
1000
0000
α^17+α^8=α^2+α^8=1
0100
0101
0001
となって
X^4+X+1
となって、ありゃりゃ原始多項式と同じになりました。
それもそのはず、原始多項式は原始元αを根とする多項式でした。
X^4+X+1はX-αでもX-α^2でもわりきれます。
H(X)=X^4+X+1とおくと
H(α)=H(α^2)=0
となります。
するとWIKIの方法で1個のあやまりが訂正できます。
最大1個の誤りまで訂正できる符号は
BCH(15,11)となります。
2個の誤りを訂正するには
α、α^2、α^3、α^4を根とする生成多項式なので
αとα^2とα^4を根とするX^4+X+1
にα^3を根とする多項式をかければいいですね
(X-α^3)(X-α^6)(X-α^12)(X-α^24)(X-α^48)
α^15=1なので
α^24はα^9
α^48はα^3
α^96はα^6
くりかえしそうだね
最小多項式は
(X-α^3)(X-α^6)(X-α^12)(X-α^9)
を展開すればよさそうですね。
あら不思議、係数は必ず0か1になるはずです。
結果は、X^4+X^3+X^2+X+1となり
各項の係数は0か1になります。
αとα^2とα^4が根であるX^4+X+1
とα^3が根であるX^4+X^3+X^2+X+1
をかけたもの
(X^4+X+1)(X^4+X^3+X^2+X+1)
=X^8+X^7+X^6+X^4+1
が
BCH(15,7)の生成多項式になります。
最大2個の誤りを訂正する計算に必要なのは、生成多項式にαを代入して0、α^2を代
入して0、α^3を代入して0、α^4を代入して0になればいいんだけど
ついでにα^8とα^6とα^12とα^9をそれぞれ代入して0になっちゃう
おまけがついちゃうのでBCH符号はリードソロモン符号より効率が悪い符号になる。
さて、この回のタイトルはBCH符号をつくってみようでした。
BCHの生成多項式の作り方は、わかったんじゃないかと思います。
このようにCRCと同じように生成多項式がもとまりました。
符号の作り方はCRCと全く同じです。
送りたい情報の情報ビットを多項式化して、生成多項式の最大次数の項をかけて(おし
りに生成多項式の最大次数の数だけ0をならべて)生成多項式で割って、でたあまり
を、追加した0といれかえてできます。係数が0か1の多項式と2進数表現は同じだと
考えるとわかると思います。
X^15-1=(X-α^0)(X-α^1)(X-α^2)(X-α^3)・・・(X-α^14)
=(X-1)*(X-α)(X-α^2)(X-α^4)(X-α^8)*(X-α^3)(X-α^6)(X-α^12)(X-α^9)*(X-α^5)(X-α^10)*
(X-α^7)(X-α^14)(X-α^13)(X-α^11)
X^15-1は、拡大体の0以外の元すべてを根とする式に因数分解できる。
*で区切られたとこで展開してやると係数が1か0になる。
符号多項式をF(X)とすると
符号長15bitで訂正できる最大誤りビット数が1のとき
F(α)、F(α^2)が必要なシンドローム、検査ビット4ビット
訂正できる最大誤りビット数が2のとき
F(α)、F(α^2)、F(α^3)、F(α^4)が必要なシンドローム、検査ビット8ビット
訂正できる最大誤りビット数が3のとき
F(α)、F(α^2)、F(α^3)、F(α^4)、F(α^5)、F(α^6)が必要なシンドローム、検査ビット10
ビット
訂正できる最大誤りビット数が4のとき
F(α)、F(α^2)、F(α^3)、F(α^4)、F(α^5)、F(α^6)、F(α^7)、F(α^8)が必要なシンドロー
ム、検査ビット14ビット
となって符号が1ビットの情報ビットと検査ビット14ビットになってしまう。1ビッ
トの情報で14ビットの無駄なものをくっつけて、4ビット訂正できる。むむむ、ほと
んど、無駄なものがあやまったとき訂正になっちゃうね、
ということになります。
情報多項式をJ(X)としmを生成多項式の最大次のべき数とすると生成多項式でJ(X)*X^m
をわってやってあまりが0となるように検査ビットをつけます。
F(1)=0になるには、生成多項式はx-1。偶数個の1が符号にあれば、F(1)=0になる。パリ
ティ(検査ビット)は1ビット。これは、偶数パリティですね。
F(1)=0,F(α)=0になるには、(X-1)*(X-α)*多項式に、符号多項式が因数分解
できればいい。
ここでX-α、αは拡大体なのでGF(2)にするために(X-α)(X-α^2)(X-α^4)(X-α^8)
=X^4+X+1
(X-1)(X^4+X+1)を生成多項式にしてもいいが、5次の生成多項式にな
り、検査ビットが
5ビットで1ビット増えちゃう。
生成多項式がX^4+X+1だと、
F(α)=F(α^2)=F(α^4)=F(α^8)=0
F(α)=F(α^2)=0でめでたくピーターソン法で1ビットの誤りを訂正できるの
で生成多項式X^4+X+1で検査ビット4ビットと1ビットすくなくてすむ。
なので1ビット誤り訂正には生成多項式X^4+X+1が使われるのである。
シンドロームはα^l、α^(l+1)・・α^(l+2t-1)
を代入して0になるものがあればt個の誤りが訂正できるというのは、今まで書かな
かったけど
そういうことです。lは、0か1が多いです。
α、α^2、α^3、α^4 l=1、t=2
1、α、α^2、α^3、α^4、α^5 l=0、t=3
という具合である。
BCHは、α^nがでてこないように最少多項式化してGF(2)にする
リードソロモンは、α^nをつかえる
といったところです。α^nはGF(2^P)だとPビットをブロックとみなして、Pビット全部
誤っても訂正しちゃう。
GF(2^4)だとα^nは4ビットの2進数であらわされ0、α^0、α^1・・・α^14で
すべての4ビットの2進数を表現できて、4ビット1ブロックとしてt=1
のとき1ブロックの誤りが訂正できて
1ブロック4ビット全部まちがってても訂正できる。誤ってるかわからなくても、
検査ビットからわかる。
誤ってるならここだと位置がわかってる場合、消失訂正といいます。その場合
誤り位置多項式を求める必要はなく、さらに訂正できるビット数を増やせる場合がある
ようです。
消失訂正は興味がないので、ほかの人の説明にまかせます。