Initial ARSS. Need to improve and add functions.

This commit is contained in:
2026-03-02 14:48:21 +09:00
commit 775668afdb
20 changed files with 1610 additions and 0 deletions
@@ -0,0 +1,81 @@
function fig = visualize_antenna_pattern(PatternArray, AntennaName)
% visualize_antenna_pattern: .
% AntennaName (: 'TX', 'RX') .
if nargin < 2
AntennaName = 'Antenna'; %
end
fig_name = sprintf('%s Radiation Pattern Cuts', AntennaName);
fig = figure('Name', fig_name, 'Position', [200, 200, 1000, 700]);
NumAnt = length(PatternArray);
colors = lines(NumAnt);
% [ Y축 ]
y_min_total = inf;
y_max_total = -inf;
for i = 1:NumAnt
pat = PatternArray(i);
if strcmpi(pat.Type, '2D')
y_min_total = min(y_min_total, min(pat.gain_dBi(:)));
y_max_total = max(y_max_total, max(pat.gain_dBi(:)));
else
y_min_total = min(y_min_total, min([pat.gain_az_dBi(:); pat.gain_el_dBi(:)]));
y_max_total = max(y_max_total, max([pat.gain_az_dBi(:); pat.gain_el_dBi(:)]));
end
end
% ---------------------------------------------------------
% [Subplot 1] : Azimuth Pattern Cut
% ---------------------------------------------------------
subplot(2, 1, 1);
hold on; grid on;
for i = 1:NumAnt
pat = PatternArray(i);
if strcmpi(pat.Type, '2D')
el0_idx = find(abs(pat.el_angles - 0) < 1e-6, 1);
az_gain_cut = pat.gain_dBi(el0_idx, :);
else
az_gain_cut = pat.gain_az_dBi;
end
plot(pat.az_angles, az_gain_cut, '-', 'Color', colors(i,:), 'LineWidth', 2.5, 'DisplayName', sprintf('%s %d', AntennaName, i));
end
title(sprintf('[%s] Azimuth Radiation Pattern Cut (at Elevation = 0^\\circ)', AntennaName), 'FontSize', 12);
xlabel('Azimuth Angle (deg)', 'FontSize', 11);
ylabel('Antenna Gain (dBi)', 'FontSize', 11);
xlim([min(PatternArray(1).az_angles), max(PatternArray(1).az_angles)]);
ylim([y_min_total - 2, y_max_total + 2]);
legend('show', 'Location', 'south');
hold off;
% ---------------------------------------------------------
% [Subplot 2] : Elevation Pattern Cut
% ---------------------------------------------------------
subplot(2, 1, 2);
hold on; grid on;
for i = 1:NumAnt
pat = PatternArray(i);
if strcmpi(pat.Type, '2D')
az0_idx = find(abs(pat.az_angles - 0) < 1e-6, 1);
el_gain_cut = pat.gain_dBi(:, az0_idx);
else
el_gain_cut = pat.gain_el_dBi;
end
plot(pat.el_angles, el_gain_cut, '-', 'Color', colors(i,:), 'LineWidth', 2.5, 'DisplayName', sprintf('%s %d', AntennaName, i));
end
title(sprintf('[%s] Elevation Radiation Pattern Cut (at Azimuth = 0^\\circ)', AntennaName), 'FontSize', 12);
xlabel('Elevation Angle (deg)', 'FontSize', 11);
ylabel('Antenna Gain (dBi)', 'FontSize', 11);
xlim([min(PatternArray(1).el_angles), max(PatternArray(1).el_angles)]);
ylim([y_min_total - 2, y_max_total + 2]);
legend('show', 'Location', 'south');
hold off;
end