Этот пример показывает, как параметризовать и сгенерировать различные высокоэффективные (HE) пакеты формата IEEE® 802.11ax™.
Введение
IEEE P802.11ax/D3.1 [1] задает четыре высокоэффективных (HE) формата пакета:
Отдельный пользователь
Расширенный отдельный пользователь области значений
Многопользовательский
Основанный на триггере
Этот пример показывает, как пакеты могут быть сгенерированы для этих различных форматов и демонстрируют некоторые ключевые возможности чернового стандарта [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 [1x9 double] [1x9 double] [1x9 double] "" 1 "00000001" 8 8 [1x8 double] [1x8 double] [1x8 double] "" 2 "00000010" 8 8 [1x8 double] [1x8 double] [1x8 double] "" 3 "00000011" 7 7 [1x7 double] [1x7 double] [1x7 double] "" 4 "00000100" 8 8 [1x8 double] [1x8 double] [1x8 double] "" 5 "00000101" 7 7 [1x7 double] [1x7 double] [1x7 double] "" 6 "00000110" 7 7 [1x7 double] [1x7 double] [1x7 double] "" 7 "00000111" 6 6 [1x6 double] [1x6 double] [1x6 double] "" 8 "00001000" 8 8 [1x8 double] [1x8 double] [1x8 double] "" 9 "00001001" 7 7 [1x7 double] [1x7 double] [1x7 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);
Функция hePlotAllocation визуализирует занятое РУССКОЕ и поднесущие для заданной настройки. Цветные блоки иллюстрируют занятые поднесущие в пред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.
hePlotAllocation(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 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)
hePlotAllocation(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); hePlotAllocation(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]); hePlotAllocation(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); hePlotAllocation(cfgNoCentral,axAlloc); % Create a configuration with a central 26-tone RU cfgCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',true); hePlotAllocation(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: {1x5 cell} User: {1x5 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 МГц может быть просмотрен с методом hePlotAllocation
.
% Null second lowest 20 MHz subchannel in a 160 MHz configuration cfgNull = wlanHEMUConfig([192 113 114 200 208 115 115 115]); % Plot the allocation hePlotAllocation(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.
97
выделения на 20 МГц используется, который соответствует двум РУССКИМ, один из которых служит двум пользователям в 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 [1x2 double] [1x2 double] [1x2 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 МГц, показывают в приведенной ниже таблице с аннотируемыми описаниями.
Этот пример использует следующие объекты помощника и функции:
Выбранная библиография
Черновой Стандарт IEEE P802.11ax™/D3.1 для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 6: Улучшения для Высокой эффективности WLAN.
Создайте DMG PPDU | Создайте HT PPDU | Создайте Non-HT PPDU | Создайте S1G PPDU | Создайте VHT PPDU