了解一维结果 np.correlate

Understanding results from 1D np.correlate

我正在尝试使用 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 是滞后。相关显着性对上图有何影响?

看来你对输出的到底是什么感到困惑。老实说,文档有点缺乏。输出计算每个滞后的两个数组之间的相关性。中点是滞后 0 且相关性最高的地方。

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