【问题标题】:Power correlation between two normalized time-series signals in Python?Python中两个归一化时间序列信号之间的功率相关性?
【发布时间】:2019-04-03 01:51:11
【问题描述】:

我有两个标准化 ([1,0]) 信号(附图片)。每个信号都有许多波峰和波谷。然而,两个信号在大约相同的时间都有一个最大值(在所附图片中,两个信号在 2.5 秒时的最大值都是 1.0)。我想在两个信号之间运行相关性,使其最大值为 2.5 秒。当我运行 numpy.correlate 时,我在不同于最大值所在的时间步长处得到一个峰值。如何在 2.5 秒时获得最大相关峰值?任何想法/建议都会有很大帮助。谢谢!

【问题讨论】:

  • 相关性不仅仅与峰值匹配。如果您只是想匹配峰值,那么只需关联峰值周围的一些窗口?也许您想关联积分而不是实际信号?
  • 感谢您的回复。我想考虑整个信号。如果两个信号是实时测量的,我想表明这两个信号在同一时间戳附近具有最高峰值。我很困惑如何得到一个图,显示两个峰值在大约相同的时间戳比其他任何地方都具有最大值。
  • 你不只是在寻找两个信号的乘积吗? numpy.correlate 将一个信号滑过另一个信号,并为您提供完全相关性。

标签: python math time-series signal-processing correlation


【解决方案1】:

要在正确的位置接收峰值,您必须除以总和元素的数量。使用求和但不除以长度的 numpy/scipy 函数很容易忽略这一点。

from scipy.signal import correlate

corr = correlate(x1, x2, 'same')
norm_arr = np.concatenate((np.arange(x1.size / 2)[::-1], np.arange(x1.size / 2)))
corrected_corr = corr / (samples.size - norm_arr)/(np.std(x1)*np.std(x2))

【讨论】:

  • 关于该实现我有几个问题:假设数组 x1 和 x2 的大小分别为 (600,)。然后,由于 [x1.size / 2:],corr 将是 (300,)。正确的?另外,samples.size (300,) 也一样吗?
  • 是的。你说的对。它取自自相关实现并且仅支持正时移。我已经编辑过了。希望能让你满意。
猜你喜欢
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多