exponenta event banner

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

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

Введение

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

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

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

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

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

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

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

Однопользовательский пакет (SU) HE представляет собой полнополосную передачу одному пользователю. Параметры передачи для формата HE SU конфигурируются с использованием wlanHESUConfig объект. 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. getPSDULength() возвращает требуемую длину PSDU, заданную конфигурацией передачи. Эта длина используется для создания случайного PSDU для передачи.

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

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

Однопользовательский пакет расширенного диапазона имеет те же поля, что и стандартный однопользовательский формат, но мощности некоторых полей повышаются, а некоторые поля повторяются для улучшения производительности при низких SNR. Пакет расширенного диапазона может быть сконфигурирован с помощью 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 или их комбинации. Эта гибкость позволяет MU пакету HE передавать одному пользователю по всей полосе, нескольким пользователям по разным частям полосы (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, занимающий самую высокую абсолютную частоту. Проект стандарта определяет возможные размеры и расположение РУ в разделе 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 используется для конфигурирования передачи пакета MU HE. При создании объекта конфигурации HE MU необходимо указать индекс распределения для каждого подканала 20 МГц. wlanHEMUConfig. Для каждого подканала 20 МГц должно быть предусмотрено целое число от 0 до 223, соответствующее 8-битному числу в таблице 28-24 из [1].

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

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

showAllocation способ визуализирует занятые RU и поднесущие для указанной конфигурации. Цветные блоки иллюстрируют занятые поднесущие в частях пакета, предшествующих 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-м возможным 106-тоновым RU в пределах полосы пропускания канала 20 МГц. Номер пользователя соответствует i-му элементу User cfgMU.User и поле пользователя в HE-SIG-B. Следует отметить, что средний RU (RU # 2) разделен по поднесущим DC.

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

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 описывать конфигурацию передачи. 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. 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 определяется индексом распределения. 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';

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

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

Для генерации сигнала MU HE сначала создается случайный PSDU для каждого пользователя. Массив ячеек используется для хранения PSDU для каждого пользователя, поскольку длины PSDU различаются. 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

Пакет MU HE может также передавать 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 конфигурируют распределение 80 МГц MU-MIMO с полным диапазоном (996 тонов RU), а индексы распределения между 216 и 223 конфигурируют распределение 160 МГц MU-MIMO с полным диапазоном (2x996 тонов RU).

Например, индекс распределения 203 определяет 484-тоновый RU с 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 используется для сигнализации пользователей. 484-тоновый RU охватывает два подканала 20 МГц, поэтому требуется два индекса распределения. Все семь пользователей из четырех RU будут сигнализироваться на каналах контента HE-SIG-B, но пока мы будем рассматривать только сигнализацию пользователей на 484-тоновом RU. Для 484-тонального RU четыре пользователя могут быть переданы по двум каналам контента HE-SIG-B в различных комбинациях, как показано в таблице 1.

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

Поэтому для конфигурирования комбинации 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, можно использовать «комбинацию B» в таблице 2 при создании индекса распределения для 484-тонального RU. Это приводит к тому, что два пользователя сигнализируются на каждом канале контента 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 на основе триггера

Формат на основе триггера (TB) HE позволяет передачу OFDMA или MU-MIMO в восходящей линии связи. Каждая станция (STA) передает пакет TB одновременно, когда запускается точкой доступа (AP). Передача TB полностью управляется точкой доступа. Все параметры, необходимые для передачи, предоставляются в триггерном кадре всем STA, участвующим в передаче TB. В этом примере сконфигурирована передача 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 установлено значение 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 показывает различные части используемого спектра и перекрытие в RU MU-MIMO.

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.