802.11ax Симуляция уровня системы, ориентированного на PHY

В этом примере показано, как выполнить симуляцию системного уровня для 802.11ax™ IEEE ®. Часть (A) проверяет сценарий симуляции, характеристики радио и крупномасштабную модель замирания путем сравнения с опубликованными результатами калибровки. Часть (B) оценивает частоту ошибок пакета сети 802.11ax путем симуляции отдельных ссылок связи между активными узлами в рамках базовой схемы оценки четкого канала.

Введение

В этом примере эффективность сети 802.11ax [1] в жилом квартирном блоке оценивается с помощью симуляции уровня системы, ориентированного на PHY.

Сценарий симуляции жилого квартирного блока задан в [2]. Это состоит из создания с пятью этажами и двадцатью 10 м x 10 м x 3 м квартир на этаж. Каждая квартира имеет точку доступа (AP) и одну или несколько станций (STA), помещенных в случайные местоположения xy, процесс, называемый узлами 'droping'. Это создает базовый набор услуг (BSS) на квартиру, которому случайным образом назначается один из трех каналов. Сценарий симуляции задает крупномасштабную модель потерь пути, основанную на расстоянии между узлами и количестве пройденных стенок и перекрытий.

Для этого примера применяется методология оценки TGax [3] для 'PHY System Simulation':

  1. AP и STA случайным образом 'отбрасываются' в рамках сценария.

  2. Для каждой пары узлов вычисляются крупномасштабные потери пути.

  3. Выполняется одно или несколько «событий передачи». Каждое событие передачи состоит из выбора активных AP и STA на основе правил доступа к каналу и определения эффективности каждой ссылки.

Этот пример состоит из двух частей:

В части (A), стадии 'calibration', отношение сигнал/помеха плюс шум (SINR) вычисляется для нескольких 'drops', принимая нисходящие интерферирующие передачи. SINR захватывает долгосрочные характеристики радио. Кумулятивная функция распределения (CDF) SINR сравнивается с опубликованными результатами целевой группы TGax [4].

В части (B), стадии 'PHY- симуляции', для каждого события передачи слой PHY моделируется для отдельных ссылок. Базовая схема оценки четкого канала (CCA) используется, чтобы контролировать, какие AP активны. Формы волны для интересующего сигнала и помехи, нарушенные затухающими моделями канала, генерируются и объединяются. Получившиеся пакеты обрабатываются приемником для восстановления интересующего пакета. Вычисляется средняя вероятность пакетной ошибки для сети.

Две части этого примера могут быть отключены с помощью параметров calibrate и systemLevelSimulation. Рисунок, отображающий сценарии симуляции, узлы, активные ссылки и интерференцию, отображается при showScenarioPlot является true.

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;

The NumDrops и NumTxEventsPerDrop параметры управляют длиной симуляции. В данном примере эти параметры сконфигурированы для короткой симуляции, но для значимых результатов они должны быть увеличены.

A 'drop' случайным образом помещает передатчики и приемники в сценарий и выбирает канал для BSS. Событие 'transmission' случайным образом выбирает передатчики и приемники для передач в соответствии с основными правилами доступа к каналу.

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 #' для удобства ссылки. Параметр Scenario 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;

Часть A - Выравнивание долгосрочных характеристик радио

В этом разделе сценарий симуляции, характеристики радио и крупномасштабная модель замирания проверяются путем выполнения калибровочного теста TGax Evaluation Methodology Box 1 Test 2 Nowlink 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 капель показан ниже:

Часть B - Симуляция уровня системы, ориентированное на PHY

В этом разделе сценарий и модель потерь пути, калиброванная в части А, используются для выполнения симуляции уровня системы, ориентированного на PHY, и определения частоты ошибок пакета для сети. Эта симуляция описывается как PHY-сфокусированная, поскольку PHY не абстрагируется и MAC упрощается. Каждая активная ссылка моделируется с помощью обработки передатчика основной полосы частот и приемника. Очень простой MAC принимает при каждом событии передачи все передатчики (AP) хотят передать, и один приемник (STA) на BSS является получателем. Простой алгоритм CCA используется для управления доступом к каналу между передатчиками, как указано на фигуре 4 [3]. Алгоритм CCA включает случайные передатчики, если степень сигнала, принятая от передатчиков, которые уже активированы, не превышает порог CCA, MACParameters.CCAThreshold.

Принятая степень сигнала от всех возможных интерферирующих передатчиков вычисляется в каждом активном приемнике. Если мощность приемника от интерферирующего передатчика выше уровня шума получателя, то ссылка моделируется с полной обработкой передатчика основной полосы частот и приемника. Для каждого смоделированного канала генерируется и передается через модель стационарного внутреннего канала NLOS TGax Model-D. В приемнике формы волны от интересующего передатчика и всех интерферирующих передатчиков масштабируются ожидаемыми потерями пути и объединяются, чтобы создать форму волны, содержащую интересующий сигнал плюс интерференция. Все формы волны выровнены по времени. Приемник выполняет синхронизацию, демодуляцию и декодирование, чтобы попытаться восстановить полезную нагрузку. Декодированная полезная нагрузка сравнивается с PSDU, переданным в BSS, чтобы определить, был ли пакет успешно восстановлен.

В этом примере параметры передачи и канала приняты одинаковыми для всех узлов. Строение передачи для всех пакетов является одним пространственно-временным потоком, без пространственно-временного блочного кодирования и скорости 16-QAM-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); % 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 событий передачи на падение.

Приложение

В этом примере используются следующие вспомогательные функции:

Избранная библиография

  1. IEEE P802.11ax™/D4.1 Проект стандарта на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического Слоя (PHY) - Поправка 6: Усовершенствования для высокой Эффективности WLAN.

  2. IEEE 802.11-14/0980r16 - Сценарии симуляции TGax.

  3. IEEE 802.11-14/0571r12 - 11ax Методика оценки.

  4. IEEE 802.11-14/0800r30 - Результаты калибровки коробок 1 и 2.