gpt4 book ai didi

python - 使用互相关查找两个信号的时移

转载 作者:行者123 更新时间:2023-12-03 18:07:16 33 4
gpt4 key购买 nike

我有两个相互关联的信号,它们同时被两个不同的测量设备捕获。
由于这两个测量不是时间同步的,因此我想计算它们之间的时间延迟很小。此外,我需要知道哪个信号是领先的。

可以假设如下:

  • 没有或只有非常少的噪音
  • 算法的速度不是问题,只有准确性和鲁棒性
  • 几秒钟内以高采样率 (>10 kHz) 捕获信号
  • 预期时间延迟 < 0.5s

  • 我认为为此目的使用互相关。
    非常感谢如何在 Python 中实现它的任何建议。

    请让我知道我是否应该提供更多信息以找到最合适的算法。

    最佳答案

    A popular approach :时移是最大互相关系数对应的滞后。以下是它如何与示例一起使用:

    import matplotlib.pyplot as plt
    from scipy import signal
    import numpy as np


    def lag_finder(y1, y2, sr):
    n = len(y1)

    corr = signal.correlate(y2, y1, mode='same') / np.sqrt(signal.correlate(y1, y1, mode='same')[int(n/2)] * signal.correlate(y2, y2, mode='same')[int(n/2)])

    delay_arr = np.linspace(-0.5*n/sr, 0.5*n/sr, n)
    delay = delay_arr[np.argmax(corr)]
    print('y2 is ' + str(delay) + ' behind y1')

    plt.figure()
    plt.plot(delay_arr, corr)
    plt.title('Lag: ' + str(np.round(delay, 3)) + ' s')
    plt.xlabel('Lag')
    plt.ylabel('Correlation coeff')
    plt.show()

    # Sine sample with some noise and copy to y1 and y2 with a 1-second lag
    sr = 1024
    y = np.linspace(0, 2*np.pi, sr)
    y = np.tile(np.sin(y), 5)
    y += np.random.normal(0, 5, y.shape)
    y1 = y[sr:4*sr]
    y2 = y[:3*sr]

    lag_finder(y1, y2, sr)

    enter image description here

    在噪声信号的情况下,通常首先应用带通滤波器。在谐波噪声的情况下,可以通过识别和消除频谱中存在的频率尖峰来消除它们。

    关于python - 使用互相关查找两个信号的时移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492882/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com