Python 中的归一化互相关

新手上路,请多包涵

最近几天我一直在努力计算两对向量(x 和 y)的自由度,参考 Chelton(1983)是:

根据 Chelton (1983) 的自由度

而且我找不到使用 np.correlate 计算归一化互相关函数的正确方法,我总是得到一个不在 -1、1 之间的输出。

有什么简单的方法可以使互相关函数归一化以计算两个向量的自由度?

原文由 Daniela Belén Risaro 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

好问题。没有直接的方法,但您可以在使用之前“规范化”输入向量 np.correlate 像这样,合理的值将在 [-1,1] 范围内返回:

在这里,我定义了信号处理教科书中通常定义的相关性。

 c'_{ab}[k] = sum_n a[n] conj(b[n+k])

代码:如果 a 和 b 是向量:

 a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

参考:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html

https://en.wikipedia.org/wiki/Cross-correlation

在此处输入图像描述

原文由 seralouk 发布,翻译遵循 CC BY-SA 4.0 许可协议

MATLAB ➜ xcorr(a, b, ‘归一化’);

Python 中的 MATLAB 规范化互相关实现。

 import numpy as np
a = [1, 2, 3, 4]
b = [2, 4, 6, 8]
norm_a = np.linalg.norm(a)
a = a / norm_a
norm_b = np.linalg.norm(b)
b = b / norm_b
c = np.correlate(a, b, mode = 'full')

原文由 Enes Zeybek 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题