114 lines
2.9 KiB
Matlab
114 lines
2.9 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 = true;
|
|
do_task4_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
|