【问题标题】:Accurate signal delay calculation in PythonPython中精确的信号延迟计算
【发布时间】:2011-04-19 00:42:24
【问题描述】:

我正在尝试使用互相关计算 Python 中两个信号之间的滞后。这两个信号几乎相同,只是时间延迟非常小。我已经尝试过 numpy.correlate 和 scipy.convolve (快得多),两者都工作得相对较好,但给出了一个小错误。我开始怀疑该错误是 Python/scipy/numpy 在某处截断浮点数的结果。有没有人能够在 Python 中进行高精度的信号延迟计算?

最好的问候 弗雷德里克

【问题讨论】:

  • “一个小错误”?多么小?您的源数据中有多少噪音? “截断浮点数”?通常这会导致严重错误,而不是小错误。没有更多数据,我们只能猜测。我猜你的英特尔芯片组的 FP 处理器坏了。
  • 嗯,误差在
  • 当你说“非常小”时,相对于采样间隔的值是多少?
  • 如果它不是专有的,您能否与我们分享您是如何找到时滞的。我遇到了类似的问题,使用 numpy.correlate 或 fft/multiply/ifft 方法给了我错误的答案。

标签: python signals lag correlation


【解决方案1】:

根据两个信号的功率谱,您确实会得到一个小误差,因为互相关在每个滞后时都没有正确归一化。这是我使用的一个小功能;它使每个滞后的重叠区域正常化,我发现它给出了准确的结果:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2013-12-15
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多