新的Scipy v0.11提供了一個用於頻譜分析的軟件包。不幸的是,文檔很少,並沒有很多可用的例子。使用scipy.signal.spectral.lombscargle發現週期
作爲一個嬰兒的例子,我試圖做一個正弦波的時期發現。不幸的是,它預測的時間段爲1
,而不是預期的2pi
。有任何想法嗎?
# imports the numerical array and scientific computing packages
import numpy as np
import scipy as sp
from scipy.signal import spectral
# generates 100 evenly spaced points between 1 and 1000
time = np.linspace(1, 1000, 100)
# computes the sine value of each of those points
mags = np.sin(time)
# scales the sine values so that the mean is 0 and the variance is 1 (the documentation specifies that this must be done)
scaled_mags = (mags-mags.mean())/mags.std()
# generates 1000 frequencies between 0.01 and 1
freqs = np.linspace(0.01, 1, 1000)
# computes the Lomb Scargle Periodogram of the time and scaled magnitudes using each frequency as a guess
periodogram = spectral.lombscargle(time, scaled_mags, freqs)
# returns the inverse of the frequence (i.e. the period) of the largest periodogram value
1/freqs[np.argmax(periodogram)]
這將返回1
代替2pi ~= 1/0.6366
預產期。有任何想法嗎?
注意:不要'從scipy.signal進口lombscargle',不'從scipy.signal進口spectral' - - 請參閱http://docs.scipy.org/doc/scipy/reference/api.html#api-definition –