1 符号を部分空間として定める
はじめに、扱う対象を定めます。以下、ベクトルはすべて列ベクトルとして書きます。
定義 1.1 (線形符号).nを正の整数とする。F2nの部分空間Cを、長さnの線形符号という。Cの要素を符号語という。dimC=kであるとき、Cを[n,k]符号という。
F2nの標準基底e1,…,enは一次独立な生成系ですのでdimF2n=nであり、§D3.8 命題 3.5より0≤k≤nです。符号語は2k個あります。実際、基底b1,…,bkを取ると、§D3.8 命題 2.3より各符号語は∑icibiの形にただ一通りに書くことができ、各ciの取り方がF2の2通りだからです。
同じ部分空間を、二つの行列によって表すことができます。一方は像として、他方は核として表します。
定義 1.2 (生成行列と検査行列).Cを長さnの[n,k]符号とする。
- n×k行列GがCの生成行列であるとは、ImG=Cが成り立つことをいう。
- (n−k)×n行列HがCの検査行列であるとは、KerH=Cが成り立つことをいう。
定理 1.3 (生成行列と検査行列は同じ符号を表す).Cを長さnの[n,k]符号とする。
- Cの基底b1,…,bkを列に並べたn×k行列GはCの生成行列であり、KerG={0}を満たす。
- Cの検査行列Hが存在し、ImH=F2n−kを満たす。
- HをCの検査行列とすると、x∈F2nが符号語であることとHx=0が成り立つことは同値である。
証明. 1について。Gc=∑icibiであるから、ImGはb1,…,bkが張る空間、すなわちCである。またGc=0は∑icibi=0であり、基底の一次独立性からc=0である。
2について。Cの基底b1,…,bkを取り、§D3.11 補題 1.2によりF2nの基底b1,…,bnへ延長する。この補題は§D3.20 命題 3.2の3によりF2の上でも成り立つ。§D3.8 命題 2.3より、各x∈F2nはx=∑i=1nci(x)biとただ一通りに書くことができる。写像
π:F2n→F2n−k,π(x)=(ck+1(x),…,cn(x))⊤を定める。x+yとaxの座標は、表し方の一意性からci(x)+ci(y)とaci(x)に等しいので、πは線形写像である。π(bk+j)はF2n−kの第j標準基底ベクトルであるからπは全射である。またπ(x)=0はx=∑i≤kci(x)biと同値であり、これはx∈Cと同値であるからKerπ=Cである。Hを、F2nとF2n−kの標準基底に関するπの表現行列(§D3.9 定理 2.2)とすると、すべてのxについてHx=π(x)であるから、KerH=CかつImH=F2n−kである。Hは(n−k)×n行列である。
3について。検査行列の定義そのものである。▨
3は、受け取った列が符号語であるかどうかを、Hを掛けるだけで判定することができることを述べています。この判定は、あとで誤りの位置を求めるためにも使います。行列の大きさは、Gがn×k、Hが(n−k)×nであり、次元定理と整合します。実際、§D3.11 定理 2.1をHについて適用するとdimKerH=n−dimImH=n−(n−k)=kとなり、dimC=kと一致します。
例 1.4 (偶数個の 1 だけを送る符号).n≥2とし、H=(1 1 ⋯ 1)を1×n行列とします。C=KerHはx1+x2+⋯+xn=0を満たすベクトルの全体、すなわち成分に1が偶数個だけ現れるベクトルの全体です。ImH=F2ですので§D3.11 定理 2.1よりdimC=n−1であり、Cは[n,n−1]符号です。n=3の場合、符号語は(0,0,0)⊤、(1,1,0)⊤、(1,0,1)⊤、(0,1,1)⊤の4=22個です。
2 ハミング距離と、訂正することのできる誤りの個数
誤りの個数を測る量を定めます。§D3.20 例 4.4のとおりF2の上には内積が入りませんので、値が異なる成分の個数を直接数えます。
定義 2.1 (ハミング距離・重み・最小距離).x,y∈F2nに対し、xi=yiを満たす添字iの個数をd(x,y)と書き、xとyのハミング距離という。w(x)=d(x,0)、すなわちxの0でない成分の個数をxの重みという。
Cを線形符号とし、Cの要素が二つ以上あるとする。相異なる二つの符号語の距離の最小値
d(C)=min{d(c,c′):c,c′∈C, c=c′}をCの最小距離という。
命題 2.2 (ハミング距離は距離の条件を満たす). すべてのx,y,z∈F2nについて次が成り立つ。
- d(x,y)≥0であり、d(x,y)=0となるのはx=yのときに限る。
- d(x,y)=d(y,x)である。
- d(x,z)≤d(x,y)+d(y,z)である。
- d(x,y)=w(x−y)である。
証明. 1と2は、個数が0以上であることと、xi=yiという条件がxとyについて対称であることによる。
3を示す。xi=ziを満たす添字iを取る。xi=yiかつyi=ziとするとxi=ziとなって矛盾するから、xi=yiまたはyi=ziである。したがって、xi=ziを満たす添字の集合は、xi=yiを満たす添字の集合とyi=ziを満たす添字の集合の和集合に含まれる。集合の要素の個数を比べて3を得る。
4を示す。F2ではxi=yiとxi−yi=0が同値であるから、両辺は同じ添字の個数を数えている。▨
符号が部分空間であることを使うと、最小距離を求める作業が、2k(2k−1)/2組の比較から、2k−1個の符号語の重みを見る作業へ変わります。
命題 2.3 (最小距離は 0 でない符号語の重みの最小値である).Cを線形符号とし、Cの要素が二つ以上あるとする。このとき
d(C)=min{w(c):c∈C, c=0}が成り立つ。
証明. 右辺をμと書く。Cには0でない要素があるからμは定まる。
d(C)≤μを示す。w(c)=μを満たすc∈C、c=0を取ると、命題 2.2の4によりd(c,0)=w(c)=μであり、0∈C、c=0であるからd(C)≤μである。
μ≤d(C)を示す。d(c,c′)=d(C)を満たす相異なる符号語c,c′を取る。Cは部分空間であるからc−c′∈Cであり、c=c′よりc−c′=0である。命題 2.2の4によりw(c−c′)=d(c,c′)=d(C)であるからμ≤d(C)である。▨
次に、受け取った列を符号語へ直す操作と、その操作が正しく働く範囲を定めます。ここで、誤りを訂正することと検出することを分けて定義します。両者は要求が異なり、必要な最小距離も異なります。
定義 2.4 (最近符号語による復号、訂正と検出).Cを線形符号とし、Cの要素が二つ以上あるとする。y∈F2nに対し、d(y,c)を最小にする符号語c∈Cを、yの最近符号語という。tとsを正の整数とする。
- Cがt個以下の誤りを訂正することができるとは、すべての符号語c∈Cと、w(e)≤tを満たすすべてのe∈F2nについて、c+eの最近符号語がcただ一つであることをいう。
- Cがs個以下の誤りを検出することができるとは、すべての符号語c∈Cと、1≤w(e)≤sを満たすすべてのe∈F2nについてc+e∈/Cであることをいう。
定理 2.5 (最小距離が訂正と検出の能力を決める).Cを線形符号、δ=d(C)とし、Cの要素は二つ以上あるとする。tとsを正の整数とする。
- Cがt個以下の誤りを訂正することができることと、δ≥2t+1であることは同値である。
- Cがs個以下の誤りを検出することができることと、δ≥s+1であることは同値である。
証明. 1の十分性を示す。δ≥2t+1とする。c∈C、w(e)≤tとしy=c+eとおく。命題 2.2の4によりd(y,c)=w(e)≤tである。c′∈C、c′=cとすると、同命題の3により
δ≤d(c,c′)≤d(c,y)+d(y,c′)であるからd(y,c′)≥δ−t≥(2t+1)−t=t+1>t≥d(y,c)である。よってcはyの最近符号語であり、他のどの符号語もyとの距離が真に大きいから、最近符号語はcただ一つである。
1の必要性を、対偶によって示す。δ≤2tとする。d(c1,c2)=δを満たす相異なる符号語c1,c2を取り、Sをc1とc2の成分が異なる添字の集合とする。∣S∣=δである。δ≤2tとtが整数であることから⌈δ/2⌉≤tである。Sの部分集合Tで∣T∣=⌈δ/2⌉を満たすものを一つ取り、yを、Tに属する添字ではc2の成分に等しく、それ以外の添字ではc1の成分に等しいベクトルとする。このとき
d(y,c1)=∣T∣=⌈δ/2⌉,d(y,c2)=∣S∣−∣T∣=δ−⌈δ/2⌉=⌊δ/2⌋である。e=y−c1とおくとw(e)=⌈δ/2⌉≤tであり、y=c1+eである。ところがd(y,c2)=⌊δ/2⌋≤⌈δ/2⌉=d(y,c1)であり、c2=c1であるから、yの最近符号語はc1ただ一つではない。よってCはt個以下の誤りを訂正することができない。
2の十分性を示す。δ≥s+1とする。c∈C、1≤w(e)≤sとし、c+e∈Cと仮定する。Cは部分空間であるからe=(c+e)−c∈Cであり、w(e)≥1よりe=0である。命題 2.3によりw(e)≥δ≥s+1となり、w(e)≤sに矛盾する。よってc+e∈/Cである。
2の必要性を、対偶によって示す。δ≤sとする。命題 2.3によりw(e)=δを満たすe∈C、e=0が存在する。c=0∈Cとすると1≤w(e)=δ≤sであり、c+e=e∈Cであるから、Cはs個以下の誤りを検出することができない。▨
検査行列を使うと、最小距離を符号語の列挙なしに判定することができます。
命題 2.7 (最小距離を検査行列の列から判定する).Cを長さnの線形符号、Hをその検査行列とし、Hの第j列をhjと書く。Cの要素は二つ以上あるとする。δを2≤δ≤nを満たす整数とするとき、d(C)≥δであることと、Hの相異なるδ−1本の列がどのように選んでも一次独立であることは同値である。
証明.x∈F2nに対し、xj=1を満たす添字jの集合をS(x)と書くと、F2の成分は0か1であるからHx=∑j∈S(x)hjである。したがって、重みがwである0でない符号語が存在することと、Hの相異なるw本の列で和が0になるものが存在することは同値である。
また、F2の上では、相異なる列の組hj1,…,hjmが一次従属であることと、その中の空でない部分の和が0になることは同値である。実際、一次関係∑icihji=0で係数がすべて0ではないものを取ると、各ciは0か1であるから、ci=1となる添字だけを集めた空でない部分の和が0になる。逆も同様である。
以上より、d(C)≤δ−1であること、すなわち命題 2.3により重みがδ−1以下の0でない符号語が存在することは、Hの相異なるδ−1本以下の列で一次従属になるものが存在することと同値である。δ−1本より少ない本数の従属な組は、列を付け加えても従属のままであり、Hの列はn≥δ−1本あるから、これは「Hの相異なるδ−1本の列で一次従属になるものが存在する」ことと同値である。対偶を取れば主張を得る。▨
3 ハミング符号
命題 2.7は、最小距離が3以上であることと、Hのどの2本の列も一次独立であることが同値であると述べています。F2の上で2本のベクトルが一次独立であることは、どちらも0でなく、かつ互いに異なることと同じです。そこで、条件を満たす列をできるだけ多く並べた行列を検査行列に取ります。
定義 3.1 (ハミング符号).r≥2を整数とし、n=2r−1とおく。F2rの0でないベクトルは2r−1=n個ある。j=1,2,…,nに対し、hj∈F2rを、jを2進法で表したときの各位の値を上から順に並べたベクトルとし、Hをh1,…,hnを列に並べたr×n行列とする。Cr=KerHをハミング符号という。
jが1から2r−1までを動くとき、jの2進表示はF2rの0でないベクトルをちょうど一度ずつ与えますので、Hの列は互いに異なり、どれも0ではありません。
定理 3.2 (ハミング符号の次元と最小距離).r≥2、n=2r−1とし、Crを定義 3.1のハミング符号とする。
- dimCr=n−r=2r−1−rである。すなわちCrは[2r−1, 2r−1−r]符号である。
- d(Cr)=3である。
- Crは1個以下の誤りを訂正することができ、2個以下の誤りを検出することができる。
証明. 1について。F2rの標準基底ベクトルはいずれも0でないから、Hの列として現れる。したがってImHはF2rの標準基底を含む部分空間であり、ImH=F2r、dimImH=rである。§D3.11 定理 2.1よりdimCr=dimKerH=n−rである。r≥2のときn−r=2r−1−r≥1であるから、Crには0でない符号語があり、最小距離が定まる。
2について。まずd(Cr)≥3を示す。Hの相異なる2本の列hi,hj(i=j)を取る。c1hi+c2hj=0とする。c1=1、c2=0とするとhi=0となって矛盾し、c1=0、c2=1の場合も同様である。c1=c2=1とするとhi=−hj=hjとなり、列が互いに異なることに反する。よってc1=c2=0であり、2本の列は一次独立である。命題 2.7をδ=3として適用するとd(Cr)≥3を得る。
次にd(Cr)≤3を示す。r≥2であるから、F2rには相異なる0でないベクトルu,vが存在する。u+v=0とするとu=vとなって矛盾するからu+v=0であり、u+vもHの列として現れる。u+v=uとするとv=0となって矛盾し、u+v=vの場合も同様であるから、u、v、u+vは互いに異なる3本の列である。これらの和はu+v+(u+v)=0である。この3本に対応する添字だけが1であるベクトルxを取ると、Hx=0であるからx∈Crであり、w(x)=3である。命題 2.3よりd(Cr)≤3である。以上よりd(Cr)=3である。
3について。d(Cr)=3=2⋅1+1であるから定理 2.5の1により1個以下の誤りを訂正することができ、3=2+1であるから同定理の2により2個以下の誤りを検出することができる。▨
訂正することができるだけでなく、誤りの位置を求める手順が、検査行列の列の並べ方から直ちに得られます。
命題 3.3 (誤りの位置は H との積から定まる).Crを定義 3.1のハミング符号、Hをその検査行列とする。c∈Cr、w(e)≤1とし、y=c+eとおく。
- Hy=0ならばe=0であり、y=cである。
- Hy=0ならば、Hyを2進表示と読んで得られる整数をjとするとき、1≤j≤nであり、e=ej(第j標準基底ベクトル)である。したがってyの第j成分を反対の値に変えるとcが得られる。
証明.Hc=0であるからHy=Heである。w(e)≤1であるから、e=0であるか、あるjについてe=ejであるかのいずれかである。
e=0のときHy=0である。e=ejのときHy=Hej=hj=0である。よってHy=0とe=0は同値であり、1が従う。
Hy=0のときはe=ejでありHy=hjである。定義 3.1によりhjはjの2進表示であるから、Hyを2進表示と読んで得られる整数がjに等しい。y−ej=cであり、F2では−1=1であるから、第j成分を反対の値に変える操作がejを引く操作である。▨
例 3.4 (r=3 のハミング符号).r=3とするとn=23−1=7であり、定理 3.2の1よりdimC3=7−3=4です。検査行列は、1から7までの2進表示を列に並べた
H=001010011100101110111です。第j列を上から4の位、2の位、1の位と読むとjになります。
生成行列を作ります。Hx=0の解のうち、次の4本を取ります。第3成分だけが1である解を作るには、h3=(0,1,1)⊤を打ち消す必要があり、h1+h2=(0,0,1)⊤+(0,1,0)⊤=(0,1,1)⊤ですので、第1,2,3成分が1であるベクトルが解です。同様にh5=h1+h4、h6=h2+h4、h7=h1+h2+h4ですので、
G=1110000100110001010101101001の4本の列がいずれもC3に属します。第3,5,6,7行を見ると、各列はその位置にだけ1をもち、他の列はそこで0ですので、4本は一次独立です。この4本が張る部分空間WはC3に含まれ、dimW=4=dimC3ですので、§D3.8 命題 3.5によりW=C3です。したがって4本はC3の基底であり、Gは定理 1.3の1の意味で生成行列です。検算としてHG=Oを第1列について確かめると、h1+h2+h3=(0,0,1)⊤+(0,1,0)⊤+(0,1,1)⊤=(0,0,0)⊤となります。
復号します。c=(0,0,1,0,1,1,0)⊤とおくと、これはGの第1,2,3列の和であり、Hc=h3+h5+h6=(0,1,1)⊤+(1,0,1)⊤+(1,1,0)⊤=(0,0,0)⊤ですので符号語です。第2成分に誤りが起きてy=(0,1,1,0,1,1,0)⊤を受け取ったとします。
Hy=h2+h3+h5+h6=h2=(0,1,0)⊤であり、(0,1,0)を2進表示と読むと2です。命題 3.3の2により誤りの位置は第2成分であり、その成分を反対の値に変えると(0,0,1,0,1,1,0)⊤=cが得られます。
命題 3.5 (半径 1 の球が空間を過不足なく覆うこと).r≥2、n=2r−1とし、Crをハミング符号とする。各符号語cに対しB(c)={y∈F2n:d(y,c)≤1}とおく。このとき、集合B(c)(cはCrの全体を動く)は互いに交わらず、その和集合はF2nの全体に一致する。
証明. 互いに交わらないことを示す。y∈B(c)∩B(c′)、c=c′とすると、命題 2.2の3によりd(c,c′)≤d(c,y)+d(y,c′)≤2となり、定理 3.2の2のd(Cr)=3に反する。
要素の個数を数える。∣B(c)∣=1+nである。c自身と、n個の成分のうち一つだけを変えたものが該当するからである。符号語は定理 3.2の1と定義 1.1の直後の計算により2n−r個ある。互いに交わらないから、和集合の要素の個数は
2n−r(1+n)=2n−r⋅2r=2nである。∣F2n∣=2nであり、和集合はF2nに含まれるから、両者は一致する。▨
5 自分で確かめる
次の三つを、資料を見ずに行ってください。
- 例 1.4のn=4の場合について、符号語をすべて書き出し、最小距離を命題 2.3によって求め、定理 2.5を用いて、訂正することのできる誤りの個数と検出することのできる誤りの個数を述べてください。
- 例 3.4のHについて、y=(1,1,0,1,0,1,1)⊤を受け取ったとしてHyを計算し、命題 3.3に従って復号してください。得られたベクトルがHの核に属することを検算してください。
- r=2の場合のハミング符号C2を書き下し、定理 3.2の1と2が成り立つことを、符号語をすべて挙げることで確かめてください。
3ではn=3、dimC2=1ですので、符号語は2個です。Hの列は(0,1)⊤、(1,0)⊤、(1,1)⊤になります。