moje widma mocy są wiarygodne? porównanie lomb-scargle i fft (scipy.signal i numpy.fft)
Czy ktoś może uprzejmie wskazać, dlaczego otrzymuję bardzo różne wyniki?
Istnieje wiele pików, które nie powinny się pojawić. W rzeczywistości powinien być tylko jeden szczyt.
Jestem newbie python i wszystkie komentarze na temat mojego kodu poniżej są mile widziane.
Dane testowe są tutaj.wprowadź opis linku tutaj
Możesz bezpośredniowget https://clbin.com/YJkwr
.
Jego pierwszą kolumną są czasy przybycia dla serii fotonów. Źródło światła emituje losowo fotony. Całkowity czas wynosi 55736s i jest 67398 fotonów. Próbuję wykryć pewnego rodzaju okresowość natężenia światła.
Możemy zsumować czas i natężenie światła proporcjonalnie do liczby fotonów w każdym przedziale czasu.
Próbowałem numpy.fft i lomb-scargle z scipy.signal, aby uzyskać jego widmo mocy, ale otrzymałem bardzo różne wyniki.
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])
larg-lombard 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()
*********************************
Dziękuję, Warren, doceniam to. Dziękuję za szczegółową odpowiedź.
Masz rację, jest czas integracji, tutaj jest około 1,7s.
Istnieje wiele pojedynczych ekspozycji. Każda ekspozycja kosztuje 1,7 s
W jednej ekspozycji nie możemy dokładnie określić czasu przybycia.
Jeśli szeregi czasowe są jak:
0 1,7 3,4 8,5 8,5
Czas integracji dwóch ostatnich fotonów wynosi1.7s
,nie(8.5-3.4)s
.Czy zmienię część twojego kodu.
Jednak moje pytanie nadal pozostaje. Dostosowujesz kilka parametrów, aby uzyskać0.024Hz
szczyt piku lombardowego do pewnego stopnia. I używasz tego, by kierować swoimi parametrami w FFT.
Jeśli nie znasz numeru0.024
, może możesz użyć różnych parametrów, aby uzyskać inny najwyższy szczyt?
Jak zagwarantować za każdym razem, gdy będziemy mogli to zrobićnum_ls_freqs
? Możesz zobaczyć, czy wybierzemy innynum_ls_freqs
, najwyższy szczyt zmian.
Jeśli mam wiele szeregów czasowych, za każdym razem muszę określić inne parametry? I jak je zdobyć?