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(?).
>Gibt es da keinen Algorithmus oder Formel?
Rosa Rauschen digitalisieren und in eine "Look-Up"-Tabelle schießen...
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 :)
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 | }
|
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.
Vielen Dank an Arc Net. Da gibt es jetzt viel zu studieren...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.