Python中精确的信号延迟计算

2 投票
1 回答
3276 浏览
提问于 2025-04-16 04:46

我正在尝试用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)

撰写回答