BCH符号

提供: testwiki
ナビゲーションに移動 検索に移動

BCH符号(BCHふごう、テンプレート:Lang-en-short)は、パラメータ化された誤り訂正符号の一種で、最もよく研究されている符号の1つである。1959年 テンプレート:仮リンク が、それとは別に1960年には テンプレート:仮リンクテンプレート:仮リンク が考案した[1]BCH とは、この3人のイニシャルである。

BCH符号は、シンドローム復号という簡潔な代数学的手法で容易に復号できる点を特徴とする。そのための電子回路は非常に単純でコンピュータを使う必要もなく、低電力で小型の機器で復号可能である。符号としても非常に柔軟性があり、ブロック長や誤り訂正能力を自由に設定でき、目的に応じてカスタマイズされた符号を設計できる。

BCH符号は、マルチレベル/巡回/誤り訂正/可変長デジタル符号であり、複数の無作為誤りパターンを訂正できる。BCH符号は、レベル数が素数または素数のべき乗であるようなマルチレベルの位相偏移変調でも使われる。11レベルのBCH符号を使って、十進数の10個の数字と符号を表す場合もある[2]

構築

BCH符号は、有限体上の特定の生成多項式を使った多項式符号である。また、同時に巡回符号でもある。

単純化したBCH符号

まず説明を簡単にするため、特殊なBCH符号を例とする。一般のBCH符号は次節で説明する。

有限体 GF(q)q は素数冪)を定める。そして、n=qm1 および 2dn となるように正の整数 m, n, d を定める。これらから、GF(q) 上で符号語長 n、最小ハミング距離 d 以上の多項式符号を構築する。さらに定めるべきは、その符号の生成多項式である。

GF(qm)1のn乗根α とする。全ての i について αiGF(q) 上の原始多項式mi(x) とする。BCH符号の生成多項式は最小公倍数 g(x)=lcm(m1(x),,md1(x)) で定義される。

q=2m=4 とする(従って n = 15 )。 d についてはいくつかの値を検討する。まず、

α4+α+1=0 (1);

を満たす1の冪根 αGF(16) が存在し、GF(2) 上の原始多項式は

m1(x)=x4+x+1

である。なお、GF(2) においては (a+b)2=a2+2ab+b2=a2+b2 が成り立つので、m1(α2)=m1(α)2=0 となる。従って α2m1(x) の根であり、

m2(x)=m1(x)=x4+x+1

となる。m3(x) を求めるため、(1)を繰り返し適用して以下の線型関係式を得る。

  • 1=0α3+0α2+0α+1
  • α3=1α3+0α2+0α+0
  • α6=1α3+1α2+0α+0
  • α9=1α3+0α2+1α+0
  • α12=1α3+1α2+1α+1

これらの右辺は線型従属でなければならず、そこから線型従属式 α12+α9+α6+α3+1=0 が得られる。これには少なからぬ従属性があるので、α3 の原始多項式は

m3(x)=x4+x3+x2+x+1

となる。同様の考え方で、以下のような式が得られる。

m4(x)=m2(x)=x4+x+1
m5(x)=x2+x+1
m6(x)=m3(x)=x4+x3+x2+x+1
m7(x)=x4+x3+1

d=1,2,3 の場合のBCH符号の生成多項式は次のようになる。

d(x)=m1(x)=x4+x+1

この場合の最小ハミング距離は3で、最大1つの誤りを訂正できる。生成多項式の次数が4なので、この符号はデータビットが11ビット、チェックサムビットが4ビットとなる。

d=4,5 の場合のBCH符号の生成多項式は次のようになる。

d(x)=lcm(m1(x),m3(x))=(x4+x+1)(1+x+x2+x3+x4)=x8+x7+x6+x4+1

この場合の最小ハミング距離は5で、最大2つの誤りを訂正できる。生成多項式の次数が8なので、この符号はデータビットが7ビット、チェックサムビットが8ビットとなる。

d=6,7 の場合のBCH符号の生成多項式は次のようになる。

d(x)=lcm(m1(x),m3(x),m5(x))=(x4+x+1)(1+x+x2+x3+x4)(x2+x+1)=x10+x8+x5+x4+x2+x+1

最小ハミング距離は7で、3つまでの誤りを訂正できる。符号のデータビットは5ビット、チェックサムビットは10ビットとなる。

d=8 以上のBCH符号の生成多項式は、次の通りである。

d(x)=lcm(m1(x),m3(x),m5(x),m7(x))=(x4+x+1)(1+x+x2+x3+x4)(x2+x+1)(x4+x3+1)=x14+x13+x12++x2+x+1

この符号の最小ハミング距離は15で、7つまでの誤りを訂正できる。この場合、データビットが1ビットで、チェックサムビットが14ビットになる。実際、この符号は2つの符号語(000000000000000 と 111111111111111)しか持たない。

一般のBCH符号

一般のBCH符号は、上述の解説と2つの面で異なる。第一に n=qm1 をより一般的条件にする。第二に生成多項式の一連の根として α,,αd1 ではなく αc,,αc+d2 を採用する。

有限体 GF(q)q は素数冪)を定める。そして 2dngcd(n,q)=1 が成り立ち、 n を法とする q位数m となるように、正の整数 m,n,d,c を選択する。

前節と同様、GF(qm)1のn乗根α とし、全ての i について αiGF(q) 上の原始多項式mi(x) とする。BCH符号の生成多項式は、最小公倍数 g(x)=lcm(mc(x),,mc+d2(x)) で定義される。

単純化した例と同様に n=qm1 を条件にすると、gcd(n,q) は自動的に1となり、n を法とした q の位数は自動的に m となる。従って、単純化した定義は一般的定義の特殊ケースになっている。

特性

BCH符号の生成多項式の次数は最大で (d1)m である。さらに q=2 かつ c=1 の場合、生成多項式の次数は最大で dm/2 である。

証明: 各原始多項式 mi(x) の次数は最大で m である。したがって、それらの d1 の最小公倍数の次数は最大で (d1)m となる。さらに q=2 の場合、全ての i について mi(x)=m2i(x) となる。したがって g(x) は、奇数インデックス i の原始多項式 mi(x)(最大でも d/2 個)の最小公倍数であり、それぞれの多項式の次数は最大でも m である。

BCH符号の最小ハミング距離は最小で d である。単純化した例で証明を示すが、一般の場合も同様に証明できる。符号語 p(x) にはゼロでない項が d 個未満存在するとする。すると、

p(x)=b1xj1++bd1xjd1, where j1<j2<<jd1

と表せる。α1,,αd1g(x) の根なので、p(x) にとっても根である。したがって b1,,bd1i=1,,d1 について以下の式も満たす。

p(αi)=b1αij1+b2αij2++bd1αijd1=0

この式を αij1 で割り、kl=jlj1 と記述すると、全ての i について

b1+b2αik2++bd1αikd1=0

という式が得られ、これと等価的に次が得られる。

[1αk2αkd11α2k2α2kd11α(d1)k2α(d1)kd1][b1b2bd1]=[000]

この行列はヴァンデルモンド行列であり、その行列式は

det(V)=1i<jd1(αkjαki)

となって、その値はゼロではない。したがって b1,,bd1=0 となり、p(x)=0 となる。

BCH符号は巡回符号である。長さ n の多項式符号が巡回符号となるのは、生成多項式で xn1 を割り切れる場合のみである。g(x)αc,,αc+d2 を根とする原始多項式なので、αc,,αc+d2 のそれぞれが xn1 の根であることを示せばよい。α は定義上1のn乗根なので、簡単に証明できる。

特殊ケース

  • c=1 のBCH符号を「狭義BCH符号(narrow-sense BCH code)」と呼ぶ。
  • n=qm1 のBCH符号を「原始BCH符号(primitive BCH code)」と呼ぶ。

従って、本項目で単純化したBCH符号として解説したものは、原始・狭義BCH符号である。

復号

BCH符号の復号は、次の4段階で行われる。

  1. 受信したベクトル R について 2t シンドローム値を計算する。
  2. 誤り位置多項式を計算する。
  3. その多項式の根を計算し、誤り位置を把握する。
  4. 2元BCH符号でない場合、それらの誤り位置での誤りの値を計算する。

よく使われる復号アルゴリズムとしては、Peterson Gorenstein Zierler(PGZ)アルゴリズムと Berlekamp-Massy アルゴリズムがある。

PGZアルゴリズム

このアルゴリズムは上述の工程の第2段階、すなわち誤り位置多項式の計算を行う。誤り位置多項式(error locator polynomial)の係数をλ1,λ2,,λt とすると、誤り位置多項式は Λ(x)=1+λ1x+λ2x2++λtxt となる。

[t=dmin12] 個の誤りを訂正できるよう設計された (n,k,dmin) BCH符号に対して、PGZアルゴリズムは次のように実施される。

  • まず、2t シンドロームの行列を生成する。
  • 次に、下記のようにシンドローム値を配置した St×t 行列を生成する。
St×t=[s1s2s3sts2s3s4st+1s3s4s5st+2stst+1st+2s2t1]
  • 下記のような ctx1 行列を生成する。
Ct×1=[st+1st+2s2t]
  • 未知の多項式係数で示される Λ を次のように記述する。
Λt×1=[λ1λ2λ3λ4λt]
  • 次の行列方程式を構成する。
St×tΛt×1=Ct×1
  • 行列St×tの行列式が存在する場合、行列の逆を見つけ、Λ の値を求めることができる。
  • det(St×t)=0 の場合、次の手順を実施する。
       if t=0
       then
             空の誤り位置多項式を宣言する。
             完了。
       end
       set tt1
       PGZアルゴリズムの先頭に戻る。

  • Λ の値が定まると、誤り位置多項式が得られる。
  • PGZアルゴリズムの完了。

誤り位置多項式の因数分解

Λ(x) 多項式が得られると、チェンサーチのアルゴリズムを使って Λ(x)=(αix+1)(αjx+1)(αkx+1) の根を求めることができる。α の次数が受信した符号語の誤り発生位置に対応する。そのため、誤り位置多項式と呼ばれている。

誤り訂正

2元BCH符号では、上述の誤り位置多項式を解くことで誤り位置がわかり、そのビット位置を反転させればよい。

脚注

テンプレート:Reflist

参考文献

  • S. Lin and D. Costello. Error Control Coding: Fundamentals and Applications. Prentice-Hall, Englewood Cliffs, NJ, 2004.
  • W.J. Gilbert and W.K. Nicholson. Modern Algebra with Applications, 2nd edition. Wiley, 2004.
  • R. Lidl and G. Pilz. Applied Abstract Algebra, 2nd edition. Wiley, 1999.
  1. Page 189, テンプレート:Cite book
  2. Federal Standard 1037C, 1996.