互相关法对时序信号时域对齐(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()

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

<think>好的,用户的问题是:“如何处理ILA捕获的调制信号,数据分析或调试方”。首先,我需要明确ILA(集成逻辑分析仪)在FPGA开发中的作用,它主要用于捕获和调试数字信号。用户提到的是调制信号,可能涉及模拟调制如FM/AM,或者数字调制如QPSK、QAM等,但ILA捕获的是数字信号,所以需要将调制信号转换为数字形式后再分析。 接下来,处理ILA捕获的数据通常包括几个步骤:数据导出、预处理、分析和调试。数据导出需要了解工具链,比如Vivado如何导出.ila文件为CSV或VCD。预处理可能涉及解析时间戳、信号对齐,因为调制信号可能有I/Q两路,需要确保它们同步。 数据分析部分,用户可能需要观察时域波形,检查调制信号的幅度、频率变化是否符合预期。频域分析可以用FFT查看频谱,验证是否出现预期的边带或频率分布。对于数字调制,可能需要解调后计算误码率,或者检查星座图。这里需要引用采样定理(引用[2])来确保采样率足够,避免混叠。 调试方方面,如果信号异常,需要从数据源、调制算(如引用[4]提到的积分处理)、时序问题(建立保持时间)等方面排查。RTL仿真(引用[3])可以在功能层面验证代码,而ILA用于实时调试,两者结合提升效率(引用[1])。 用户可能需要具体的工具指导,比如Vivado的WaveView,或者用Python脚本处理数据。同时,生成相关问题时要围绕ILA使用、调制信号分析、性能优化等方面展开,帮助用户深入理解整个流程。</think>### 处理ILA捕获的调制信号的方 #### 1. **数据导出与预处理** - **导出ILA数据**:通过Vivado等工具将捕获的`.ila`文件导出为CSV或VCD格式,便于后续分析[^1]。 - **解析时间戳**:调制信号通常包含时域信息,需提取时间戳并与采样点对齐。例如: ```python import pandas as pd data = pd.read_csv("ila_capture.csv") time = data["timestamp"] i_signal = data["I_channel"] q_signal = data["Q_channel"] ``` - **信号对齐**:若信号包含I/Q两路,需验证两路信号的相位一致性,避免因时序偏差导致解调错误[^3]。 #### 2. **时域与频域分析** - **时域波形观察**:绘制调制信号时域波形,检查幅度、频率或相位调制是否符合预期。例如FM信号应呈现连续频率变化: ```python import matplotlib.pyplot as plt plt.plot(time, i_signal, label="I路") plt.plot(time, q_signal, label="Q路") plt.xlabel("时间(s)") plt.ylabel("幅值") plt.legend() ``` - **频谱分析**:通过FFT观察信号频谱,验证是否满足采样定理(引用[2]): ```python from scipy.fft import fft spectrum = fft(i_signal + 1j * q_signal) freq = np.fft.fftfreq(len(spectrum), d=1/sampling_rate) plt.plot(freq, np.abs(spectrum)) plt.xlabel("频率(Hz)") ``` - **调制参数计算**:对FM信号,可通过瞬时频率计算调制指数;对QPSK信号,可生成星座图评估符号分布。 #### 3. **调试与验证** - **对比仿真结果**:将ILA捕获数据与RTL仿真(引用[3])的预期波形对比,定位硬件实现中的偏差。 - **检查调制逻辑**:若使用正交调制(引用[4]),需验证积分模块的输出是否与理论匹配。例如FM调制中积分后的信号应满足: $$ \phi(t) = k_f \int_0^t m(\tau) d\tau $$ - **时序违例排查**:若信号存在毛刺,需通过Vivado时序报告检查建立/保持时间是否满足。 #### 4. **工具辅助** - **Vivado WaveView**:直接观察信号跳变与协议交互。 - **Python脚本自动化**:批量处理多组捕获数据,统计误码率或调制误差率(EVM)。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值