% 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
%% 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 的阵列因子。然后绘制实验获得的阵列因子(根据上述数据)和模拟的阵列因子。结果图应类似于下图。请注意,模拟和实际获得的阵列因子之间的差异主要是由于尚未进行校准。