利用LABVIEW的python接口调用Pluto SDR

利用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. 准备工作

  1. 在计算机上安装Pluto SDR驱动,以windows为例,参考Windows Drivers [Analog Devices Wiki]

  2. 安装相应的python支持库,参考pyadi-iio: Device Specific Python Interfaces For IIO Drivers [Analog Devices Wiki]

  3. 安装成功后,连接好PlutoSDR,在python命令行中输入下列命令,可得到如下结果。
    在这里插入图片描述

  4. 安装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程序设计

  1. 前面板

在这里插入图片描述

  1. 程序框图(部分需要切换界面,显示不全)

在这里插入图片描述

5. 实验测试

通过闭环的方式发射首尾相连的线性调频信号对发射与接收回路进行测试验证。
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值