Ich versuche gerade die fft-Funktion von numpy zu verstehen. Dafür habe ich folgende Annahme getestet:
Ich habe zwei Funktionen, f(x) = x^2
und g(x) = f'(x) = 2*x
. Nach den Fourier-Transformationsgesetzen und Wolfram Alpha sollte es G(w) = 2pi*i*F(w)
(Vorfaktoren können variieren, aber es sollte nur einen konstanten Faktor geben). Bei der Umsetzung der in Python, ich schreibeWie funktioniert numpy.fft.fft?
import numpy as np
def x2(x):
return x*x
def nx(x):
return 2*x
a = np.linspace(-3, 3, 16)
a1 = x2(a)
a2 = nx(a)
b1 = np.fft.fft(a1)
b2 = np.fft.fft(a2)
c = b1/b2
Jetzt erwarte ich einen nahezu konstanten Wert für c
, aber ich bekomme
array([ 1.02081592e+16+0.j , 1.32769987e-16-1.0054679j ,
4.90653893e-17-0.48284271j, -1.28214041e-16-0.29932115j,
-1.21430643e-16-0.2j , 5.63664751e-16-0.13363573j,
-5.92271642e-17-0.08284271j, -4.21346622e-16-0.03978247j,
-5.55111512e-16-0.j , -5.04781597e-16+0.03978247j,
-6.29288619e-17+0.08284271j, 8.39500693e-16+0.13363573j,
-1.21430643e-16+0.2j , -0.00000000e+00+0.29932115j,
-0.00000000e+00+0.48284271j, 1.32769987e-16+1.0054679j ])
Wo ist mein Fehler, und was kann ich tun, um die fft zu verwenden wie beabsichtigt?
Der falsche Teil hier ist 'G (w) = 2 pi i F (w) '. Sollte "G (w) = 2 pi i w F (w)" sein. –
@DietrichEpp: Was ist w in diesen Arrays, und ist es auch imaginär? –
@arc_lupus 'w' ist der Frequenzraum, der äquivalent zu' x' ist. In diesem Fall haben Sie 'x^2' im ursprünglichen Raum, der an sich keine Frequenz hat (zumindest nicht im leicht verständlichen Sinn), so dass Sie eine Vielzahl von verschiedenen Peaks erhalten, die' x repräsentieren^2'. Zum Beispiel, wenn 'f (x) = sin (x)', dann hätten Sie eine schöne, einfache Delta-Funktion bei 1, um die einfache Frequenz in 'sin (x)' zu erfassen. –