信号互相关实操
工程中涉及同步,那就要求求解两个信号的互相关
scipy.signal.correlate
是 SciPy 库中的一个函数,用于计算两个一维序列的互相关。互相关是一种衡量两个信号相似性的方法,通过计算一个信号相对于另一个信号的位移来评估它们的相似程度。它在信号处理中常用于模式识别、信号检测和时间延迟估计等任务。
函数语法
1 | scipy.signal.correlate(in1, in2, mode='full', method='auto') |
- in1, in2: array_like
输入的两个一维数组(信号),需要计算它们的互相关。 - mode: str, 可选
决定输出结果的大小:'full'
:输出完整的互相关结果(默认值),结果长度为len(in1) + len(in2) - 1
。'valid'
:只输出没有零填充的部分,结果长度为max(len(in1), len(in2)) - min(len(in1), len(in2)) + 1
。'same'
:输出与in1
长度相同的结果,结果居中。
- method: str, 可选
指定计算互相关的方法:'auto'
:根据输入大小自动选择方法(默认值)。'direct'
:直接使用互相关的定义计算。'fft'
:使用快速傅里叶变换(FFT)计算,适用于较长的信号。'overlap-add'
:使用重叠相加法,适用于非常大的输入。
- 返回值
- out: ndarray 返回
in1
和in2
的离散互相关结果。
- out: ndarray 返回
1 | import numpy as np |
假设输入信号为:
x = [1, 2, 3]
y = [0, 1, 0.5]
使用 mode='full'
时,输出结果为:[0.5 2. 3.5 3. 0. ]
这个结果表示:
- 第 0 个值(
0.5
)是x
和y
在位移为 -2 时的相关性。 - 第 1 个值(
2.0
)是x
和y
在位移为 -1 时的相关性。 - 第 2 个值(
3.5
)是x
和y
在位移为 0 时的相关性。 - 第 3 个值(
3.0
)是x
和y
在位移为 1 时的相关性。 - 第 4 个值(
0.0
)是x
和y
在位移为 2 时的相关性。
注意事项
- 模式选择:
'full'
模式适用于需要完整互相关结果的场景。'valid'
模式适用于只关心有效部分(无零填充)的场景。'same'
模式适用于输出与输入信号长度相同的场景。
- 计算方法:
- 对于较短的信号,
'direct'
方法可能更快。 - 对于较长的信号,
'fft'
方法通常更高效。
- 对于较短的信号,
应用场景
- 信号检测:检测一个已知信号是否存在于另一个信号中。
- 时间延迟估计:通过互相关峰值的位置估计两个信号之间的时间延迟。
- 模式匹配:在数据中寻找特定的模式或特征。
通过 scipy.signal.correlate
,可以方便地实现这些功能。
同步
得到互相关序列后,通过np.argmax(np.abs(cross_correlation))
得到空口信号中,同步序列的最后一位位置
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JrunDing!
评论