В этом примере показано, как параметризовать и генерировать различные пакеты формата IEEE ® 802.11ax™ высокой эффективностью (HE).
IEEE P802.11ax/D4.1 [1] определяет четыре формата пакетов высокой эффективности (HE):
Однопользовательский
Однопользовательский расширенный диапазон
Многопользовательская
Триггер на основе
В этом примере показано, как можно генерировать пакеты для этих различных форматов, и показаны некоторые ключевые особенности проекта стандарта [1].
Однопользовательский пакет (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
Однопользовательский пакет расширенного диапазона имеет те же поля, что и стандартный однопользовательский формат, но мощности некоторых полей повышаются, а некоторые поля повторяются для улучшения производительности при низких 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 (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

Пакет 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 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);

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

Формат на основе триггера (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 МГц показаны в таблице ниже с аннотированными описаниями.

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