Walsh符号

直接拡散型CDMAでは拡散符号を使ってユーザーの分離を行っている。使用する拡散符号の相互相関値は0に近い程よい(2つの符号の間で、あっているビットと違っているビットの数が同数に近いほどよい)。しかし、符号のパターンはある程度豊富でなくてはいけない。
そこでcdmaOneでは拡散符号に64ビットのWalsh符号を使っている。「Walsh符号」は2値関数版のフーリエ変換といった方が近いかもしれない。cdmaOneの最新規格ではWalsh符号の長さが128ビットに拡張されていて、そのままcdma2000にも採用されるとのこと。


で、肝心要のWalsh符号だが、次のような法則で再帰的に生成される。元の符号を縦横に並べ、一部を反転させるのだ。
[image]
このようにして作られた符号は、数学的に正確なWalsh符号ではないのだが、両者の間には1対1の対応関係が成り立っていることが知られている。両者をつなぐ変換法則もあるのだが、ここでは省略。このWalsh符号の利点・欠点は以下の通り。
・ビット・位相の同期がとれていれば、異なる符号の相互相関値はどれも0
・ビット・位相の同期がずれると、符号の判別が難しくなる
・自己相関関数は生成行列から簡単にわかる
Walsh符号も試しに作ってみた。4,8,16bitのWalsh符号は以下のようになる。なお、符号を作成した後に「1」→「0」、「-1」→「1」というふうな変換をかけてある。
Code length = 4
No.01 [0,0,0,0,]
No.02 [0,1,0,1,]
No.03 [0,0,1,1,]
No.04 [0,1,1,0,]
Code length = 8
No.01 [0,0,0,0,0,0,0,0,]
No.02 [0,1,0,1,0,1,0,1,]
No.03 [0,0,1,1,0,0,1,1,]
No.04 [0,1,1,0,0,1,1,0,]
No.05 [0,0,0,0,1,1,1,1,]
No.06 [0,1,0,1,1,0,1,0,]
No.07 [0,0,1,1,1,1,0,0,]
No.08 [0,1,1,0,1,0,0,1,]
Code length = 16
No.01 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]
No.02 [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,]
No.03 [0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,]
No.04 [0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,]
No.05 [0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,]
No.06 [0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,]
No.07 [0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,]
No.08 [0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,]
No.09 [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,]
No.10 [0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,]
No.11 [0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,]
No.12 [0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,]
No.13 [0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,]
No.14 [0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,]
No.15 [0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,]
No.16 [0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,]
生成されたWalsh符号を見てピンときた鋭いかたもいるかもしれないが、一部自己相関特性がよろしくない物も混ざっている。ということで、cdmaOneでは64bitのWalsh符号を次のように使い分けている。
・ch.0…ネットワーク制御用のパイロットチャンネル
・ch.32…同期捕捉用の同期チャンネル
・ch.1~7…位置情報をやりとりするためのページングチャンネル
・残り…音声などを通すトラフィックチャンネル
パイロットチャンネルや同期チャンネルに使われているWalsh符号はぱっと見でなくとも自己相関特性はよろしくない。