Files
2026-06-12 16:09:25 +02:00

120 lines
3.0 KiB
Matlab

% this code is in no manner clean
% use these fields to select the task that should be calculated
do_task1 = false;
do_task2 = false;
do_task3_1 = false;
do_task3_2 = false;
do_task3_2_simple_calc = false;
do_task4_1 = false;
do_task4_2 = false;
do_task5_1 = false;
do_task5_2 = true;
carrier_frequency = 2.4e9;
wifi_be_subcarrier_spacing = 78.125e3;
leo_altitude = 600e3;
bandwidth = 20;
mcs_values = [0 2 4 8 10 12 13];
mcs_t1 = 2;
apep = 1000;
tx_antenna_count = 1;
rx_antenna_count = 1;
snrs = (0:1:40);
packets_per_snr = 1024;
maxNumErrors = 50;
elevationAngles = [ ...
linspace(10, 90, ceil(packets_per_snr / 2)), ...
linspace(90, 10, floor(packets_per_snr / 2)) ...
];
meanElevationAngle = mean(elevationAngles);
slantRanges = arrayfun(@(el) slantRangeCircularOrbit(el, leo_altitude, 0), elevationAngles);
dopplerShifts = arrayfun(@(el) dopplerShiftCircularOrbit(el, leo_altitude, 0, carrier_frequency), elevationAngles);
random_stream = "mt19937ar with seed";
seed = 666;
ntn_tdl_delay_profiles = ["A" "B" "C" "D"];
if do_task1
use_t1_as_t4 = false;
task1;
end
if do_task2 || do_task3_1
if do_task2 && do_task3_1
task2ProgressLabel = "Task 2 / Task 3.1";
elseif do_task3_1
task2ProgressLabel = "Task 3.1";
else
task2ProgressLabel = "Task 2";
end
use_pilot_tracking = false;
task2;
results_apep4000_npt = results(apep_values == 4000, :);
use_pilot_tracking = true;
task2;
results_apep4000_pt = results(apep_values == 4000, :);
clear task2ProgressLabel;
end
if do_task3_1
% plot for 3.1
figure;
semilogy(snrs, results_apep4000_npt, ['-' 'o']);
hold on;
semilogy(snrs, results_apep4000_pt, ['-' 'x']);
hold on;
grid on;
xlabel('SNR (dB)');
ylabel('PER');
dataStr = ["no pilot tracking" "pilot tracking"];
legend(dataStr, 'Location', 'NorthEastOutside');
title('PER over SNR for APEP 4000, usage of pilot tracking comparision, CBW20, NTN-TDL-C');
end
if do_task3_2
use_pilot_tracking = false;
task3;
use_pilot_tracking = true;
task3;
end
if do_task3_2_simple_calc
carrier_frequencies = [1e9 2.4e9 5e9 5.8e9 6e9 12e9 24e9 60e9];
meanDopplerShifts = zeros(1, numel(carrier_frequencies));
parfor f_idx = 1 : numel(carrier_frequencies)
dopplerShifts = arrayfun(@(el) dopplerShiftCircularOrbit(el, leo_altitude, 0, carrier_frequencies(f_idx)), elevationAngles);
meanDopplerShifts(f_idx) = mean(dopplerShifts);
end
% direct markdown insertable
disp("| Frequency | Mean Doppler Shift | Normalized Carrier Frequency Offset epsilon")
disp("|:---:|:---:|:---|")
for f_idx = 1 : numel(carrier_frequencies)
fprintf("| %.1f GHz | ~%.2fkHz | ~%.2f |\n", carrier_frequencies(f_idx) / 1e9, meanDopplerShifts(f_idx) / 1e3, meanDopplerShifts(f_idx) / wifi_be_subcarrier_spacing);
end
end
if do_task4_1
use_t1_as_t4 = true;
task1;
end
if do_task4_2
task4;
end
if do_task5_1 || do_task5_2
task5;
end