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