信号的互相关/相似性 - 计算时间滞后

我有两个信号,我想在相似性方面进行比较。一个比另一个小(按时间)。如果我使用相关性来找到最高相似度,它会告诉我最高值处于我不期望的值。


如果我只是在思考“错误”,或者相关性是解决此类问题的错误工具,有人能给我一个提示吗?


我的设置:


import numpy

import matplotlib.pyplot as plt


signal_a = numpy.array([10, 20, 10, 30, 20, 10, 28, 22, 10])

signal_b = numpy.array([28, 22])

correlations = numpy.correlate(signal_a, signal_b, mode = "full")


print(correlations)

plt.plot(correlations)

http://img4.mukewang.com/611b79a800011fbd04050313.jpg

[28, 22] 的最高相关性是在位置 [..., 30, 20, ...] 处计算的。我理解公式以及为什么它是 1280。但我实际上正在寻找 [..., 28, 22, ...] 因为它正是(在那种情况下)我正在寻找的(信号 B)。

相关性是正确的做法吗?我发现了很多使用相关性来检测相似性的来源。相同的值不应该比任何其他值更相似吗?


PIPIONE
浏览 556回答 2
2回答

哈士奇WWW

您的问题的一种可能解决方案是Mean Squared Error (MSE)。给定两个信号a和b相同的尺寸的,MSE之间的差的逐元素平方的平均值a和b。代码如下所示(基于此):import numpy as npimport matplotlib.pyplot as plta = np.array([10, 20, 10, 30, 20, 10, 28, 22, 10])b = np.array([28, 22])mse = np.ndarray((len(a) - len(b) + 1))for i in range(c.size):    mse[i] = np.square(np.subtract(a[i:i+len(b)],b)).mean()print(mse.argmin())plt.plot(mse)

长风秋雁

您可以查看值的差异以检测相似性,而不是查看相关性。例如,您可以选择 a 中的每 2 个元素(如果 b 的长度为 2)并查看差异的绝对值: import numpy as np import matplotlib.pyplot as plt signal_a = np.array([10, 20, 10, 30, 20, 10, 28, 22, 10]) signal_b = np.array([28, 22]) N2 = len(signal_b) diffs = [] for i in range(len(signal_a) - len(signal_b) + 1):      diff_ab = signal_a[i:i+N2] - signal_b      diffs.append(sum(abs(diff_ab))) print(diffs) plt.plot(diffs)并在 diffs 数组中找到最小值。您也可以使用差值的平方值代替 abs() 。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python