802.11ax генерация сигналов

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

Введение

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

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

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

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

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

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

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

HE однопользовательский (SU) пакет является передачей полной полосы отдельному пользователю. Параметры передачи для формата 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 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:(double(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 МУ) формат может быть сконфигурирован для передачи OFDMA, передачи MU-MIMO или комбинации двух. Эта гибкость позволяет HE пакет МУ, чтобы передать отдельному пользователю по целой полосе, многому пользователю по различным частям полосы (OFDMA) или многому пользователю по той же части полосы (MU-MIMO).

Для передачи OFDMA полоса пропускания канала разделена на модули ресурса (RU). RU является группой поднесущих, присвоенных одному или нескольким пользователям. RU задан размером (количество поднесущих) и индекс. Индекс RU задает местоположение RU в канале. Например, в передаче на 80 МГц существует четыре возможных RU с 242 тонами, один в каждом подканале на 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]}     "" 

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

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

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

showAllocation метод визуализирует занятые RU и поднесущие для заданной настройки. Цветные блоки иллюстрируют занятые поднесущие в предHE и фрагментах HE пакета. Белый указывает, что поднесущие являются незанятыми. Фрагмент предHE иллюстрирует занятые поднесущие в полях, предшествующих HE-STF. Фрагмент HE иллюстрирует занятые поднесущие в HE-STF, HE-LTF и Поле данных HE и поэтому показывает выделение RU. Нажатие на RU отобразит информацию о RU. Номер RU соответствует i-ому элементу RU cfgMU.RU свойство. Размер и индекс являются деталями RU. Индекс RU является i-ым возможным RU соответствующего размера RU в полосе пропускания канала, например, индекс 2 является 2-м возможным RU с 106 тонами в полосе пропускания канала на 20 МГц. Код пользователя соответствует i-ому Пользовательскому элементу 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 свойство каждого Пользовательского объекта, указывает который 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 передача МУ.

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

Чтобы сгенерировать 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 МГц, четыре индекса выделения требуются. В этом примере сконфигурированы четыре RU с 242 тонами. Индекс выделения 192 задает один RU с 242 тонами с отдельным пользователем в подканале на 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 пакет МУ может также передать 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 передача МУ с полосой пропускания канала, больше, чем 20 МГц, два канала содержимого HE-SIG-B используются, чтобы сигнализировать о пользовательских настройках. Они удовлетворяют каналы, дублированы по каждому подканалу на 40 МГц для больших полос пропускания канала, как описано в Разделе 27.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)

  • Два RU с 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 сигналы два RU с 106 тонами, каждый с одним пользователем, пользователями № 6 и № 7.

Выбор X и Y конфигурирует соответствующее количество пользователей в RU с 242 тонами и определяет, который HE-SIG-B довольный канал используется, чтобы сигнализировать пользователям. RU с 484 тонами охватывает два подканала на 20 МГц, поэтому два индекса выделения требуются. Все семь пользователей от этих четырех RU будут сообщены на каналах содержимого 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 сигналы два RU с 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 предоставляется в размере индекса формы, e.g. 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 тонами. Четыре RU с 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: {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 многопользовательский формат - прокалывание преамбулы

В передаче на 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);

% 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) передает пакет Тбайта одновременно, когда инициировано точкой доступа (AP). Передачей Тбайта управляет полностью AP. Все параметры, требуемые для передачи, предоставляются в триггерной системе координат всему STAs, участвующему в передаче Тбайта. В этом примере сконфигурирована передача Тбайта в ответ на триггерную систему координат для трех пользователей в системе OFDMA/MU-MIMO; три STAs передадут одновременно к 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);

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

% 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

Передача Тбайта для отдельного пользователя в системе сконфигурирована с 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 показывает различные фрагменты спектра, используемого, и перекрытие в 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) LAN и Физический уровень (PHY) Технические требования - Поправка 6: Улучшения для Высокой эффективности WLAN.

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