例えばCRC4っていうのがある
生成多項式がx^4+x+1となっている。
これで誤りを検出する符号をつくるにはどうするかということを説明してみよう。
0+0は0、0+1は1、1+0は1、1+1は0、
0x0は0、0x1は0、1x0は0、1x1は1
引き算は、足し算と同じ。
0÷1は0、1÷1=1
という規則をつくると
0と1だけしかでてこない計算ができる。
これは2で割った余りで分類される世界である。
1+1=2だけど2は2で割った余りが0だから1+1=0になる。
1+1=0ということと引き算が足し算と同じということ以外は、普通の整数の演算と同じである。
2で割った余りで分類される世界も四則演算がなりたつようにできるわけである。
四則演算が成り立つ世界のことを体という。
よくみてみると足し算はEXOR、掛け算はANDになっている。
要素(専門用語で元という)が{0,1}からなり四則演算が成り立つ世界を
GF(2)という。
GFというのはGalois Fieldの略。日本語にするとガロア体である
これだと多ビットの符号を扱えないので
多項式を使って拡張する。
1*x^4+0*x^3+1*x^2+1*x^1+1*X^0
という係数が0か1の多項式を考えると
1*x^4+0*x^3+1*x^2+1*x^1+1*X^0
=X^4+x^2+x^1+1
これは10111と表現しても
情報はうしなわれない。
そこでこの10111を送りたい情報として、CRC4をつけてみよう
4ビットの誤り発見のためのビットである。
なんでもいいんだけど、この10111をおくりたいとき、上の逆をやって
多項式にする。
するとx^4+x^2+x+1となる。
さて、多項式の割り算を復習しよう
といってもGF(2)での多項式の割り算である
ここでCRC4の生成多項式X^4+x+1でわってみよう。
ここで、x^4+x^2+x+1をx^4+x+1でわりたいとこだけど
そうはしないで
x^4+x^2+x+1にx^4をかける
するとx^8+x^6+x^5+x^4となる
10111が101110000になるわけである。
生成多項式でわってみよう
生成多項式は10011である
余りは1100
101110000を10011でわったあまりが1100
っていうことは101110000に1100をたした101111100は10011でわりきれるのはわかるだろうか
割ったら余りがでて割り切れなかったんだから、被除数にその余りをたしてもう一度割って
みれば割り切れるよね。(あれれ、ひかないといけないんじゃないと思った方は、わかってる。足し算と引き算は同じだということを思い出してね。)
CRC4というのはあまりの1100
で
10111をCRC4をつけて符号化すると
101111100となる
受信側でも生成多項式でわってやると、どっかビットが化けてれば、生成多項式でわったとき
あまりがでる。それで、誤りを検出できるわけである。もちろん、割り切れれば誤りはない
というわけである。
BCH符号の作り方も同じで、BCHの生成多項式を同じ手法で割っておくるわけです。
BCH符号は一工夫して、誤りを訂正できるけど、CRCと同じ符号の作り方をするので
BCH符号はCRC符号と同じく誤りを検出できます。