使用的信号之间的时间差数字关联()

2024-10-03 17:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python中的互相关函数计算一些信号之间的时间差。从numpy文档numpy.correlate()来看,不太清楚这个函数到底是做什么的。因此,我先用两个简单的方形信号来尝试,代码如下:

import matplotlib.pyplot as plt
import numpy as np

frequency=100

x = np.linspace(1,2000,frequency)
time = np.arange(x.size)
time = time/(1.0*frequency) #Time in seconds

def func1(x):
    x = np.where((x < 500) | (x > 531), 1, 2)
    return x
y1 = func1(x)

def func2(x):
    x = np.where((x < 600) | (x > 631), 1, 2)
    return x
y2 = func2(x)

def func3(x):
    x = np.where((x < 700) | (x > 731), 1, 2)
    return x
y3 = func3(x)

xcorr12 = np.correlate(y1,y2, "full")
xcorr13 = np.correlate(y1,y3, "full")

lag12 = np.argmax(xcorr12)
lag13 = np.argmax(xcorr13)

print ("lag12:",lag12/frequency)
print ("lag13:",lag13/frequency)

当我改变信号的位置时,我期望时间延迟会改变,但它不会改变!我不明白为什么y1和y2之间的时间差等于1和y3之间的时间差!?在

你能帮我了解发生了什么事吗? 谢谢:)


Tags: numpyreturntime信号defnpwherefrequency
1条回答
网友
1楼 · 发布于 2024-10-03 17:17:16

我不确定y1和y2数组的计算方式是否符合您的要求

np.count_nonzero(y1)
20
np.count_nonzero(y2)
15

那么

^{pr2}$

几乎稀疏矩阵(数组)的滞后不会改变,这是从信号处理和数学中知道的。 看看这个小例子

y1 = [1,2,3,4]
y2 = [1.0,0.5,1.0,2.0]

我们得到了

xcorr = np.correlate(y1,y2, "full")
array([  2. ,   5. ,   8.5,  13. ,   7.5,   5. ,   4. ])

如果我们在第二个数组中移动值

y21= [0.0,1.0,0.5,1.0]

然后产生的xcorr看起来

array([ 1. ,  2.5,  5. ,  7.5,  5. ,  4. ,  0. ])

你的问题是你的矩阵。它不需要对这个Python做任何事情包。你可以用R复查结果,你会得到相同的值。在

相关问题 更多 >