疑似ノイズジェネレータ
by K.I
Index
511PNの発振回路の作成を依頼されたので、ちょっと調べてみた。
PN系列と呼ばれる、疑似ランダム系列を発生する回路(Pseudo-Random Number Generator)の一種である事が分かった。
[top]
PN系列は、シフトレジスタとフィードバックを組み合わせた回路で、生成する。
真に不規則ではなく繰返し信号であるが、繰返し周期が十分長く、ほとんど不規則とみなされるため、疑似ランダム系列と呼ばれる。
M系列とは、ある長さのシフトレジスタとフィードバックで生成される符号系列の周期が最大になるものをいう。
- それは、そのシフトレジスタで表される全ての組合せから、全て0の場合を除いたものになる。
- つまり、nビットのシフトレジスタの最大の符号系列の長さLは、以下のような式であらわされる。

M系列は、以下のようなシフトレジスタとEx-ORによるフィードバック回路で生成出来る。
- 但し、この場合のフィードバック回路のタップの位置は、ある特定の場合のみM系列となり、そうでない場合は周期は短くなる。
[top]
511PNは、送受信回路の設計仕様の規格測定等に用いられるらしい。
これ以上の情報は得られなかったが、511という数値から、9ビットのPN系列符号の発振回路と考えられる。この線から調べ直すと、9ビットPN符号ジェネレータは測定用に多く用いられており、PN9とも呼ばれているようだ。
何故、9ビットのPN符号がシリアル通信の測定に用いられるのだろうか。
- これは、M系列が0と1が同数で、且つ全ての組合せを含んでいるためだろう。
- 9ビットの全て0の組合せは無いが、通信の単位である1byteは8bitであるので、十分であるといえる。
M系列はタップの位置により複数の系列が存在するが、基本的に疑似乱数パターンであり、規格測定用にはどれを選んでも特に問題ないと考えられる。
- 但し、PN符号を積極的に通信の符号として用いる場合は、当然のことながら、どの符号系列を用いるかが重要になるだろう。
タップ位置についての文献は見つからなかったので、任意のタップ位置により9ビットPN系列(M系列)を発生するプログラム pn9 を作成して、シュミレーションしてみた。
その結果、タップ位置の組合せ511通りの内、周期が511になるものは48通り存在することが分かった1。
- 以下が、周期511になるタップの組合せ(9bit全てのタップを使う場合は1FFになる)
1FD 1F4 1F1 1EC 1EA 1E6 1E5 1E3 1DC 1DA
1C7 1C2 1BF 1B9 1B6 1B5 1B0 1AD 1A7 19D
198 191 18F 18A 189 17C 17A 16D 168 167
15E 15B 157 152 151 14A 143 13E 13B 137
134 12F 12C 119 116 110 10D 108
1実際は同一とみなせる組合せがあるため、この半分の24通りになるらしい。(未確認)しかし今回の目的には必要無いので、これ以上は追求しない。
2リンク切れでしたが、インターネットアーカイブにありました。分かり易く有用な記事だと思います。
[top]
結局、測定のためには規格上、15bitのPN符号が必要なことが分かった。
タップの情報が無いのでPN16コマンドを作成して、タップ位置を計算してみた。
だが、これだけ繰り返し周期が長いと重複のチェックに非常に膨大な時間が掛かる。以下の50個のタップを求めるのに30分ぐらい掛かった。
7FFE 7FF7 7FF4 7FEC 7FE3 7FD9 7FC8 7FBF 7FB9 7FB0
7FA7 7F9B 7F94 7F91 7F89 7F7F 7F75 7F64 7F5E 7F58
7F4C 7F43 7F3E 7F2C 7F26 7F20 7F19 7F16 7EF5 7EF0
7EEE 7ED8 7ED7 7ED1 7ECC 7EC5 7EB8 7EA9 7EA3 7E9C
7E96 7E95 7E8E 7E8B 7E87 7E77 7E69 7E56 7E41 7E3A
:
:
32767PNは4800bpsの場合、1周期が約6.8秒と十分過ぎる程の長さを持っている。
これぐらい長ければ、周期も持たない完全にランダムな信号と同様と考えても特に問題ないだろう。
- PN15の例(タップ0x6000)→以下は、最初の800ビットのみ抜粋。
10000000000000010000000000000110000000000001010000000000011110000000000100010000
00000110011000000001010101000000011111111000000100000001000001100000011000010100
00010100011110000111100100010001000101100110011001110101010101010011111111111110
10000000000001110000000000010010000000000110110000000001011010000000011101110000
00010011001000000110101011000001011111101000011100000111000100100001001001101100
01101101011010010110111101110111011000110011001101001010101010111011111111111001
10000000000101010000000001111110000000010000010000000110000110000001010001010000
01111001111000010001010001000110011110011001010100010101011111100111111100000101
00000010000111100000110001000100001010011001100011110101010100100011111111101100
10000000011010110000000101111010000001110001110000010010010010000110110110110001
- NRZIにしたものは、当然ランダム性が失われるのではと考えたが、ほとんど影響していないようだ。→以下、最初の800bit分抜粋
11111111111111100000000000000100000000000001100000000000010100000000000111100000
00000100010000000001100110000000010101010000000111111110000001000000010000011000
00011000010100000101000111100001111001000100010001011001100110011101010101010100
11111111111110100000000000011100000000000100100000000001101100000000010110100000
00011101110000000100110010000001101010110000010111111010000111000001110001001000
01001001101100011011010110100101101111011101110110001100110011010010101010101110
11111111111001100000000001010100000000011111100000000100000100000001100001100000
01010001010000011110011110000100010100010001100111100110010101000101010111111001
11111100000101000000100001111000001100010001000010100110011000111101010101001000
11111111101100100000000110101100000001011110100000011100011100000100100100100001
これは、NRZI変換が0と1のバランスが良いということもあるが、乱数の持つ性質によるものだろう。どちらで評価しても差はないと考えられる。
- 念のため、NRZI変換後のデータについて15bit毎に区切って重複が無いか、プログラムで確認してみたが、全く重複は無かった。
- つまり、M系列をNRZI変換してもM系列であり、どちらでも良いということになる。
[top]
MicroChip社のPIC12F675を使用し、プログラムでPN9,PN15ジェネレータを構成した。
- ピン配置は、 簡易送信チップと合わせた。(但し、IN0〜IN3は無効)
- TxEが'L'の場合に、4800bpsで511stage,32767stageのM系列PN符号3をNRZIで出力する。
- TxEが'H'の場合は、SLEEP動作に移行し電力消費を極力抑える。
- 今回から、TMR0割込みにより280us毎に送信動作を行なうようにしたため、全体の構成をシンプルにまとめることが出来た。
- PN符号発生ルーチンは、ステージ数は1〜16ビット可変長で、任意のタップのM系列PN符号が発生可能なようにプログラムした。
- PN15は、最初はオーバースペックだと思ったが、生成は簡単なので、逆にPN9を使う意味が無いかもしれない。でも、なぜPN16或はPN17では無いのかという理由については良く分からない。→15ビット以上、0や1が連続するのを嫌ったためかもしれないが。
3タップは、0x110と0x6000とした。
4stage,tapの設定値が違うだけで、全く同じプログラムである。stage数が可変になるようにプログラムを工夫してある。
[top]
[電子工作関連に戻る]
⇒ Disqusの広告がうるさすぎるので基本は非表示にしました