Las transformadas de Fourier discretas, versión general (DFT) y rápida (FFT).
Para ver si puedo resolver problemas en el espacio de Fourier.
¡Los prefactores lían mucho!
De momento, en python llevo hecho esto: una transformación 1D directa e inversa:
import matplotlib.pyplot as plt
import numpy as np
from math import piT=10
N=256
t = np.linspace(0,T,N)
ft= 3 * np.sin(2*pi*3.6*t + 2)+1
fo = np.fft.fft( ft ) / N
fo = np.fft.fftshift(fo)fo[0]
freq = np.fft.fftfreq( N, float(T)/N )
freq = np.fft.fftshift(freq)#plt.plot(freq, sp.real, freq, sp.imag)
plt.plot(freq, abs( fo ) )plt.show()
ft2 = N * np.fft.ifft( fo )
Cálculo de la segunda derivada a través de la transformada, 1D:
import matplotlib.pyplot as plt
import numpy as np
from math import piT=10
N=256
om=0.6t = np.linspace( 0 , T , N , endpoint=False )
ft= 3 * np.sin( 2*pi* om *t + 2)+1
fo0 = np.fft.fft( ft ) / N
fo = np.fft.fftshift( fo0 )fo0[0]
freq0 = np.fft.fftfreq( N, float(T)/N )
q = 2*pi* freq0freq = np.fft.fftshift( freq0 )
ddfo = – q**2 * fo0#plt.plot(freq, sp.real, freq, sp.imag)
plt.plot(freq, abs( fo ) )plt.show()
ft2 = N * np.fft.ifft( fo0 )
ddft = N * np.fft.ifft( ddfo )
Transformada directa e inversa en 2D:
import matplotlib.pyplot as plt
import numpy as np
from math import piL=10
N=64[x, y] = np.meshgrid( np.linspace(0,L,N),
np.linspace(0,L,N))kx=0.2 #2.2
ky=0.7 #1.7f = np.sin( 2*pi* ( kx * x + ky * y ) ) + np.random.uniform(0, 1, x.shape)
# plt.pcolor(x,y,f)
fou0 = np.fft.fft2( f ) / (N*N)
fou = np.fft.fftshift( fou0 )freq = np.fft.fftfreq( N, float(L)/N )
freq = np.fft.fftshift(freq)[fx , fy] = np.meshgrid( freq, freq )
plt.pcolor(fx,fy,abs(fou) )
#plt.plot(freq, sp.real, freq, sp.imag)
#plt.plot(freq, abs( fo ) )plt.show()
f2 = N * N * np.fft.ifft2( fou0 )
plt.pcolor(x,y,f)
plt.pcolor(x+L,y,f2.real)
Comentarios recientes