В этом примере показано, как параметрировать и сгенерировать различные высокоэффективные (HE) пакеты формата IEEE® 802.11ax™.
IEEE P802.11ax/D4.1 [1] задает четыре высокоэффективных (HE) формата пакета:
Однопользовательский
Однопользовательская расширенная область значений
Многопользовательский
Основанный на триггере
В этом примере показано, как пакеты могут быть сгенерированы для этих различных форматов и демонстрируют некоторые ключевые возможности чернового стандарта [1].
HE однопользовательский (SU) пакет является передачей полной полосы отдельному пользователю. Параметры передачи для формата SU HE сконфигурированы с помощью wlanHESUConfig
объект. wlanHESUConfig
объект может быть сконфигурирован, чтобы действовать в режиме расширенной области значений. Чтобы включить или отключить этот режим, установите ExtendedRange
свойство к true
или false
. В этом примере мы создаем настройку для передачи SU HE и конфигурируем свойства передачи.
cfgSU = wlanHESUConfig; cfgSU.ExtendedRange = false; % Do not use extended-range format cfgSU.ChannelBandwidth = 'CBW20'; % Channel bandwidth cfgSU.APEPLength = 1000; % Payload length in bytes cfgSU.MCS = 0; % Modulation and coding scheme cfgSU.ChannelCoding = 'LDPC'; % Channel coding cfgSU.NumSpaceTimeStreams = 1; % Number of space-time streams cfgSU.NumTransmitAntennas = 1; % Number of transmit antennas
Однопользовательский пакет может быть сгенерирован с генератором формы волны, wlanWaveformGenerator
. getPSDULength()
метод возвращает необходимую длину PSDU, учитывая настройку передачи. Эта длина используется, чтобы создать случайный PSDU для передачи.
psdu = randi([0 1],getPSDULength(cfgSU)*8,1,'int8'); % Random PSDU txSUWaveform = wlanWaveformGenerator(psdu,cfgSU); % Create packet
Расширенная область значений однопользовательский пакет имеет те же поля как стандартный однопользовательский формат, но степени некоторых полей повышены, и некоторые поля, повторяется, чтобы улучшать производительность в низком SNRs. Пакет расширенной области значений может быть сконфигурирован с помощью wlanHESUConfig
объект с ChannelBandwidth
установите на 'CBW20'
и ExtendedRange
установите на true
. Пакет расширенной области значений имеет опцию, чтобы только передать в верхнем модуле ресурса (RU) с 106 тонами в канале на 20 МГц, или по целой пропускной способности. Это может быть сконфигурировано с Upper106ToneRU
свойство:
cfgExtSU = cfgSU; cfgExtSU.ExtendedRange = true; % Enable extended-range format cfgExtSU.Upper106ToneRU = true; % Use only upper 106-tone RU % Generate a packet psdu = randi([0 1],getPSDULength(cfgExtSU)*8,1,'int8'); % Random PSDU txExtSUWaveform = wlanWaveformGenerator(psdu,cfgExtSU); % Create packet
Посмотрите на спектр и спектрограмму сгенерированного сигнала. В спектрограмме вы видите, что пакетные заголовки используют доступную пропускную способность, однако, данные делят на части, только занимает верхнюю половину канала.
fs = wlanSampleRate(cfgExtSU); % Get baseband sample rate ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgExtSU); fftsize = ofdmInfo.FFTLength; % Use the data field fft size rbw = fs/fftsize; % Resoluton bandwidth spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,... 'Method','Filter bank','RBWSource','Property','RBW',rbw,... 'AveragingMethod','Exponential','ForgettingFactor',0.25,... 'ReducePlotRate',false,'YLimits',[-50,20],... 'Title','HE Extended-Range SU with Active Upper 106-Tone RU'); spectrumAnalyzer.ViewType = 'Spectrum and Spectrogram'; spectrumAnalyzer.TimeSpanSource = 'Property'; spectrumAnalyzer.TimeSpan = length(txExtSUWaveform)/fs; spectrumAnalyzer(txExtSUWaveform)
Если вы сравниваете степень полей L-STF и L-LTF, вы видите, что передача расширенной области значений повышена на 3 дБ.
figure; ind = wlanFieldIndices(cfgExtSU); t = (0:(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 МУ) формат может быть сконфигурирован для передачи OFDMA, передачи MU-MIMO или комбинации двух. Эта гибкость позволяет HE пакет МУ, чтобы передать отдельному пользователю по целой полосе, многому пользователю по различным частям полосы (OFDMA) или многому пользователю по той же части полосы (MU-MIMO).
Для передачи OFDMA пропускная способность канала разделена на модули ресурса (RU). RU является группой поднесущих, присвоенных одному или нескольким пользователям. RU задан размером (количество поднесущих) и индекс. Индекс RU задает местоположение RU в канале. Например, в передаче на 80 МГц существует четыре возможных RU с 242 тонами, один в каждом подканале на 20 МГц. RU# 242-1 (размер 242, индекс 1) является RU, занимающим самую низкую абсолютную частоту в 80 МГц, и RU# 242-4 (размер 242, индекс 4) является RU, занимающим самую высокую абсолютную частоту. Черновой стандарт задает возможные размеры и местоположения RU в Разделе 27.3.2.2 из [1].
Присвоение RU в передаче задано индексом выделения. Индекс выделения задан в Таблице 28-24 [1]. Для каждого подканала на 20 МГц 8-битный индекс описывает номер и размер RU и количество пользователей, переданных на каждом RU. Индекс выделения также определяет, какой канал содержимого используется, чтобы сигнализировать пользователю в HE-SIG-B. Индексы выделения в рамках Таблицы 28-24 и соответствующие присвоения RU, обеспечиваются в таблице, возвращенной функциональным heRUAllocationTable
. Первые 10 выделений в рамках таблицы показывают ниже. Для каждого индекса выделения отображены 8-битный индекс выделения, количество пользователей, количество RU, индексов RU, размеров RU и количества пользователей на RU. Примечание также предоставлено о выделениях, которые резервируются или обслуживают особое назначение. Таблица распределения может также быть просмотрена в Приложении.
allocationTable = heRUAllocationTable;
disp('First 10 entries in the allocation table: ')
disp(allocationTable(1:10,:));
First 10 entries in the allocation table: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _____________________ ______________________________ _____________________ ____ 0 "00000000" 9 9 {[1 2 3 4 5 6 7 8 9]} {[26 26 26 26 26 26 26 26 26]} {[1 1 1 1 1 1 1 1 1]} "" 1 "00000001" 8 8 {[ 1 2 3 4 5 6 7 4]} {[ 26 26 26 26 26 26 26 52]} {[ 1 1 1 1 1 1 1 1]} "" 2 "00000010" 8 8 {[ 1 2 3 4 5 3 8 9]} {[ 26 26 26 26 26 52 26 26]} {[ 1 1 1 1 1 1 1 1]} "" 3 "00000011" 7 7 {[ 1 2 3 4 5 3 4]} {[ 26 26 26 26 26 52 52]} {[ 1 1 1 1 1 1 1]} "" 4 "00000100" 8 8 {[ 1 2 2 5 6 7 8 9]} {[ 26 26 52 26 26 26 26 26]} {[ 1 1 1 1 1 1 1 1]} "" 5 "00000101" 7 7 {[ 1 2 2 5 6 7 4]} {[ 26 26 52 26 26 26 52]} {[ 1 1 1 1 1 1 1]} "" 6 "00000110" 7 7 {[ 1 2 2 5 3 8 9]} {[ 26 26 52 26 52 26 26]} {[ 1 1 1 1 1 1 1]} "" 7 "00000111" 6 6 {[ 1 2 2 5 3 4]} {[ 26 26 52 26 52 52]} {[ 1 1 1 1 1 1]} "" 8 "00001000" 8 8 {[ 1 3 4 5 6 7 8 9]} {[ 52 26 26 26 26 26 26 26]} {[ 1 1 1 1 1 1 1 1]} "" 9 "00001001" 7 7 {[ 1 3 4 5 6 7 4]} {[ 52 26 26 26 26 26 52]} {[ 1 1 1 1 1 1 1]} ""
wlanHEMUConfig
объект используется, чтобы сконфигурировать передачу HE пакет МУ. Индекс выделения для каждого подканала на 20 МГц должен быть обеспечен при создании HE объект настройки МУ, wlanHEMUConfig
. Целое число между 0 и 223, соответствуя 8-битному номеру в Таблице 28-24 [1], должно быть обеспечено для каждого подканала на 20 МГц.
Индекс выделения может быть обеспечен как десятичная или 8-битная двоичная последовательность. В этом примере HE на 20 МГц настройка МУ создается с 8-битным индексом "10000000" выделения. Это эквивалентно десятичному индексу 128 выделения. Эта настройка задает 3 RU, каждого с одним пользователем.
allocationIndex = "10000000"; % 3 RUs, 1 user per RU cfgMU = wlanHEMUConfig(allocationIndex);
showAllocation
метод визуализирует занятые RU и поднесущие для заданной настройки. Цветные блоки иллюстрируют занятые поднесущие в предHE и фрагментах HE пакета. Белый указывает, что поднесущие являются незанятыми. Фрагмент предHE иллюстрирует занятые поднесущие в полях, предшествующих HE-STF. Фрагмент HE иллюстрирует занятые поднесущие в HE-STF, HE-LTF и Поле данных HE и поэтому показывает выделение RU. Нажатие на RU отобразит информацию о RU. Номер RU соответствует i-ому элементу RU cfgMU.RU
свойство. Размер и индекс являются деталями RU. Индекс RU является i-ым возможным RU соответствующего размера RU в пропускной способности канала, например, индекс 2 является 2-м возможным RU с 106 тонами в пропускной способности канала на 20 МГц. Код пользователя соответствует i-ому Пользовательскому элементу cfgMU.User
свойство и пользовательское поле в HE-SIG-B. Обратите внимание, что средний RU (RU № 2) разделен через поднесущие DC.
showAllocation(cfgMU);
axAlloc = gca; % Get axis handle for subsequent plotting
ruInfo
метод предоставляет подробную информацию RU в настройке. В этом случае мы видим трех пользователей и три RU.
allocInfo = ruInfo(cfgMU);
disp('Allocation info:')
disp(allocInfo)
Allocation info: NumUsers: 3 NumRUs: 3 RUIndices: [1 5 2] RUSizes: [106 26 106] NumUsersPerRU: [1 1 1] NumSpaceTimeStreamsPerRU: [1 1 1] PowerBoostFactorPerRU: [1 1 1] RUNumbers: [1 2 3]
Свойства cfgMU
опишите настройку передачи. cfgMU.RU
и cfgMU.User
свойства cfgMU
массивы ячеек. Каждый элемент массивов ячеек содержит объект, который конфигурирует RU или Пользователя. Когда cfgMU
объект создается, элементы cfgMU.RU
и cfgMU.User
сконфигурированы, чтобы создать желаемое количество RU и пользователей. Каждый элемент cfgMU.RU
wlanHEMURU
объект, описывающий настройку RU. Точно так же каждый элемент cfgMU.User
wlanHEMUUser
объект, описывающий настройку Пользователя. Эту иерархию объектов показывают ниже:
В этом примере три RU заданы индексом 128 выделения, поэтому cfgMU.RU
массив ячеек с тремя элементами. Индекс и размер каждого RU сконфигурированы согласно индексу выделения, используемому, чтобы создать cfgMU
. После того, как объект создается, каждый RU может быть сконфигурирован, чтобы создать желаемую настройку передачи путем установки свойств соответствующего объекта RU. Например, пространственное отображение и фактор повышения степени могут быть сконфигурированы на RU. Size
и Index
свойства каждого RU фиксируются, если объект создается, и поэтому является свойствами только для чтения. Точно так же UserNumbers
свойство только для чтения и указывает, какой пользователь передается на RU. Для этой настройки первый RU является размером 106, индекс 1.
disp('First RU configuration:')
disp(cfgMU.RU{1})
First RU configuration: wlanHEMURU with properties: PowerBoostFactor: 1 SpatialMapping: 'Direct' Read-only properties: Size: 106 Index: 1 UserNumbers: 1
В этом примере индекс выделения задает трех пользователей в передаче, поэтому, cfgMU.User
содержит три элемента. Свойства передачи пользователей могут быть сконфигурированы путем изменения объектов отдельного пользователя, например, MCS, длина APEP и схема кодирования канала. RUNumber
только для чтения свойство указывает, какой RU используется, чтобы передать этого пользователя.
disp('First user configuration:')
disp(cfgMU.User{1})
First user configuration: wlanHEMUUser with properties: APEPLength: 100 MCS: 0 NumSpaceTimeStreams: 1 DCM: 0 ChannelCoding: 'LDPC' STAID: 0 NominalPacketPadding: 0 PostFECPaddingSource: 'mt19937ar with seed' PostFECPaddingSeed: 1 Read-only properties: RUNumber: 1
Количество пользователей на RU и отображение пользователей к RU определяются индексом выделения. UserNumbers
свойство объекта RU указывает который пользователи (элементы cfgMU.User
массив ячеек), передаются на том RU. Точно так же RUNumber
свойство каждого Пользовательского объекта, указывает который RU (элемент cfgMU.RU
массив ячеек), используется, чтобы передать пользователя:
Это позволяет свойствам RU, сопоставленного с Пользователем быть полученными доступ легко:
ruNum = cfgMU.User{2}.RUNumber; % Get the RU number associated with user 2 disp(cfgMU.RU{ruNum}.SpatialMapping); % Display the spatial mapping
Direct
Когда RU служит многому пользователю, в настройке MU-MIMO, UserNumbers
свойство может индексировать многого пользователя:
Однажды cfgMU
объект создается, параметры передачи могут быть установлены, как продемонстрировано ниже.
% Configure RU 1 and user 1 cfgMU.RU{1}.SpatialMapping = 'Direct'; cfgMU.User{1}.APEPLength = 1e3; cfgMU.User{1}.MCS = 2; cfgMU.User{1}.NumSpaceTimeStreams = 4; cfgMU.User{1}.ChannelCoding = 'LDPC'; % Configure RU 2 and user 2 cfgMU.RU{2}.SpatialMapping = 'Fourier'; cfgMU.User{2}.APEPLength = 500; cfgMU.User{2}.MCS = 3; cfgMU.User{2}.NumSpaceTimeStreams = 2; cfgMU.User{2}.ChannelCoding = 'LDPC'; % Configure RU 3 and user 3 cfgMU.RU{3}.SpatialMapping = 'Fourier'; cfgMU.User{3}.APEPLength = 100; cfgMU.User{3}.MCS = 4; cfgMU.User{3}.DCM = true; cfgMU.User{3}.NumSpaceTimeStreams = 1; cfgMU.User{3}.ChannelCoding = 'BCC';
Некоторые параметры передачи характерны для всех пользователей в HE передача МУ.
% Configure common parameters for all users
cfgMU.NumTransmitAntennas = 4;
cfgMU.SIGBMCS = 2;
Чтобы сгенерировать HE форма волны МУ, мы сначала создаем случайный PSDU для каждого пользователя. Массив ячеек используется, чтобы сохранить PSDU для каждого пользователя, когда длины PSDU отличаются. getPSDULength()
метод возвращает вектор с необходимым PSDU на пользователя, учитывая настройку. Генератор формы волны затем используется, чтобы создать пакет.
psduLength = getPSDULength(cfgMU); psdu = cell(1,allocInfo.NumUsers); for i = 1:allocInfo.NumUsers psdu{i} = randi([0 1],psduLength(i)*8,1,'int8'); % Generate random PSDU end % Create MU packet txMUWaveform = wlanWaveformGenerator(psdu,cfgMU);
Чтобы сконфигурировать передачу OFDMA с пропускной способностью канала, больше, чем 20 МГц, индекс выделения должен быть обеспечен для каждого подканала на 20 МГц. Например, чтобы сконфигурировать передачу OFDMA на 80 МГц, четыре индекса выделения требуются. В этом примере сконфигурированы четыре RU с 242 тонами. Индекс выделения 192
задает один RU с 242 тонами с отдельным пользователем в подканале на 20 МГц, поэтому индексы выделения [192 192 192 192]
используются, чтобы создать четыре из этих RU, более чем 80 МГц:
% Display 192 allocation index properties in the table (the 193rd row) disp('Allocation #192 table entry:') disp(allocationTable(193,:)) % Create 80 MHz MU configuration, with four 242-tone RUs cfgMU80MHz = wlanHEMUConfig([192 192 192 192]);
Allocation #192 table entry: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ _______ _____________ ____ 192 "11000000" 1 1 {[1]} {[242]} {[1]} ""
Когда подканалы на приблизительно 20 МГц заданы, ChannelBandwidth
свойство установлено в соответствующее значение. Для этой настройки это установлено в 'CBW80'
когда четыре подканала на 20 МГц заданы. Это также отображается в графике выделения.
disp('Channel bandwidth for HE MU allocation:')
disp(cfgMU80MHz.ChannelBandwidth)
showAllocation(cfgMU80MHz,axAlloc)
Channel bandwidth for HE MU allocation: CBW80
HE пакет МУ может также передать 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 передача МУ с пропускной способностью канала, больше, чем 20 МГц, два канала содержимого HE-SIG-B используются, чтобы сигнализировать о пользовательских настройках. Они удовлетворяют каналы, дублированы по каждому подканалу на 40 МГц для большей пропускной способности канала, как описано в Разделе 27.3.10.8.3 из [1]. То, когда размер RU, больше, чем 242, задан как часть системы OFDMA, пользователи присвоили RU, может быть сообщено на любом из двух каналов содержимого HE-SIG-B. Индекс выделения, обеспеченный при создании wlanHEMUConfig
возразите средствам управления, на каком канале содержимого каждый пользователь сообщен. Таблица распределения в Приложении показывает соответствующие индексы выделения.
Как пример, рассмотрите следующую настройку на 80 МГц, которая служит 7 пользователям:
Один RU с 484 тонами (RU № 1) с четырьмя пользователями (пользователи № 1-4)
Один RU с 242 тонами (RU № 2) с одним пользователем (пользователь № 5)
Два RU с 106 тонами (RU № 3 и № 4), каждый с одним пользователем (пользователи № 6 и № 7)
Чтобы сконфигурировать передачу OFDMA на 80 МГц, четыре индекса выделения требуются, один для каждого подканала на 20 МГц. Чтобы сконфигурировать вышеупомянутый сценарий, индексы выделения ниже используются:
[X Y 192 96]
X
и Y
сконфигурируйте RU с 484 тонами с пользователями № 1-4. Возможные значения X
и Y
обсуждены ниже.
192 конфигурирует RU с 242 тонами с одним пользователем, пользователем № 5.
96 сигналы два RU с 106 тонами, каждый с одним пользователем, пользователями № 6 и № 7.
Выбор X
и Y
конфигурирует соответствующее количество пользователей в RU с 242 тонами и определяет, который HE-SIG-B довольный канал используется, чтобы сигнализировать пользователям. RU с 484 тонами охватывает два подканала на 20 МГц, поэтому два индекса выделения требуются. Все семь пользователей от этих четырех RU будут сообщены на каналах содержимого HE-SIG-B, но на данный момент мы только рассмотрим сигнализацию пользователей на RU с 484 тонами. Для RU с 484 тонами эти четыре пользователя могут быть сообщены на двух каналах содержимого HE-SIG-B в различных комбинациях как показано в Таблице 1.
Индекс выделения в области значений 200-207 задает 1-8 пользователей на RU с 484 тонами. Не сигнализировать никаким пользователям на довольном канал, индекс выделения 114
или 115
может использоваться, для RU с 996 тонами или с 448 тонами. Поэтому комбинации в Таблице 1 могут быть заданы с помощью двух индексов выделения как показано в Таблице 2. Двумя индексами выделения в каждой строке Таблицы 2 является X
и Y
.
Поэтому, чтобы сконфигурировать 'Комбинацию E' следующие индексы выделения на 80 МГц используются:
[114 203 192 96]
114 и
203
сконфигурируйте RU с 484 тонами с пользователями № 1-4.
192 конфигурирует RU с 242 тонами с одним пользователем, пользователем № 5.
96 сигналы два RU с 106 тонами, каждый с одним пользователем, пользователями № 6 и № 7.
cfg484OFDMA = wlanHEMUConfig([114 203 192 96]); showAllocation(cfg484OFDMA,axAlloc);
Чтобы просмотреть сигнализацию выделения HE-SIG-B, используйте hePlotHESIGBAllocationMapping
функция. Это показывает пользовательские поля, сообщенные на каждом довольном HE-SIG-B канал, и который RU и пользователь в wlanHEMUConfig
объект, каждое пользовательское поле сигналы. В этом случае мы видим, что пользователи на RU № 1, 3 и 4 все сообщены на довольном канал 2, и пользователь RU № 2 сообщен на довольном канал 1. Второй довольный канал сигнализирует шести пользователям, в то время как первое довольное канал только сигнализирует одному пользователю. Поэтому первое довольное канал будет надето щитки на ноги к длине второго для передачи. В схеме информация о выделении RU предоставляется в размере индекса формы, e.g. RU8-106 является 8-м RU с 106 тонами.
figure;
hePlotHESIGBAllocationMapping(cfg484OFDMA);
axSIGB = gca; % Get axis handle for subsequent plotting
Чтобы сбалансировать пользовательское поле, сигнализирующее в HE-SIG-B, мы можем использовать 'Комбинацию B' в Таблице 2 при создании индекса выделения для RU с 484 тонами. Это приводит к двум пользователям, сообщаемым на каждом канале содержимого HE-SIG-B, создавая лучший баланс пользовательских полей, и потенциально меньше символов HE-SIG-B в передаче.
cfg484OFDMABalanced = wlanHEMUConfig([201 201 96 192]); hePlotHESIGBAllocationMapping(cfg484OFDMABalanced,axSIGB);
В передаче на 80 МГц, когда полная полоса RU не используется, центральный RU с 26 тонами может быть опционально активным. Центральный RU с 26 тонами включен с помощью пары "имя-значение" при создании wlanHEMUConfig
объект.
% Create a configuration with no central 26-tone RU cfgNoCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',false); showAllocation(cfgNoCentral,axAlloc); % Create a configuration with a central 26-tone RU cfgCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',true); showAllocation(cfgCentral,axAlloc);
Точно так же для передачи на 160 МГц, центральный RU с 26 тонами в каждом сегменте на 80 МГц может опционально использоваться. Каждый центральный RU с 26 тонами может быть включен с помощью пар "имя-значение" при создании wlanHEMUConfig
объект. В этом примере только создается верхний центральный RU с 26 тонами. Четыре RU с 242 тонами, каждый с одним пользователем задан с индексом выделения [200 114 114 200 200 114 114 200]
.
cfgCentral160MHz = wlanHEMUConfig([200 114 114 200 200 114 114 200],'UpperCenter26ToneRU',true);
disp(cfgCentral160MHz)
wlanHEMUConfig with properties: RU: {1x5 cell} User: {1x5 cell} PrimarySubchannel: 1 NumTransmitAntennas: 1 STBC: 0 GuardInterval: 3.2000 HELTFType: 4 SIGBMCS: 0 SIGBDCM: 0 UplinkIndication: 0 BSSColor: 0 SpatialReuse: 0 TXOPDuration: 127 HighDoppler: 0 Read-only properties: ChannelBandwidth: 'CBW160' AllocationIndex: [200 114 114 200 200 114 114 200] LowerCenter26ToneRU: 0 UpperCenter26ToneRU: 1
В передаче на 160 МГц или на 80 МГц подканалы на 20 МГц могут быть проколоты, чтобы позволить унаследованной системе действовать в проколотом канале. Этот метод также описан как связывание канала. Аннулировать подканал на 20 МГц индекс выделения подканала на 20 МГц 113
может использоваться. Проколотый подканал на 20 МГц может быть просмотрен с showAllocation
метод.
% Null second lowest 20 MHz subchannel in a 160 MHz configuration cfgNull = wlanHEMUConfig([192 113 114 200 208 115 115 115]); % Plot the allocation showAllocation(cfgNull,axAlloc);
Проколотые 20 МГц могут также быть просмотрены со сгенерированной формой волны и спектром анализатор.
% Set the transmission properties of each user in all RUs cfgNull.User{1}.APEPLength = 100; cfgNull.User{1}.MCS = 2; cfgNull.User{1}.ChannelCoding = 'LDPC'; cfgNull.User{1}.NumSpaceTimeStreams = 1; cfgNull.User{2}.APEPLength = 1000; cfgNull.User{2}.MCS = 6; cfgNull.User{2}.ChannelCoding = 'LDPC'; cfgNull.User{2}.NumSpaceTimeStreams = 1; cfgNull.User{3}.APEPLength = 100; cfgNull.User{3}.MCS = 1; cfgNull.User{3}.ChannelCoding = 'LDPC'; cfgNull.User{3}.NumSpaceTimeStreams = 1; % Create packet txNullWaveform = wlanWaveformGenerator([1 0 1 0],cfgNull); % Visualize signal spectrum fs = wlanSampleRate(cfgNull); ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgNull,1); fftsize = ofdmInfo.FFTLength; spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,... 'AveragingMethod','Exponential','ForgettingFactor',0.99,... 'RBWSource','Property','RBW',fs/fftsize,... 'Title','160 MHz HE MU Transmission with Punctured 20 MHz Channel'); spectrumAnalyzer(txNullWaveform);
Формат основанного на триггере (TB) HE допускает OFDMA или передачу MU-MIMO в восходящем канале. Каждая станция (STA) передает пакет Тбайта одновременно, когда инициировано точкой доступа (AP). Передачей Тбайта управляет полностью AP. Все параметры, требуемые для передачи, предоставляются в триггерной системе координат всему STAs, участвующему в передаче Тбайта. В этом примере сконфигурирована передача Тбайта в ответ на триггерную систему координат для трех пользователей в системе OFDMA/MU-MIMO; три STAs передадут одновременно к AP.
Выделение на 20 МГц 97
используется, который соответствует двум RU, один из которых служит двум пользователям в MU-MIMO.
disp('Allocation #97 table entry:') disp(allocationTable(98,:)) % Index 97 (row 98)
Allocation #97 table entry: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ ___________ _____________ ____ 97 "01100001" 3 2 {[1 2]} {[106 106]} {[1 2]} ""
Информация о выделении получена путем создания настройки MU с wlanHEMUConfig
.
% Generate an OFDMA allocation
cfgMU = wlanHEMUConfig(97);
allocationInfo = ruInfo(cfgMU);
В передаче Тбайта несколько параметров являются тем же самым для всех пользователей в передаче. Некоторые из них заданы ниже:
% These parameters are the same for all users in the OFDMA system trgMethod = 'TriggerFrame'; % Method used to trigger an HE TB PPDU channelBandwidth = cfgMU.ChannelBandwidth; % Bandwidth of OFDMA system lsigLength = 142; % L-SIG length preFECPaddingFactor = 2; % Pre-FEC padding factor ldpcExtraSymbol = false; % LDPC extra symbol numHELTFSymbols = 2; % Number of HE-LTF symbols
Передача Тбайта для отдельного пользователя в системе сконфигурирована с wlanHETBConfig
объект. В этом примере массив ячеек трех объектов создается, чтобы описать передачу этих трех пользователей.
% Create a trigger configuration for each user
numUsers = allocationInfo.NumUsers;
cfgTriggerUser = repmat({wlanHETBConfig},1,numUsers);
Свойства в масштабе всей системы не по умолчанию установлены для каждого пользователя.
for userIdx = 1:numUsers cfgTriggerUser{userIdx}.TriggerMethod = trgMethod; cfgTriggerUser{userIdx}.ChannelBandwidth = channelBandwidth; cfgTriggerUser{userIdx}.LSIGLength = lsigLength; cfgTriggerUser{userIdx}.PreFECPaddingFactor = preFECPaddingFactor; cfgTriggerUser{userIdx}.LDPCExtraSymbol = ldpcExtraSymbol; cfgTriggerUser{userIdx}.NumHELTFSymbols = numHELTFSymbols; end
Затем свойства в расчете на пользователя установлены. Когда многий пользователь передает в том же RU в настройке MU-MIMO, каждый пользователь должен передать на различных пространственно-временных потоковых индексах. Свойства StartingSpaceTimeStream
и NumSpaceTimeStreamSteams
должен собираться для каждого пользователя убедиться, что различные пространственно-временные потоки используются. В этом пользователе в качестве примера 1 и 2 находятся в настройке MU-MIMO, поэтому StartingSpaceTimeStream
для пользователя два установлен в 2
, как пользователь каждый сконфигурирован, чтобы передать 1 пространственно-временной поток с StartingSpaceTimeStream = 1
.
% These parameters are for the first user - RU#1 MU-MIMO user 1 cfgTriggerUser{1}.RUSize = allocationInfo.RUSizes(1); cfgTriggerUser{1}.RUIndex = allocationInfo.RUIndices(1); cfgTriggerUser{1}.MCS = 4; % Modulation and coding scheme cfgTriggerUser{1}.NumSpaceTimeStreams = 1; % Number of space-time streams cfgTriggerUser{1}.NumTransmitAntennas = 1; % Number of transmit antennas cfgTriggerUser{1}.StartingSpaceTimeStream = 1; % The starting index of the space-time streams cfgTriggerUser{1}.ChannelCoding = 'LDPC'; % Channel coding % These parameters are for the second user - RU#1 MU-MIMO user 2 cfgTriggerUser{2}.RUSize = allocationInfo.RUSizes(1); cfgTriggerUser{2}.RUIndex = allocationInfo.RUIndices(1); cfgTriggerUser{2}.MCS = 3; % Modulation and coding scheme cfgTriggerUser{2}.NumSpaceTimeStreams = 1; % Number of space-time streams cfgTriggerUser{2}.StartingSpaceTimeStream = 2; % The starting index of the space-time streams cfgTriggerUser{2}.NumTransmitAntennas = 1; % Number of transmit antennas cfgTriggerUser{2}.ChannelCoding = 'LDPC'; % Channel coding % These parameters are for the third user - RU#2 cfgTriggerUser{3}.RUSize = allocationInfo.RUSizes(2); cfgTriggerUser{3}.RUIndex = allocationInfo.RUIndices(2); cfgTriggerUser{3}.MCS = 4; % Modulation and coding scheme cfgTriggerUser{3}.NumSpaceTimeStreams = 2; % Number of space-time streams cfgTriggerUser{3}.StartingSpaceTimeStream = 1; % The starting index of the space-time streams cfgTriggerUser{3}.NumTransmitAntennas = 2; % Number of transmit antennas cfgTriggerUser{3}.ChannelCoding = 'BCC'; % Channel coding
Пакет, содержащий случайные данные, теперь передается каждым пользователем с wlanWaveformGenerator
. Форма волны, переданная каждым пользователем, хранится для анализа.
trigInd = wlanFieldIndices(cfgTriggerUser{1}); % Get the indices of each field txTrigStore = zeros(trigInd.HEData(2),numUsers); for userIdx = 1:numUsers % Generate waveform for a user cfgTrigger = cfgTriggerUser{userIdx}; txPSDU = randi([0 1],getPSDULength(cfgTrigger)*8,1); txTrig = wlanWaveformGenerator(txPSDU,cfgTrigger); % Store the transmitted STA waveform for analysis txTrigStore(:,userIdx) = sum(txTrig,2); end
Спектр переданной формы волны от каждого STA показывает различные фрагменты спектра, используемого, и перекрытие в RU MU-MIMO.
fs = wlanSampleRate(cfgTriggerUser{1}); ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgTriggerUser{1}); spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,... 'AveragingMethod','Running','SpectralAverages',1,... 'ChannelNames', {'RU#1 User 1','RU#1 User 2','RU#2'},... 'ShowLegend',true,'Title','Transmitted HE TB Waveform per User'); spectrumAnalyzer(txTrigStore);
Таблицу распределения RU для выделений <= 20 МГц показывают ниже с аннотируемыми описаниями.
Выделение RU и пользователя HE-SIG-B, предупреждающего для выделений> 20 МГц, показывают в приведенной ниже таблице с аннотируемыми описаниями.
Черновой Стандарт IEEE P802.11ax™/D4.1 для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования - Поправка 6: Улучшения для Высокой эффективности WLAN.