apep = 8000; carrier_frequencies = [1e9 2.4e9 5e9 5.8e9 6e9 12e9 24e9 60e9]; results = zeros(numel(carrier_frequencies), numel(snrs)); progressTitle = "Task 3.2"; progressStartText = "Starting carrier frequency sweep"; f = waitbar(0, progressStartText, "Name", progressTitle); progressTotal = numel(carrier_frequencies) * numel(snrs); progressQueue = parallel.pool.DataQueue; parfor_waitbar(f, progressTotal, progressStartText, true); progressListener = afterEach(progressQueue, @(info) parfor_waitbar(f, progressTotal, info, false)); for f_idx = 1 : numel(carrier_frequencies) currentCarrierFrequency = carrier_frequencies(f_idx); [cfgEHT, simParameters, channel, chInfo, maxChDelay, satelliteDopplerShift, chanBW] = ... create_baseline_configuration(ntn_tdl_delay_profiles(3), bandwidth, false, "None", ... currentCarrierFrequency, 0, ... 0, leo_altitude, random_stream, ... seed, tx_antenna_count, ... rx_antenna_count, apep); cfgEHT.User{1}.MCS = mcs_t1; parfor snr_idx = 1 : length(snrs) local_channel = clone(channel); if use_pilot_tracking [errorCount, packetCount, cfrMagnitudes] = simulateTransmission(cfgEHT, local_channel, maxChDelay, snrs(snr_idx), packets_per_snr, maxNumErrors, simParameters, chanBW, snr_idx, elevationAngles, true); else [errorCount, packetCount, cfrMagnitudes] = simulateTransmission(cfgEHT, local_channel, maxChDelay, snrs(snr_idx), packets_per_snr, maxNumErrors, simParameters, chanBW, snr_idx, elevationAngles); end results(f_idx, snr_idx) = errorCount / packetCount; send(progressQueue, sprintf("f_c %.1f GHz | SNR %.1f dB", currentCarrierFrequency / 1e9, snrs(snr_idx))); end end delete(progressListener); if ishandle(f) close(f); end markers = 'ox*sd^v>