Python中精确的信号延迟计算
我正在尝试用Python计算两个信号之间的延迟,这两个信号几乎是一样的,只是有一个非常小的时间延迟。我试过使用numpy.correlate和scipy.convolve(后者速度更快),这两种方法都能相对好地工作,但还是有一点小误差。我开始怀疑这个误差可能是因为Python/scipy/numpy在某个地方把浮点数截断了。有没有人能在Python中实现高精度的信号延迟计算?
最好的祝福,
Fredrik
1 个回答
0
根据这两个信号的功率谱,你会发现由于交叉相关在每个延迟(lag)上没有正确归一化,所以会产生一些小误差。这里有一个我常用的小函数,它会在每个延迟上对重叠区域进行归一化,我发现这样可以得到更准确的结果:
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)