我正在学习互相关,为此我在一些简单的示例上运行 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
.
y2 的截断效应导致了这个结果。
如果您将 t 设置为更宽的范围,例如:
t = np.linspace(0.,20.*np.pi,100)
你可以获得正确的结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)