python – 估计两个时间序列之间的小时间偏移 - 代码日志

python – 估计两个时间序列之间的小时间偏移

我有两个时间序列,我怀疑他们之间有时间间隔,我想估计这个时间班。

这个问题之前曾经问过:
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),虽然我很失望地解释为什么会这样。

也许更熟悉数学的人可以从这里得到更好的答案…

http://stackoverflow.com/questions/13826290/estimating-small-time-shift-between-two-time-series

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 估计两个时间序列之间的小时间偏移