利用LABVIEW的python接口调用Pluto SDR
1. 介绍
LABVIEW是NI公司推出的一款非常适合用于实时信号处理的编程软件,其图形化的开发方式有效缩短了测试验证应用设计的时间,而且NI公司自己有多种型号的USRP产品,在SDR方面有较好的生态。
Pluto SDR 是一款基于AD9363芯片的低成本、支持 RX/TX 的 SDR,具有高达 56 MHz 的带宽和 70 MHz 至 6 GHz 的频率范围。
Pluto官方支持的接口包括Matlab、C++以及python等,不能直接支持LABVIEW,但LABVIEW在2018版本后自带了python接口,因此可以利用python将LABVIEW和Pluto联系起来。
2. 准备工作
-
在计算机上安装Pluto SDR驱动,以windows为例,参考Windows Drivers [Analog Devices Wiki]
-
安装相应的python支持库,参考pyadi-iio: Device Specific Python Interfaces For IIO Drivers [Analog Devices Wiki]
-
安装成功后,连接好PlutoSDR,在python命令行中输入下列命令,可得到如下结果。
-
安装2018版本以上的LABVIEW软件,我安装的LABVIEW NXG。(若python为64位,LABVIEW也需要为64位)
3. python端函数设计
3.1 初始化函数
import numpy as np
import adi
sdr = adi.Pluto()
def PlutoInit(Gr, size, f0, fs, gain_mode):
# Gr 接收增益
# size 每一的接收长度
# f0 中心频率
# fs 采样率
# gain_mode AGC增益控制模式选择,有manual、slow_attcak、fast_attack三种
if gain_mode == 0:
sdr.gain_control_mode = 'manual'
elif gain_mode == 1:
sdr.gain_control_mode = 'slow_attcak'
else:
sdr.gain_control_mode = 'fast_attack'
sdr.rx_hardwaregain_chan0 = int(Gr)
sdr.sample_rate = int(fs)
sdr.rx_lo = int(f0)
sdr.rx_rf_bandwidth = int(fs)
sdr.rx_buffer_size = size
return 0
3.2 接收参数设定函数(在程序运行时动态调制参数)
def ParamSet(f0, gain_mode, Gr):
sdr.rx_lo = int(f0)
if gain_mode == 0:
sdr.gain_control_mode = 'manual'
elif gain_mode == 1:
sdr.gain_control_mode = 'slow_attcak'
else:
sdr.gain_control_mode = 'fast_attack'
sdr.rx_hardwaregain_chan0 = Gr
return sdr.rx_lo, sdr.gain_control_mode, sdr.rx_hardwaregain_chan0
3.3 接收数据函数(读取接收到的数据)
def Rx():
data = sdr.rx() # 读取长度为size的复数数据
data = np.vstack((np.real(data), np.imag(data))) # 将数据转换为二维DBL数组
return data
3.4 发射参数设定函数
def TxSet(Gt, f0, fs, wave):
# Gt 发射增益
# f0 发射载频
# fs 采样率
# wave 待发射的波形数据
sdr.tx_hardwaregain_chan0 = Gt
sdr.tx_lo = int(f0)
sdr.tx_rf_bandwidth = int(fs)
wave = np.array(wave)
tdata = (wave[0]+1j*wave[1])*2**14 # 匹配Pltuo内部ADC
sdr.tx_cyclic_buffer = True
sdr.tx(tdata)
return 0
3.5 终止函数
def Stop():
sdr.tx_destroy_buffer()
return 0
4. LABVIEW程序设计
- 前面板
- 程序框图(部分需要切换界面,显示不全)
5. 实验测试
通过闭环的方式发射首尾相连的线性调频信号对发射与接收回路进行测试验证。