我正在尝试使用互相关计算 Python 中两个信号之间的滞后。除了非常小的时滞外,这两个信号几乎相同。我已经尝试过 numpy.correlate 和 scipy.convolve(快很多)并且两者都工作得很好但给出了一个小错误。我开始怀疑错误是 Python/scipy/numpy 在某处截断 float 的结果。有没有人能够在 Python 中进行高精度信号延迟计算?
最好的问候 弗雷德里克
最佳答案
根据两个信号的功率谱,您确实会得到一个小误差,这是因为互相关在每个滞后没有正确归一化。这是我使用的一个小功能;它标准化了每个滞后的重叠区域,我发现它给出了准确的结果:
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)
关于python - Python中精确的信号延迟计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3825360/