Wie kann man in MATLAB Band Limited Gaussian White Noise erzeugen?


16

In einigen Zeitungen habe ich gelesen, dass das additive Rauschen bandbegrenztes Gauß-Weiß ist.
Wie kann ich diese Art von Lärm mit MATLAB simulieren?


In zeitkontinuierlichen Systemen ist das Konzept des bandbegrenzten weißen Rauschens, ob Gauß oder nicht, gut definiert und gut verstanden. Bei zeitdiskreten Systemen ist das Problem komplizierter und Sie müssen berücksichtigen, wie hoch die Bandbegrenzung ist und wie sie mit der Nyquist-Frequenz verglichen wird.
Dilip Sarwate

2
@ DilipSarwate: Für mich ist "bandbegrenztes weißes Rauschen" ein Oxymoron! :-)
Peter K.

@PeterK. Der Begriff des bandbegrenzten weißen Rauschens wird hauptsächlich in Bandpaßsystemen verwendet, bei denen die Eigenschaften des Rauschens außerhalb des Durchlaßbandes unerheblich sind, während das Rauschen innerhalb des Durchlaßbandes nicht von weißem Rauschen zu unterscheiden ist, das durch ein ideales Bandpaßfilter geleitet wurde, das genau das Frequenzband passiert, das ist das Durchlassband. Es ist nicht mehr ein Oxymoron als weißes Rauschen (ohne abwertende Kommentare zu Bandbegrenzungen). Siehe auch DRazicks Kommentar (der genau richtig ist) nach der Antwort von Jason R (mit der ich nicht einverstanden bin).
Dilip Sarwate

1
@ DilipSarwate: Danke für die Erklärung. Ich verstehe, aber ich denke immer noch, dass es eine sehr schlechte Wahl der Terminologie ist. Für mich ist "bandpassgefiltertes weißes Rauschen" genauer, aber ich nehme an, es landet am selben Ort.
Peter K.

1
@PeterK. Leider bedeutet "bandpassgefiltertes weißes Rauschen" im Allgemeinen den in der Antwort von JasonR beschriebenen Prozess. Beginnen Sie mit weißem Rauschen und filtern Sie es durch einen Filter mit der Übertragungsfunktion , um einen Prozess mit PSD zu erhalten, der proportional zu | ist H ( f ) | 2 . Das bandbegrenzte weiße Rauschen ist dasselbe, außer dass wir darauf bestehen, dass H ( f ) die Übertragungsfunktion eines idealen Bandpassfilters sein muss. Der entscheidende Punkt bei weißem Rauschen ist, dass wir das Signal nicht dort platzieren können, wo es nicht für bandbegrenztes weißes Rauschen gilt, solange wir gezwungen sind, dass unsere Signale im Band bleiben.H(f)|H(f)|2H(f)
Dilip Sarwate

Antworten:


19

Sie würden ein bandbegrenztes Gaußsches Rauschen erzeugen, indem Sie zuerst weißes Rauschen erzeugen und es dann auf die gewünschte Bandbreite filtern. Als Beispiel:

% design FIR filter to filter noise to half of Nyquist rate
b = fir1(64, 0.5);
% generate Gaussian (normally-distributed) white noise
n = randn(1e4, 1);
% apply to filter to yield bandlimited noise
nb = filter(b,1,n);

Ich habe mich das immer gefragt, aber wenn so etwas gemacht wird, was ist dann noch so Gauß daran? Ich glaube nicht, dass die PDF zu diesem Zeitpunkt überhaupt ist ...
Spacey

8
Eine Besonderheit der Gaußschen Zufallsvariablen ist, dass die Summe zweier unabhängiger Gaußscher Wohnmobile ebenfalls gaußverteilt ist. Da das Eingangsrauschen weiß ist, können Sie jedes Sample am Filterausgang als Summe vieler unabhängiger Gaußscher Zufallsvariablen betrachten (wobei die Varianz jedes RV von der Varianz des Eingangsrauschens und den Werten des entsprechenden Filterabgriffs abhängt). Daher sind die Abtastwerte am Filterausgang auch gaußverteilt. Das Rauschen ist jedoch offensichtlich nicht mehr weiß, da es eine Korrelation zwischen aufeinanderfolgenden Abtastwerten am Filterausgang gibt.
Jason R

Diese Eigenschaft wird detaillierter bei Wikipedia beschrieben . Beachten Sie, dass die Eigenschaft auch dann erhalten bleibt, wenn das Eingangsrauschen farbig ist (siehe Abschnitt "Korrelierte Zufallsvariablen").
Jason R

1
Gesichtspalme . Natürlich.
Spacey

3
Diese Methode erzeugt jedoch kein weißes Rauschen. Es ist kein Filter erforderlich, da jedes einzelne abgetastete Rauschen zunächst bandbegrenzt ist.
Royi

9

Nur eine kleine Ergänzung zu Jasons Antwort: Normalerweise müssen Sie bandbegrenztes Rauschen mit einer gegebenen Varianz erzeugen . Sie können diesen Code zu dem Code in Jasons Antwort hinzufügen:σ2

var = 3.0;  % just an example  
scale = sqrt(var)/std(nb);
nb = scale*nb;  % nb has variance 'var'

Beachten Sie, dass Sie die Skalierung nach dem Filtern durchführen müssen, da der Filter im Allgemeinen die Rauschvarianz ändert.


2
Guter Punkt. Wenn Sie die Filterkoeffizienten so skalieren, dass , dann beeinflusst der Filter die Rauschvarianz nicht. n=0N|h[n]|2=1
Jason R

@Matt Schöne Ergänzung!
Spacey

4

Jedes Mal , wenn diskrete Rauschproben (mit MATLAB generieren randn/ randzum Beispiel) Sie erzeugen tatsächlich eine Band begrenzt Rauschen.

Alles, was Sie tun müssen, ist die Anpassung der Varianz der diskreten Samples an die Varianz des "kontinuierlichen" Rauschens, aus dem diese Samples stammen sollen.

σcn2δ(t)fsfsσcn2

fs/2

Eine vollständige Beschreibung finden Sie hier - So simulieren Sie AWGN (Additives Weißes Gaußsches Rauschen) in Kommunikationssystemen für eine bestimmte Bandbreite .


Weitere Informationen hier: dsp.stackexchange.com/questions/17494/…
Royi

2

Warum kann man den in diesem Beitrag erwähnten Ansatz nicht anwenden ?

Es beginnt mit den gewünschten Frequenzen und arbeitet rückwärts, um das Signal aufzubauen, anstatt zu filtern. Es verwendet Python-Code, verlinkt aber auch auf den ursprünglichen Matlab-Code.

Gibt es irgendwelche Nachteile, wenn man es so macht?


Betrachtet man den ursprünglichen Matlab-Code, funktioniert er für eine Blockgröße von n, Ihrer fft-Länge. Wenn ich 2n Samples haben will, kannst du die fft Länge verdoppeln, was mehr ist als 2 ffts. Wenn Sie zwei separate Blöcke erstellen, erfolgt ein diskontinuierlicher Übergang vom ersten zum zweiten Block. Sie könnten ein Fenster verwenden, um den Übergang zu glätten, aber dann müssen Sie mehr als 2 Blöcke ausführen, um ein Überbacken Ihrer Zeitreihen zu vermeiden. Mit der Filtermethode können Sie im eingeschwungenen Zustand des Filters beliebig lange Zufallszahlen eingeben. Die Verarbeitungszunahme für die Filtermethode skaliert linear.

0

Ich erkenne, dass diese Frage in der aktuellen Ansicht aufgetaucht ist, weil @Drazick seine / ihre 2013-Antwort geändert hat.

xrand()frand()0x<1

"Weißes Rauschen" ist natürlich auch für analoge Signale eine Fehlbezeichnung. Ein "Leistungssignal" mit flachem Spektrum bis ins Unendliche hat ebenfalls unendliche Leistung. Das wie beschrieben erzeugte virtuell-gaußsche und "weiße" Signal hat eine endliche Potenz (die Varianz und ist 1) und eine endliche Bandbreite, die, einseitig ausgedrückt, Nyquist ist. (Die "spektrale Leistungsdichte" oder Leistung pro Frequenzeinheit beträgt also 1 / Nyquist.) Skalieren und versetzen Sie sie nach Belieben.

Ich nehme an, ich kann dies später bearbeiten und C-ähnlichen Pseudocode hinzufügen, um dies explizit zu zeigen.


-1

Wenn Sie Vollspektrum-Weißrauschen erzeugen und es dann filtern, möchten Sie eine Wand Ihres Hauses weiß streichen. Daher entscheiden Sie sich, das ganze Haus weiß zu streichen und dann das gesamte Haus mit Ausnahme der Wand zurückzustreichen. Ist idiotisch. (Hat aber Sinn in der Elektronik).

Ich habe ein kleines C-Programm erstellt, das bei jeder Frequenz und Bandbreite weißes Rauschen erzeugen kann (z. B. bei 16 kHz Zentralfrequenz und 2 kHz "breit"). Keine Filterung erforderlich.

Was ich getan habe, ist einfach: Innerhalb der Hauptschleife (Endlosschleife) generiere ich eine Sinuskurve mit einer Mittenfrequenz von +/- einer Zufallszahl zwischen einer halben Bandbreite und einer halben Bandbreite, dann behalte ich diese Frequenz für eine beliebige Anzahl von Abtastwerten (Granularität) und dies ist das Ergebnis:

Weißes Rauschen mit einer Breite von 2 kHz und einer Mittenfrequenz von 16 kHz

Weißes Rauschen mit einer Breite von 2 kHz und einer Mittenfrequenz von 16 kHz

Pseudocode:

while (true)
{

    f = center frequency
    r = random number between -half of bandwidth and + half of bandwidth

<secondary loop (for managing "granularity")>

    for x = 0 to 8 (or 16 or 32....)

    {

        [generate sine Nth value at frequency f+r]

        output = generated Nth value
    }


}

1
Der STFT ist nicht flach über die Band. Sie haben nicht gezeigt, warum Ihre Technik von Vorteil ist. Übrigens ist die meiste Farbe grauweiß und wird dann mit Pigment gemischt. Orangenfarbe wird nicht nur aus orangefarbenen Zutaten hergestellt. Es gibt keine zusätzliche Arbeit bei der Erzeugung von weißem Rauschen.

@StanleyPawlukiewicz In der Elektronik sind Sie righe, weil ein Geräuschgenerator und ein Filter zwei sehr einfache "Objekte" sind. Beim Programmieren ist ein Filter in Bezug auf die Anzahl der Anweisungen komplexer als nur das Erzeugen der benötigten Daten. Wenn Sie also zeitkritische Anwendungen haben, ist meine Vorgehensweise beim Programmieren vorzuziehen. Wenn Sie abstimmen, empfehle ich Ihnen, noch einmal darüber nachzudenken.
Zibri

1
Dein Lärm ist nicht vorzuziehen. Das Spektrum ist über die gesamte Band nicht flach. Das direkte Aufrufen einer transzendentalen Funktion ist nicht schneller als das Filtern. Ihre Argumente sind unbegründet

1
Tatsächlich ist die Inband-Welligkeit ein Konstruktionsparameter. Zu sagen, dass sie bei der Mittenfrequenz einen Spitzenwert haben, ist ebenfalls falsch

1
Da Ihre Technik so einfach zu modifizieren ist, schreiben Sie doch Ihre eigene Sinuswellenroutine, anstatt sie mit einer zu verknüpfen und behaupten, dass Ihr Code weniger komplex ist, und vergleichen Sie ihn mit einem Biquad. Wie wäre es mit einer Festkommaversion, während Sie sie hinzufügen? Sie könnten auch darüber nachdenken, wie Ihre Technik skaliert, wenn Sie die Anzahl der Proben erhöhen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.