Mis espectros de poder son creíbles? una comparación entre lomb-scargle y fft (scipy.signal y numpy.fft)
¿Podría alguien señalar amablemente por qué obtengo resultados muy diferentes?
Hay muchos picos que no deberían aparecer. De hecho, solo debería haber un pico.
Soy un novato de Python y todos los comentarios sobre mi código a continuación son bienvenidos.
Los datos de prueba están aquí.introduzca la descripción del enlace aquí
Usted puede directamentewget https://clbin.com/YJkwr
.
Su primera columna son los tiempos de llegada de una serie de fotones. Una fuente de luz emite fotones al azar. El tiempo total es de 55736s y hay 67398 fotones. Intento detectar algún tipo de periodicidad de intensidad lumínica.
Podemos agrupar el tiempo y la intensidad de la luz es proporcional a los números de fotones en cada intervalo de tiempo.
Intenté numpy.fft y lomb-scargle de scipy.signal para hacer su espectro de potencia, pero obtuve resultados muy diferentes.
fft import pylab as pl
import numpy as np
timepoints=np.loadtxt('timesequence',usecols=(0,),unpack=True,delimiter=",")
binshu=50000
interd=54425./binshu
t=np.histogram(timepoints,bins=binshu)[0]
sp = np.fft.fft(t)
freq = np.fft.fftfreq(len(t),d=interd)
freqnum = np.fft.fftfreq(len(t),d=interd).argsort()
pl.xlabel("frequency(Hz)")
pl.plot(freq[freqnum],np.abs(sp)[freqnum])
Lomb-Scargle timepoints=np.loadtxt('timesequence',usecols=(0,),unpack=True,delimiter=",")
binshu=50000
intensity=np.histogram(timepoints,bins=binshu)[0].astype('float64')
middletime=np.histogram(timepoints,bins=binshu)[1][1:binshu+1]-np.histogram(timepoints,bins=binshu)[1][3]*0.5
freq1=1./(timepoints.max()-timepoints.min())
freq2=freq1*len(timepoints)
freqs=np.linspace(freq1,freq2,1000)
pm1=spectral.lombscargle(middletime,intensity,freqs)
pl.xlabel("frequency(Hz)")
pl.plot(freqs,pm1)
pl.xlim(0.5*freq1,2*freq2)
pl.ylim(0,250)
pl.show()
*********************************
Gracias, Warren, te lo agradezco. Gracias por tu respuesta detallada.
Tienes razón, hay un tiempo de integración, aquí está alrededor de 1.7s.
Hay muchas exposiciones individuales. Cada exposición cuesta 1.7 s
En una sola exposición, no podemos decir con precisión el tiempo de llegada.
Si las series de tiempo son como:
0 1.7 3.4 8.5 8.5
El tiempo de integración de los dos últimos fotones es1.7s
,no(8.5-3.4)s
.Así que revisaré parte de tu código.
Sin embargo, mi pregunta sigue siendo. Se ajustan varios parámetros para obtener el0.024Hz
pico en pico lombriculos hasta cierto punto. Y usas esto para guiar tus parámetros en fft.
Si no sabes el número0.024
, tal vez puede usar diferentes parámetros para obtener un pico más alto diferente?
Cómo garantizar cada vez que podamos acertar elnum_ls_freqs
? Puedes ver si elegimos diferentes.num_ls_freqs
, los cambios máximos más altos.
Si tengo muchas series de tiempo, ¿cada vez tengo que especificar diferentes parámetros? ¿Y cómo conseguirlos?