这是一个非常有趣的问题。这是尝试使用傅里叶变换的部分解决方案。这依赖于中等周期的数据。我不确定它是否可以与您的数据一起使用(端点衍生工具似乎不匹配)。
import numpy as np
X = np.linspace(0,2*np.pi,30) #some X values
def yvals(x):
return np.sin(x)+np.sin(2*x)+np.sin(3*x)
Y1 = yvals(X)
Y2 = yvals(X-0.1) #shifted y values
#fourier transform both series
FT1 = np.fft.fft(Y1)
FT2 = np.fft.fft(Y2)
#You can show that analyically, a phase shift in the coefficients leads to a
#multiplicative factor of `exp(-1.j * N * T_d)`
#can't take the 0'th element because that's a division by 0. Analytically,
#the division by 0 is OK by L'hopital's rule, but computers don't know calculus :)
print np.log(FT2[1:]/FT1[1:])/(-1.j*np.arange(1,len(X)))
对印刷输出的快速检查显示,频率最高
功率(N = 1,N = 2)给出合理的估计,N = 3也可以,如果你看
绝对值(np.absolute),虽然我很失望地解释为什么会这样。
也许更熟悉数学的人可以从这里得到更好的答案…