在信号处理中,互相关是对两个系列的相似性的度量,作为一个系列相对于另一个系列的位移的函数。这也称为滑动点积或滑动内积。它通常用于在长信号中搜索较短的已知特征。它在模式识别、单粒子分析、电子断层扫描、平均、密码分析和神经生理学方面有应用。互相关本质上类似于两个函数的卷积。在自相关(即信号与其自身的互相关)中,始终会在零滞后处出现峰值,其大小就是信号能量。

在概率和统计中,互相关是指两个随机向量X和Y的条目之间的相关性,而随机向量X的相关性是X本身的条目之间的相关性,那些形成X的相关矩阵。如果 X 和 Y 中的每一个都是在时间序列中重复实现的标量随机变量,则 X 的各个时间实例的相关性称为 X 的自相关性,而互相关性称为 X 的自相关性X 与 Y 随时间的变化是时间互相关。在概率和统计学中,相关性的定义始终包含标准化因子,使得相关性的值介于 -1 和 +1 之间。

显示了几个时间延迟的互相关的直观示例:

block-beta
 columns 8
 space:2 A1["信号1"] space:2 B1["信号1"] space C1["信号1"]
 A2["信号2"] space:3 B2["信号2"] space:2 C2["信号2"]
 space d1<[" "]>(down) space:3 d2<[" "]>(down) space d3<[" "]>(down)
 space A["不相关"] space:3 B["不相关"] space C["相关"]

应用于:

互相关数学

对于连续函数 f 和 g,互相关定义为:

$$ (f \star g)(\tau) \triangleq \int_{-\infty}^{\infty} \overline{f(t)} g(t+\tau) d t $$

等同于

$$ (f \star g)(\tau) \triangleq \int_{-\infty}^{\infty} \overline{f(t-\tau)} g(t) d t $$

其中$\overline{f(t)}$表示f(t)的复共轭,$\tau$称为位移或滞后。对于高度相关的 f 和 g,它们在特定的 $\tau$ 处具有最大互相关性,t 处的 f 中的特征稍后也会出现在 $t+\tau$ 处的 g 中。

Python互相关方式

方式1:

 import math
 import random
 ​
 t = [i * 0.1 for i in range(100)]
 signal1 = [math.sin(2 * math.pi * 2 * i) + 0.5 * math.cos(2 * math.pi * 3 * i) + random.normalvariate(0, 0.1) for i in t]
 signal2 = [math.sin(2 * math.pi * 2 * i) + 0.5 * math.cos(2 * math.pi * 3 * i) + random.normalvariate(0, 0.1) for i in t]
 ​
 def mean(arr):
     return sum(arr) / len(arr)
 ​
 def cross_correlation(x, y):
     x_mean = mean(x)
     y_mean = mean(y)

     numerator = sum((a - x_mean) * (b - y_mean) for a, b in zip(x, y))
     x_sq_diff = sum((a - x_mean) ** 2 for a in x)
     y_sq_diff = sum((b - y_mean) ** 2 for b in y)
     denominator = math.sqrt(x_sq_diff * y_sq_diff)
     correlation = numerator / denominator

     return correlation

 correlation = cross_correlation(signal1, signal2)
 print('Correlation:', correlation)
 ​

输出:

 Manual Correlation: 0.9837294963190838

方式2: