我正在学习互相关,为此我在一些简单的例子中运行scipy.signal.correlate。然而,存在相关函数的最大值与输入时移不一致的情况(即使dt
中存在正确的时移)。我怀疑问题出在我对dt
的定义中,但经过几次迭代后,我还没有设法让这种转变始终正确。
def cross_corr(a, b, t):
ccf = signal.correlate(a,b,mode='full')
#Convert from array spacing into time shift
step = np.mean(t[-1]-t[0])/t.size
dt = np.linspace(-b.size + 1, a.size - 1, ccf.size)*step
time_shift = dt[np.argmax(ccf)]
return dt, ccf, time_shift
#Generate some toy data
t = np.linspace(0.,2.*np.pi,100)
y1 = np.sin(x)
y2 = np.sin(x+2.45)
dt, ccf, time_shift = cross_corr(y1, y2, t)
此特定示例返回time_shift = 2.32
时应为2.45
。