我有两个时间序列,我怀疑它们之间有一个时移,我想估计这个时移。
之前曾在以下位置提出过此问题:
Find phase difference between two (inharmonic) waves和find time shift between two similar waveforms,但就我而言,时移小于数据分辨率。例如,可以每小时的分辨率获得数据,而时移只有几分钟(见图)。
原因是用于测量系列之一的数据记录器的时间偏移了几分钟。
有没有可以估计此偏移的算法,最好不使用插值法?
最佳答案
这是一个非常有趣的问题。这是尝试使用傅立叶变换的部分解决方案。这依赖于适度周期性的数据。我不确定它是否适用于您的数据(端点处的导数似乎不匹配)。
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<sp?> 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),尽管我很茫然地解释为什么会这样。
也许更熟悉数学的人可以从这里得到更好的答案...
关于python - 估计两个时间序列之间的小时移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13826290/