meus espectros de potência são críveis? uma comparação entre lomb-scargle e fft (scipy.signal e numpy.fft)
Alguém poderia gentilmente apontar porque eu tenho resultados muito diferentes?
Existem muitos picos que não devem aparecer. Na verdade, deve haver apenas um pico.
Eu sou um novato python e todos os comentários sobre o meu código abaixo são bem-vindos.
Os dados do teste estão aqui.insira a descrição do link aqui
Você pode diretamentewget https://clbin.com/YJkwr
.
Sua primeira coluna é o tempo de chegada de uma série de fótons. Uma fonte de luz emite fótons aleatoriamente. O tempo total é de 55736 e existem 67398 fótons. Eu tento detectar algum tipo de periodicidade da intensidade da luz.
Podemos agrupar o tempo e a intensidade da luz é proporcional aos números de fótons em cada intervalo de tempo.
Eu tentei numpy.fft e lomb-scargle de scipy.signal para fazer seu espectro de potência, mas obtive resultados muito 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()
*********************************
Obrigado, Warren, eu agradeço. Obrigado pela sua resposta detalhada.
Você está certo, há um tempo de integração, aqui é em torno de 1,7s.
Há muitas exposições únicas. Cada exposição custa 1,7s
Em uma única exposição, não podemos informar sua hora de chegada com precisão.
Se as séries temporais forem semelhantes:
0 1,7 3,4 8,5 8,5
O tempo de integração dos dois últimos fótons é1.7s
,não(8.5-3.4)s
Então eu vou revisar parte do seu código.
No entanto, minha pergunta ainda permanece. Você ajusta vários parâmetros para obter0.024Hz
pico no pico lomb-scargle em algum grau. E você usa isso para guiar seus parâmetros no fft.
Se você não sabe o número0.024
, talvez você possa usar parâmetros diferentes para obter um pico mais alto diferente?
Como garantir cada vez que podemos acertar onum_ls_freqs
? Você pode ver se escolhemos diferentesnum_ls_freqs
, o pico mais alto muda.
Se eu tiver muitas séries temporais, toda vez que precisar especificar parâmetros diferentes? E como obtê-los?