Ich möchte einem 100-Bin-Signal, das ich in Python simuliere, zufälliges Rauschen hinzufügen, um es realistischer zu machen.
Grundsätzlich war mein erster Gedanke, Bin für Bin zu gehen und einfach eine Zufallszahl zwischen einem bestimmten Bereich zu generieren und diese vom Signal zu addieren oder zu subtrahieren.
Ich hatte gehofft (da dies Python ist), dass es einen intelligenteren Weg gibt, dies über Numpy oder so zu tun. (Ich nehme an, dass im Idealfall auch eine Zahl aus einer Gaußschen Verteilung, die zu jedem Bin hinzugefügt wird, besser wäre.)
Vielen Dank im Voraus für alle Antworten.
Ich bin gerade dabei, meinen Code zu planen, daher habe ich nichts zu zeigen. Ich dachte nur, dass es eine ausgefeiltere Art geben könnte, das Geräusch zu erzeugen.
In Bezug auf die Ausgabe, wenn ich 10 Fächer mit den folgenden Werten hätte:
Behälter 1: 1 Behälter 2: 4 Behälter 3: 9 Behälter 4: 16 Behälter 5: 25 Behälter 6: 25 Behälter 7: 16 Behälter 8: 9 Behälter 9: 4 Behälter 10: 1
Ich habe mich nur gefragt, ob es eine vordefinierte Funktion gibt, die Rauschen hinzufügen kann, um mir so etwas wie Folgendes zu geben:
Behälter 1: 1,13 Behälter 2: 4,21 Behälter 3: 8,79 Behälter 4: 16,08 Behälter 5: 24,97 Behälter 6: 25,14 Behälter 7: 16,22 Behälter 8: 8,90 Behälter 9: 4,02 Behälter 10: 0,91
Wenn nicht, gehe ich einfach Bin für Bin und füge jedem eine aus einer Gaußschen Verteilung ausgewählte Zahl hinzu.
Danke dir.
Es ist eigentlich ein Signal von einem Radioteleskop, das ich simuliere. Ich möchte in der Lage sein, das Signal-Rausch-Verhältnis meiner Simulation zu wählen.
Antworten:
Sie können ein Rauscharray erzeugen und es Ihrem Signal hinzufügen
quelle
... und für diejenigen, die - wie ich - sehr früh in ihrer numpy Lernkurve sind,
quelle
Für diejenigen, die versuchen, die Verbindung zwischen SNR und einer normalen Zufallsvariablen herzustellen, die von numpy generiert wird:
[1] , wo es wichtig ist zu bedenken, dass P die durchschnittliche Leistung ist.
Oder in dB:
[2]
In diesem Fall haben wir bereits ein Signal und möchten Rauschen erzeugen, um ein gewünschtes SNR zu erhalten.
Während Rauschen je nach Modell in verschiedenen Geschmacksrichtungen auftreten kann, ist Additive White Gaussian Noise (AWGN) ein guter Anfang (insbesondere für dieses Radioteleskop-Beispiel ) . Wie in den vorherigen Antworten angegeben, müssen Sie zum Modellieren von AWGN Ihrem ursprünglichen Signal eine Gaußsche Zufallsvariable mit einem Mittelwert von Null hinzufügen. Die Varianz dieser Zufallsvariablen beeinflusst die durchschnittliche Rauschleistung.
Für eine Gaußsche Zufallsvariable X beträgt die durchschnittliche Leistung , auch als zweiter Moment bekannt ,
[3].
Also für weißes Rauschen, und die durchschnittliche Leistung ist dann gleich der Varianz .
Wenn Sie dies in Python modellieren, können Sie entweder
1. die Varianz basierend auf einem gewünschten SNR und einer Reihe vorhandener Messungen berechnen. Dies würde funktionieren, wenn Sie erwarten, dass Ihre Messungen ziemlich konsistente Amplitudenwerte aufweisen.
2. Alternativ können Sie die Rauschleistung auf einen bekannten Pegel einstellen, um etwa dem Empfängerrauschen zu entsprechen. Das Empfängerrauschen könnte gemessen werden, indem das Teleskop in den freien Raum gerichtet und die durchschnittliche Leistung berechnet wird.
In jedem Fall ist es wichtig sicherzustellen, dass Sie Ihrem Signal Rauschen hinzufügen und Durchschnittswerte im linearen Raum und nicht in dB-Einheiten ermitteln.
Hier ist ein Code zum Erzeugen eines Signals und zum Zeichnen der Spannung, der Leistung in Watt und der Leistung in dB:
Hier ist ein Beispiel für das Hinzufügen von AWGN basierend auf einem gewünschten SNR:
Und hier ist ein Beispiel für das Hinzufügen von AWGN basierend auf einer bekannten Rauschleistung:
quelle
Für diejenigen, die einem mehrdimensionalen Datensatz, der in einem Pandas-Datenrahmen oder sogar einem numpy ndarray geladen ist, Rauschen hinzufügen möchten, ist hier ein Beispiel:
quelle
Tolle Antworten oben. Vor kurzem musste ich simulierte Daten generieren, und das ist es, worauf ich gelandet bin. Teilen für den Fall hilfreich für andere,
quelle
AWGN Ähnlich wie die Matlab-Funktion
quelle
Im wirklichen Leben möchten Sie ein Signal mit weißem Rauschen simulieren. Sie sollten Ihrem Signal zufällige Punkte hinzufügen, die eine normale Gaußsche Verteilung haben. Wenn es sich um ein Gerät handelt, dessen Empfindlichkeit in Einheit / SQRT (Hz) angegeben ist, müssen Sie eine Standardabweichung Ihrer Punkte davon festlegen. Hier gebe ich die Funktion "white_noise", die dies für Sie erledigt. Der Rest eines Codes ist eine Demonstration und prüfe, ob er das tut, was er sollte.
quelle