Fourier-Transformation eines Gaußschen ist kein Gaußsches, aber das ist falsch! - Python

8

Ich versuche Numpys fft-Funktion zu verwenden, aber wenn ich der Funktion eine einfache gausianische Funktion gebe, ist das fft dieser gausischen Funktion kein Gausian, sein Ende ist halbiert, so dass jede Hälfte an einem Ende der x-Achse liegt .

Die Gaußsche Funktion, die ich berechne, ist y = exp (-x ^ 2)

Hier ist mein Code:

%Vor%

Das Ergebnis ist nicht ganz richtig, denn die FFT einer Gauß-Funktion sollte selbst eine Gauß-Funktion sein ...

    
chutsu 22.03.2011, 21:52
quelle

5 Antworten

13

np.fft.fft liefert ein Ergebnis in der sogenannten "Standardreihenfolge": ( aus den Dokumenten )

  

Wenn A = fft(a, n) , dann A[0]   enthält den Nullfrequenzterm (der   Mittelwert des Signals), das ist immer   rein real für reale Eingaben. Dann    A[1:n/2] enthält die   Positive-Frequenz-Begriffe und    A[n/2+1:] enthält die   Negativfrequenzterme, in der Reihenfolge von   abnehmende negative Frequenz.

Die Funktion np.fft.fftshift ordnet das Ergebnis in der Reihenfolge an, die die meisten Menschen erwarten (und die für das Plotten gut ist):

  

Die Routine np.fft.fftshift(A)   Verschiebungen transformiert und ihre   Frequenzen, um die Nullfrequenz zu setzen   Komponenten in der Mitte ...

Also mit np.fft.fftshift :

%Vor%

    
unutbu 22.03.2011, 22:59
quelle
3

Es wird mit dem Mittelpunkt (d. h. Mittelwert) bei einem Koeffizientenindex Null angezeigt. Deshalb scheint es, dass die rechte Hälfte links ist und umgekehrt.

BEARBEITEN: Erforschen Sie den folgenden Code:

%Vor%

In der letzten Zeile wird X ausgehend von der Mitte des Vektors gezeichnet und dann an den Anfang gelegt.

    
Steve Tjoa 22.03.2011 21:54
quelle
3

Ihr Ergebnis ist nicht einmal annähernd gleich einem Gaußschen, nicht einmal einem, das in zwei Hälften geteilt ist.

Um das erwartete Ergebnis zu erhalten, müssen Sie Ihre eigene Gaußsche Position mit dem Mittelpunkt bei Index 0 positionieren, und das Ergebnis wird auch auf diese Weise positioniert. Probieren Sie den folgenden Code:

%Vor%

Die Plotbefehle teilen die Arrays in zwei Hälften auf und vertauschen sie, um ein schöneres Bild zu erhalten.

    
Sven Marnach 22.03.2011 22:05
quelle
2

Nach Sven Marnachs Antwort wäre das eine einfachere Version:

%Vor%

Dies ergibt ein Diagramm, das mit dem obigen identisch ist.

Der Schlüssel (und das scheint mir seltsam) ist, dass NumPys angenommene Datenreihenfolge - in beide Häufigkeit und Zeitdomänen --- ist, die " Nullwert zuerst. Dies ist nicht, was ich von anderen Implementierungen von FFT erwarten würde, wie die FFTW3-Bibliotheken in C.

Dies wurde in den Antworten von unutbu und Steve Tjoa oben etwas missmutig, weil sie den absoluten Wert der FFT vor dem Plotten nehmen und damit die Phasenprobleme beseitigen, die daraus resultieren, dass die "Standardreihenfolge" nicht rechtzeitig verwendet wird.

    
Bernard 17.05.2013 18:27
quelle
1

Eine Fourier-Transformation wird implizit unendlich wiederholt, da es sich um eine Transformation eines Signals handelt, das sich implizit unendlich wiederholt. Beachten Sie, dass wenn Sie y übergeben, um transformiert zu werden, die x -Werte nicht geliefert werden. In der Tat ist der transformierte Gaussian um den Mittelwert zwischen 0 und 256 zentriert, also 128.

Denken Sie auch daran, dass die Übersetzung von f (x) die Phasenänderung von F (x) ist.

    
Phil H 22.03.2011 22:08
quelle

Tags und Links