标签: EVAL-CN0566-RPIZ

  • 佐治亚州亚特兰大学是如何上雷达课的

    2025 年 5 月 3 日至 4 日在佐治亚州亚特兰大举行的 IEEE 国际雷达会议期间举行的雷达训练营 – 该训练营取得了巨大成功。

    我们进行了为期两天的互动讲座/实验,涵盖了一系列基本的雷达主题,包括雷达的历史、基于雷达的传感的基本原理、雷达信号处理、检测和估计、阵列处理、合成孔径雷达、空时自适应处理、跟踪和雷达中的 AI/ML。 参与者包括学生和行业,提供引人入胜的互动、分享经验和交流机会。

    我强烈推荐那些工作/学习雷达的人使用 X波段相控阵雷达开发平台。

    下一届 RBC 将于今年 10 月在波兰克拉考举行的 IEEE 雷达会议上举行,并将于 2026 年 5 月返回美国亚利桑那州凤凰城!

  • 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 示例