Forum: Analoge Elektronik und Schaltungstechnik 1/f-Rauschen: Zahlenwerte berechnen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rausch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich möchte digitale Zahlenwerte "berechnen", die rosa Rauschen 
entsprechen.
Gibt es da keinen Algorithmus oder Formel?

Ich dachte mir, die Werte eines Zufallsgenerators (Random-Funktion)
mit einer Funktion zu multiplizieren, um entweder Gauß verteiltes weißes 
Rauschen zu bekommen, dann noch Filtern - integrieren(?).

von Kai K. (klaas)


Bewertung
0 lesenswert
nicht lesenswert
>Gibt es da keinen Algorithmus oder Formel?

Rosa Rauschen digitalisieren und in eine "Look-Up"-Tabelle schießen...

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Der Zufallsgenerator (für gleichverteilte Zufallszahlen) liefert dir 
weißes Rauschen im Bereich von 0 bis zu halben Abtastfrequenz. 
Integrierst du dieses Signal, erhältst du 1/f-Rauschen. Die Integration 
kannst du durch einfaches Aufaddieren der Zufallswerte realisieren:
// Zufallszahlen im Bereich [-0.5, +0.5]
double rnd() {
  return (double)rand() / RAND_MAX - 0.5;
}

void generate(double x[], int n) {
  double sum = 0;
  int i;
  for(i=0; i<n; i++) {
    x[i] = sum;
    sum += rnd();
  }
}

Edit: Mist, das oben Beschriebene ist kein rosa, sondern rotes Rauschen 
(1/f²-Rauschen), da sich das 1/f bzw. 1/f² ja auf die Rauschleistung und 
nicht die -amplitude bezieht. Aber 1/f-Rauschen kann sicher auch 
irgendwie berechnet werden. Nur nicht mehr heute :)

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir die Sache gerade noch einmal durch den Kopf gehen lassen. 
Um 1/f-Rauschen zu erhalten, muss das weiße Rauschen nicht 1-mal, 
sondern 1/2-mal integriert werden. Hier steht, wie's geht:

http://de.wikipedia.org/wiki/Fraktionale_Infinitesimalrechnung#Iterative_und_fraktionale_Integrale

Mit etwas Hin- und Herrechnen und nach Weglassen konstanter Faktoren 
kommt man auf folgende Funktion zur Generierung des 1/f-Rauschens:
void generate(double x[], int n) {
  double r;
  int i, j;

  for(i=0; i<n; i++) {
    r = rnd();
    for(j=i+1; j<n; j++)
      x[j] += r * (sqrt(j-i) - sqrt(j-i-1));
  }
}

von Arc N. (arc)


Bewertung
0 lesenswert
nicht lesenswert
Andere Algorithmen inkl. der Theorie dahinter
http://www.firstpr.com.au/dsp/pink-noise/

von Rausch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke schon mal für die Hinweise.
Ich habe schon probiert, die gleichverteilten Zufallszahlen zu 
integrieren.
Dabei sind aber langsame und hohe Abweichungen vom Nullpunkt 
aufgetreten,
eine echte Kurve sieht anders aus.
Ich muss mal die Ergebnisse meines Generators genauer analysieren.

Gleichverteilte Zufallszahlen sind aber kein weißes Rauschen - 
(Gauß-verteilt)?
Deshalb auch die Frage nach Gauß-verteilten Zufallszahlen. Das 
numerische 1/f-filtern wäre dann tatsächlich eine Integration.

von Rausch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank an Arc Net.
Da gibt es jetzt viel zu studieren...

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Rausch schrieb:
> Ich habe schon probiert, die gleichverteilten Zufallszahlen zu
> integrieren.
> Dabei sind aber langsame und hohe Abweichungen vom Nullpunkt
> aufgetreten,

So soll es ja auch sein. Je niedriger die Frequenz, desto höher die
Amplitude.

> eine echte Kurve sieht anders aus.

Dann ist es kein perfektes 1/f²-Rauschen. So etwas dürfte in freier
Natur auch kaum vorkommen, da immer in irgendeiner Form eine
Amplitudenbegrenzung vorhanden ist.

Rausch schrieb:
> Gleichverteilte Zufallszahlen sind aber kein weißes Rauschen -
> (Gauß-verteilt)?

Doch. Nimm Matlab oder ein anderes Tool deiner Wahl und lasse dir eine
Sequenz von gleichverteilten Zufallszahlen fourier-transformieren. Da
die Spektralfunktion ebenso wie das Originalsignal verrauscht ist,
kannst du das Ganze viele tausend Mal (jeweils mit anderen
Zufallszahlen) wiederholen und daraus die Spektralfunktion mitteln. Dann
wirst du für jede Frequenz ziemlich genau den gleichen Wert erhalten.

Da Gleiche kannst du mit den oben angegebenen Routinen zur Generierung
von 1/f²- und 1/f-Rauschen machen.

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.