Этот пример показывает, как выполнить PHY-фокусируемую симуляцию уровня системы для IEEE® 802.11ax™. Часть (A) подтверждает сценарий симуляции, радио-характеристики и крупномасштабную исчезающую модель путем сравнения с опубликованными калибровочными результатами. Часть (B) оценивает пакетный коэффициент ошибок 802.11ax сеть путем симуляции отдельных ссылок между активными узлами в соответствии с основной ясной схемой оценки канала.
В этом примере производительность 802.11ax [1] сеть в жилом многоквартирном доме оценена с помощью PHY-фокусируемой симуляции уровня системы.
Жилой сценарий симуляции многоквартирного дома задан в [2]. Это состоит из создания с пятью этажами и квартирами на двадцать 10 м x 10 м x 3 м на пол. Каждая квартира имеет точку доступа (AP) и одну или несколько станций (STAs), помещенный в случайные xy-местоположения, процесс, называемый 'понижающимися' узлами. Это создает основную услугу установлена (BSS) на квартиру, которая случайным образом присвоена один из трех каналов. Сценарий симуляции задает крупномасштабную потерю пути, основанную на модели на расстоянии между узлами и количестве стен и пересеченных этажей.
Методология [3] оценки TGax для 'Системной симуляции PHY' сопровождается для этого примера:
APS и STAs случайным образом 'пропущены' в рамках сценария.
Для каждой пары узлов вычисляется крупномасштабная потеря пути.
Выполняются одно или несколько 'событий передачи'. Каждое событие передачи состоит из выбора активного APS и STAs на основе правил доступа к каналу и определения производительности каждой ссылки.
Этот пример состоит из двух частей:
Частично (A), 'калибровочный' этап, сигнал к интерференции плюс шумовое отношение (SINR) вычисляется для нескольких 'отбрасываний', принимая нисходящий канал, вмешивающийся передачи. SINR получает долгосрочные радио-характеристики. Кумулятивная функция распределения (CDF) SINR по сравнению с опубликованными результатами Исследовательской группы TGax [4].
Частично (B), 'этап' симуляции уровня системы PHY, для каждого события передачи слой PHY моделируется для отдельных ссылок. Основная схема ясной оценки канала (CCA) используется, чтобы управлять, какой APS активны. Формы волны для сигнала интереса и интерференции, которой повреждают путем исчезновения моделей канала, сгенерированы и объединены. Результирующие пакеты обрабатываются получателем, чтобы восстановить пакет интереса. Средний пакетный коэффициент ошибок для сети вычисляется.
Две части этого примера могут быть отключены с помощью параметров 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('Name',roomNames,... 'TransmitterFrequency',PHYParameters.TransmitterFrequency, ... 'TransmitterPower',10.^((PHYParameters.TxPower+PHYParameters.TxGain-30)/10),... 'Antenna',phased.IsotropicAntennaElement);
Получить сайт возражает, что rxsite
сгенерирован и присвоенные имена формы 'Room#-STA#' для простоты ссылки. NumRxPerRoom
параметра Сценария используется, чтобы задать, сколько получателей (STAs) присутствует в каждой комнате. Каждый получатель принят, чтобы быть изотропным.
% 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('Name',roomNames,'Antenna',phased.IsotropicAntennaElement); % 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;
В этом разделе сценарий симуляции, радио-характеристики и крупномасштабная исчезающая модель проверяются путем выполнения Теста Поля 1 Методологии Оценки TGax 2 Нисходящих канала Только калибровочный тест [3]. Этот тест вычисляет SINR во всех получателях (STAs), принимающий, что все передатчики (APS) активны. Несколько отбрасываний передатчиков и получателей выполняются как часть симуляции. Один активный получатель выбран на отбрасывание.
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), ... 'Map','none'); 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 tgaxPlotCalibrationCDF(output.sinr); fprintf('Calibration complete \n') end
Running calibration ... Calibration complete
Этот пример моделирует небольшое количество отбрасываний. Поэтому для более значимого сравнения число моделируемых отбрасываний должно быть увеличено. Калибровочный результат для 100 отбрасываний показывают ниже:
В этом разделе сценарий и модель потери пути, калиброванная частично A, используются, чтобы выполнить PHY-фокусируемую симуляцию уровня системы и определить пакетный коэффициент ошибок для сети. Эта симуляция описана, как PHY-фокусируется, когда PHY не абстрагирован, и MAC упрощен. Каждая активная ссылка моделируется с помощью основополосной обработки передатчика и получателя. Очень простой MAC принимает в каждом событии передачи все передатчики (APS) желание передать, и один получатель (STA) на BSS является получателем. Простой алгоритм CCA используется, чтобы управлять доступом к каналу между передатчиками, как задано в рисунке 4 [3]. Алгоритм CCA включает случайные передатчики, если степень сигнала, полученная от передатчиков, которые были уже активированы, не превышает порог CCA, MACParameters.CCAThreshold
.
Полученная степень сигнала от всех возможных вмешивающихся передатчиков вычисляется в каждом активном получателе. Если полученная степень от вмешивающегося передатчика выше уровня шума получателя, то ссылка моделируется с полной основополосной обработкой передатчика и получателя. Для каждой смоделированной ссылки HE однопользовательский пакет сгенерирован и проходится Образцовый-D NLOS TGax стационарная внутренняя модель канала. В получателе формы волны от передатчика интереса и всех вмешивающихся передатчиков масштабируются ожидаемой потерей пути и объединяются, чтобы создать форму волны, содержащую сигнал интереса плюс интерференция. Все формы волны являются выровненным временем. Получатель выполняет синхронизацию, демодуляцию, и декодирующий, чтобы попытаться восстановить полезную нагрузку. Декодируемая полезная нагрузка сравнивается с PSDU, переданным в BSS, чтобы определить, был ли пакет восстановлен успешно.
В этом примере передача и параметры канала приняты, чтобы быть тем же самым для всех узлов. Настройка передачи для всех пакетов является одним пространственно-временным потоком, никаким пространственно-временным блочным кодированием и 16-QAM rate-1/2 (MCS 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,'Map','none'); % 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™/D3.1 для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 6: Улучшения для Высокой эффективности WLAN.
IEEE 802.11-14/0980r16 - Сценарии Симуляции TGax.
IEEE 802.11-14/0571r12 - 11ax Методология Оценки.
IEEE 802.11-14/0800r30 - Поле 1 и Калибровочные Результаты Поля 2.