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)のガロア拡大体を全部計算する



α
α^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ビット全部まちがってても訂正できる。誤ってるかわからなくても、

検査ビットからわかる。

誤ってるならここだと位置がわかってる場合、消失訂正といいます。その場合

誤り位置多項式を求める必要はなく、さらに訂正できるビット数を増やせる場合がある

ようです。

消失訂正は興味がないので、ほかの人の説明にまかせます。