两个信号的Python互相关与NaN-inside

2024-09-26 04:50:47 发布

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

我得到了两个信号S1和S2(两个值数组),我想知道S1是否与S2是同一个信号,但是移位了(S1和S2的图形表示是相同的,但是S1将被移到右边还是左边)

问题是:我的算法包含插值scipy.interpolate.interp1d,这个函数在数组中输入NaN值。在

当我试图将S1和S2与内部的NaN关联时,相关数组总是[NaN, NaN, NaN, ... , NaN, NaN, NaN]

我的目的是: 1) 检测S1和S2是否是同一信号(如果相关性高于某个阈值,我将认为它们是相同的信号) 2) 如果有,检测它们之间的移动,这样我就可以移除它

为了说明我的算法,我创建了一个简单的代码

import numpy as np
from scipy.signal import correlate

norm = np.linalg.norm

x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])

corr = correlate(x, y)

print(corr/(norm(x)*norm(y)))

这里的相关函数是scipy.signal.correlate,但是我尝试了np.关联我也得到了同样的结果

在一个stackoverflow帖子中,我尝试了以下方法:

^{pr2}$

但我还是只有NaN值。。在

我做错什么了吗?在


Tags: 函数import算法normsignal信号npscipy
1条回答
网友
1楼 · 发布于 2024-09-26 04:50:47

如果任何信号包含NaN,则retusrn将全部为NaN。


使用此方法首先删除NAN,然后使用相关函数:

x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])

x = x[~np.isnan(x)]
y = y[~np.isnan(y)]

corr = np.corrcoef(x, y)

#corrcoef returns the normalised covariance matrix so you want the [1,0] or [0,1] element of this matrix
print(corr[1,0])
#1.0

相关问题 更多 >