2012-11-12 89 views
4

新的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预产期。有任何想法吗?

+1

注意:不要'从scipy.signal进口lombscargle',不'从scipy.signal进口spectral' - - 请参阅http://docs.scipy.org/doc/scipy/reference/api.html#api-definition –

回答

6

请注意的spectral.lombscargle的最后一个参数是根据docstring角频率:

Parameters 
---------- 
x : array_like 
Sample times. 
y : array_like 
Measurement values. 
freqs : array_like 
Angular frequencies for output periodogram. 
+0

这是否意味着结果应乘以2pi? – rhombidodecahedron

+1

是的,角频率以弧度/秒给出。你可以在[wikipedia](http://en.wikipedia.org/wiki/Angular_frequency)上阅读更多内容。 – btel

+0

@EarlBellinger如果你满意的话,你也可以接受答案。 – btel