В этом примере показано, как выполнить моделирование на уровне системы, ориентированное на PHY, для IEEE ® 802.11ax™. Часть (A) проверяет сценарий моделирования, характеристики радиосвязи и крупномасштабную модель замирания путем сравнения с опубликованными результатами калибровки. Часть (В) оценивает частоту ошибок пакетов сети 802.11ax путем моделирования отдельных линий связи между активными узлами в соответствии с базовой схемой оценки свободного канала.
В этом примере производительность сети 802.11ax [1] в жилом квартирном блоке оценивается с помощью моделирования на уровне PHY.
Сценарий моделирования жилых кварталов указан в [2]. Это состоит из здания с пятью этажами, и двадцать 10 м x 10 м x 3 м квартиры на этаж. Каждая квартира имеет точку доступа (AP) и одну или несколько станций (STA), размещенных в случайных xy-местоположениях, процесс, называемый «отбрасывающими» узлами. Это создает базовый набор услуг (BSS) на квартиру, которому случайным образом назначается один из трех каналов. Сценарий моделирования определяет крупномасштабную модель потерь траектории на основе расстояния между узлами и количества пересекаемых стен и перекрытий.

Для этого примера используется методология оценки TGax [3] для моделирования системы PHY:
Точки доступа и STA случайным образом «отбрасываются» в рамках сценария.
Для каждой пары узлов вычисляется крупномасштабная потеря тракта.
Выполняется одно или несколько «событий передачи». Каждое событие передачи состоит из выбора активных AP и STA на основе правил доступа к каналу и определения рабочих характеристик каждой линии связи.
Этот пример состоит из двух частей:
В части (А), стадии «калибровки», отношение сигнал-помеха-плюс-шум (SINR) вычисляется для множества «отбрасываний», предполагая передачи, создающие помехи нисходящей линии связи. SINR фиксирует долгосрочные характеристики радиосвязи. Кумулятивная функция распределения (CDF) SINR сравнивается с опубликованными результатами группы задач TGax [4].
В части (B), стадии «моделирования на уровне системы PHY», для каждого события передачи PHY-уровень моделируется для отдельных линий связи. Базовая схема оценки свободного канала (CCA) используется для управления тем, какие AP являются активными. Генерируются и объединяются формы сигналов для интересующего сигнала и помех, нарушенных моделями канала замирания. Результирующие пакеты обрабатываются приемником для восстановления интересующего пакета. Вычисляется средняя частота ошибок пакетов для сети.
Две части этого примера можно отключить с помощью параметров calibrate и systemLevelSimulation. Рисунок, отображающий сценарии моделирования, узлы, активные связи и пересечения, отображается при showScenarioPlot является правдой.
calibrate = true; % To execute Part A calibration test systemLevelSimulation = true; % To execute Part B system-level simulation showScenarioPlot = true; % To show dynamic simulation plotting updates
Основные параметры моделирования определяются как принадлежащие физическому уровню (PHY), уровню управления доступом к среде (MAC), сценарию или моделированию. В этом примере предполагается, что параметры PHY и MAC одинаковы для всех узлов.
PHYParameters = struct; PHYParameters.TxPower = 20; % Transmitter power in dBm PHYParameters.TxGain = 0; % Transmitter antenna gain in dBi PHYParameters.RxGain = -2; % Receiver antenna gain in dBi PHYParameters.NoiseFigure = 7; % Receiver noise figure in dB PHYParameters.NumTxAntennas = 1; % Number of transmitter antennas PHYParameters.NumRxAntennas = 1; % Number of receiver antennas PHYParameters.ChannelBandwidth = 'CBW80'; % Bandwidth of system PHYParameters.TransmitterFrequency = 5e9; % Transmitter frequency in Hz MACParameters = struct; MACParameters.NumChannels = 3; % Number of non-overlapping channels MACParameters.CCALevel = -70; % Transmission threshold in CCA algorithm (dBm)
Параметры сценария определяют размеры и планировку жилого дома по [3].
% Number of Rooms in [x,y,z] directions ScenarioParameters = struct; ScenarioParameters.BuildingLayout = [10 2 5]; % Size of each room in meters [x,y,z] ScenarioParameters.RoomSize = [10 10 3]; % Number of receivers per room. Note that only one receiver (STA) can be % active at any given time. ScenarioParameters.NumRxPerRoom = 1;
NumDrops и NumTxEventsPerDrop параметры управляют длиной моделирования. В этом примере эти параметры конфигурируются для короткого моделирования, но для значимых результатов они должны быть увеличены.
«Отбрасывание» случайным образом помещает передатчики и приемники в сценарий и выбирает канал для BSS. Событие «передачи» случайным образом выбирает передатчики и приемники для передач в соответствии с основными правилами доступа к каналу.
SimParameters = struct; SimParameters.NumDrops = 3; SimParameters.NumTxEventsPerDrop = 2;
Перед основной частью моделирования объекты участка передатчика txsite создаются и присваиваются имена комнат формы «Room #» для удобства использования. Предполагается один датчик (AP) на помещение. Каждый передатчик считается изотропным.
% Total number of transmitters, assuming one transmitter (tx) per room numTx = prod(ScenarioParameters.BuildingLayout); % Create transmitter sites with and isotropic antenna element roomNames = strings(1,numTx); for siteInd = 1:numTx roomNames(siteInd) = "Room " + siteInd; end txs = txsite('cartesian','Name',roomNames,... 'TransmitterFrequency',PHYParameters.TransmitterFrequency, ... 'TransmitterPower',10.^((PHYParameters.TxPower+PHYParameters.TxGain-30)/10),... 'Antenna','isotropic');
Объекты сайта получения rxsite создаются и присваиваются имена формы «Room # -STA #» для удобства использования. Параметр «Сценарий»NumRxPerRoom используется для определения количества приемников (STA) в каждой комнате. Каждый приемник считается изотропным.
% Total number of receivers, assuming one transmitter (tx) per room numRx = numTx*ScenarioParameters.NumRxPerRoom; % Create receiver sites roomNames = strings(1,numRx); for siteInd = 1:numRx roomNames(siteInd) = "Room " + (mod(siteInd-1,numTx)+1) + "-" + ceil(siteInd/numTx); end rxs = rxsite('cartesian','Name',roomNames,'Antenna','isotropic'); % Receiver noise power in dBm T = 290; % Temperature (Kelvin) k = physconst('Boltzmann'); % Boltzmann constant % Sample rate (Hz) fs = wlanSampleRate(wlanHESUConfig('ChannelBandwidth',PHYParameters.ChannelBandwidth)); rxNoisePower = 10*log10(k*T*fs)+30+PHYParameters.NoiseFigure;
В этом разделе сценарий моделирования, характеристики радиосвязи и крупномасштабная модель замирания проверяются путем выполнения калибровочного теста TGax Evaluation Methody Box 1 Test 2 Downlink Only [3]. Этот тест вычисляет SINR на всех приемниках (STA), предполагая, что все передатчики (AP) активны. В рамках моделирования выполняется многократное отбрасывание передатчиков и приемников. Один активный приемник выбирается на отбрасывание.
SINR для каждого приемника вычисляется и агрегируется по всем каплям, моделируемым для генерации кривой CDF. Эта кривая сравнивается с результатами калибровки, приведенными в [4].
График, показывающий положения узлов, активные связи и помехи связи, генерируется для каждого выделения. Отдельные каналы можно скрыть и отобразить на графике, щелкнув соответствующую запись легенды.
seed = rng(6); % Seed random number generator and store state if showScenarioPlot hGrid = tgaxBuildResidentialGrid(ScenarioParameters.RoomSize,ScenarioParameters.BuildingLayout, ... numTx,numRx,MACParameters.NumChannels); end if calibrate fprintf('Running calibration ...\n'); % Pre-allocate output output = struct; output.sinr = zeros(SimParameters.NumDrops,numTx); % for storing SINR values for drop = 1:SimParameters.NumDrops % Drop receivers in each room [association,txChannels,rxChannels,txPositions,rxPositions] = tgaxDropNodes( ... txs,rxs,ScenarioParameters,MACParameters.NumChannels); % All transmitters active activeTx = true(numTx,1); % Only pick one receiver per Room rxAlloc = randi([1 ScenarioParameters.NumRxPerRoom],numTx,1); activeRx = reshape(rxAlloc==1:ScenarioParameters.NumRxPerRoom,[],1); % Generate propagation model propModel = TGaxResidential('roomSize',ScenarioParameters.RoomSize); % Get the index of the transmitter for each receiver tnum = repmat((1:numTx),1,numRx/numTx); % SINR calculation - loop over each non-overlapping channel numChannels = numel(unique(txChannels)); for k = 1:numChannels % Use kth non-overlapping channel tind = txChannels == k; rind = false(size(activeRx)); rind(activeRx) = rxChannels(activeRx) == k; % Get the index of the transmitter of interest for each active receiver tsigind = tnum(rind); % Calculate SNR output.sinr(drop,tind) = sinr(rxs(rind),txs(tind),... 'ReceiverGain',PHYParameters.RxGain,... 'ReceiverNoisePower',rxNoisePower,... 'PropagationModel',propModel,... 'SignalSource',txs(tsigind)); end % Plot nodes and links if showScenarioPlot % update plot data mask = txChannels==rxChannels'; tgaxUpdatePlot(hGrid,txPositions,rxPositions,activeTx,activeRx,mask,txChannels,rxChannels, ... sprintf('Box 1 Test 2 "downlink only" calibration, drop #%d/%d',drop,SimParameters.NumDrops)); end end % Plot the CDF of SINR and compare with calibration curves tgaxCalibrationCDF(output.sinr,'SS1Box1Test2','Long-term Radio Characteristics'); fprintf('Calibration complete \n') end
Running calibration ... Calibration complete


В этом примере моделируется небольшое количество капель. Поэтому для более значимого сравнения следует увеличить количество имитируемых капель. Результат калибровки для 100 капель показан ниже:

В этом разделе сценарий и модель потери тракта, откалиброванные в части A, используются для выполнения моделирования на уровне системы, сфокусированного на PHY, и определения частоты ошибок пакетов для сети. Это моделирование описывается как PHY-сфокусированное, так как PHY не абстрагирован и MAC упрощен. Каждая активная линия связи моделируется с использованием обработки передатчика и приемника основной полосы частот. Очень простой MAC предполагает, что при каждом событии передачи все передатчики (AP) хотят передавать, и один приемник (STA) на BSS является получателем. Простой алгоритм CCA используется для управления доступом к каналу между передатчиками, как показано на рис. 4 в [3]. Алгоритм CCA позволяет использовать случайные передатчики, если мощность сигнала, принимаемого от уже активированных передатчиков, не превышает пороговое значение CCA. MACParameters.CCAThreshold.
Мощность принимаемого сигнала от всех возможных мешающих передатчиков вычисляется в каждом активном приемнике. Если мощность, принимаемая от мешающего передатчика, находится выше уровня шума приемника, то линия связи моделируется при обработке передатчика и приемника с полной полосой частот. Для каждой смоделированной линии связи генерируется однопользовательский пакет HE, который передается через стационарную модель канала внутри помещения TGax Model-D NLOS. В приемнике сигналы от представляющего интерес передатчика и всех мешающих передатчиков масштабируются ожидаемыми потерями на пути и объединяются для создания сигнала, содержащего интересующий сигнал плюс помехи. Все сигналы синхронизированы по времени. Приемник выполняет синхронизацию, демодуляцию и декодирование, чтобы попытаться восстановить полезную нагрузку. Декодированная полезная нагрузка сравнивается с PSDU, переданным в BSS, чтобы определить, был ли пакет успешно восстановлен.
В этом примере предполагается, что параметры передачи и канала одинаковы для всех узлов. Конфигурация передачи для всех пакетов - один пространственно-временной поток, никакое пространственно-временное блочное кодирование и 16-QAM rate-1/2 (МГЦ 3).
if systemLevelSimulation % Pre-allocate outputs output.numPkts = zeros(numRx,1); output.numPktErrors = zeros(numRx,1); output.sinrMeas = nan(numRx,SimParameters.NumTxEventsPerDrop,SimParameters.NumDrops); output.sinrEst = nan(numRx,SimParameters.NumTxEventsPerDrop,SimParameters.NumDrops); output.pktErrorRate = 0; % For each possible transmitter create a waveform configuration. In this % example the link and radio parameters are the same for all nodes. cfgHEBase = wlanHESUConfig; cfgHEBase.ChannelBandwidth = PHYParameters.ChannelBandwidth; % Channel bandwidth cfgHEBase.NumTransmitAntennas = PHYParameters.NumTxAntennas; % Number of transmit antennas cfgHEBase.SpatialMapping = 'Fourier'; % Spatial mapping matrix cfgHEBase.NumSpaceTimeStreams = 1; % Number of space-time streams cfgHEBase.GuardInterval = 0.8; % Guard interval duration cfgHEBase.HELTFType = 4; % HE-LTF compression mode cfgHEBase.APEPLength = 1e3; % Payload length in bytes cfgHEBase.ChannelCoding = 'LDPC'; % Channel coding cfgHEBase.MCS = 3; % Modulation and coding scheme cfgHE = cell(numTx,1); for txidx = 1:numTx cfgHE{txidx} = cfgHEBase; end fprintf('Running System Level Simulation ...\n') for drop = 1:SimParameters.NumDrops fprintf(' Running drop #%d/%d ...\n',drop,SimParameters.NumDrops); % Drop receivers in each room [association,txChannels,rxChannels,txPositions,rxPositions] = tgaxDropNodes( ... txs,rxs,ScenarioParameters,MACParameters.NumChannels); % Generate propagation model propModel = TGaxResidential('roomSize',ScenarioParameters.RoomSize); % Calculate signal strength for all links signalStrength = sigstrength(rxs,txs,propModel,'Type','power',... 'ReceiverGain',PHYParameters.RxGain); % all signal strengths in dBm % Threshold signals below noise level to reduce simulation time signalStrength(signalStrength < rxNoisePower) = -Inf; % Threshold signals that are not on same non-overlapping channel signalStrength(~(txChannels == rxChannels')) = -Inf; % Mask the transmitter-receiver links that are non-negligible to % simulate and get the linear indices nonnegligibleMask = signalStrength > -Inf; % Reset the non-negligible channels to create a new realization for the % current drop nonnegligibleIdx = find(nonnegligibleMask)'; % For each possible active link in a drop create a channel % configuration. In this example the link and radio parameters are the % same for all nodes. tgaxChan = cell(numel(nonnegligibleIdx),1); for i = 1:numel(nonnegligibleIdx) % Index of transmitter for a given link txIdx = mod(nonnegligibleIdx(i)-1,numTx)+1; % Channel configuration. The channel realization for each link is % different as the global random stream is used. tgaxChanBase = wlanTGaxChannel; tgaxChanBase.DelayProfile = 'Model-D'; tgaxChanBase.NumTransmitAntennas = cfgHE{txIdx}.NumTransmitAntennas; tgaxChanBase.NumReceiveAntennas = PHYParameters.NumRxAntennas; tgaxChanBase.TransmitReceiveDistance = 10; % Distance in meters for NLOS tgaxChanBase.ChannelBandwidth = cfgHE{txIdx}.ChannelBandwidth; tgaxChanBase.LargeScaleFadingEffect = 'None'; tgaxChanBase.EnvironmentalSpeed = 0; % m/s, stationary tgaxChanBase.SampleRate = fs; tgaxChanBase.NormalizeChannelOutputs = false; % Store in cell array and reset the channel to generate a new % response tgaxChan{i} = tgaxChanBase; reset(tgaxChan{i}); end for txevent = 1:SimParameters.NumTxEventsPerDrop fprintf(' Running transmission event #%d/%d ...\n',txevent,SimParameters.NumTxEventsPerDrop); % Determine active transmitters and receivers with Clear Channel Assessment [activeTx,activeRx] = tgaxCCA(signalStrength,MACParameters.CCALevel); % Plot scenario and links if showScenarioPlot tgaxUpdatePlot(hGrid,txPositions,rxPositions,activeTx,activeRx,nonnegligibleMask,txChannels,rxChannels, ... sprintf('PHY System-Level Simulation, Drop #%d/%d, Transmission Event #%d/%d', ... drop,SimParameters.NumDrops,txevent,SimParameters.NumTxEventsPerDrop)); end % Extract elements for active links using activeTx and activeRx cfgHEActive = cfgHE(activeTx); associationActive = association(activeTx,activeRx); nonnegligibleMaskActive = nonnegligibleMask(activeTx,activeRx); signalStrengthActive = signalStrength(activeTx,activeRx); % Create array containing active channels tgaxChanActive = cell(size(associationActive)); matchIdx = nonnegligibleIdx==find(activeTx&activeRx'); tgaxChanActive(nonnegligibleMaskActive) = tgaxChan(any(matchIdx,1)); % Generate a waveform for each non-negligible active link and % combine waveforms for each receiver [rxWavs,txPSDUActive,signalPower,interfPower] = tgaxGenerateRxWaveforms( ... cfgHEActive,tgaxChanActive,nonnegligibleMaskActive,signalStrengthActive,associationActive); % Run PHY link simulation for each link and determine if the packet % has been decoded successfully. The estimated interference power % is passed to the receiver in the place of an interference power % measurement algorithm. numActiveRxs = sum(activeRx); pktError = false(numActiveRxs,1); sinrMeas = nan(numActiveRxs,1); for rxIdx = 1:numActiveRxs [pktError(rxIdx),sinrMeas(rxIdx)] = tgaxModelPHYLink( ... rxWavs{rxIdx},cfgHEActive{rxIdx},rxNoisePower,interfPower(rxIdx),txPSDUActive{rxIdx}); end % Store output for active receivers output.numPktErrors(activeRx) = output.numPktErrors(activeRx)+pktError; output.numPkts(activeRx) = output.numPkts(activeRx) + 1; output.sinrMeas(activeRx,txevent,drop) = sinrMeas; % Calculate the expected SINR at each receiver sinrEst = 10*log10(signalPower./(interfPower+10^((rxNoisePower-30)/10))); output.sinrEst(activeRx,txevent,drop) = sinrEst; end end % Calculate average packet error rate output.pktErrorRate = sum(output.numPktErrors)/sum(output.numPkts); disp('Simulation complete') disp(['Average packet error rate for transmitters: ' num2str(output.pktErrorRate)]); end rng(seed); % Restore random state
Running System Level Simulation ...
Running drop #1/3 ...
Running transmission event #1/2 ...
Running transmission event #2/2 ...
Running drop #2/3 ...
Running transmission event #1/2 ...
Running transmission event #2/2 ...
Running drop #3/3 ...
Running transmission event #1/2 ...
Running transmission event #2/2 ...
Simulation complete
Average packet error rate for transmitters: 0.054152

Моделирование на уровне PHY, продемонстрированное в этом примере, можно использовать для изучения влияния параметров на уровне PHY на производительность системы. Например, график ниже показывает среднюю частоту ошибок пакетов в сети для различных значений порога CCA для 50 отбрасываний и 2 событий передачи на отбрасывание.

В этом примере используются следующие вспомогательные функции:
IEEE P802.11ax™/D4.1 Проект стандарта для информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY) - Поправка 6: Усовершенствования для высокой эффективности WLAN.
IEEE 802.11-14/0980r16 - Сценарии моделирования TGax.
IEEE 802.11-14/0571r12 - Методика оценки 11ax.
IEEE 802.11-14/0800r30 - Результаты калибровки блока 1 и блока 2.