[cfgEHT, simParameters, channel, chInfo, maxChDelay, satelliteDopplerShift, chanBW] = ... create_baseline_configuration(ntn_tdl_delay_profiles(3), bandwidth, false, "None", ... carrier_frequency, 0, ... 0, leo_altitude, random_stream, ... seed, tx_antenna_count, ... rx_antenna_count, apep); if use_t1_as_t4 mcs_values_t1 = mcs_values; progressTitle = "Task 4.1"; else mcs_values_t1 = [2]; progressTitle = "Task 1"; meanSlantRange = mean(slantRanges); meanSatelliteDopplerShift = mean(dopplerShifts); meanNormalizedCFO = meanSatelliteDopplerShift / wifi_be_subcarrier_spacing; disp("Mean Elevation Angle: " + meanElevationAngle + "°") disp("Mean Slant Range: " + meanSlantRange + "m") disp("Mean Satellite Doppler Shift: " + meanSatelliteDopplerShift + "Hz") disp("Normalized CFO: " + meanNormalizedCFO) end errorCounts = zeros(numel(mcs_values_t1), numel(snrs)); packetCounts = zeros(numel(mcs_values_t1), numel(snrs)); errorRates = zeros(numel(mcs_values_t1), numel(snrs)); cfrMagnitudesBySnr = cell(numel(mcs_values_t1), numel(snrs)); progressStartText = "Starting MCS sweep"; f = waitbar(0, progressStartText, "Name", progressTitle); progressTotal = numel(mcs_values_t1) * numel(snrs); progressQueue = parallel.pool.DataQueue; parfor_waitbar(f, progressTotal, progressStartText, true); progressListener = afterEach(progressQueue, @(info) parfor_waitbar(f, progressTotal, info, false)); for imcs = 1 : numel(mcs_values_t1) currentMcs = mcs_values_t1(imcs); cfgEHT.User{1}.MCS = currentMcs; errorCountsForMcs = zeros(1, numel(snrs)); packetCountsForMcs = zeros(1, numel(snrs)); errorRatesForMcs = zeros(1, numel(snrs)); cfrMagnitudesForMcs = cell(1, numel(snrs)); parfor snr_idx = 1 : length(snrs) local_channel = clone(channel); [errorCount, packetCount, cfrMagnitudes] = simulateTransmission(cfgEHT, local_channel, maxChDelay, snrs(snr_idx), packets_per_snr, maxNumErrors, simParameters, chanBW, snr_idx, elevationAngles); errorCountsForMcs(snr_idx) = errorCount; packetCountsForMcs(snr_idx) = packetCount; errorRatesForMcs(snr_idx) = errorCount / packetCount; cfrMagnitudesForMcs{snr_idx} = cfrMagnitudes; send(progressQueue, sprintf("MCS %d | SNR %.1f dB", currentMcs, snrs(snr_idx))); end errorCounts(imcs, :) = errorCountsForMcs; packetCounts(imcs, :) = packetCountsForMcs; errorRates(imcs, :) = errorRatesForMcs; cfrMagnitudesBySnr(imcs, :) = cfrMagnitudesForMcs; end delete(progressListener); if ishandle(f) close(f); end markers = 'ox*sd^v>