为了我们都能看到一直的效果,建议您和本文档建议的版本保持一致,这样尽可能的减少差异,确保无需额外投入精力去解决环境的问题,建议使用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 的阵列因子。然后绘制实验获得的阵列因子(根据上述数据)和模拟的阵列因子。结果图应类似于下图。请注意,模拟和实际获得的阵列因子之间的差异主要是由于尚未进行校准。

发表回复