工程中涉及同步,那就要求求解两个信号的互相关

scipy.signal.correlate 是 SciPy 库中的一个函数,用于计算两个一维序列的互相关。互相关是一种衡量两个信号相似性的方法,通过计算一个信号相对于另一个信号的位移来评估它们的相似程度。它在信号处理中常用于模式识别、信号检测和时间延迟估计等任务。

函数语法

1
scipy.signal.correlate(in1, in2, mode='full', method='auto')
  1. in1, in2: array_like
    输入的两个一维数组(信号),需要计算它们的互相关。
  2. mode: str, 可选
    决定输出结果的大小:
    • 'full':输出完整的互相关结果(默认值),结果长度为 len(in1) + len(in2) - 1
    • 'valid':只输出没有零填充的部分,结果长度为 max(len(in1), len(in2)) - min(len(in1), len(in2)) + 1
    • 'same':输出与 in1 长度相同的结果,结果居中。
  3. method: str, 可选
    指定计算互相关的方法:
    • 'auto':根据输入大小自动选择方法(默认值)。
    • 'direct':直接使用互相关的定义计算。
    • 'fft':使用快速傅里叶变换(FFT)计算,适用于较长的信号。
    • 'overlap-add':使用重叠相加法,适用于非常大的输入。
  4. 返回值
    • out: ndarray 返回 in1in2 的离散互相关结果。
1
2
3
4
5
6
7
8
9
10
11
import numpy as np
from scipy.signal import correlate

# 定义两个信号
x = np.array([1, 2, 3])
y = np.array([0, 1, 0.5])

# 计算互相关
corr = correlate(x, y, mode='full')

print(corr)

​ 假设输入信号为:

  • x = [1, 2, 3]
  • y = [0, 1, 0.5]

​ 使用 mode='full' 时,输出结果为:[0.5 2. 3.5 3. 0. ]

​ 这个结果表示:

  • 第 0 个值(0.5)是 xy 在位移为 -2 时的相关性。
  • 第 1 个值(2.0)是 xy 在位移为 -1 时的相关性。
  • 第 2 个值(3.5)是 xy 在位移为 0 时的相关性。
  • 第 3 个值(3.0)是 xy 在位移为 1 时的相关性。
  • 第 4 个值(0.0)是 xy 在位移为 2 时的相关性。

注意事项

  1. 模式选择
    • 'full' 模式适用于需要完整互相关结果的场景。
    • 'valid' 模式适用于只关心有效部分(无零填充)的场景。
    • 'same' 模式适用于输出与输入信号长度相同的场景。
  2. 计算方法
    • 对于较短的信号,'direct' 方法可能更快。
    • 对于较长的信号,'fft' 方法通常更高效。

应用场景

  1. 信号检测:检测一个已知信号是否存在于另一个信号中。
  2. 时间延迟估计:通过互相关峰值的位置估计两个信号之间的时间延迟。
  3. 模式匹配:在数据中寻找特定的模式或特征。

​ 通过 scipy.signal.correlate,可以方便地实现这些功能。

同步

​ 得到互相关序列后,通过np.argmax(np.abs(cross_correlation))得到空口信号中,同步序列的最后一位位置