我正在尝试使用互相关来计算Python中两个信号之间的延迟。除了非常小的时间间隔外,这两个信号几乎完全相同。我已经尝试过numpy.correlate和scipy.convolve(很快)并且两者都运行得相对较好但是给出了一个小错误。我开始怀疑错误是Python / scipy / numpy在某处截断浮点数的结果。有没有人能够在Python中使用高精度信号延迟计算?
祝你好运 弗雷德里克
答案 0 :(得分:0)
根据两个信号的功率谱,由于互相关在每个延迟时未正确归一化,因此会产生较小的误差。这是我使用的一个小功能;它规定了每个滞后的重叠区域,我发现它给出了准确的结果:
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)