2016-06-16 2 views
1

Ich habe eine Implementierung eines LFSR in Hardware gemacht. Es basierte auf dem LFSR von der Wikipedia-Seite. Es hat die gleiche Ausgabe.Warum erfüllt ein 16bit LFSR alle Diehard-Tests?

Es alle Tests für dieharder passieren, aber ich diese in 2D

2D plot of the LFSR

Also nicht sehr zufällige Linien bekommen, wenn ich die Paare plotten, wie kann ich einen starken statistischen Tests, die nachweisen konnten Dieser PRNG ist nicht ideal?

GELÖST:

I comand

dieharder -a -f exemple_LSRF_BS_1_DH.txt -g 202 

verwenden und einen Header in die Ausgabedatei ich meine Zahlen hinzufügen.

+2

Der Spektraltest sollte dieses Verhalten erfassen. Dieharder listet es als eine mögliche zukünftige Ergänzung auf. – pjs

+0

Das Bild, das ich anführte, ist der Spektraltest (glaube ich). –

+1

Es sieht für mich wie eine reine paarweise Handlung aus. – pjs

Antwort

0

Aufgrund des Aussehens Ihres Diagramms würde ich annehmen, dass Ihr zufälliger Bitstrom nach jedem Zyklus das gesamte Register ausstrahlt, anstatt nur ein Bit pro Zyklus auszugeben. Dies bedeutet, dass bei Betrachtung als 16-Bit-Wörter x_(n+1) entweder X_n/2 oder X_n/2 + 32768 ist. Dies manifestiert sich als zwei diagonale Linien mit einem Gradienten von 0,5 (oder 2,0, abhängig von der Reihenfolge und/oder Verschiebungsrichtung).

Die normale Verwendung eines LFSR würde entweder ein Bit pro Zyklus oder alle n Bits alle n Zyklen ausgeben. Dies erzeugt einige negative Eigenschaften, aber sie sind nicht so offensichtlich wie das, was Sie gezeigt haben.

Warum Ihr Test fehlschlägt diharder; Ich denke, es muss einen Fehler in Ihrem Testaufbau geben. Ich änderte Code von Wikipedia, um den 16-Bit-Zustand bei jedem Zyklus auf stdout zu emittieren, und piped das in dieharder -a -g200, und es scheiterte sofort an den ersten fünf Tests. Das ist, was man erwarten würde; sogar hexdump -C zeigt offensichtliche sichtbare Muster.

Ändern des Codes, um den 16-Bit-Zustand alle 16 Zyklen zu emittieren, hexdump -C sieht viel zufälliger aus, aber die Dieseharder schlägt immer noch gleich aus.

Vielleicht haben Sie die Generatorquelle nicht angegeben, damit sie leer ist, und so hat sie ihren internen Standardgenerator verwendet.

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

Trotzdem, wenn Sie gründlichere Tests für Ihre Generatoren wollen, haben einen Blick auf TestU01: Sie können dies auf der Linie fünf der Ausgabe bestätigen.

+0

Dies ist der Header-I wurde mit # ======================================= ========== # Generator LFSR Seed = 1 # ===================== Typ: d Anzahl: 65535 NUMBIT: 16 --------------------------- auch die comand ich verwendet wurde dieharder -f exemple.txt -a –

+0

Es scheint, Du hast recht. Das ist die Linie, die ich bekomme. Rngname | Dateiname | Rands/Sekunde | mt19937 | beispiel.txt | 1.65e + 08 | –

Verwandte Themen