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

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

Введение

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

  1. Отдельный пользователь

  2. Расширенный отдельный пользователь области значений

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

  4. Основанный на триггере

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

Формат отдельного пользователя HE

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

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 расширенный формат отдельного пользователя области значений

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

cfgExtSU = cfgSU;
cfgExtSU.ExtendedRange = true;  % Enable extended range
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
spectrumAnalyzer = dsp.SpectrumAnalyzer;
spectrumAnalyzer.SampleRate = fs;
spectrumAnalyzer.Title = 'HE Extended Range SU with Active Upper 106-Tone RU';
ind = wlanFieldIndices(cfgExtSU);
spectrumAnalyzer(txExtSUWaveform(ind.HEData(1):ind.HEData(2),:));

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

figure;
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 в канале. Например, в передаче на 80 МГц существует четыре возможных РУССКИХ с 242 тонами, один в каждом подканале на 20 МГц. RU# 242-1 (размер 242, индекс 1) является RU, занимающим самую низкую абсолютную частоту в 80 МГц, и RU# 242-4 (размер 242, индекс 4) является RU, занимающим самую высокую абсолютную частоту. Черновой стандарт задает возможные размеры и местоположение РУССКИХ в Разделе 28.3.3.2 из [1].

Присвоение РУССКИХ в передаче задано индексом выделения. Индекс выделения задан в Таблице 28-24 [1]. Для каждого подканала на 20 МГц индекс на 8 битов описывает номер и размер РУССКИХ, и количество пользователей, переданных на каждом RU. Индекс выделения также определяет, какой канал содержимого используется, чтобы сигнализировать пользователю в HE-SIG-B. Индексы выделения в рамках Таблицы 28-24 и соответствующие присвоения RU, обеспечиваются в таблице, возвращенной функциональным heRUAllocationTable. Первые 10 выделений в рамках таблицы показывают ниже. Для каждого индекса выделения отображены индекс выделения на 8 битов, количество пользователей, количество РУССКИХ, индексов 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×9 double}    {1×9 double}    {1×9 double}      "" 
        1          "00000001"         8          8       {1×8 double}    {1×8 double}    {1×8 double}      "" 
        2          "00000010"         8          8       {1×8 double}    {1×8 double}    {1×8 double}      "" 
        3          "00000011"         7          7       {1×7 double}    {1×7 double}    {1×7 double}      "" 
        4          "00000100"         8          8       {1×8 double}    {1×8 double}    {1×8 double}      "" 
        5          "00000101"         7          7       {1×7 double}    {1×7 double}    {1×7 double}      "" 
        6          "00000110"         7          7       {1×7 double}    {1×7 double}    {1×7 double}      "" 
        7          "00000111"         6          6       {1×6 double}    {1×6 double}    {1×6 double}      "" 
        8          "00001000"         8          8       {1×8 double}    {1×8 double}    {1×8 double}      "" 
        9          "00001001"         7          7       {1×7 double}    {1×7 double}    {1×7 double}      "" 

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

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

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

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

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

ruInfo метод предоставляет подробную информацию РУССКОГО в настройке. В этом случае мы видим трех пользователей и три РУССКИХ.

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 сконфигурированы, чтобы создать желаемое количество РУССКИХ и пользователей. Каждый элемент cfgMU.RU объект wlanHEMURU описание настройки RU. Точно так же каждый элемент cfgMU.User объект wlanHEMUUser описание настройки Пользователя. Эту иерархию объектов показывают ниже:

В этом примере три РУССКИХ заданы индексом 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

   Read-only properties:
                RUNumber: 1

Количество пользователей на RU и отображение пользователей к РУССКОМУ определяются индексом выделения. UserNumbers свойство объекта RU указывает который пользователи (элементы cfgMU.User массив ячеек), передаются на том RU. Точно так же RUNumber свойство каждого Пользовательского объекта, указывает который 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 отличаются. 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 тонами. Индекс выделения 192 задает один RU с 242 тонами с отдельным пользователем в подканале на 20 МГц, поэтому индексы выделения [192 192 192 192] используются, чтобы создать четыре из них РУССКИХ, более чем 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 МГц (RU с 242 тонами). Индекс в этой области значений определяет, сколько пользователей сконфигурировано. Детали выделения могут посмотреться в таблице распределения. Отметьте 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 передает RU с 242 тонами на 20 МГц двум пользователям. В этом примере мы создадим передачу со случайной пространственной матрицей отображения, которая сопоставляет один пространственно-временной поток для каждого пользователя на две антенны передачи.

% 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 МГц (RU с 484 тонами). Индекс в этой области значений определяет, сколько пользователей сконфигурировано. Детали выделения могут посмотреться в таблице распределения. Отметьте 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 МГц (RU с 996 тонами), и индексы выделения между 216 и 223 конфигурируют полную полосу выделение MU-MIMO 160 МГц (2x996-тональный RU).

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

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

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

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

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

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

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

  • Два РУССКИХ с 106 тонами (RU № 3 и № 4), каждый с одним пользователем (пользователи № 6 и № 7)

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

[X Y 192 96]

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

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

  • 96 сигналы два РУССКИХ с 106 тонами, каждый с одним пользователем, пользователями № 6 и № 7.

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

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

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

[114 203 192 96]

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

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

  • 96 сигналы два РУССКИХ с 106 тонами, каждый с одним пользователем, пользователями № 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-м RU с 106 тонами.

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

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

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

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

В передаче на 80 МГц, когда полная полоса RU не используется, центральный RU с 26 тонами может быть опционально активным. Центральный RU с 26 тонами включен с помощью пары "имя-значение" при создании объекта 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 МГц, центральный RU с 26 тонами в каждом сегменте на 80 МГц может опционально использоваться. Каждый центральный RU с 26 тонами может быть включен с помощью пар "имя-значение" при создании объекта wlanHEMUConfig. В этом примере только создается верхний центральный RU с 26 тонами. Четыре РУССКИХ с 242 тонами, каждый с одним пользователем задан с индексом выделения [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: {1×5 cell}
                   User: {1×5 cell}
    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 многопользовательский формат - прокалывание преамбулы

В передаче на 160 МГц или на 80 МГц подканалы на 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);

spectrumAnalyzer = dsp.SpectrumAnalyzer;
spectrumAnalyzer.SampleRate = wlanSampleRate(cfgNull);
spectrumAnalyzer.Title = '160 MHz HE-MU Transmission with Punctured 20 MHz Channel';
spectrumAnalyzer(txNullWaveform);

Основанный на триггере формат MU

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

Выделение на 20 МГц 97 используется, который соответствует двум РУССКИМ, один из которых служит двум пользователям в 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 double}    {1×2 double}    {1×2 double}      "" 

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

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

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

% These parameters are the same for all users in the OFDMA system
channelBandwidth = cfgMU.ChannelBandwidth; % Bandwidth of OFDMA system
numSymbols = 20;          % Number of HE data field symbols
preFECPaddingFactor = 2;  % Pre-FEC padding factor
ldpcExtraSymbol = false;  % LDPC extra symbol
numHELTFSymbols = 2;      % Number of HE-LTF symbols

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

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

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

for userIdx = 1:numUsers
    cfgTriggerUser{userIdx}.ChannelBandwidth = channelBandwidth;
    cfgTriggerUser{userIdx}.NumDataSymbols = numSymbols;
    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

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

trigInd = heTBFieldIndices(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 = heTBWaveformGenerator(txPSDU,cfgTrigger);

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

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

spectrumAnalyzer = dsp.SpectrumAnalyzer;
spectrumAnalyzer.SampleRate = heTBSampleRate(cfgTriggerUser{1});
spectrumAnalyzer.ChannelNames = {'RU#1 User 1','RU#1 User 2','RU#2'};
spectrumAnalyzer.ShowLegend = true;
spectrumAnalyzer.Title = 'Transmitted HE-TB Waveform per User';
spectrumAnalyzer(txTrigStore);

Приложение

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

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

Этот пример использует следующие объекты помощника и функции:

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

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