了解1D np.correlate的结果

时间:2019-06-10 19:43:18

标签: python numpy signal-processing cross-correlation

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

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

代码:

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))

enter image description here

此图对我提出了几个问题。据我了解,互相关依赖于卷积运算(本质上是两个信号的内积的积分-造成一定的滞后)。

  1. 如果arr_2从索引0到50充满0,为什么相关信号(上方)从(0,50)稳定增加?
  2. 如何设置卷积运算的滞后时间。在numpy文档中,我找不到可以调整延迟的参数。
  3. 在50处出现峰值是由于两个信号都在索引50处对齐,但是为什么其后相关性却稳定下降呢?如果两个信号对齐,那么相关性是否应该增加?
  4. 仅当相关值大于2 / sqrt(n-abs(k))时,相关才有意义。其中n是样本数,k是滞后。上图所示的相关显着性如何发挥作用?

1 个答案:

答案 0 :(得分:1)

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

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