В этом примере показано, как параметризовать и сгенерировать различные высокоэффективные (HE) пакеты формата IEEE® 802.11ax™.
IEEE P802.11ax/D3.1 [1] задает четыре высокоэффективных (HE) формата пакета:
Отдельный пользователь
Расширенный отдельный пользователь области значений
Многопользовательский
Основанный на триггере
В этом примере показано, как пакеты могут быть сгенерированы для этих различных форматов и демонстрируют некоторые ключевые возможности чернового стандарта [1].
Пакет отдельного пользователя (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
Расширенный пакет отдельного пользователя области значений имеет те же поля как стандартный формат отдельного пользователя, но степени некоторых полей повышены, и некоторые поля повторяются, чтобы улучшать производительность в низком 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, многопользовательский (HE-MU) формат, может быть сконфигурирован для передачи OFDMA, передачи MU-MIMO или комбинации двух. Эта гибкость позволяет пакету HE-MU передавать отдельному пользователю по целой полосе, многому пользователю по различным частям полосы (OFDMA) или многому пользователю по той же части полосы (MU-MIMO).
Для передачи OFDMA пропускная способность канала разделена на (РУССКИЕ) модули ресурса. RU является группой поднесущих, присвоенных одному или нескольким пользователям. RU задан размером (количество поднесущих) и индекс. Индекс RU задает местоположение RU в канале. Например, в передаче на 80 МГц существует четыре возможных РУССКИХ с 242 тонами, один в каждом подканале на 20 МГц. RU# 242-1 (размер 242, индекс 1) является RU, занимающим самую низкую абсолютную частоту в 80 МГц, и RU# 242-4 (размер 242, индекс 4) является RU, занимающим самую высокую абсолютную частоту. Черновой стандарт задает возможные размеры и местоположение РУССКИХ в Разделе 28.3.3.2 из [1].
Присвоение РУССКИХ в передаче задано индексом выделения. Индекс выделения задан в Таблице 28-24 [1]. Для каждого подканала на 20 МГц индекс на 8 битов описывает номер и размер РУССКИХ, и количество пользователей, переданных на каждом RU. Индекс выделения также определяет, какой канал содержимого используется, чтобы сигнализировать пользователю в HE-SIG-B. Индексы выделения в рамках Таблицы 28-24 и соответствующие присвоения RU, обеспечиваются в таблице, возвращенной функциональным heRUAllocationTable
. Первые 10 выделений в рамках таблицы показывают ниже. Для каждого индекса выделения отображены индекс выделения на 8 битов, количество пользователей, количество РУССКИХ, индексов RU, размеров RU и количества пользователей на RU. Примечание также предоставлено о выделениях, которые резервируются или обслуживают особое назначение. Таблица распределения может также быть просмотрена в Приложении.
allocationTable = heRUAllocationTable;
disp('First 10 entries in the allocation table: ')
disp(allocationTable(1:10,:));
First 10 entries in the allocation table: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ ____________ ____________ _____________ ____ 0 "00000000" 9 9 {1×9 double} {1×9 double} {1×9 double} "" 1 "00000001" 8 8 {1×8 double} {1×8 double} {1×8 double} "" 2 "00000010" 8 8 {1×8 double} {1×8 double} {1×8 double} "" 3 "00000011" 7 7 {1×7 double} {1×7 double} {1×7 double} "" 4 "00000100" 8 8 {1×8 double} {1×8 double} {1×8 double} "" 5 "00000101" 7 7 {1×7 double} {1×7 double} {1×7 double} "" 6 "00000110" 7 7 {1×7 double} {1×7 double} {1×7 double} "" 7 "00000111" 6 6 {1×6 double} {1×6 double} {1×6 double} "" 8 "00001000" 8 8 {1×8 double} {1×8 double} {1×8 double} "" 9 "00001001" 7 7 {1×7 double} {1×7 double} {1×7 double} ""
Объект wlanHEMUConfig используется, чтобы сконфигурировать передачу пакета HE-MU. Индекс выделения для каждого подканала на 20 МГц должен быть обеспечен при создании объекта настройки HE-MU, wlanHEMUConfig. Целое число между 0 и 223, соответствуя 8-битному номеру в Таблице 28-24 [1], должно быть обеспечено для каждого подканала на 20 МГц.
Индекс выделения может быть обеспечен как десятичная или 8-битная двоичная последовательность. В этом примере настройка HE-MU на 20 МГц создается с индексом "10000000" выделения на 8 битов. Это эквивалентно десятичному индексу 128 выделения. Эта настройка задает 3 РУССКИХ, каждого с одним пользователем.
allocationIndex = "10000000"; % 3 RUs, 1 user per RU cfgMU = wlanHEMUConfig(allocationIndex);
showAllocation
метод визуализирует занятое РУССКОЕ и поднесущие для заданной настройки. Цветные блоки иллюстрируют занятые поднесущие в предHE и фрагментах HE пакета. Белый указывает, что поднесущие являются незанятыми. Фрагмент предHE иллюстрирует занятые поднесущие в полях, предшествующих HE-STF. Фрагмент HE иллюстрирует занятые поднесущие в HE-STF, HE-LTF и Поле данных HE и поэтому показывает выделение RU. Нажатие на RU отобразит информацию о RU. Номер RU соответствует i-th элементу RU cfgMU.RU
свойство. Размер и индекс являются деталями RU. Индекс RU является i-th возможным RU соответствующего размера RU в пропускной способности канала, например, индекс 2 является 2-м возможным RU с 106 тонами в пропускной способности канала на 20 МГц. Код пользователя соответствует i-th Пользовательскому элементу cfgMU.User
свойство и пользовательское поле в HE-SIG-B. Обратите внимание, что средний RU (RU № 2) разделен через поднесущие DC.
showAllocation(cfgMU);
axAlloc = gca; % Get axis handle for subsequent plotting
ruInfo
метод предоставляет подробную информацию РУССКОГО в настройке. В этом случае мы видим трех пользователей и три РУССКИХ.
allocInfo = ruInfo(cfgMU);
disp('Allocation info:')
disp(allocInfo)
Allocation info: NumUsers: 3 NumRUs: 3 RUIndices: [1 5 2] RUSizes: [106 26 106] NumUsersPerRU: [1 1 1] NumSpaceTimeStreamsPerRU: [1 1 1] PowerBoostFactorPerRU: [1 1 1] RUNumbers: [1 2 3]
Свойства cfgMU
опишите настройку передачи. cfgMU.RU
и cfgMU.User
свойства cfgMU
массивы ячеек. Каждый элемент массивов ячеек содержит объект, который конфигурирует RU или Пользователя. Когда cfgMU
объект создается, элементы cfgMU.RU
и cfgMU.User
сконфигурированы, чтобы создать желаемое количество РУССКИХ и пользователей. Каждый элемент cfgMU.RU
объект wlanHEMURU описание настройки RU. Точно так же каждый элемент cfgMU.User
объект wlanHEMUUser описание настройки Пользователя. Эту иерархию объектов показывают ниже:
В этом примере три РУССКИХ заданы индексом 128 выделения, поэтому cfgMU.RU
массив ячеек с тремя элементами. Индекс и размер каждого RU сконфигурированы согласно индексу выделения, используемому, чтобы создать cfgMU
. После того, как объект создается, каждый RU может быть сконфигурирован, чтобы создать желаемую настройку передачи путем установки свойств соответствующего объекта RU. Например, пространственное отображение и фактор повышения степени могут быть сконфигурированы на RU. Size
и Index
свойства каждого RU фиксируются, если объект создается, и поэтому является свойствами только для чтения. Точно так же UserNumbers
свойство только для чтения и указывает, какой пользователь передается на RU. Для этой настройки первый RU является размером 106, индекс 1.
disp('First RU configuration:')
disp(cfgMU.RU{1})
First RU configuration: wlanHEMURU with properties: PowerBoostFactor: 1 SpatialMapping: 'Direct' Read-only properties: Size: 106 Index: 1 UserNumbers: 1
В этом примере индекс выделения задает трех пользователей в передаче, поэтому cfgMU.User
содержит три элемента. Свойства передачи пользователей могут быть сконфигурированы путем изменения объектов отдельного пользователя, например, MCS, длина APEP и схема кодирования канала. RUNumber
только для чтения свойство указывает, какой RU используется, чтобы передать этого пользователя.
disp('First user configuration:')
disp(cfgMU.User{1})
First user configuration: wlanHEMUUser with properties: APEPLength: 100 MCS: 0 NumSpaceTimeStreams: 1 DCM: 0 ChannelCoding: 'LDPC' STAID: 0 NominalPacketPadding: 0 Read-only properties: RUNumber: 1
Количество пользователей на RU и отображение пользователей к РУССКОМУ определяются индексом выделения. UserNumbers
свойство объекта RU указывает который пользователи (элементы cfgMU.User
массив ячеек), передаются на том RU. Точно так же RUNumber
свойство каждого Пользовательского объекта, указывает который RU (элемент cfgMU.RU
массив ячеек), используется, чтобы передать пользователя:
Это позволяет свойствам RU, сопоставленного с Пользователем быть полученными доступ легко:
ruNum = cfgMU.User{2}.RUNumber; % Get the RU number associated with user 2 disp(cfgMU.RU{ruNum}.SpatialMapping); % Display the spatial mapping
Direct
Когда RU служит многому пользователю, в настройке MU-MIMO, UserNumbers
свойство может индексировать многого пользователя:
Однажды cfgMU
объект создается, параметры передачи могут быть установлены, как продемонстрировано ниже.
% Configure RU 1 and user 1 cfgMU.RU{1}.SpatialMapping = 'Direct'; cfgMU.User{1}.APEPLength = 1e3; cfgMU.User{1}.MCS = 2; cfgMU.User{1}.NumSpaceTimeStreams = 4; cfgMU.User{1}.ChannelCoding = 'LDPC'; % Configure RU 2 and user 2 cfgMU.RU{2}.SpatialMapping = 'Fourier'; cfgMU.User{2}.APEPLength = 500; cfgMU.User{2}.MCS = 3; cfgMU.User{2}.NumSpaceTimeStreams = 2; cfgMU.User{2}.ChannelCoding = 'LDPC'; % Configure RU 3 and user 3 cfgMU.RU{3}.SpatialMapping = 'Fourier'; cfgMU.User{3}.APEPLength = 100; cfgMU.User{3}.MCS = 4; cfgMU.User{3}.DCM = true; cfgMU.User{3}.NumSpaceTimeStreams = 1; cfgMU.User{3}.ChannelCoding = 'BCC';
Некоторые параметры передачи характерны для всех пользователей в передаче HE-MU.
% Configure common parameters for all users
cfgMU.NumTransmitAntennas = 4;
cfgMU.SIGBMCS = 2;
Чтобы сгенерировать форму волны HE-MU, мы сначала создаем случайный PSDU для каждого пользователя. Массив ячеек используется, чтобы сохранить PSDU для каждого пользователя, когда длины PSDU отличаются. getPSDULength()
метод возвращает вектор с необходимым PSDU на пользователя, учитывая настройку. Генератор формы волны затем используется, чтобы создать пакет.
psduLength = getPSDULength(cfgMU); psdu = cell(1,allocInfo.NumUsers); for i = 1:allocInfo.NumUsers psdu{i} = randi([0 1],psduLength(i)*8,1,'int8'); % Generate random PSDU end % Create MU packet txMUWaveform = wlanWaveformGenerator(psdu,cfgMU);
Чтобы сконфигурировать передачу OFDMA с пропускной способностью канала, больше, чем 20 МГц, индекс выделения должен быть обеспечен для каждого подканала на 20 МГц. Например, чтобы сконфигурировать передачу OFDMA на 80 МГц, четыре индекса выделения требуются. В этом примере сконфигурированы четыре РУССКИХ с 242 тонами. Индекс выделения 192
задает один RU с 242 тонами с отдельным пользователем в подканале на 20 МГц, поэтому индексы выделения [192 192 192 192]
используются, чтобы создать четыре из них РУССКИХ, более чем 80 МГц:
% Display 192 allocation index properties in the table (the 193rd row) disp('Allocation #192 table entry:') disp(allocationTable(193,:)) % Create 80 MHz MU configuration, with four 242-tone RUs cfgMU80MHz = wlanHEMUConfig([192 192 192 192]);
Allocation #192 table entry: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ _______ _____________ ____ 192 "11000000" 1 1 {[1]} {[242]} {[1]} ""
Когда подканалы на приблизительно 20 МГц заданы, ChannelBandwidth
свойство установлено в соответствующее значение. Для этой настройки это установлено в 'CBW80'
когда четыре подканала на 20 МГц заданы. Это также отображается в графике выделения.
disp('Channel bandwidth for HE-MU allocation:')
disp(cfgMU80MHz.ChannelBandwidth)
showAllocation(cfgMU80MHz,axAlloc)
Channel bandwidth for HE-MU allocation: CBW80
Пакет HE-MU может также передать 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-MU с пропускной способностью канала, больше, чем 20 МГц, два канала содержимого HE-SIG-B используются, чтобы сигнализировать о пользовательских настройках. Они удовлетворяют каналы, дублированы по каждому подканалу на 40 МГц для большей пропускной способности канала, как описано в Разделе 28.3.10.8.3 из [1]. То, когда размер RU, больше, чем 242, задан как часть системы OFDMA, пользователи присвоили RU, может быть сообщено на любом из двух каналов содержимого HE-SIG-B. Индекс выделения, обеспеченный при создании wlanHEMUConfig, возражает средствам управления, на каком канале содержимого каждый пользователь сообщен. Таблица распределения в Приложении показывает соответствующие индексы выделения.
Как пример, рассмотрите следующую настройку на 80 МГц, которая служит 7 пользователям:
Один RU с 484 тонами (RU № 1) с четырьмя пользователями (пользователи № 1-4)
Один RU с 242 тонами (RU № 2) с одним пользователем (пользователь № 5)
Два РУССКИХ с 106 тонами (RU № 3 и № 4), каждый с одним пользователем (пользователи № 6 и № 7)
Чтобы сконфигурировать передачу OFDMA на 80 МГц, четыре индекса выделения требуются, один для каждого подканала на 20 МГц. Чтобы сконфигурировать вышеупомянутый сценарий, индексы выделения ниже используются:
[X Y 192 96]
X
и Y
сконфигурируйте RU с 484 тонами с пользователями № 1-4. Возможные значения X
и Y
обсуждены ниже.
192 конфигурирует RU с 242 тонами с одним пользователем, пользователем № 5.
96 сигналы два РУССКИХ с 106 тонами, каждый с одним пользователем, пользователями № 6 и № 7.
Выбор X
и Y
конфигурирует соответствующее количество пользователей в RU с 242 тонами и определяет, который HE-SIG-B довольный канал используется, чтобы сигнализировать пользователям. RU с 484 тонами охватывает два подканала на 20 МГц, поэтому два индекса выделения требуются. Все семь пользователей от РУССКИХ четырех будут сообщены на каналах содержимого HE-SIG-B, но на данный момент мы только рассмотрим сигнализацию пользователей на RU с 484 тонами. Для RU с 484 тонами эти четыре пользователя могут быть сообщены на двух каналах содержимого HE-SIG-B в различных комбинациях как показано в Таблице 1.
Индекс выделения в области значений 200-207 задает 1-8 пользователей на RU с 484 тонами. Не сигнализировать никаким пользователям на довольном канал, индекс выделения 114
или 115
может использоваться, для RU с 996 тонами или с 448 тонами. Поэтому комбинации в Таблице 1 могут быть заданы с помощью двух индексов выделения как показано в Таблице 2. Двумя индексами выделения в каждой строке Таблицы 2 является X
и Y
.
Поэтому, чтобы сконфигурировать 'Комбинацию E' следующие индексы выделения на 80 МГц используются:
[114 203 192 96]
114 и
203
сконфигурируйте RU с 484 тонами с пользователями № 1-4.
192 конфигурирует RU с 242 тонами с одним пользователем, пользователем № 5.
96 сигналы два РУССКИХ с 106 тонами, каждый с одним пользователем, пользователями № 6 и № 7.
cfg484OFDMA = wlanHEMUConfig([114 203 192 96]); showAllocation(cfg484OFDMA,axAlloc);
Сигнализация выделения HE-SIG-B может быть просмотрена с функцией hePlotHESIGBAllocationMapping. Это показывает пользовательские поля, сообщенные на каждом довольном HE-SIG-B канал, и о каком RU и пользователе в объекте wlanHEMUConfig, каждое пользовательское поле сигнализирует. В этом случае мы видим, что пользователи на RU № 1, 3 и 4 все сообщены на довольном канал 2, и пользователь RU № 2 сообщен на довольном канал 1. Второй довольный канал сигнализирует шести пользователям, в то время как первое довольное канал только сигнализирует одному пользователю. Поэтому первое довольное канал будет надето щитки на ноги к длине второго для передачи. В схеме информация о выделении RU предоставляется в размере индекса формы, например, RU8-106 является 8-м RU с 106 тонами.
figure;
hePlotHESIGBAllocationMapping(cfg484OFDMA);
axSIGB = gca; % Get axis handle for subsequent plotting
Чтобы сбалансировать пользовательское поле, сигнализирующее в HE-SIG-B, мы можем использовать 'Комбинацию B' в Таблице 2 при создании индекса выделения для RU с 484 тонами. Это приводит к двум пользователям, сообщаемым на каждом канале содержимого HE-SIG-B, создавая лучший баланс пользовательских полей, и потенциально меньше символов HE-SIG-B в передаче.
cfg484OFDMABalanced = wlanHEMUConfig([201 201 96 192]); hePlotHESIGBAllocationMapping(cfg484OFDMABalanced,axSIGB);
В передаче на 80 МГц, когда полная полоса RU не используется, центральный RU с 26 тонами может быть опционально активным. Центральный RU с 26 тонами включен с помощью пары "имя-значение" при создании объекта wlanHEMUConfig.
% Create a configuration with no central 26-tone RU cfgNoCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',false); showAllocation(cfgNoCentral,axAlloc); % Create a configuration with a central 26-tone RU cfgCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',true); showAllocation(cfgCentral,axAlloc);
Точно так же для передачи на 160 МГц, центральный RU с 26 тонами в каждом сегменте на 80 МГц может опционально использоваться. Каждый центральный RU с 26 тонами может быть включен с помощью пар "имя-значение" при создании объекта wlanHEMUConfig. В этом примере только создается верхний центральный RU с 26 тонами. Четыре РУССКИХ с 242 тонами, каждый с одним пользователем задан с индексом выделения [200 114 114 200 200 114 114 200]
.
cfgCentral160MHz = wlanHEMUConfig([200 114 114 200 200 114 114 200],'UpperCenter26ToneRU',true);
disp(cfgCentral160MHz)
wlanHEMUConfig with properties: RU: {1×5 cell} User: {1×5 cell} NumTransmitAntennas: 1 STBC: 0 GuardInterval: 3.2000 HELTFType: 4 SIGBMCS: 0 SIGBDCM: 0 UplinkIndication: 0 BSSColor: 0 SpatialReuse: 0 TXOPDuration: 127 HighDoppler: 0 Read-only properties: ChannelBandwidth: 'CBW160' AllocationIndex: [200 114 114 200 200 114 114 200] LowerCenter26ToneRU: 0 UpperCenter26ToneRU: 1
В передаче на 160 МГц или на 80 МГц подканалы на 20 МГц могут быть проколоты, чтобы позволить унаследованной системе действовать в проколотом канале. Этот метод также описан как связывание канала. Аннулировать подканал на 20 МГц индекс выделения подканала на 20 МГц 113
может использоваться. Проколотый подканал на 20 МГц может быть просмотрен с showAllocation
метод.
% Null second lowest 20 MHz subchannel in a 160 MHz configuration cfgNull = wlanHEMUConfig([192 113 114 200 208 115 115 115]); % Plot the allocation showAllocation(cfgNull,axAlloc);
Проколотые 20 МГц могут также быть просмотрены со сгенерированной формой волны и спектром анализатор.
% Set the transmission properties of each user in all RUs cfgNull.User{1}.APEPLength = 100; cfgNull.User{1}.MCS = 2; cfgNull.User{1}.ChannelCoding = 'LDPC'; cfgNull.User{1}.NumSpaceTimeStreams = 1; cfgNull.User{2}.APEPLength = 1000; cfgNull.User{2}.MCS = 6; cfgNull.User{2}.ChannelCoding = 'LDPC'; cfgNull.User{2}.NumSpaceTimeStreams = 1; cfgNull.User{3}.APEPLength = 100; cfgNull.User{3}.MCS = 1; cfgNull.User{3}.ChannelCoding = 'LDPC'; cfgNull.User{3}.NumSpaceTimeStreams = 1; % Create packet txNullWaveform = wlanWaveformGenerator([1 0 1 0],cfgNull); spectrumAnalyzer = dsp.SpectrumAnalyzer; spectrumAnalyzer.SampleRate = wlanSampleRate(cfgNull); spectrumAnalyzer.Title = '160 MHz HE-MU Transmission with Punctured 20 MHz Channel'; spectrumAnalyzer(txNullWaveform);
Формат основанного на триггере (TB) HE допускает OFDMA или передачу MU-MIMO в восходящем канале. Каждая станция (STA) передает пакет HE-TB одновременно, когда инициировано точкой доступа (AP). Передачей HE-TB управляет полностью AP. Все параметры, требуемые для передачи, предоставляются в триггерной системе координат всему STAs, участвующему в передаче Тбайта. В этом примере сконфигурирована передача Тбайта для трех пользователей в системе OFDMA/MU-MIMO; три STAs передадут одновременно к AP.
Выделение на 20 МГц 97
используется, который соответствует двум РУССКИМ, один из которых служит двум пользователям в MU-MIMO.
disp('Allocation #97 table entry:') disp(allocationTable(98,:)) % Index 97 (row 98)
Allocation #97 table entry: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ ____________ ____________ _____________ ____ 97 "01100001" 3 2 {1×2 double} {1×2 double} {1×2 double} ""
Информация о выделении получена путем создания настройки MU с wlanHEMUConfig.
% Generate an OFDMA allocation
cfgMU = wlanHEMUConfig(97);
allocationInfo = ruInfo(cfgMU);
В передаче HE-TB несколько параметров являются тем же самым для всех пользователей в передаче. Некоторые из них заданы ниже:
% These parameters are the same for all users in the OFDMA system channelBandwidth = cfgMU.ChannelBandwidth; % Bandwidth of OFDMA system numSymbols = 20; % Number of HE data field symbols preFECPaddingFactor = 2; % Pre-FEC padding factor ldpcExtraSymbol = false; % LDPC extra symbol numHELTFSymbols = 2; % Number of HE-LTF symbols
Передача Тбайта для отдельного пользователя в системе сконфигурирована с heTBConfig
объект. В этом примере массив ячеек трех объектов создается, чтобы описать передачу этих трех пользователей.
% Create a trigger configuration for each user
numUsers = allocationInfo.NumUsers;
cfgTriggerUser = repmat({heTBConfig},1,numUsers);
Свойства в масштабе всей системы не по умолчанию установлены для каждого пользователя.
for userIdx = 1:numUsers cfgTriggerUser{userIdx}.ChannelBandwidth = channelBandwidth; cfgTriggerUser{userIdx}.NumDataSymbols = numSymbols; cfgTriggerUser{userIdx}.PreFECPaddingFactor = preFECPaddingFactor; cfgTriggerUser{userIdx}.LDPCExtraSymbol = ldpcExtraSymbol; cfgTriggerUser{userIdx}.NumHELTFSymbols = numHELTFSymbols; end
Затем свойства в расчете на пользователя установлены. Когда многий пользователь передает в том же RU в настройке MU-MIMO, каждый пользователь должен передать на различных пространственно-временных потоковых индексах. Свойства StartingSpaceTimeStream
и NumSpaceTimeStreamSteams
должен собираться для каждого пользователя убедиться, что различные пространственно-временные потоки используются. В этом пользователе в качестве примера 1 и 2 находятся в настройке MU-MIMO, поэтому StartingSpaceTimeStream
для пользователя два установлен в 2
, как пользователь каждый сконфигурирован, чтобы передать 1 пространственно-временной поток с StartingSpaceTimeStream = 1
.
% These parameters are for the first user - RU#1 MU-MIMO user 1 cfgTriggerUser{1}.RUSize = allocationInfo.RUSizes(1); cfgTriggerUser{1}.RUIndex = allocationInfo.RUIndices(1); cfgTriggerUser{1}.MCS = 4; % Modulation and coding scheme cfgTriggerUser{1}.NumSpaceTimeStreams = 1; % Number of space-time streams cfgTriggerUser{1}.NumTransmitAntennas = 1; % Number of transmit antennas cfgTriggerUser{1}.StartingSpaceTimeStream = 1; % The starting index of the space-time streams cfgTriggerUser{1}.ChannelCoding = 'LDPC'; % Channel coding % These parameters are for the second user - RU#1 MU-MIMO user 2 cfgTriggerUser{2}.RUSize = allocationInfo.RUSizes(1); cfgTriggerUser{2}.RUIndex = allocationInfo.RUIndices(1); cfgTriggerUser{2}.MCS = 3; % Modulation and coding scheme cfgTriggerUser{2}.NumSpaceTimeStreams = 1; % Number of space-time streams cfgTriggerUser{2}.StartingSpaceTimeStream = 2; % The starting index of the space-time streams cfgTriggerUser{2}.NumTransmitAntennas = 1; % Number of transmit antennas cfgTriggerUser{2}.ChannelCoding = 'LDPC'; % Channel coding % These parameters are for the third user - RU#2 cfgTriggerUser{3}.RUSize = allocationInfo.RUSizes(2); cfgTriggerUser{3}.RUIndex = allocationInfo.RUIndices(2); cfgTriggerUser{3}.MCS = 4; % Modulation and coding scheme cfgTriggerUser{3}.NumSpaceTimeStreams = 2; % Number of space-time streams cfgTriggerUser{3}.StartingSpaceTimeStream = 1; % The starting index of the space-time streams cfgTriggerUser{3}.NumTransmitAntennas = 2; % Number of transmit antennas cfgTriggerUser{3}.ChannelCoding = 'BCC'; % Channel coding
Пакет, содержащий случайные данные, теперь передается каждым пользователем с heTBWaveformGenerator
. Форма волны, переданная каждым пользователем, хранится для анализа.
trigInd = heTBFieldIndices(cfgTriggerUser{1}); % Get the indices of each field txTrigStore = zeros(trigInd.HEData(2),numUsers); for userIdx = 1:numUsers % Generate waveform for a user cfgTrigger = cfgTriggerUser{userIdx}; txPSDU = randi([0 1],getPSDULength(cfgTrigger)*8,1); txTrig = heTBWaveformGenerator(txPSDU,cfgTrigger); % Store the transmitted STA waveform for analysis txTrigStore(:,userIdx) = sum(txTrig,2); end
Спектр переданной формы волны от каждого STA показывает различные фрагменты спектра, используемого, и перекрытие в RU MU-MIMO.
spectrumAnalyzer = dsp.SpectrumAnalyzer; spectrumAnalyzer.SampleRate = heTBSampleRate(cfgTriggerUser{1}); spectrumAnalyzer.ChannelNames = {'RU#1 User 1','RU#1 User 2','RU#2'}; spectrumAnalyzer.ShowLegend = true; spectrumAnalyzer.Title = 'Transmitted HE-TB Waveform per User'; spectrumAnalyzer(txTrigStore);
Таблицу распределения RU для выделений <= 20 МГц показывают ниже с аннотируемыми описаниями.
Выделение RU и пользователя HE-SIG-B, предупреждающего для выделений> 20 МГц, показывают в приведенной ниже таблице с аннотируемыми описаниями.
Этот пример использует следующие объекты помощника и функции:
Черновой Стандарт IEEE P802.11ax™/D3.1 для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 6: Улучшения для Высокой эффективности WLAN.