Параметризация 802.11ax для генерации сигналов и симуляции

В этом примере показано, как параметризовать и сгенерировать различные пакеты в формате IEEE ® 802.11ax™ высокой эффективностью (HE).

Введение

IEEE P802.11ax/D4.1 [1] задает четыре высокоэффективных (HE) форматов пакета:

  1. Однопользовательский

  2. Однопользовательский диапазон расширенного диапазона

  3. Многопользовательский

  4. Триггер на основе

Этот пример показывает, как пакеты могут быть сгенерированы для этих различных форматов, и демонстрирует некоторые ключевые функции проекта стандарта [1].

Однопользовательский формат HE

Пакет HE с одним пользователем (SU) является полнополосной передачей одному пользователю. Параметры передачи для формата HE SU конфигурируются с помощью wlanHESUConfig объект. The wlanHESUConfig объект может быть сконфигурирован для работы в режиме расширенного диапазона. Чтобы включить или отключить этот режим, установите ExtendedRange свойство к true или false. В этом примере мы создадим строение для передачи HE SU и сконфигурируем свойства передачи.

cfgSU = wlanHESUConfig;
cfgSU.ExtendedRange = false;      % Do not use extended-range format
cfgSU.ChannelBandwidth = 'CBW20'; % Channel bandwidth
cfgSU.APEPLength = 1000;          % Payload length in bytes
cfgSU.MCS = 0;                    % Modulation and coding scheme
cfgSU.ChannelCoding = 'LDPC';     % Channel coding
cfgSU.NumSpaceTimeStreams = 1;    % Number of space-time streams
cfgSU.NumTransmitAntennas = 1;    % Number of transmit antennas

Однопользовательский пакет может быть сгенерирован генератором формы волны, wlanWaveformGenerator. The getPSDULength() метод возвращает необходимую длину PSDU, учитывая строение передачи. Эта длина используется для создания случайного PSDU для передачи.

psdu = randi([0 1],getPSDULength(cfgSU)*8,1,'int8'); % Random PSDU
txSUWaveform = wlanWaveformGenerator(psdu,cfgSU);    % Create packet

Однопользовательский формат HE расширенного диапазона

Однопользовательский пакет расширенного диапазона имеет те же поля, что и стандартный однопользовательский формат, но степени некоторых полей повышаются, и некоторые поля повторяются, чтобы улучшить эффективность при низких ОСШ. Пакет расширенного диапазона может быть сконфигурирован с помощью wlanHESUConfig объект с ChannelBandwidth установлено на 'CBW20' и ExtendedRange установлено на true. Пакет расширенного диапазона имеет опцию передачи только в верхнем ресурсном модуле 106-тонального сигнала (RU) в канале 20 МГц или по всей полосе пропускания. Это может быть сконфигурировано с помощью Upper106ToneRU свойство:

cfgExtSU = cfgSU;
cfgExtSU.ExtendedRange = true;  % Enable extended-range format
cfgExtSU.Upper106ToneRU = true; % Use only upper 106-tone RU

% Generate a packet
psdu = randi([0 1],getPSDULength(cfgExtSU)*8,1,'int8'); % Random PSDU
txExtSUWaveform = wlanWaveformGenerator(psdu,cfgExtSU);   % Create packet

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

fs = wlanSampleRate(cfgExtSU); % Get baseband sample rate
ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgExtSU);
fftsize = ofdmInfo.FFTLength; % Use the data field fft size
rbw = fs/fftsize; % Resoluton bandwidth
spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,...
    'Method','Filter bank','RBWSource','Property','RBW',rbw,...
    'AveragingMethod','Exponential','ForgettingFactor',0.25,...
    'ReducePlotRate',false,'YLimits',[-50,20],...
    'Title','HE Extended-Range SU with Active Upper 106-Tone RU');
spectrumAnalyzer.ViewType = 'Spectrum and Spectrogram';
spectrumAnalyzer.TimeSpanSource = 'Property';
spectrumAnalyzer.TimeSpan = length(txExtSUWaveform)/fs;
spectrumAnalyzer(txExtSUWaveform)

Если вы сравните степень полей L-STF и L-LTF, то увидите, что коробка передач расширенного диапазона усилена на 3 дБ.

figure;
ind = wlanFieldIndices(cfgExtSU);
t = (0:(ind.LLTF(2)-1))/fs*1e6;
plot(t,20*log10(movmean(abs(txSUWaveform(1:ind.LLTF(2))),20)),'-b')
hold on;
plot(t,20*log10(movmean(abs(txExtSUWaveform(1:ind.LLTF(2))),20)),'-r')
grid on;
title('Power of L-STF and L-LTF (1 us Moving Average)');
xlabel('Time (us)');
ylabel('Power (dBW)');
legend('HE SU','HE Extended-Range SU','Location','SouthWest');

Многопользовательский формат HE - OFDMA

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

Для передачи OFDMA пропускная способность канала разделена на ресурсные модули (RU). RU является группой поднесущих, назначенных одному или нескольким пользователям. RU определяется размером (количеством поднесущих) и индексом. Индекс RU определяет местоположение RU в канале. Для примера в трансмиссии 80 МГц существует четыре возможных 242-тональных RU, по одному в каждом подканале 20 МГц. RU # 242-1 (размер 242, индекс 1) - RU, занимающее самую низкую абсолютную частоту в пределах 80 МГц, а RU # 242-4 (размер 242, индекс 4) - RU, занимающее самую высокую абсолютную частоту. Проект стандарта определяет возможные размеры и местоположение RU в разделе 27.3.2.2 [1].

Назначение RU в передаче определяется индексом выделения. Индекс распределения определяется в таблице 28-24 [1]. Для каждого подканала 20 МГц 8-битный индекс описывает количество и размер RU, и количество пользователей, переданных на каждом RU. Индекс выделения также определяет, какой канал содержимого используется для сигнала пользователю в HE-SIG-B. Индексы распределения в таблице 28-24 и соответствующие назначения RU приведены в таблице, возвращаемой функцией heRUAllocationTable. Первые 10 ассигнований в таблице показаны ниже. Для каждого индекса выделения отображаются 8-битный индекс выделения, количество пользователей, количество RU, индексы RU, размеры RU и количество пользователей на RU. Также приводится примечание об ассигнованиях, которые зарезервированы или служат специальному назначению. Таблица распределения также можно просмотреть в Приложении.

allocationTable = heRUAllocationTable;
disp('First 10 entries in the allocation table: ')
disp(allocationTable(1:10,:));
First 10 entries in the allocation table: 
    Allocation    BitAllocation    NumUsers    NumRUs          RUIndices                     RUSizes                    NumUsersPerRU        Note
    __________    _____________    ________    ______    _____________________    ______________________________    _____________________    ____

        0          "00000000"         9          9       {[1 2 3 4 5 6 7 8 9]}    {[26 26 26 26 26 26 26 26 26]}    {[1 1 1 1 1 1 1 1 1]}     "" 
        1          "00000001"         8          8       {[  1 2 3 4 5 6 7 4]}    {[   26 26 26 26 26 26 26 52]}    {[  1 1 1 1 1 1 1 1]}     "" 
        2          "00000010"         8          8       {[  1 2 3 4 5 3 8 9]}    {[   26 26 26 26 26 52 26 26]}    {[  1 1 1 1 1 1 1 1]}     "" 
        3          "00000011"         7          7       {[    1 2 3 4 5 3 4]}    {[      26 26 26 26 26 52 52]}    {[    1 1 1 1 1 1 1]}     "" 
        4          "00000100"         8          8       {[  1 2 2 5 6 7 8 9]}    {[   26 26 52 26 26 26 26 26]}    {[  1 1 1 1 1 1 1 1]}     "" 
        5          "00000101"         7          7       {[    1 2 2 5 6 7 4]}    {[      26 26 52 26 26 26 52]}    {[    1 1 1 1 1 1 1]}     "" 
        6          "00000110"         7          7       {[    1 2 2 5 3 8 9]}    {[      26 26 52 26 52 26 26]}    {[    1 1 1 1 1 1 1]}     "" 
        7          "00000111"         6          6       {[      1 2 2 5 3 4]}    {[         26 26 52 26 52 52]}    {[      1 1 1 1 1 1]}     "" 
        8          "00001000"         8          8       {[  1 3 4 5 6 7 8 9]}    {[   52 26 26 26 26 26 26 26]}    {[  1 1 1 1 1 1 1 1]}     "" 
        9          "00001001"         7          7       {[    1 3 4 5 6 7 4]}    {[      52 26 26 26 26 26 52]}    {[    1 1 1 1 1 1 1]}     "" 

A wlanHEMUConfig объект используется для конфигурирования передачи пакета HE MU. Индекс выделения для каждого подканала 20 МГц должен быть предоставлен при создании объекта строения HE MU, wlanHEMUConfig. Для каждого подканала 20 МГц должно быть предусмотрено целое число от 0 до 223, соответствующее 8-битовому числу в таблице 28-24 [1].

Индекс выделения может быть предоставлен в виде десятичной или 8-битовой двоичной последовательности. В этом примере создаётся строение HE MU на 20 МГц с 8-битным индексом выделения «10000000». Это эквивалентно индексу 128 десятичного распределения. Это строение задаёт 3 RU, каждый с одним пользователем.

allocationIndex = "10000000"; % 3 RUs, 1 user per RU
cfgMU = wlanHEMUConfig(allocationIndex);

The showAllocation способ визуализирует занятые RU и поднесущие для заданного строения. Цветные блоки иллюстрируют занятые поднесущие в частях пакета pre-HE и HE. Белый указывает, что поднесущие не заняты. Фрагмент pre-HE иллюстрирует занятые поднесущие в полях, предшествующих HE-STF. Фрагмент HE иллюстрирует занятые поднесущие в поле HE-STF, HE-LTF и HE-Data и, следовательно, показывает распределение RU. При нажатии на RU появится информация о RU. Номер RU соответствует i-му элементу RU cfgMU.RU свойство. Размер и индекс - подробности RU. Индекс RU является i-м возможным RU соответствующего размера RU в пределах полосы пропускания канала, например, индекс 2 является 2-м возможным RU с 106 тонами в пределах полосы пропускания канала 20 МГц. Номер пользователя соответствует i-му элементу User cfgMU.User свойство и пользовательское поле в HE-SIG-B. Обратите внимание, что средний RU (RU # 2) разделен на поднесущие постоянного тока.

showAllocation(cfgMU);
axAlloc = gca; % Get axis handle for subsequent plotting

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

allocInfo = ruInfo(cfgMU);
disp('Allocation info:')
disp(allocInfo)
Allocation info:
                    NumUsers: 3
                      NumRUs: 3
                   RUIndices: [1 5 2]
                     RUSizes: [106 26 106]
               NumUsersPerRU: [1 1 1]
    NumSpaceTimeStreamsPerRU: [1 1 1]
       PowerBoostFactorPerRU: [1 1 1]
                   RUNumbers: [1 2 3]

Свойства cfgMU опишите строение передачи. The cfgMU.RU и cfgMU.User свойства cfgMU являются массивами ячеек. Каждый элемент массивов ячеек содержит объект, который конфигурирует RU или пользователя. Когда cfgMU создается объект, элементы cfgMU.RU и cfgMU.User сконфигурированы для создания необходимого количества RU и пользователей. Каждый элемент cfgMU.RU является wlanHEMURU объект, описывающий строение RU. Точно так же каждый элемент cfgMU.User является wlanHEMUUser объект, описывающий строение пользователя. Эта иерархия объектов показана ниже:

В этом примере три RU заданы индексом 128 выделения, поэтому cfgMU.RU - массив ячеек с тремя элементами. Индекс и размер каждого RU конфигурируются в соответствии с индексом выделения, используемым для создания cfgMU. После создания объекта каждый RU может быть сконфигурирован, чтобы создать необходимое строение передачи, путем установки свойств соответствующего объекта RU. Для примера может быть сконфигурирован коэффициент пространственного отображения и степени усиления на RU. The Size и Index свойства каждого RU фиксируются после создания объекта и поэтому являются свойствами только для чтения. Точно так же UserNumbers свойство доступно только для чтения и указывает, какой пользователь передается на RU. Для этого строения первый RU имеет размер 106, индекс 1.

disp('First RU configuration:')
disp(cfgMU.RU{1})
First RU configuration:
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Direct'

   Read-only properties:
                Size: 106
               Index: 1
         UserNumbers: 1

В этом примере индекс выделения задает трех пользователей в передаче, поэтому cfgMU.User содержит три элемента. Свойства передачи пользователей могут быть сконфигурированы путем изменения отдельных пользовательских объектов, например MCS, длины APEP и схемы канального кодирования. Доступная только для чтения RUNumber свойство указывает, какой RU используется для передачи этого пользователя.

disp('First user configuration:')
disp(cfgMU.User{1})
First user configuration:
  wlanHEMUUser with properties:

              APEPLength: 100
                     MCS: 0
     NumSpaceTimeStreams: 1
                     DCM: 0
           ChannelCoding: 'LDPC'
                   STAID: 0
    NominalPacketPadding: 0
    PostFECPaddingSource: 'mt19937ar with seed'
      PostFECPaddingSeed: 1

   Read-only properties:
                RUNumber: 1

Количество пользователей на RU и отображение пользователей с RU определяется индексом выделения. The UserNumbers свойство объекта RU указывает, какие пользователи (элементы cfgMU.User Массивы ячеек) передаются на этом RU. Точно так же RUNumber свойство каждого объекта User, указывает, какой RU (элемент cfgMU.RU массив ячеек) используется для передачи пользователю:

Это позволяет легко обращаться к свойствам RU, сопоставленным с Пользователем:

ruNum = cfgMU.User{2}.RUNumber; % Get the RU number associated with user 2
disp(cfgMU.RU{ruNum}.SpatialMapping); % Display the spatial mapping
Direct

Когда RU обслуживает многих пользователей, в строении MU-MIMO UserNumbers свойство может индексировать многих пользователей:

Один раз в cfgMU создается объект, параметры передачи могут быть установлены как показано ниже.

% Configure RU 1 and user 1
cfgMU.RU{1}.SpatialMapping = 'Direct';
cfgMU.User{1}.APEPLength = 1e3;
cfgMU.User{1}.MCS = 2;
cfgMU.User{1}.NumSpaceTimeStreams = 4;
cfgMU.User{1}.ChannelCoding = 'LDPC';

% Configure RU 2 and user 2
cfgMU.RU{2}.SpatialMapping = 'Fourier';
cfgMU.User{2}.APEPLength = 500;
cfgMU.User{2}.MCS = 3;
cfgMU.User{2}.NumSpaceTimeStreams = 2;
cfgMU.User{2}.ChannelCoding = 'LDPC';

% Configure RU 3 and user 3
cfgMU.RU{3}.SpatialMapping = 'Fourier';
cfgMU.User{3}.APEPLength = 100;
cfgMU.User{3}.MCS = 4;
cfgMU.User{3}.DCM = true;
cfgMU.User{3}.NumSpaceTimeStreams = 1;
cfgMU.User{3}.ChannelCoding = 'BCC';

Некоторые параметры передачи являются общими для всех пользователей в передаче HE MU.

% Configure common parameters for all users
cfgMU.NumTransmitAntennas = 4;
cfgMU.SIGBMCS = 2;

Чтобы сгенерировать сигнал HE MU, мы сначала создадим случайный PSDU для каждого пользователя. Массив ячеек используется для хранения PSDU для каждого пользователя, поскольку длины PSDU различаются. The getPSDULength() метод возвращает вектор с необходимым PSDU для каждого пользователя при заданном строении. Затем генератор формы волны используется для создания пакета.

psduLength = getPSDULength(cfgMU);
psdu = cell(1,allocInfo.NumUsers);
for i = 1:allocInfo.NumUsers
    psdu{i} = randi([0 1],psduLength(i)*8,1,'int8'); % Generate random PSDU
end

% Create MU packet
txMUWaveform = wlanWaveformGenerator(psdu,cfgMU);

Чтобы сконфигурировать передачу OFDMA с пропускной способностью канала, превышающей 20 МГц, для каждого подканала 20 МГц должен быть предусмотрен индекс выделения. Для примера, чтобы сконфигурировать передачу OFDMA на 80 МГц, требуются четыре индексов выделения. В этом примере сконфигурированы четыре 242-тональных RU. Индекс выделения 192 задает один 242-тональный RU с одним пользователем в подканале 20 МГц, поэтому индексы выделения [192 192 192 192] используются для создания четырех из этих RU, более 80 МГц:

% Display 192 allocation index properties in the table (the 193rd row)
disp('Allocation #192 table entry:')
disp(allocationTable(193,:))

% Create 80 MHz MU configuration, with four 242-tone RUs
cfgMU80MHz = wlanHEMUConfig([192 192 192 192]);
Allocation #192 table entry:
    Allocation    BitAllocation    NumUsers    NumRUs    RUIndices    RUSizes    NumUsersPerRU    Note
    __________    _____________    ________    ______    _________    _______    _____________    ____

       192         "11000000"         1          1         {[1]}      {[242]}        {[1]}         "" 

Когда задано несколько подканалов на 20 МГц, ChannelBandwidth для свойства задано соответствующее значение. Для этого строения установлено значение 'CBW80' как заданы четыре подканала 20 МГц. Это также видно на графике выделения.

disp('Channel bandwidth for HE MU allocation:')
disp(cfgMU80MHz.ChannelBandwidth)
showAllocation(cfgMU80MHz,axAlloc)
Channel bandwidth for HE MU allocation:
CBW80

Многопользовательский формат HE - MU-MIMO

Пакет HE MU может также передавать RU многим пользователям, используя MU-MIMO. Для выделения полной полосы MU-MIMO, индексы выделения между 192 и 199 конфигурируют выделение полного диапазона 20 МГц (242-тональный RU). Индекс в этой области значений определяет, сколько пользователей настроено. Подробные данные перерасчета можно просмотреть в таблице перерасчета. Обратите внимание на NumUsers столбец в таблице растет с индексом, но NumRUs всегда равен 1. Таблица распределения также можно просмотреть в Приложении.

disp('Allocation #192-199 table entries:')
disp(allocationTable(193:200,:)) % Indices 192-199 (rows 193 to 200)
Allocation #192-199 table entries:
    Allocation    BitAllocation    NumUsers    NumRUs    RUIndices    RUSizes    NumUsersPerRU    Note
    __________    _____________    ________    ______    _________    _______    _____________    ____

       192         "11000000"         1          1         {[1]}      {[242]}        {[1]}         "" 
       193         "11000001"         2          1         {[1]}      {[242]}        {[2]}         "" 
       194         "11000010"         3          1         {[1]}      {[242]}        {[3]}         "" 
       195         "11000011"         4          1         {[1]}      {[242]}        {[4]}         "" 
       196         "11000100"         5          1         {[1]}      {[242]}        {[5]}         "" 
       197         "11000101"         6          1         {[1]}      {[242]}        {[6]}         "" 
       198         "11000110"         7          1         {[1]}      {[242]}        {[7]}         "" 
       199         "11000111"         8          1         {[1]}      {[242]}        {[8]}         "" 

Индекс выделения 193 передает 20 МГц 242-тоновый RU двум пользователям. В этом примере мы создадим передачу с матрицей случайного пространственного отображения, которая отображает один пространственно-временной поток для каждого пользователя на две передающие антенны.

% Configure 2 users in a 20 MHz channel
cfgMUMIMO = wlanHEMUConfig(193);

% Set the transmission properties of each user
cfgMUMIMO.User{1}.APEPLength = 100; % Bytes
cfgMUMIMO.User{1}.MCS = 2;
cfgMUMIMO.User{1}.ChannelCoding = 'LDPC';
cfgMUMIMO.User{1}.NumSpaceTimeStreams = 1;

cfgMUMIMO.User{2}.APEPLength = 1000; % Bytes
cfgMUMIMO.User{2}.MCS = 6;
cfgMUMIMO.User{2}.ChannelCoding = 'LDPC';
cfgMUMIMO.User{2}.NumSpaceTimeStreams = 1;

% Get the number of occupied subcarriers in the RU
ruIndex = 1; % Get the info for the first (and only) RU
ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgMUMIMO,ruIndex);
numST = ofdmInfo.NumTones; % Number of occupied subcarriers

% Set the number of transmit antennas and generate a random spatial mapping
% matrix
numTx = 2;
allocInfo = ruInfo(cfgMUMIMO);
numSTS = allocInfo.NumSpaceTimeStreamsPerRU(ruIndex);
cfgMUMIMO.NumTransmitAntennas = numTx;
cfgMUMIMO.RU{ruIndex}.SpatialMapping = 'Custom';
cfgMUMIMO.RU{ruIndex}.SpatialMappingMatrix = rand(numST,numSTS,numTx);

% Create packet with a repeated bit sequence as the PSDU
txMUMIMOWaveform = wlanWaveformGenerator([1 0 1 0],cfgMUMIMO);

Полная полоса передача MU-MIMO с пропускной способностью канала, превышающей 20 МГц, создается путем обеспечения единого индекса выделения RU в пределах области значений 200-223 при создании wlanHEMUConfig объект. Для этих присвоений используется сжатие HE-SIG-B.

Индексы распределения между 200 и 207 конфигурируют полнополосное выделение MU-MIMO 40 МГц (484-тональное RU). Индекс в этой области значений определяет, сколько пользователей настроено. Подробные данные перерасчета можно просмотреть в таблице перерасчета. Обратите внимание на NumUsers столбец в таблице растет с индексом, но NumRUs всегда равен 1.

disp('Allocation #200-207 table entries:')
disp(allocationTable(201:208,:)) % Indices 200-207 (rows 201 to 208)
Allocation #200-207 table entries:
    Allocation    BitAllocation    NumUsers    NumRUs    RUIndices    RUSizes    NumUsersPerRU    Note
    __________    _____________    ________    ______    _________    _______    _____________    ____

       200         "11001000"         1          1         {[1]}      {[484]}        {[1]}         "" 
       201         "11001001"         2          1         {[1]}      {[484]}        {[2]}         "" 
       202         "11001010"         3          1         {[1]}      {[484]}        {[3]}         "" 
       203         "11001011"         4          1         {[1]}      {[484]}        {[4]}         "" 
       204         "11001100"         5          1         {[1]}      {[484]}        {[5]}         "" 
       205         "11001101"         6          1         {[1]}      {[484]}        {[6]}         "" 
       206         "11001110"         7          1         {[1]}      {[484]}        {[7]}         "" 
       207         "11001111"         8          1         {[1]}      {[484]}        {[8]}         "" 

Точно так же индексы распределения между 208 и 215 конфигурируют полнополосное выделение MU-MIMO 80 МГц (996-тоновое RU), а индексы распределения между 216 и 223 конфигурируют полнополосное выделение MU-MIMO 160 МГц (2x996

Как пример, индекс выделения 203 задает RU с 484 тонами с 4 пользователями:

cfg484MU = wlanHEMUConfig(203);
showAllocation(cfg484MU,axAlloc)

Многопользовательский формат HE - OFDMA с размерами RU, большими 242 поднесущих

Для передачи HE MU с пропускной способностью канала более 20 МГц для сигнализации пользовательских строений используются два канала содержимого HE-SIG-B. Эти каналы контента дублируются по каждому подканалу 40 МГц для больших пропускных способностей канала, как описано в разделе 27.3.10.8.3 [1]. Когда размер RU, больший 242, задан как часть системы OFDMA, пользователи, назначенные RU, могут сигнализировать по любому из двух каналов содержимого HE-SIG-B. Индекс выделения, предоставляемый при создании wlanHEMUConfig объект управляет тем, какой канал содержимого сигнализируется каждому пользователю. Таблица присвоения в Приложении показывает соответствующие индексы присвоения.

В качестве примера рассмотрим следующее строение 80 МГц, которая обслуживает 7 пользователей:

  • Один 484-тональный RU (RU # 1) с четырьмя пользователями (пользователи # 1-4)

  • Один 242-тональный RU (RU # 2) с одним пользователем (пользователь # 5)

  • Два 106-тональных RU (RU # 3 и # 4), каждый с одним пользователем (пользователи # 6 и # 7)

Чтобы сконфигурировать передачу OFDMA на 80 МГц, необходимо четыре индексов распределения, по одному для каждого подканала 20 МГц. Для настройки вышеописанного сценария используются следующие индексы распределения:

[X Y 192 96]

  • X и Y сконфигурируйте 484-тональный RU с пользователями # 1-4. Возможные значения X и Y обсуждаются ниже.

  • 192 конфигурирует 242-тональный RU с одним пользователем, пользователем # 5.

  • 96 сигнализирует о двух 106-тональных RU, каждый с одним пользователем, пользователями # 6 и # 7.

Выбор X и Y конфигурирует соответствующее количество пользователей в 242-тональном RU и определяет, какой канал содержимого HE-SIG-B используется для сигнализации пользователей. RU с 484 тонами охватывает два подканала на 20 МГц, поэтому требуются два индексов распределения. Все семь пользователей из четырех RU будут сигнализированы по содержимому каналам HE-SIG-B, а пока мы будем рассматривать только сигнализацию пользователей по 484-тональному RU. Для RU 484-тонального сигнала четыре пользователя могут сигнализировать по двум каналам содержимого HE-SIG-B в различных комбинациях, как показано в таблице 1.

Индекс выделения в области значений 200-207 задает 1-8 пользователей на RU с 484 тонами. Чтобы не сигнализировать пользователям о канале содержимого, индекс выделения 114 или 115 может использоваться для 448-тонального или 996-тонального RU. Поэтому комбинации в таблице 1 могут быть определены с помощью двух индексов распределения, как показано в таблице 2. Два индекса распределения в каждой строке таблицы 2 X и Y.

Поэтому для конфигурирования 'Combination E' используются следующие индексы выделения 80 МГц:

[114 203 192 96]

  • 114 и 203 сконфигурируйте 484-тональный RU с пользователями # 1-4.

  • 192 конфигурирует 242-тональный RU с одним пользователем, пользователем # 5.

  • 96 сигнализирует о двух 106-тональных RU, каждый с одним пользователем, пользователями # 6 и # 7.

cfg484OFDMA = wlanHEMUConfig([114 203 192 96]);
showAllocation(cfg484OFDMA,axAlloc);

Для просмотра сигнализации выделения HE-SIG-B используйте hePlotHESIGBAllocationMapping функция. Это показывает пользовательские поля, сигнализируемые по каждому содержимому каналу HE-SIG-B, и какие RU и пользователь в wlanHEMUConfig объект, каждый сигнал пользовательского поля. В этом случае мы можем видеть, что пользователи RU # 1, 3 и 4 все сигнализируются по каналу 2 содержимое, и пользователь RU # 2 сигнализируется по каналу 1 содержимого. Второй канал содержимого сигнализирует о шести пользователях, в то время как первый канал содержимого сигнализирует только об одном пользователе. Поэтому первый канал содержимого заполняется до длины второго канала для передачи. На схеме информация выделения RU предоставляется в виде размера индекса, например, RU8-106 является 8-м 106-тональным RU.

figure;
hePlotHESIGBAllocationMapping(cfg484OFDMA);
axSIGB = gca; % Get axis handle for subsequent plotting

Чтобы сбалансировать сигнализацию пользовательского поля в HE-SIG-B, мы можем использовать 'Combination B' в таблице 2 при создании индекса выделения для RU с 484 тонами. Это приводит к сигнализации двух пользователей по каждому каналу содержимого HE-SIG-B, созданию лучшего баланса пользовательских полей и потенциально меньшему количеству символов HE-SIG-B в передаче.

cfg484OFDMABalanced = wlanHEMUConfig([201 201 96 192]);
hePlotHESIGBAllocationMapping(cfg484OFDMABalanced,axSIGB);

Многопользовательский формат HE - Central 26-Tone RU

В передаче на 80 МГц, когда полная полоса RU не используется, центральный 26-тональный RU может быть необязательно активен. Центральный 26-тональный RU активируется с помощью пары "имя-значение" при создании wlanHEMUConfig объект.

% Create a configuration with no central 26-tone RU
cfgNoCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',false);
showAllocation(cfgNoCentral,axAlloc);

% Create a configuration with a central 26-tone RU
cfgCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',true);
showAllocation(cfgCentral,axAlloc);

Точно так же для 160 МГц передачи можно опционально использовать центральный 26-тональный RU в каждом сегменте 80 МГц. Каждый центральный 26-тональный RU может быть включен с помощью пар "имя-значение" при создании wlanHEMUConfig объект. В этом примере создается только верхний центральный 26-тональный RU. Четыре 242-тональных RU, каждый с одним пользователем, заданы индексом выделения [200 114 114 200 200 114 114 200].

cfgCentral160MHz = wlanHEMUConfig([200 114 114 200 200 114 114 200],'UpperCenter26ToneRU',true);
disp(cfgCentral160MHz)
  wlanHEMUConfig with properties:

                     RU: {1x5 cell}
                   User: {1x5 cell}
      PrimarySubchannel: 1
    NumTransmitAntennas: 1
                   STBC: 0
          GuardInterval: 3.2000
              HELTFType: 4
                SIGBMCS: 0
                SIGBDCM: 0
       UplinkIndication: 0
               BSSColor: 0
           SpatialReuse: 0
           TXOPDuration: 127
            HighDoppler: 0

   Read-only properties:
       ChannelBandwidth: 'CBW160'
        AllocationIndex: [200 114 114 200 200 114 114 200]
    LowerCenter26ToneRU: 0
    UpperCenter26ToneRU: 1

Многопользовательский формат HE - прокалывание преамбулы

В частоте передачи 80 МГц или 160 МГц подканалы 20 МГц могут быть проколоты, чтобы позволить унаследованной системе работать в прокалываемом канале. Этот способ также описан как канальное соединение. Чтобы обнулить подканал 20 МГц, индекс выделения подканала 20 МГц 113 может использоваться. Проколотый подканал 20 МГц можно просмотреть с помощью showAllocation способ.

% Null second lowest 20 MHz subchannel in a 160 MHz configuration
cfgNull = wlanHEMUConfig([192 113 114 200 208 115 115 115]);

% Plot the allocation
showAllocation(cfgNull,axAlloc);

Проколотые 20 МГц можно также просмотреть с помощью сгенерированной формы волны и анализатора спектра.

% Set the transmission properties of each user in all RUs
cfgNull.User{1}.APEPLength = 100;
cfgNull.User{1}.MCS = 2;
cfgNull.User{1}.ChannelCoding = 'LDPC';
cfgNull.User{1}.NumSpaceTimeStreams = 1;

cfgNull.User{2}.APEPLength = 1000;
cfgNull.User{2}.MCS = 6;
cfgNull.User{2}.ChannelCoding = 'LDPC';
cfgNull.User{2}.NumSpaceTimeStreams = 1;

cfgNull.User{3}.APEPLength = 100;
cfgNull.User{3}.MCS = 1;
cfgNull.User{3}.ChannelCoding = 'LDPC';
cfgNull.User{3}.NumSpaceTimeStreams = 1;

% Create packet
txNullWaveform = wlanWaveformGenerator([1 0 1 0],cfgNull);

% Visualize signal spectrum
fs = wlanSampleRate(cfgNull);
ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgNull,1);
fftsize = ofdmInfo.FFTLength;
spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,...
            'AveragingMethod','Exponential','ForgettingFactor',0.99,...
            'RBWSource','Property','RBW',fs/fftsize,...
            'Title','160 MHz HE MU Transmission with Punctured 20 MHz Channel');
spectrumAnalyzer(txNullWaveform);

Формат MU на основе триггеров

Формат, основанный на триггере HE (TB), позволяет осуществлять передачу OFDMA или MU-MIMO в восходящей линии связи. Каждая станция (STA) передает пакет TB одновременно, когда инициируется точкой доступа (AP). Передача TB полностью управляется AP. Все параметры, необходимые для передачи, предоставляются в триггерной системе координат всем STA, участвующим в передаче TB. В этом примере сконфигурирована передача ТБ в ответ на триггерную систему координат для трех пользователей в системе OFDMA/MU-MIMO; три STA будут передавать одновременно на AP.

Выделение 20 МГц 97 используется, что соответствует двум RU, один из которых обслуживает двух пользователей в MU-MIMO.

disp('Allocation #97 table entry:')
disp(allocationTable(98,:)) % Index 97 (row 98)
Allocation #97 table entry:
    Allocation    BitAllocation    NumUsers    NumRUs    RUIndices      RUSizes      NumUsersPerRU    Note
    __________    _____________    ________    ______    _________    ___________    _____________    ____

        97         "01100001"         3          2        {[1 2]}     {[106 106]}       {[1 2]}        "" 

Информация о выделении получена путем создания строения MU с wlanHEMUConfig.

% Generate an OFDMA allocation
cfgMU = wlanHEMUConfig(97);
allocationInfo = ruInfo(cfgMU);

В передаче TB несколько параметров одинаковы для всех пользователей в передаче. Некоторые из них указаны ниже:

% These parameters are the same for all users in the OFDMA system
trgMethod = 'TriggerFrame'; % Method used to trigger an HE TB PPDU
channelBandwidth = cfgMU.ChannelBandwidth; % Bandwidth of OFDMA system
lsigLength = 142;         % L-SIG length
preFECPaddingFactor = 2;  % Pre-FEC padding factor
ldpcExtraSymbol = false;  % LDPC extra symbol
numHELTFSymbols = 2;      % Number of HE-LTF symbols

Передача TB для одного пользователя в системе сконфигурирована с wlanHETBConfig объект. В этом примере для описания передачи трех пользователей создается массив ячеек из трех объектов.

% Create a trigger configuration for each user
numUsers = allocationInfo.NumUsers;
cfgTriggerUser = repmat({wlanHETBConfig},1,numUsers);

Свойства, не относящиеся к системе по умолчанию, заданы для каждого пользователя.

for userIdx = 1:numUsers
    cfgTriggerUser{userIdx}.TriggerMethod = trgMethod;
    cfgTriggerUser{userIdx}.ChannelBandwidth = channelBandwidth;
    cfgTriggerUser{userIdx}.LSIGLength = lsigLength;
    cfgTriggerUser{userIdx}.PreFECPaddingFactor = preFECPaddingFactor;
    cfgTriggerUser{userIdx}.LDPCExtraSymbol = ldpcExtraSymbol;
    cfgTriggerUser{userIdx}.NumHELTFSymbols = numHELTFSymbols;
end

Далее задаются свойства для каждого пользователя. Когда многие пользователи передают в одном и том же RU, в строении MU-MIMO, каждый пользователь должен передавать по различным пространственно-временным индексам потока. Свойства StartingSpaceTimeStream и NumSpaceTimeStreamSteams должен быть установлен для каждого пользователя, чтобы убедиться, что используются различные пространственно-временные потоки. В этом примере пользователи 1 и 2 находятся в строении MU-MIMO, поэтому StartingSpaceTimeStream для пользователя два установлено значение 2, так как пользователь сконфигурирован для передачи 1 пространственно-временного потока с StartingSpaceTimeStream = 1.

% These parameters are for the first user - RU#1 MU-MIMO user 1
cfgTriggerUser{1}.RUSize = allocationInfo.RUSizes(1);
cfgTriggerUser{1}.RUIndex = allocationInfo.RUIndices(1);
cfgTriggerUser{1}.MCS = 4;                     % Modulation and coding scheme
cfgTriggerUser{1}.NumSpaceTimeStreams = 1;     % Number of space-time streams
cfgTriggerUser{1}.NumTransmitAntennas = 1;     % Number of transmit antennas
cfgTriggerUser{1}.StartingSpaceTimeStream = 1; % The starting index of the space-time streams
cfgTriggerUser{1}.ChannelCoding = 'LDPC';      % Channel coding

% These parameters are for the second user - RU#1 MU-MIMO user 2
cfgTriggerUser{2}.RUSize = allocationInfo.RUSizes(1);
cfgTriggerUser{2}.RUIndex = allocationInfo.RUIndices(1);
cfgTriggerUser{2}.MCS = 3;                     % Modulation and coding scheme
cfgTriggerUser{2}.NumSpaceTimeStreams = 1;     % Number of space-time streams
cfgTriggerUser{2}.StartingSpaceTimeStream = 2; % The starting index of the space-time streams
cfgTriggerUser{2}.NumTransmitAntennas = 1;     % Number of transmit antennas
cfgTriggerUser{2}.ChannelCoding = 'LDPC';      % Channel coding

% These parameters are for the third user - RU#2
cfgTriggerUser{3}.RUSize = allocationInfo.RUSizes(2);
cfgTriggerUser{3}.RUIndex = allocationInfo.RUIndices(2);
cfgTriggerUser{3}.MCS = 4;                     % Modulation and coding scheme
cfgTriggerUser{3}.NumSpaceTimeStreams = 2;     % Number of space-time streams
cfgTriggerUser{3}.StartingSpaceTimeStream = 1; % The starting index of the space-time streams
cfgTriggerUser{3}.NumTransmitAntennas = 2;     % Number of transmit antennas
cfgTriggerUser{3}.ChannelCoding = 'BCC';       % Channel coding

Пакет, содержащий случайные данные, теперь передается каждым пользователем с wlanWaveformGenerator. Форма волны, переданная каждым пользователем, сохранена для анализа.

trigInd = wlanFieldIndices(cfgTriggerUser{1}); % Get the indices of each field
txTrigStore = zeros(trigInd.HEData(2),numUsers);
for userIdx = 1:numUsers
    % Generate waveform for a user
    cfgTrigger = cfgTriggerUser{userIdx};
    txPSDU = randi([0 1],getPSDULength(cfgTrigger)*8,1);
    txTrig = wlanWaveformGenerator(txPSDU,cfgTrigger);

    % Store the transmitted STA waveform for analysis
    txTrigStore(:,userIdx) = sum(txTrig,2);
end

Спектр переданной формы волны от каждого STA показывает различные фрагменты используемого спектра и перекрытие в MU-MIMO RU.

fs = wlanSampleRate(cfgTriggerUser{1});
ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgTriggerUser{1});
spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,...
            'AveragingMethod','Running','SpectralAverages',1,...
            'ChannelNames', {'RU#1 User 1','RU#1 User 2','RU#2'},...
            'ShowLegend',true,'Title','Transmitted HE TB Waveform per User');
spectrumAnalyzer(txTrigStore);

Приложение

Таблица выделения RU для выделений < = 20 МГц показана ниже с аннотированными описаниями.

Выделение RU и пользовательская сигнализация HE-SIG-B для выделений > 20 МГц показаны в таблице ниже с аннотированными описаниями.

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

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