我有两个信号,我想在相似性方面进行比较。一个比另一个小(按时间)。如果我使用相关性来找到最高相似度,它会告诉我最高值处于我不期望的值。
如果我只是在思考“错误”,或者相关性是解决此类问题的错误工具,有人能给我一个提示吗?
我的设置:
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)
[28, 22] 的最高相关性是在位置 [..., 30, 20, ...] 处计算的。我理解公式以及为什么它是 1280。但我实际上正在寻找 [..., 28, 22, ...] 因为它正是(在那种情况下)我正在寻找的(信号 B)。
相关性是正确的做法吗?我发现了很多使用相关性来检测相似性的来源。相同的值不应该比任何其他值更相似吗?
您的问题的一种可能解决方案是Mean Squared Error (MSE)。给定两个信号a
和b
相同的尺寸的,MSE之间的差的逐元素平方的平均值a
和b
。代码如下所示(基于此):
import numpy as np
import matplotlib.pyplot as plt
a = 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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句