% this code is in no manner clean, much code copy because I was lazy % use these fields to select the task that should be calculated do_task1 = true; 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