« 1MポイントのハードウェアFFTが正しく動いた | トップページ | 夜中の工作 »

2018.03.13

LFSRの疑似乱数でコード変調の実験

開発中のCosmo-Z Miniに備わっているDAコンバータとADコンバータをループバックして、LFSRの実験をしてみました。

Lfsr9

LFSRというのは線形フィードバックレジスタのことで、XORを使ってシフトレジスタをフィードバックしたものです。疑似乱数を作るときによく使われるもので、M系列というものになるように係数を設定すると都合がよくなります。詳しいことはググってください。

さて、X^14+x^13+x^12+x^2+1という多項式にするとM系列になるようなので、

ref_lfsr <= ref_lfsr(12 downto 0) & (ref_lfsr(13) xor ref_lfsr(12) xor ref_lfsr(11) xor ref_lfsr(1));

という式を書いて実際に試してみました。

125MHzの速度でLFSRを出力して、オシロで見ると、

Lfsr

このようなランダムな波形となります。HとLの高さんが2段階見えるのは、H→HとL→Hの場合とで落ち着く電圧が異なるためです。

この波形をCosmo-ZのADCで取り込んでみました。緑の線がLFSRの乱数の系列で、茶色の線がADCから受信した波形です。

Lfsr1

ぱっと見た感じでは20~30クロック遅れて受信しているように思われます。L→L、L→Hで信号のレベルが異なっているのがわかります。

疑似乱数の系列を少しずつ遅延させていきます。

Lfsr2

だいぶん位置が合うようになってきました。

LFSRの参照信号が1のときは1、0のときは-1を、ADCの信号に掛けます。そして、その掛け算した結果を1周期分積分します。

Lfsr3

紫の線が乗算結果で、灰色の線がそれを総和したものです。特に灰色の線は0の付近で動いていません。

次の図は、参照信号と受信した波形の周期がぴったりと一致した場合です。

Lfsr4

乗算結果のピンクの線が常に負の値となり、積算結果もぐんぐん伸びていきました。

より長い範囲で見てみます。参照信号の遅延がぴったりと一致している場合。

Lfsr5

そこから1ビット遅れた場合。

Lfsr6

このように、受信した信号と参照信号が一致した場合にのみ、灰色の線が0ではない値になります。

1クロックずつ参照信号のタイミングをずらしていって、結果としてどのような遅延時間のときにデコード出力が出るかを調べました。

Lfsr8

上のグラフは、周期16383のLFSRで変調されたデータを、同じ系列のLFSRを0~16383まで遅延させて掛けて、積算したデコード結果です。

遅延がほぼ0のときにだけ大きな値が出ています。

この部分を拡大し、横軸を遅延時間、縦軸を電圧に換算したものが下の図です。DACとADCをつなぐケーブルを50cm、1m、2mの3種類に変えて実験しました。

Lfsr7

その結果、ピークを中心に±1くらいの範囲でデコード出力が非ゼロになることがわかります。遅延時間が完全に一致しなくても出力が残るのは、波形が鈍るからでしょう。鈍った波形の中にも元の波形に由来する成分があるからです。

sun

今回の実権の構成では、125MHzのクロックで125MHzまでのDACとADCを動かし、OPアンプ回路も100MHz程度の帯域しかありませんので、基本的にはアナログの帯域が足りておらず、理想的な矩形波にはなっていないでしょう。おそらく、かなり鈍った矩形波です。

それでも、遅延時間が一致した場合のみ出力が出るので、コード変調のS/Nの高さがうかがい知れます。

|

« 1MポイントのハードウェアFFTが正しく動いた | トップページ | 夜中の工作 »

コメント

折角LFSR(MLS)を使っているのなら、アダマール変換でインパルス応答をリアルタイムに表示できるようにしたらおもしろそうですね。

投稿: wind | 2018.03.21 17:17

コメントを書く



(ウェブ上には掲載しません)




« 1MポイントのハードウェアFFTが正しく動いた | トップページ | 夜中の工作 »