1.目标
对雷达进行干扰,首先要发现周围的雷达信号,知道雷达发射信号的频点以及波形样式,所以实时信号接收是第一步。
任务分解:
- 信号接收
- 最大吞吐率
- 时域和频域显示
- 参数动态调整
2.信号接收
在所有的依赖库和安装包都安装完成后,将 PLUTO 连接到计算机,通过 python 即可读取 PLUTO 接收到的信号。
import adi
sdr = adi.Pluto()
data = sdr.rx()
print(data)
# 显示结果为:[ 46. +47.j 16. +39.j 134.+107.j ... 27. +71.j 1. +23.j 17. +33.j]
PLUTO 的 ADC 采样位数为 14 位,采样的数字信号的显示范围位[-2048,2048],因此通过 sdr.rx()
读取的数字信号在使用时需要整体除以 2048 进行归一化。
通过 LABVIEW 的 python 节点,可直接调用编写好的 python 函数,从而将 sdr.rx()
的输出传递到 LABVIEW。
3.最大吞吐率
由于 PLUTO 采用的 USB2.0 的接口,其数据传输速率受到接口的限制,接收信号的采样率高到一定程度后,就会发生数据丢包。
import adi
import time
sample_rate = 6e6 # 采样率
n = 200000 # 一次接收长度
m = 500
center_freq = 100e6 # 中心频率
sdr = adi.Pluto()
sdr.sample_rate = int(sample_rate)
sdr.rx_rf_bandwidth = int(sample_rate)
sdr.rx_lo = int(center_freq)
sdr.rx_buffer_size = n
start_time = time.time()
for i in range(m):
samples = sdr.rx()
end_time = time.time()
print(end_time - start_time)
print('实际采样率:', n*m/(end_time - start_time)/1000000)
通过测试得到,若要保证不丢失数据,在一次接收长度较长,十万级别时,实际采样率能达到最大值 6MHz 左右,在千位级别时,只能达到 4MHz。
4.时域和频域显示
LABVIEW 的优势就在于对于数据的实时显示和交互实现起来非常简便。
LABVIEW 自带高性能的 FFT 处理模块以及多种数据显示模块。
5.参数动态调整
LABVIEW 的编程方式可以很容易实现多线程操作,在实时显示信号的同时,通过事件结构,监测前面板各参数输入框,在用户调整参数时,调用对应的 python 函数,将参数通过 python 传递给 PLUTO。