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


von Rausch (Gast)


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)


Lesenswert?

>Gibt es da keinen Algorithmus oder Formel?

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

von Yalu X. (yalu) (Moderator)


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:
1
// Zufallszahlen im Bereich [-0.5, +0.5]
2
double rnd() {
3
  return (double)rand() / RAND_MAX - 0.5;
4
}
5
6
void generate(double x[], int n) {
7
  double sum = 0;
8
  int i;
9
  for(i=0; i<n; i++) {
10
    x[i] = sum;
11
    sum += rnd();
12
  }
13
}

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)


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:
1
void generate(double x[], int n) {
2
  double r;
3
  int i, j;
4
5
  for(i=0; i<n; i++) {
6
    r = rnd();
7
    for(j=i+1; j<n; j++)
8
      x[j] += r * (sqrt(j-i) - sqrt(j-i-1));
9
  }
10
}

von Arc N. (arc)


Lesenswert?

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

von Rausch (Gast)


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)


Lesenswert?

Vielen Dank an Arc Net.
Da gibt es jetzt viel zu studieren...

von Yalu X. (yalu) (Moderator)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.