802.11ax передают в нисходящем направлении OFDMA и многопользовательскую симуляцию пропускной способности MIMO

Этот пример показывает передачу, и получите обработку для IEEE® 802.11ax™ многопользовательская нисходящая передача по внутреннему исчезающему каналу TGax. Симулированы три режима передачи: OFDMA, MU-MIMO и комбинация OFDMA и MU-MIMO.

Введение

Этот пример симулирует сценарий передачи точки доступа (AP) к четырем станциям (STAs) одновременно с помощью высокой эффективности (HE) многопользовательские (MU) пакеты формата, как задано в IEEE P802.11ax™/D4.1 [1].

HE многопользовательский формат может быть сконфигурирован для передачи OFDMA, передачи MU-MIMO или комбинации двух. Эта гибкость позволяет пакету HE-MU передавать отдельному пользователю по целой полосе, многому пользователю по различным частям полосы (OFDMA) или многому пользователю по той же части полосы (MU-MIMO).

Три режима передачи сравнены для многопользовательского нисходящего сценария:

  1. OFDMA - каждый из этих четырех пользователей присвоен, отдельный модуль ресурса (RU) и передача являются beamformed.

  2. MU-MIMO - все четыре пользователя совместно используют полную полосу.

  3. Смешанный MU-MIMO и OFDMA - Два пользователя совместно используют один RU в настройке MU-MIMO, и остающиеся два пользователя присвоены один RU каждый.

Для подробного обзора 802.11ax форматы, смотрите 802.11ax пример Генерации сигналов.

Для каждого режима передачи AP передает пакет 10 пакетов, и каждый STA демодулирует и декодирует данные, предназначенные для него. Развитие TGax внутренний канал MIMO с AWGN моделируется между AP и каждым STA. Необработанная пропускная способность AP обеспечивается как метрика, чтобы сравнить режимы передачи и вычисляется путем подсчета количества пакетов переданным успешно ко всему STAs. Симуляция повторяется для различных потерь на пути. В этом примере все передачи являются beamformed. Поэтому прежде, чем симулировать передачу данных, канал между AP и каждой станцией звучат под отличными состояниями получить информацию о состоянии канала.

Настройка передачи

wlanHEMUConfig объект используется, чтобы сконфигурировать передачу пакета HE-MU. Три объекта настройки передачи заданы, чтобы задать три различных передачи AP:

  1. cfgMUMIMO настройка MU-MIMO, которая состоит из одного RU с 242 тонами с 4 пользователями. У каждого пользователя есть один пространственно-временной поток.

  2. cfgOFDMA настройка OFDMA, которая состоит из четырех RU с 52 тонами, каждого с одним пользователем. У каждого пользователя есть два пространственно-временных потока.

  3. cfgMixed смешанный OFDMA и настройка MU-MIMO, которая состоит из одного RU с 106 тонами, совместно использованного двумя пользователями, и двумя RU с 52 тонами, каждым с одним пользователем. Пользователи MU-MIMO у каждого есть один пространственно-временной поток и пользователи OFDMA, у каждого есть два пространственно-временных потока.

Полоса пропускания канала на 20 МГц используется для всех передач. Другие параметры передачи, такие как APEPLength и MCS являются тем же самым для всех пользователей во всех настройках.

Во-первых, настройка MU-MIMO задана. Индекс выделения 195 задает один RU с 242 тонами, с четырьмя пользователями в MU-MIMO. Для описания выбора индекса выделения смотрите 802.11ax пример Генерации сигналов.

% MU-MIMO configuration - 4 users on one 242-tone RU
cfgMUMIMO = wlanHEMUConfig(195);

График выделения показывает, что один RU присвоен всем четырем пользователям.

showAllocation(cfgMUMIMO);

Параметры передачи для каждого пользователя теперь сконфигурированы.

numTx = 6; % Number of transmit antennas
guardInterval = 0.8; % Guard interval in Microseconds

% Configure common parameters for all users
cfgMUMIMO.NumTransmitAntennas = numTx;
cfgMUMIMO.GuardInterval = guardInterval;

% Configure per user parameters
% STA #1
cfgMUMIMO.User{1}.NumSpaceTimeStreams = 1;
cfgMUMIMO.User{1}.MCS = 4;
cfgMUMIMO.User{1}.APEPLength = 1000;
% STA #2
cfgMUMIMO.User{2}.NumSpaceTimeStreams = 1;
cfgMUMIMO.User{2}.MCS = 4;
cfgMUMIMO.User{2}.APEPLength = 1000;
% STA #3
cfgMUMIMO.User{3}.NumSpaceTimeStreams = 1;
cfgMUMIMO.User{3}.MCS = 4;
cfgMUMIMO.User{3}.APEPLength = 1000;
% STA #4
cfgMUMIMO.User{4}.NumSpaceTimeStreams = 1;
cfgMUMIMO.User{4}.MCS = 4;
cfgMUMIMO.User{4}.APEPLength = 1000;

Затем настройка OFDMA задана. Индекс выделения 112 задает четыре RU с 52 тонами, каждый служащий отдельному пользователю.

% OFDMA configuration - 4 users, each on a 52-tone RU
cfgOFDMA = wlanHEMUConfig(112);

График выделения показывает эти четыре RU, каждого с отдельным пользователем. Когда сравнение этого выделения строит к полному графику полосы MU-MIMO, очевидно, что общее количество используемых поднесущих (4x52 = 208 поднесущих) меньше выделения MU-MIMO (242 поднесущие). Меньше количества поднесущих позволяет защиту между каждым пользователем OFDMA.

showAllocation(cfgOFDMA);

Параметры передачи для каждого пользователя теперь сконфигурированы.

% Configure common parameters for all users
cfgOFDMA.NumTransmitAntennas = numTx;
cfgOFDMA.GuardInterval = guardInterval;

% Configure per user parameters
% STA #1 (RU #1)
cfgOFDMA.User{1}.NumSpaceTimeStreams = 2;
cfgOFDMA.User{1}.MCS = 4;
cfgOFDMA.User{1}.APEPLength = 1000;
% STA #2 (RU #2)
cfgOFDMA.User{2}.NumSpaceTimeStreams = 2;
cfgOFDMA.User{2}.MCS = 4;
cfgOFDMA.User{2}.APEPLength = 1000;
% STA #3 (RU #3)
cfgOFDMA.User{3}.NumSpaceTimeStreams = 2;
cfgOFDMA.User{3}.MCS = 4;
cfgOFDMA.User{3}.APEPLength = 1000;
% STA #4 (RU #4)
cfgOFDMA.User{4}.NumSpaceTimeStreams = 2;
cfgOFDMA.User{4}.MCS = 4;
cfgOFDMA.User{4}.APEPLength = 1000;

Наконец, смешанный MU-MIMO и настройка OFDMA заданы. Индекс выделения 25 задает RU с 106 тонами с двумя пользователями, и два RU с 52 тонами, каждого с одним пользователем.

% Mixed OFDMA and MU-MIMO configuration
cfgMixed = wlanHEMUConfig(25);

График выделения показывает RU три, один с 2 пользователями (MU-MIMO) и другие с одним пользователем каждый (OFDMA).

showAllocation(cfgMixed);

Параметры передачи для каждого пользователя теперь сконфигурированы.

% Configure common parameters for all users
cfgMixed.NumTransmitAntennas = numTx;
cfgMixed.GuardInterval = guardInterval;

% Configure per user parameters
% RU #1 has two users (MU-MIMO) and a total of 2 STS (1 per user)
% STA #1 (RU #1)
cfgMixed.User{1}.NumSpaceTimeStreams = 1;
cfgMixed.User{1}.MCS = 4;
cfgMixed.User{1}.APEPLength = 1000;
% STA #2 (RU #1)
cfgMixed.User{2}.NumSpaceTimeStreams = 1;
cfgMixed.User{2}.MCS = 4;
cfgMixed.User{2}.APEPLength = 1000;

% The remaining two users are OFDMA
% STA #3 (RU #2)
cfgMixed.User{3}.NumSpaceTimeStreams = 2;
cfgMixed.User{3}.MCS = 4;
cfgMixed.User{3}.APEPLength = 1000;
% STA #4 (RU #3)
cfgMixed.User{4}.NumSpaceTimeStreams = 2;
cfgMixed.User{4}.MCS = 4;
cfgMixed.User{4}.APEPLength = 1000;

Настройка модели канала

Внутренняя модель канала TGax используется в этом примере. Отдельный канал используется, чтобы симулировать ссылку между AP и каждым пользователем. TGax образовывает канал объект, tgaxBase создается со свойствами, важными для всех пользователей. В этом примере профиль задержки (Модель-D) и количество получает антенны, характерны для всех пользователей. Модель-D рассматривается неуглом обзора, когда расстояние между передатчиком и приемником больше или равно 10 метрам. Это описано далее в wlanTGaxChannel. Фиксированный seed используется для канала, чтобы позволить воспроизводимость.

% Create channel configuration common for all users
tgaxBase = wlanTGaxChannel;
tgaxBase.DelayProfile = 'Model-D';     % Delay profile
tgaxBase.NumTransmitAntennas = numTx;  % Number of transmit antennas
tgaxBase.NumReceiveAntennas = 2;       % Each user has two receive antennas
tgaxBase.TransmitReceiveDistance = 10; % Non-line of sight distance
tgaxBase.ChannelBandwidth = cfgMUMIMO.ChannelBandwidth;
tgaxBase.SampleRate = wlanSampleRate(cfgMUMIMO);
% Set a fixed seed for the channel
tgaxBase.RandomStream = 'mt19937ar with seed';
tgaxBase.Seed = 5;

Затем канал создается для каждого пользователя. Канал для каждого пользователя является клоном tgaxBase, но с уникальным UserIndex свойство, и хранится в массиве ячеек tgax. UserIndex свойство каждого отдельного канала собирается предоставить уникальный канал каждому пользователю. Результирующие каналы используются в симуляции как показано ниже.

% A cell array stores the channel objects, one per user
numUsers = numel(cfgMixed.User); % Number of users simulated in this example
tgax = cell(1,numUsers);

% Generate per-user channels
for userIdx = 1:numUsers
    tgax{userIdx} = clone(tgaxBase);
    tgax{userIdx}.UserIndex = userIdx; % Set unique user index
end

Обратная связь Beamforming

beamforming передачи и для OFDMA и для MU-MIMO использует знание состояния канала между передатчиком и приемником в формирователе луча. Обратная связь состояния канала на поднесущую обеспечивается каждым STA звучанием канала. Пустой пакет данных (NDP) передается AP, и каждый STA использует этот пакет, чтобы определить состояние канала. Состояние канала затем возвращено к AP. Тот же процесс используется для 802.11ac™ в Передаче 802.11ac Beamforming и 802.11ac Многопользовательские примеры MIMO Перед кодированием, но отдельный пользователь HE пакет NDP используется вместо пакета VHT. В этом примере обратная связь рассматривается совершенной; нет никакого шума, существующего для звучания канала, и обратная связь является несжатой. heUserBeamformingFeedback функция помощника обнаруживает NDP и использует оценку канала, чтобы определить информацию о состоянии канала. Сингулярное разложение (SVD) затем используется, чтобы вычислить beamforming обратную связь.

% Create an NDP with the correct number of space-time streams to generate
% enough LTF symbols
cfgNDP = wlanHESUConfig('APEPLength',0,'GuardInterval',0.8); % No data in an NDP
cfgNDP.ChannelBandwidth = tgaxBase.ChannelBandwidth;
cfgNDP.NumTransmitAntennas = cfgMUMIMO.NumTransmitAntennas;
cfgNDP.NumSpaceTimeStreams = cfgMUMIMO.NumTransmitAntennas;

% Generate NDP packet - with an empty PSDU as no data
txNDP = wlanWaveformGenerator([],cfgNDP);

% For each user STA, pass the NDP packet through the channel and calculate
% the feedback channel state matrix by SVD.
staFeedback = cell(1,numUsers);
for userIdx = 1:numel(tgax)
    % Received waveform at user STA with 50 sample padding. No noise.
    rx = tgax{userIdx}([txNDP; zeros(50,size(txNDP,2))]);

    % Get the full-band beamforming feedback for a user
    staFeedback{userIdx} = heUserBeamformingFeedback(rx,cfgNDP);
end

Параметры симуляции

Различные потери на пути симулированы в этом примере. Та же потеря на пути и уровень шума применяются ко всем пользователям. Для каждой симулированной потери на пути 10 пакетов передаются через канал. Пакеты разделяются на 20 микросекунд.

cfgSim = struct;
cfgSim.NumPackets = 10;       % Number of packets to simulate for each path loss
cfgSim.Pathloss = (96:3:105); % Path losses to simulate in dB
cfgSim.TransmitPower = 30;    % AP transmit power in dBm
cfgSim.NoiseFloor = -89.9;    % STA noise floor in dBm
cfgSim.IdleTime = 20;         % Idle time between packets in us

Симуляция с OFDMA

Сценарий сначала симулирован с настройкой OFDMA и передачей beamforming.

Держащаяся матрица для каждого RU вычисляется с помощью обратной связи от STAs. heMUCalculateSteeringMatrix функция помощника вычисляет beamforming матрицу для RU, учитывая обратную связь CSI.

% For each RU, calculate the steering matrix to apply
for ruIdx = 1:numel(cfgOFDMA.RU)
    % Calculate the steering matrix to apply to the RU given the feedback
    steeringMatrix = heMUCalculateSteeringMatrix(staFeedback,cfgOFDMA,cfgNDP,ruIdx);

    % Apply the steering matrix to each RU
    cfgOFDMA.RU{ruIdx}.SpatialMapping = 'Custom';
    cfgOFDMA.RU{ruIdx}.SpatialMappingMatrix = steeringMatrix;
end

heMUSimulateScenario функция помощника выполняет симуляцию. Преамбула предHE 802.11ax назад совместима с 802.11ac, поэтому в этом примере, компоненты синхронизации фронтенда для формы волны VHT используются, чтобы синхронизировать форму волны HE в каждом STA. Поскольку каждый пакет и потеря на пути симулировали выполняющие шаги обработки, происходите:

  1. PSDU создается и кодируется, чтобы создать одну пакетную форму волны.

  2. Форма волны передается посредством развития, модель канала TGax и AWGN добавляются к принятой форме волны. Состояние канала обеспечено между пакетами.

  3. Пакет обнаруживается.

  4. Крупное смещение несущей частоты оценивается и корректируется.

  5. Прекрасная временная синхронизация устанавливается.

  6. Прекрасное смещение несущей частоты оценивается и корректируется.

  7. HE-LTF извлечен из синхронизируемой принятой формы волны. HE-LTF является демодулируемым OFDM, и оценка канала выполняется.

  8. Поле данных HE извлечено из синхронизируемой принятой формы волны и демодулируемого OFDM.

  9. Общее отслеживание экспериментального этапа выполняется, чтобы отследить любое остаточное смещение несущей частоты.

  10. Откорректированные символы фазы OFDM компенсируются с оценкой канала.

  11. Шумовая оценка выполняется с помощью демодулируемых пилотов поля данных и оценки канала единого потока в пилотных поднесущих.

  12. Компенсируемые символы демодулируются и декодируются, чтобы восстановить PSDU.

  13. Восстановленный PSDU сравнивается с переданным PSDU, чтобы определить, был ли пакет восстановлен успешно.

Симуляция запущена для настройки OFDMA.

disp('Simulating OFDMA...');
throughputOFDMA = heMUSimulateScenario(cfgOFDMA,tgax,cfgSim);
Simulating OFDMA...
 Pathloss 96.0 dB, AP throughput 66.1 Mbps
 Pathloss 99.0 dB, AP throughput 66.1 Mbps
 Pathloss 102.0 dB, AP throughput 49.6 Mbps
 Pathloss 105.0 dB, AP throughput 16.5 Mbps

Симуляция с MU-MIMO

Теперь сценарий симулирован с настройкой MU-MIMO. heMUCalculateSteeringMatrix функция помощника вычисляет beamforming матрицу для RU, учитывая обратную связь CSI для всех пользователей в выделении MU-MIMO. Нулевое решение для принуждения используется, чтобы вычислить держащуюся матрицу в функции помощника.

% Calculate the steering matrix to apply to the RU given the feedback
ruIdx = 1; % Index of the one and only RU
steeringMatrix = heMUCalculateSteeringMatrix(staFeedback,cfgMUMIMO,cfgNDP,ruIdx);

% Apply the steering matrix to the RU
cfgMUMIMO.RU{1}.SpatialMapping = 'Custom';
cfgMUMIMO.RU{1}.SpatialMappingMatrix = steeringMatrix;

Запустите симуляцию для настройки MU-MIMO.

disp('Simulating MU-MIMO...');
throughputMUMIMO = heMUSimulateScenario(cfgMUMIMO,tgax,cfgSim);
Simulating MU-MIMO...
 Pathloss 96.0 dB, AP throughput 110.5 Mbps
 Pathloss 99.0 dB, AP throughput 110.5 Mbps
 Pathloss 102.0 dB, AP throughput 71.8 Mbps
 Pathloss 105.0 dB, AP throughput 0.0 Mbps

Симуляция с объединенным MU-MIMO и OFDMA

Наконец, сценарий симулирован с объединенным MU-MIMO и настройкой OFDMA.

Держащаяся матрица для каждого RU вычисляется с помощью обратной связи от STAs, включая RU MU-MIMO. heMUCalculateSteeringMatrix функция помощника вычисляет beamforming матрицу для RU, учитывая обратную связь CSI.

% For each RU calculate the steering matrix to apply
for ruIdx = 1:numel(cfgMixed.RU)
    % Calculate the steering matrix to apply to the RU given the feedback
    steeringMatrix = heMUCalculateSteeringMatrix(staFeedback,cfgMixed,cfgNDP,ruIdx);

    % Apply the steering matrix to each RU
    cfgMixed.RU{ruIdx}.SpatialMapping = 'Custom';
    cfgMixed.RU{ruIdx}.SpatialMappingMatrix = steeringMatrix;
end

Запустите симуляцию для объединенного MU-MIMO и настройки OFDMA.

disp('Simulating Mixed MU-MIMO and OFDMA...');
throughputMixed = heMUSimulateScenario(cfgMixed,tgax,cfgSim);
Simulating Mixed MU-MIMO and OFDMA...
 Pathloss 96.0 dB, AP throughput 66.1 Mbps
 Pathloss 99.0 dB, AP throughput 66.1 Mbps
 Pathloss 102.0 dB, AP throughput 66.1 Mbps
 Pathloss 105.0 dB, AP throughput 47.9 Mbps

Постройте результаты

Необработанная пропускная способность AP для каждого режима передачи построена. Результаты показывают для этой реализации канала в высоком SNRs (низкий pathloss), пропускная способность, обеспеченная настройкой MU-MIMO, превышает настройку OFDMA. Пакетная длительность настройки MU-MIMO примерно вдвое меньше чем это настройки OFDMA, которая обеспечивает усиление пропускной способности. Когда ОСШ уменьшается, шум доминирует, и передача beamforming с OFDMA становится более эффективной. Эффективность объединенного MU-MIMO и настройки OFDMA следует за подобным трендом к настройке OFDMA, когда пакетная длительность является тем же самым. Эффективность отличается из-за различных размеров RU и количества пространственно-временных потоков.

% Sum throughput for all STAs and plot for all configurations
figure;
plot(cfgSim.Pathloss,sum(throughputOFDMA,2),'-x');
hold on;
plot(cfgSim.Pathloss,sum(throughputMUMIMO,2),'-o');
plot(cfgSim.Pathloss,sum(throughputMixed,2),'-s');
grid on;
xlabel('Pathloss (dB)');
ylabel('Throughput (Mbps)');
legend('OFDMA','MU-MIMO','MU-MIMO & OFDMA');
title('Raw AP Throughput');

Приложение

Этот пример использует эти функции помощника.

Выбранная библиография

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

Для просмотра документации необходимо авторизоваться на сайте