www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pseudozufallsgenerator


Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Für ein Flackerlicht brauche ich einen Pseudozufall der mir Werte von 0 
bis 255 mit möglichstgleicher Wahrscheinlichkeit ausgibt.

Hat ein LFSR eine gleichmäßige Wahrscheinlichkeitsverteilung oder ist 
das auch eher schlecht? Gibts noch was besseres?

lg PoWl

Autor: Sachich Nich (dude) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reicht

Autor: Melanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum flackern wird sicher eine Schiebregister mit EXOR geeinet sein.
Null kommt allerdings nicht vor.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hätte ich einfach mal gemacht als gleich wieder theoritisiert hätte ich 
mir den Thread sparen können:

Hier mal mein speicherplatzfressender aber funktionierender Code:
uint8_t random()
{
  static uint32_t random = 0b10111011101100111101001100101011;

  uint8_t result;

  for(uint8_t i=0; i<8; i++)
  {
    // Letze Ziffer in Result übernehmen
    result = random << 32;
    result <<= 1;

    // Schieberegister eins weiter schieben
    random >>= 1;

    // Mehrere XOR-Verknüpfungen und neue Zufallsziffer berechnen
    random ^= (random << 1) & (1UL << 1);
    random ^= (random << 2) & (1UL << 2);
    random ^= (random << 5) & (1UL << 5);
    random ^= (random << 8) & (1UL << 8);
  }
}

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat ein LFSR eine gleichmäßige Wahrscheinlichkeitsverteilung oder ist
>das auch eher schlecht?
Bei einem LFSR der Länge n kommt jeder der 2^(n-1) Werte genau einmal 
vor, in einer vom Rückkopplungspolynom festgelegten Folge, die in sich 
quasi zufällig ist aber sich nach Ablauf einer Periode exakt wiederholt. 
Wie schon bemerkt, fehlt die Null (oder wenn du alles invertierst, fehlt 
eben das Wort mit den n Einsen). Für n=8 erhälst du also 'nur' 255 
Werte.

>Gibts noch was besseres?
Ja, weiße, analoge Rauschquelle digitalisieren.

Vielleicht ist auch schon eine Vergrößerung von n hilfreich, wobei du 
weiterhin nur 8 Bit zur Auswertung heranziehst.
Ohne den Grund zu kennen: in der Praxis begegneten mir immer nur Folgen 
mit n=7, 15, 21 usw.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass die 0 nicht dabei ist macht nix.

Ich sehe grad dass mein Code n Fehler hat.
    random ^= (random << 1) & (1UL << 1);
    random ^= (random << 2) & (1UL << 2);
    random ^= (random << 5) & (1UL << 5);
    random ^= (random << 8) & (1UL << 8);

da würde jede zeile bewirken, dass random komplett mit einer stelle 
eines verschobenen random registers xor-verknüpft wird. ist irgendwie 
schwachsinnig.

eigentlich wollte ich sowas in der art
    random ^= (random << (32 - 1)) & 1;
    random ^= (random << (32 - 2)) & 1;
    random ^= (random << (32 - 5)) & 1;
    random ^= (random << (32 - 8)) & 1;

damit werden allerdings immernoch alle ziffern xor-verknüpft.. wie mach 
ich das, dass nur die erste xor-verknüpft wird? jedesmal noch ein | 
random dazu?
    random ^= ((random << (32 - 1)) & 1) | (random & !(1));
    random ^= ((random << (32 - 2)) & 1) | (random & !(1));
    random ^= ((random << (32 - 5)) & 1) | (random & !(1));
    random ^= ((random << (32 - 8)) & 1) | (random & !(1));

Das sieht kompliziert aus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.