互相关法对时序信号时域对齐(python实现)

参考文章:《使用相关性对齐信号》


前言

在对数字时域信号进行操作时,有时需要在预处理的过程中,对自己的信号数据进行对齐操作,本文就用python实现该时域对齐操作,方便对时域信号进行下一步处理。


1、读取自己的信号数据:

我这里就用自己的信号数据来做演示:

(首先需要import的库有如下三个)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

紧接着读取数据(因为我的信号数据有很多,这里读取其中两个信号s1、s2做演示)

data = pd.read_csv(r'C:\Users\xps\Desktop\radar\train_raw_data_las_2.csv')
data0 = data.values
s1 = data0[0]
s2 = data0[5]
s1 = list(s1)
s2 = list(s2)

plt.plot(range(len(s1)),s1,'r',label = 'x')
plt.plot(range(len(s2)),s2,'g',label = 'y')
plt.show()

两个信号画图如下,可以看出两个信号是不对齐的

2、读取两个信号之间的互相关数据

此处读取两个信号的互相关使用的是np里面的correlate函数,该函数和数字信号处理里面的卷积操作一样,即求两个信号s1和s2的卷积

具体操作如下:

c21 = np.correlate(s2,s1,mode='full')
t21 = np.argmax(c21)

c21为s1,s2两个信号的互相关

t21为互相关中最大值所在的索引:此处t21=518,可在下图横轴大致看出

c21画出的图如下:

3、根据互相关及其最大值索引对两个信号对齐:

原理大致解释如下:

对s1和s2求卷积时,是先将其中一个信号反转,再平移,计算二者重叠部分的和(具体可见信号课本求卷积的图示法)

互相关最大值处即是两个信号重叠最大的部分,其移动的间距即是我们在下面即将对其中一个信号移位的距离。

下面代码中的index即是s1和s2求得互相关最大值时的卷积移动间距

若index=0,则说明两个信号刚好对齐

若index>0,则说明s1信号领先s2信号index个距离

若index<0,则说明s2信号领先s1信号index个距离

此处咱们以s1信号为基准,让s2和s1对齐,对齐操作只需要对s2进行切片整合操作即可,如下代码所示

len_s = len(s1)
index = t21-len_s
if index > 0 :
    tt1 = s2[index:]
    tt2 = s2[0:index]
    s2_0 = tt1 + tt2
else:
    index = len_s + index
    tt1 = s2[0:index]
    tt2 = s2[index:]
    s2_0 = tt2 + tt1

4、大功告成,画图看看

plt.subplot(211)
plt.plot(range(len(s1)),s1,'r',label='x')
plt.plot(range(len(s2)),s2,'g',label='y')

plt.subplot(212)
plt.plot(range(len(s1)),s1,'r',label='x')
plt.plot(range(len(s2_0)),s2_0,'g',label='y')
plt.show()

从下图可以看出,两个信号已经对齐,可以进行其他信号处理操作

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python是一个功能强大的编程语言,可以用于处理和分析振动信号时域数据。在Python中,我们可以使用许多库和工具来处理振动信号数据,例如NumPy、SciPy和Matplotlib。 首先,我们可以使用NumPy库来创建和操作数组,从而存储和处理振动信号时域数据。通过使用NumPy的功能,我们可以进行常见的数学运算,例如加法、减法、乘法和除法,以及数组的切片和索引。 其次,SciPy库提供了许多用于信号处理的函数和算法。例如,我们可以使用SciPy中的滤波器函数来对振动信号进行滤波,以去除噪声和不必要的频谱成分。此外,SciPy还提供了一些常见的时域分析函数,例如自相关函数和互相关函数,用于分析信号的相关性和相似性。 最后,Matplotlib库可以用于绘制振动信号时域图表。我们可以使用Matplotlib的函数来创建折线图或散点图,以显示振动信号的振幅随时间变化的情况。此外,Matplotlib还提供了许多其他图表类型,例如柱状图、饼图和直方图,可以用于进一步分析振动信号的统计特征和频谱信息。 总之,Python提供了丰富的工具和库,可以用于处理和分析振动信号时域数据。通过使用NumPy、SciPy和Matplotlib库,我们可以进行各种操作,例如操作数组、滤波信号、计算相关性、绘制时域图表等,从而深入挖掘振动信号的特征和信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值