为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2021-08-17 16:55:22
我有两个信号,我想在相似性方面进行比较。一个比另一个小(按时间)。如果我使用相关性来找到最高相似度,它会告诉我最高值处于我不期望的值。如果我只是在思考“错误”,或者相关性是解决此类问题的错误工具,有人能给我一个提示吗?我的设置:import numpyimport matplotlib.pyplot as pltsignal_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)。相关性是正确的做法吗?我发现了很多使用相关性来检测相似性的来源。相同的值不应该比任何其他值更相似吗?
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您的问题的一种可能解决方案是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)


查看完整回答
反对 回复 2021-08-17
?
长风秋雁

TA贡献1757条经验 获得超7个赞

您可以查看值的差异以检测相似性,而不是查看相关性。例如,您可以选择 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() 。


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 555 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号