【发布时间】: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))
这张图向我提出了几个问题。据我了解,互相关依赖于卷积运算(本质上是两个信号的内积的积分 - 考虑了一些滞后)。
- 如果 arr_2 从索引 0 到 50 都是 0,为什么相关信号(上图)会从 (0, 50) 稳定增加?
- 如何设置卷积操作的延迟。从 numpy 文档中,我找不到允许我调整延迟的参数。
- 50 处的峰值是由于两个信号在索引 50 处对齐,但为什么此后相关性会稳步下降?如果两个信号对齐,那么相关性不应该增加吗?
- 仅当其值大于 2/sqrt(n - abs(k)) 时,相关性才显着。其中n是样本数,k是滞后。对于上图,相关显着性如何发挥作用?
【问题讨论】:
标签: python numpy signal-processing cross-correlation