Ric*_*son 7 python signal-processing lag python-2.7 cross-correlation
我有两个相互关联的信号,它们同时被两个不同的测量设备捕获。由于这两个测量不是时间同步的,因此我想计算它们之间的时间延迟很小。此外,我需要知道哪个信号是领先的。
可以假设如下:
我认为为此目的使用互相关。非常感谢如何在 Python 中实现它的任何建议。
请让我知道我是否应该提供更多信息以找到最合适的算法。
Hap*_*lop 13
一种流行的方法:时移是对应于最大互相关系数的滞后。以下是它如何与示例一起使用:
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)
Run Code Online (Sandbox Code Playgroud)
在噪声信号的情况下,通常首先应用带通滤波器。在谐波噪声的情况下,可以通过识别和消除频谱中存在的频率尖峰来消除它们。
Numpy 具有correlate适合您需求的功能:https://docs.scipy.org/doc/numpy/reference/ generated/numpy.correlate.html
| 归档时间: |
|
| 查看次数: |
17006 次 |
| 最近记录: |