В зависимости от спектра мощности двух сигналов вы получаете небольшую ошибку из-за того, что кросс-корреляция не нормируется должным образом при каждом запаздывании.Вот небольшая функция, которую я использую;он нормализует область перекрытия в каждом лаге, и я обнаружил, что это дает точные результаты:
def NormCrossCorrSlow(x1, x2,
nlags=400):
res=[]
for i in range(-(nlags/2),nlags/2,1):
if i<0:
xx1=x1[:i]
xx2=x2[-i:]
elif i==0:
xx1=x1
xx2=x2
else:
xx1=x1[i:]
xx2=x2[:-i]
res.append( (xx1*xx2).sum() /( (xx1**2).sum() *(xx2**2).sum() )**0.5)
return numpy.array(res)