Analicé los datos sunspots.dat (a continuación) usando fft, que es un ejemplo clásico en esta área. Obtuve resultados de fft en partes reales e imaginarias. Luego traté de usar estos coeficientes (los primeros 20) para recrear los datos siguiendo la fórmula de la transformada de Fourier. Pensando partes reales corresponden a a_n y imaginario a B_N, tengoRecrear datos de series temporales usando resultados de FFT sin usar ifft
import numpy as np
from scipy import *
from matplotlib import pyplot as gplt
from scipy import fftpack
def f(Y,x):
total = 0
for i in range(20):
total += Y.real[i]*np.cos(i*x) + Y.imag[i]*np.sin(i*x)
return total
tempdata = np.loadtxt("sunspots.dat")
year=tempdata[:,0]
wolfer=tempdata[:,1]
Y=fft(wolfer)
n=len(Y)
print n
xs = linspace(0, 2*pi,1000)
gplt.plot(xs, [f(Y, x) for x in xs], '.')
gplt.show()
Por alguna razón, sin embargo, mi argumento no refleja la generada por IFFT (utilizo el mismo número de coeficientes en ambos lados). Qué podría estar mal ?
datos:
http://linuxgazette.net/115/misc/andreasen/sunspots.dat
Solo por curiosidad, ¿qué haces con el espectro? Si está tratando de determinar las amplitudes espectrales relativas de varios componentes, es posible que desee utilizar una ventana de datos (en.wikipedia.org/wiki/Window_function). Por ejemplo, si traza 'np.abs (fft (wolfer * hanning (len (wolfer))))' el pico alrededor de n = 30 muestra un poco más de estructura que sin la ventana. – mtrw