繁体   English   中英

仅当数组减去平均值时,信号相关偏移和滞后才正确

[英]Signal correlation shift and lag correct only if arrays subtracted by mean

如果我有两个相同的数组,除了移位:

import numpy as np
from scipy import signal
x = [4,4,4,4,6,8,10,8,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
y = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,8,10,8,6,4,4]

我想通过互相关来量化这种转变:

correlation = signal.correlate(x, y, mode="full")
lags = signal.correlation_lags(len(x), len(y), mode="full")
lag = lags[np.argmax(correlation)]

lag = 0但如果我将相关定义修改为:

correlation = signal.correlate(x-np.mean(x), y-np.mean(y), mode="full")

然后lag=-12 ,这是正确的转变。 signal.correlation返回的数组的实际含义是什么,为什么我需要减去平均值才能获得真正的移位?

问题是当您进行“完全”相关时,算法会添加零来完成向量。 这意味着当两个信号在卷积中对齐时,您将获得最高值,这里有和没有均值抑制的示例

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
x = np.array([4,4,4,4,6,8,10,8,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4])
y = np.array([4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,8,10,8,6,4,4])

correlation = signal.correlate(x, y, mode="full")
lag =  np.argmax(correlation) - len(x)
plt.figure()
plt.subplot(411)
plt.plot(correlation)

plt.subplot(412)
correlation = signal.correlate(x-x.mean(), y-y.mean(), mode="full")
lag =  np.argmax(correlation) - len(x)
plt.plot(correlation)

plt.subplot(413)
correlation_f = signal.correlate(np.ones(x.shape), np.ones(y.shape), mode="full")
correlation = signal.correlate(x, y, mode="full")/correlation_f
plt.plot(correlation)


plt.subplot(414)

corr = np.zeros(x.shape)
for i in range(len(x)):
    y2 = np.roll(y, i)
    corr[i] = np.corrcoef(x,y2)[0,1]
print(np.argmax(corr))
plt.plot(corr)
plt.show()

在此处输入图像描述

通常,相关性允许在更长的信号中找到一个小信号,而这个问题可以忽略不计。

您可以尝试补偿信号之间重叠的大小,如第三个图所示。 但它并不完美。

平均抑制并非在所有情况下都有效。

如果您有相同的确切信号已滚动,那么您可以尝试我在第四行中放置的内容,您滚动第一个信号并查看何时具有最大相关性。 这可能是您的最佳选择。 但它只有在两个信号都相同的情况下才有效,只是滚动了一个班次号码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM