2016-06-16 7 views
1

私はハードウェアでLFSRの実装を行いました。これは、ウィキペディアのページのLFSRに基づいています。それは同じ出力を持っています。16ビットLFSRがDiehardのテストに合格するのはなぜですか?

私は2D

2D plot of the LFSR

ので

に、この非常にランダムではない行を取得ペアをプロット場合は、しかし、dieharderためのすべてのテストに合格し、私は強い統計的検定を持つことができますどのようになるかもしれませんこのPRNGは理想的ではありませんか?

は解決:

を私はCOMAND

dieharder -a -f exemple_LSRF_BS_1_DH.txt -g 202 

を使用して、私は私の番号を持っている出力ファイルにヘッダを追加する必要があります。

+2

スペクトルテストはその動作を捕捉するはずです。 Dieharderはそれを将来の追加可能性として挙げている。 – pjs

+0

私が描いたイメージはスペクトルテストです(私は思います)。 –

+1

純粋なペアワイズプロットのようです。 – pjs

答えて

0

あなたのプロットの外観では、サイクルごとにちょうど1ビットを出すのではなく、あなたのランダムビットストリームが各サイクルの後にレジスタ全体を放出すると思います。これは、16ビットワードとして見た場合、x_(n+1)X_n/2またはX_n/2 + 32768のいずれかであることを意味します。これは、勾配が0.5(または、次数および/またはシフト方向に応じて2.0)の2つの対角線として現れます。

通常、LFSRを使用すると、1サイクルあたり1ビット、またはnビットのすべてがnサイクルごとに発生します。これはいくつかの否定的な特性を生み出しますが、あなたが示したものほどはっきりしません。

なぜあなたのテストがダイハードに失敗するのか?あなたのテストセットアップに欠陥があるはずです。 Wikipediaのコードを変更してstdoutの各サイクルで16ビットの状態を出し、それをdieharder -a -g200にパイプし、最初の5回のテストで直ちに失敗しました。それは、人が期待するものです。さらにhexdump -Cは明らかな目に見えるパターンを示す。

hexdump -Cは、16サイクルごとに16ビットの状態を出すようにコードを変更すると、はるかにランダムに見えますが、ダイハーダーはまったく同じように失敗します。

おそらく、発電機のソースをdieharderに指定していない可能性があります。そのため、デフォルトの内部発電機を使用しました。あなたは、出力の行5でこれを確認することができます:あなたは発電機のためのより徹底的なテストをしたい場合は

rng_name |rands/second| Seed | 
     mt19937| 1.42e+08 |1473327481| 

そうであっても、TestU01を見ています。

+0

これは======================================= Iは #を用いたヘッダであります========== #発電機LFSRシード= 1 #================== タイプ:d 件数:65535 numbit:16 --------------------------- また私が使ったコマンドは dieharder -f exemple.txt -a –

+0

あなたは正しいです。 これは私が得る行です。 rng_name |ファイル名| rands/second | mt19937 | exemple.txt | 1.65e + 08 | –

関連する問題