2024-04-24 23:07:44 发布
网友
我有两个相互关联的信号,它们被两个不同的测量设备同时捕获。 因为这两个测量值不是时间同步的,所以它们之间有一个小的时间延迟,我想计算一下。另外,我需要知道哪个信号是主导信号。
可以假设如下:
我想用互相关来达到这个目的。 对于如何在Python中实现它的任何建议,我们都非常感激。
请告诉我是否需要提供更多信息,以便找到最合适的算法。
Numpy有适合您需要的函数correlate:https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html
correlate
A popular approach:timeshift是对应于最大互相关系数的滞后。下面是一个例子:
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)
在噪声信号的情况下,通常首先应用带通滤波器。在谐波噪声的情况下,可以通过识别和消除频谱中存在的频率尖峰来去除它们。
Numpy有适合您需要的函数
correlate
:https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.htmlA popular approach:timeshift是对应于最大互相关系数的滞后。下面是一个例子:
在噪声信号的情况下,通常首先应用带通滤波器。在谐波噪声的情况下,可以通过识别和消除频谱中存在的频率尖峰来去除它们。
相关问题 更多 >
编程相关推荐