Python scipy.signal.lombscargle的使用

Python scipy.signal.lombscargle的使用,python,numpy,scipy,signal-processing,astronomy,Python,Numpy,Scipy,Signal Processing,Astronomy,对于类,我们尝试使用scipy中的嵌入包来证明Lomb Scargle周期图的一个简单示例。关于如何使用此功能的文档很少,我也无法在网上找到任何帮助。当我运行代码时,周期图的主峰值为~6.3,而预期值为~23.3。我们从中提取的数据是一个简单的带有数字列表的.dat文件。这是代码,有什么想法吗 import scipy as sp import math as m import numpy as np from scipy.signal import lombscargle import pyl

对于类,我们尝试使用scipy中的嵌入包来证明Lomb Scargle周期图的一个简单示例。关于如何使用此功能的文档很少,我也无法在网上找到任何帮助。当我运行代码时,周期图的主峰值为~6.3,而预期值为~23.3。我们从中提取的数据是一个简单的带有数字列表的.dat文件。这是代码,有什么想法吗

import scipy as sp
import math as m
import numpy as np
from scipy.signal import lombscargle
import pylab as plt
from numpy import shape


x=[]
y=[]
nout = 10000
file=open("hv878_1945.dat", 'r')

for pair in file:
    xandy=pair.split()
    x.append(float(xandy[0]))
    y.append(float(xandy[2]))


x=np.asarray(x)
y=np.asarray(y)
f = np.linspace(0.1, 50, nout)

periodogram=sp.signal.spectral.lombscargle(x,y,f)
normval = x.shape[0]
plt.plot(f, np.sqrt(4*(periodogram/normval)))
plt.show()
这是文件,如果有人想运行它:


任何帮助都将不胜感激

看来您也遇到了同样的问题。基本上,您没有测试感兴趣的频率,也没有考虑传递给
lombscagle
的频率是角频率

如果您更改测试频率列表,您将看到在~138的角频率附近有一个峰值,对应于22.28的频率(=角频率/2/pi):

我要说的话与Jaime在另一个问题中所说的一样:

你不能仅仅依靠寻找周期图的
max
来找到主频,因为谐波可能会欺骗你


你怎么说23.3是预期的?另外,您能否断言感兴趣的列确实是第一列和第三列(python:0和2)?
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lombscargle

plt.ion()
data = np.loadtxt('hv878_1945.dat')

ang_freq = np.linspace(.1, 25*6, 10000)
periodogram = lombscargle(data[:,0], data[:,2], ang_freq)
print(ang_freq[np.argmax(periodogram)]/2/np.pi)
plt.plot(ang_freq, periodogram)