作者: zhao xudong

  • X波段相控阵雷达开发平台-MATLAB开发

    为了我们都能看到一直的效果,建议您和本文档建议的版本保持一致,这样尽可能的减少差异,确保无需额外投入精力去解决环境的问题,建议使用MATLAB 2023B

    硬件连线

    如果您看过了我们的入门文档,肯定已经在GUI中看到了有趣的雷达案例,在本节中,您需要更改一下连线方式。

    首先:断开PlutoSDR和树莓派之间的连线。PlutoSDR的数据链在包装箱内一共有两根,一根是50厘米的长度,一根是15厘米的长度。使用15厘米的MicroUSB线可以很方便的连接到树莓派上,但是不方便连接到电脑上,所以就需要用50厘米的MicroUSB数据线将PlutoSDR和计算机连接起来。

    接下来就是使用一根网线,将树莓派的网口和电脑的网口连接到一起。

    最终的连线原理图是:

    软件安装

    MATLAB工具箱

    • Antenna Toolbox
    • Communications Toolbox
    • DSP System Toolbox
    • Phased Array System Toolbox
    • Signal Processing Toolbox

    当你安装MATLAB的时候,建议工具箱全选进行安装,或者一定要把上述的工具包给安装上。

    第三方工具包

    • Analog Devices, Inc. RF and Microwave Toolbox
    • Analog Devices, Inc. Transceiver Toolbox
    • Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio
    • MATLAB Support for MinGW-w64 C/C++ Compiler

    找到MATLAB界面的Add-Ons 

    然后搜索对应工具包的名称

    将工具包全部进行安装。

    Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio 这个工具包是需要进行配置的。

    点击配置之后,

    安装驱动软件即可。请勿刷新PlutoSDR的固件,默认发货的PlutoSDR的固件是特制的,而MATLAB自带的Pluto固件是标准的,刷新固件会导致某些功能的缺失。

    如果您实在不小心把PlutoSDR的固件刷了,那么您需要按照这篇文章进行补救:

    LibIIO 包安装

    MATLAB 可能需要 LibIIO 软件包才能与 Phaser 通信和运行。如果缺少 LibIIO 导致 MATLAB/Phaser 出现问题。

    下载地址:https://github.com/analogdevicesinc/libiio

    开发

    验证连接是否正常

    将 相控阵雷达 连接到您的本地网络或直接连接到安装了 MATLAB 的主机,使用 Raspberry Pi 的 IP 地址从命令提示符创建 adi.Phaser 类的实例。

    bf = adi.Phaser;
    bf.uri = 'ip:phaser';
    bf()

    这将使用默认参数连接并配置相控阵雷达 。如果您收到连接错误,请确认 Raspberry Pi 已通电并且至少可以 ping 通设备。

    接下来,使用类似的方法验证与 Pluto 的连接。创建 adi.AD9361.Rx 类的实例,并运行运算符方法,如下所示:

    sdr = adi.AD9361.Rx
    sdr.uri = 'ip:pluto';
    data = sdr();

    与 Phaser 系统对象类似,此操作不应产生任何错误。数据向量应包含非零数据。

    • 如果在尝试验证连接时出现错误,请尝试以下选项:
    • 检查上面列出的所有软件包/工具箱是否已正确安装
    • 重新启动 MATLAB 并再次运行代码
    • 断开并重新连接相关设备的线缆
    • 确保 Raspberry Pi 的 SD 卡已安装 ADI Kuiper Linux(并且能够正常工作)

    运行脚本

    一旦 Phaser 和 Pluto 都能够与 MATLAB 通信,请下载并解压

    然后打开文件Phaser_steeringAngle_rev1.m。

    此脚本的功能是扫描一系列转向角并输出阵列因子的图。

    % Key Parameters
    signal_freq = 10.145e9;  % this is the HB100 frequency
    signal_freq = findTxFrequency();
    plutoURI = 'ip:192.168.2.1';
    phaserURI = 'ip:phaser.local';
     
    % Setup the pluto
    rx = setupPluto(plutoURI);
     
    % Setup the phaser
    bf = setupPhaser(rx,phaserURI,signal_freq);
    bf.RxPowerDown(:) = 0;
    bf.RxGain(:) = 127;

    这段代码用于使用之前安装的ADI工具箱(此处分别标记为“rx”和“bf”)在MATLAB中初始化Pluto和Phaser对象。它还会进行短暂扫描,以查找HB100发射器的频率。

    % Create the model of the phaser    
    c = physconst('LightSpeed');
    phaserModel = phased.ULA('NumElements',8,'ElementSpacing', ... 
        bf.ElementSpacing);
    steeringVec = phased.SteeringVector("SensorArray",phaserModel, ...
        'NumPhaseShifterBits',7,'PropagationSpeed',c);

    本部分使用 MathWorks 的 Phased Array System Toolbox (phased) 在 Phaser 上创建天线阵列模型。Phaser 具有 8 个均匀分布的阵元,使用 Phased Array System Toolbox 中的均匀线性阵列对象 (phased.ULA) 进行建模。相应的转向矢量则使用 Phased Array System Toolbox 中的 SteeringVector 对象创建。

    %% Set all gains to max and phases to zero
    bf.RxGain(:) = 127;   % max gain = 127, min gain = 0
    bf.RxAttn(:) = 0;     % if RxAttn=1 then insert 20dB attenuator
    bf.RxPhase(:) = 0;
    bf.LatchRxSettings(); % write new settings to the ADAR1000s
     
    % Load Phase calibration values
    PhaseCal = [0; -8.4375; -5.625; -5.625; 67.5; 87.1875; 90; 101.25];

    此段仅设置增益级别和相位校准值。

    %% Sweep the steering angle and capture data
    steeringAngle = -90 : 90;
    ArrayFactor = zeros(size(steeringAngle));
    for ii = 1 : numel(steeringAngle)
        arrayWeights = steeringVec(signal_freq,steeringAngle(ii));
        phases = rad2deg(angle(conj(arrayWeights(:))));
        phases = phases - phases(1);
        phases = phases + PhaseCal;
        phases = wrapTo360(phases);
        bf.RxPhase(:) = phases.';
        bf.LatchRxSettings();
        receivedSig_HW = rx();
        receivedSig_HW_sum = sum(receivedSig_HW,2);
        receivedFFT = fft(receivedSig_HW_sum);
        ArrayFactor(ii) = (max(abs(receivedFFT)));
    end

    代码中实际的波束控制操作如下。
    代码会创建一个数组,其中包含波束控制所需的角度。然后,它会执行一个循环,其中:

    • 从角度数组中获取给定角度
    • 使用给定的波束控制角度创建另一个数组,其中包含要应用于每个天线单元的相应相移
    • 将相移应用于 Phaser
    • 从 Pluto 收集数据,对数据进行 FFT 运算以获取最大幅度,并记录下来
    • 重复此操作,直至获得下一个波束控制角度
    %% Compare the measured array factor and model
    [~,ind] = max(ArrayFactor);
    EmitterAz = steeringAngle(ind)
    figure(101)
    arrayWeights = steeringVec(signal_freq,EmitterAz);
    pattern(phaserModel,signal_freq,-90:90,0,'CoordinateSystem', ...
        'Rectangular','Type','powerdb','weights',arrayWeights)
    hold on;
     
    % Plot the measured data and the model
    plot(steeringAngle,mag2db(ArrayFactor./max(abs(ArrayFactor))))

    这里使用相控阵系统工具箱 (Phased Array System Toolbox) 模拟 Phaser 的阵列因子。然后绘制实验获得的阵列因子(根据上述数据)和模拟的阵列因子。结果图应类似于下图。请注意,模拟和实际获得的阵列因子之间的差异主要是由于尚未进行校准。

    完整的 RADAR 示例

    https://cnb.cool/tekdf_cnb/Phaser-Control-with-MATLAB

  • X波段相控阵雷达开发平台-设备高阶指南

    欢迎

    欢迎阅读本指南,本指南旨在让想从头开始配置设备的用户阅读,本指南作为一份指导,会帮你解决安装过程中的大部分问题,但是您仍然会遇到各种奇奇怪怪的问题,希望您可以在Google无果后与我们咨询问题。

    本指南默认认为您具备Linux使用能力,具备Git等能力。

    请自购一张SD卡,请勿使用套件中的SD卡,套件中的SD卡作为保底使用,当您无法完成本指南得时候,还是可以使用随货发出的保底SD卡正常使用。

    制作SD卡

    SD卡烧录工具:Raspberry Pi Imager

    镜像下载地址:image_2023-04-02-ADI-Kuiper-full.zip

    在使用的时候,选择设备中,选择树莓派4。

    系统镜像请勿选择官方的,而是选择custom

    然后选择我们下载的镜像即可。接下来完成烧写之后,即可插入树莓派中,进行开机了。

    用户名和密码

    用户名和密码,可以用于后续的SSH远程连接。

    用户名密码
    rootanalog
    analoganalog

    启用树莓派 VNC 服务

    在终端输入以下命令进入配置界面。

    sudo raspi-config

    依次操作:Interfacing Options -> VNC -> Yes。之后系统会提示你是否要安装 VNC 服务,输入 y 之后回车,等待系统自动下载安装完成,一切顺利的话 VNC 服务就启动了!

    安装 VNC 客户端

    安装NTP 模块

    sudo apt-get install ntp

    使用命令重启ntp服务:

    sudo service ntp restart

    检查当前的时间同步状态:

    timedatectl status

    这个是为了后续的安装软件使用。

    配置代理

    注意打开局域网连接

    注意记住端口号

    查看自己电脑的IP是多少,可以用CMD查看

    IP地址因机器而不同。

    在设备的命令行中输入:

    sudo nano /etc/environment

    envirinment内输入(注意下文是模板,你需要根据实际情况进行修改):

    export http_proxy="http://username:password@proxyipaddress:proxyport"
    export https_proxy="http://username:password@proxyipaddress:proxyport"
    export no_proxy="localhost, 127.0.0.1"

    用代理的IP地址和端口替换proxyipaddress和proxyport。

    export http_proxy="http://192.168.0.108:7899"
    export https_proxy="http://192.168.0.108:7899"
    export no_proxy="localhost, 127.0.0.1"

    保存的话,按下:Ctrl + X

    然后在设备的命令行中输入:

    sudo visudo

    将下面的行添加到文件中,这样sudo将使用您刚刚创建的环境变量(注意查看位置):

    Defaults env_keep+="http_proxy https_proxy no_proxy"

    注意拷贝的位置

    重启

    sudo reboot

    安装相控阵相关软件

    wget https://github.com/thorenscientific/rpi_setup_stuff/raw/main/phaser/phaser_sdcard_setup.sh
    
    sudo chmod +x phaser_sdcard_setup.sh
    
    ./phaser_sdcard_setup.sh
    
    sudo reboot

    重启之后运行

    sudo pip install --force-reinstall numpy==1.22

    你可以参考其他的文档进行下一步的实验之旅了!