我有两个时间序列,我怀疑它们之间有一个时移,我想估计这个时移。

之前曾在以下位置提出过此问题:
Find phase difference between two (inharmonic) wavesfind 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/

10-12 23:25