【问题标题】:Understanding results from 1D np.correlate了解 1D np.correlate 的结果
【发布时间】:2019-06-10 19:43:18
【问题描述】:

我正在尝试使用numpy.correlate 确定两个一维时间序列之间的相似性。

我编写了一个小示例程序来了解有关互相关如何工作的更多信息,但是我并不完全了解相关输出的趋势。

代码:

import numpy as np
import matplotlib.pyplot as plt

#sample arrays to correlate
arr_1 = np.arange(1, 101) #[1, 2, 3, ..... 100]
arr_2 = np.concatenate([np.zeros(50), np.arange(50, 101)]) #[0, 0, ... 50, 51 ... 100]

cross_corr = np.correlate(arr_1, arr_2, "same")

plt.plot(list(cross_corr))

这张图向我提出了几个问题。据我了解,互相关依赖于卷积运算(本质上是两个信号的内积的积分 - 考虑了一些滞后)。

  1. 如果 arr_2 从索引 0 到 50 都是 0,为什么相关信号(上图)会从 (0, 50) 稳定增加?
  2. 如何设置卷积操作的延迟。从 numpy 文档中,我找不到允许我调整延迟的参数。
  3. 50 处的峰值是由于两个信号在索引 50 处对齐,但为什么此后相关性会稳步下降?如果两个信号对齐,那么相关性不应该增加吗?
  4. 仅当其值大于 2/sqrt(n - abs(k)) 时,相关性才显着。其中n是样本数,k是滞后。对于上图,相关显着性如何发挥作用?

【问题讨论】:

    标签: python numpy signal-processing cross-correlation


    【解决方案1】:

    您似乎对输出的确切内容感到困惑。老实说,文档有点缺乏。输出计算每个滞后的两个数组之间的相关性。中点是滞后为0 且相关性最高的位置。

    仅供参考,您的两个数组大小不同。 arr_1 的长度为 100,arr_2 的长度为 101。不确定这是不是故意的。

    【讨论】:

    • 感谢您的快速回复。中点不是对应x=50,那么滞后不是50,峰值不是0吗?
    • 这个想法是你将 -50 转移到 50。所以 0 滞后在中间。
    猜你喜欢
    • 2020-05-07
    • 2012-01-25
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多