В этом примере показано, как параметризовать и сгенерировать различные пакеты в формате IEEE ® 802.11ax™ высокой эффективностью (HE).
IEEE P802.11ax/D4.1 [1] задает четыре высокоэффективных (HE) форматов пакета:
Однопользовательский
Однопользовательский диапазон расширенного диапазона
Многопользовательский
Триггер на основе
Этот пример показывает, как пакеты могут быть сгенерированы для этих различных форматов, и демонстрирует некоторые ключевые функции проекта стандарта [1].
Пакет HE с одним пользователем (SU) является полнополосной передачей одному пользователю. Параметры передачи для формата HE SU конфигурируются с помощью wlanHESUConfig
объект. The wlanHESUConfig
объект может быть сконфигурирован для работы в режиме расширенного диапазона. Чтобы включить или отключить этот режим, установите ExtendedRange
свойство к true
или false
. В этом примере мы создадим строение для передачи HE SU и сконфигурируем свойства передачи.
cfgSU = wlanHESUConfig; cfgSU.ExtendedRange = false; % Do not use extended-range format cfgSU.ChannelBandwidth = 'CBW20'; % Channel bandwidth cfgSU.APEPLength = 1000; % Payload length in bytes cfgSU.MCS = 0; % Modulation and coding scheme cfgSU.ChannelCoding = 'LDPC'; % Channel coding cfgSU.NumSpaceTimeStreams = 1; % Number of space-time streams cfgSU.NumTransmitAntennas = 1; % Number of transmit antennas
Однопользовательский пакет может быть сгенерирован генератором формы волны, wlanWaveformGenerator
. The getPSDULength()
метод возвращает необходимую длину PSDU, учитывая строение передачи. Эта длина используется для создания случайного PSDU для передачи.
psdu = randi([0 1],getPSDULength(cfgSU)*8,1,'int8'); % Random PSDU txSUWaveform = wlanWaveformGenerator(psdu,cfgSU); % Create packet
Однопользовательский пакет расширенного диапазона имеет те же поля, что и стандартный однопользовательский формат, но степени некоторых полей повышаются, и некоторые поля повторяются, чтобы улучшить эффективность при низких ОСШ. Пакет расширенного диапазона может быть сконфигурирован с помощью wlanHESUConfig
объект с ChannelBandwidth
установлено на 'CBW20'
и ExtendedRange
установлено на true
. Пакет расширенного диапазона имеет опцию передачи только в верхнем ресурсном модуле 106-тонального сигнала (RU) в канале 20 МГц или по всей полосе пропускания. Это может быть сконфигурировано с помощью Upper106ToneRU
свойство:
cfgExtSU = cfgSU; cfgExtSU.ExtendedRange = true; % Enable extended-range format cfgExtSU.Upper106ToneRU = true; % Use only upper 106-tone RU % Generate a packet psdu = randi([0 1],getPSDULength(cfgExtSU)*8,1,'int8'); % Random PSDU txExtSUWaveform = wlanWaveformGenerator(psdu,cfgExtSU); % Create packet
Посмотрите на спектр и спектрограмму сгенерированного сигнала. В спектрограмме видно, что заголовки пакетов используют доступную полосу пропускания, однако фрагмент данных занимает только верхнюю половину канала.
fs = wlanSampleRate(cfgExtSU); % Get baseband sample rate ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgExtSU); fftsize = ofdmInfo.FFTLength; % Use the data field fft size rbw = fs/fftsize; % Resoluton bandwidth spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,... 'Method','Filter bank','RBWSource','Property','RBW',rbw,... 'AveragingMethod','Exponential','ForgettingFactor',0.25,... 'ReducePlotRate',false,'YLimits',[-50,20],... 'Title','HE Extended-Range SU with Active Upper 106-Tone RU'); spectrumAnalyzer.ViewType = 'Spectrum and Spectrogram'; spectrumAnalyzer.TimeSpanSource = 'Property'; spectrumAnalyzer.TimeSpan = length(txExtSUWaveform)/fs; spectrumAnalyzer(txExtSUWaveform)
Если вы сравните степень полей L-STF и L-LTF, то увидите, что коробка передач расширенного диапазона усилена на 3 дБ.
figure; ind = wlanFieldIndices(cfgExtSU); t = (0:(ind.LLTF(2)-1))/fs*1e6; plot(t,20*log10(movmean(abs(txSUWaveform(1:ind.LLTF(2))),20)),'-b') hold on; plot(t,20*log10(movmean(abs(txExtSUWaveform(1:ind.LLTF(2))),20)),'-r') grid on; title('Power of L-STF and L-LTF (1 us Moving Average)'); xlabel('Time (us)'); ylabel('Power (dBW)'); legend('HE SU','HE Extended-Range SU','Location','SouthWest');
Многопользовательский формат HE (HE MU) может быть сконфигурирован для передачи OFDMA, передачи MU-MIMO или их комбинации. Эта гибкость позволяет пакету HE MU передавать одному пользователю по всей полосе, многим пользователям по разным частям полосы (OFDMA) или многим пользователям по одной и той же части полосы (MU-MIMO).
Для передачи OFDMA пропускная способность канала разделена на ресурсные модули (RU). RU является группой поднесущих, назначенных одному или нескольким пользователям. RU определяется размером (количеством поднесущих) и индексом. Индекс RU определяет местоположение RU в канале. Для примера в трансмиссии 80 МГц существует четыре возможных 242-тональных RU, по одному в каждом подканале 20 МГц. RU # 242-1 (размер 242, индекс 1) - RU, занимающее самую низкую абсолютную частоту в пределах 80 МГц, а RU # 242-4 (размер 242, индекс 4) - RU, занимающее самую высокую абсолютную частоту. Проект стандарта определяет возможные размеры и местоположение RU в разделе 27.3.2.2 [1].
Назначение RU в передаче определяется индексом выделения. Индекс распределения определяется в таблице 28-24 [1]. Для каждого подканала 20 МГц 8-битный индекс описывает количество и размер RU, и количество пользователей, переданных на каждом RU. Индекс выделения также определяет, какой канал содержимого используется для сигнала пользователю в HE-SIG-B. Индексы распределения в таблице 28-24 и соответствующие назначения RU приведены в таблице, возвращаемой функцией heRUAllocationTable
. Первые 10 ассигнований в таблице показаны ниже. Для каждого индекса выделения отображаются 8-битный индекс выделения, количество пользователей, количество RU, индексы RU, размеры RU и количество пользователей на RU. Также приводится примечание об ассигнованиях, которые зарезервированы или служат специальному назначению. Таблица распределения также можно просмотреть в Приложении.
allocationTable = heRUAllocationTable;
disp('First 10 entries in the allocation table: ')
disp(allocationTable(1:10,:));
First 10 entries in the allocation table: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _____________________ ______________________________ _____________________ ____ 0 "00000000" 9 9 {[1 2 3 4 5 6 7 8 9]} {[26 26 26 26 26 26 26 26 26]} {[1 1 1 1 1 1 1 1 1]} "" 1 "00000001" 8 8 {[ 1 2 3 4 5 6 7 4]} {[ 26 26 26 26 26 26 26 52]} {[ 1 1 1 1 1 1 1 1]} "" 2 "00000010" 8 8 {[ 1 2 3 4 5 3 8 9]} {[ 26 26 26 26 26 52 26 26]} {[ 1 1 1 1 1 1 1 1]} "" 3 "00000011" 7 7 {[ 1 2 3 4 5 3 4]} {[ 26 26 26 26 26 52 52]} {[ 1 1 1 1 1 1 1]} "" 4 "00000100" 8 8 {[ 1 2 2 5 6 7 8 9]} {[ 26 26 52 26 26 26 26 26]} {[ 1 1 1 1 1 1 1 1]} "" 5 "00000101" 7 7 {[ 1 2 2 5 6 7 4]} {[ 26 26 52 26 26 26 52]} {[ 1 1 1 1 1 1 1]} "" 6 "00000110" 7 7 {[ 1 2 2 5 3 8 9]} {[ 26 26 52 26 52 26 26]} {[ 1 1 1 1 1 1 1]} "" 7 "00000111" 6 6 {[ 1 2 2 5 3 4]} {[ 26 26 52 26 52 52]} {[ 1 1 1 1 1 1]} "" 8 "00001000" 8 8 {[ 1 3 4 5 6 7 8 9]} {[ 52 26 26 26 26 26 26 26]} {[ 1 1 1 1 1 1 1 1]} "" 9 "00001001" 7 7 {[ 1 3 4 5 6 7 4]} {[ 52 26 26 26 26 26 52]} {[ 1 1 1 1 1 1 1]} ""
A wlanHEMUConfig
объект используется для конфигурирования передачи пакета HE MU. Индекс выделения для каждого подканала 20 МГц должен быть предоставлен при создании объекта строения HE MU, wlanHEMUConfig
. Для каждого подканала 20 МГц должно быть предусмотрено целое число от 0 до 223, соответствующее 8-битовому числу в таблице 28-24 [1].
Индекс выделения может быть предоставлен в виде десятичной или 8-битовой двоичной последовательности. В этом примере создаётся строение HE MU на 20 МГц с 8-битным индексом выделения «10000000». Это эквивалентно индексу 128 десятичного распределения. Это строение задаёт 3 RU, каждый с одним пользователем.
allocationIndex = "10000000"; % 3 RUs, 1 user per RU cfgMU = wlanHEMUConfig(allocationIndex);
The showAllocation
способ визуализирует занятые RU и поднесущие для заданного строения. Цветные блоки иллюстрируют занятые поднесущие в частях пакета pre-HE и HE. Белый указывает, что поднесущие не заняты. Фрагмент pre-HE иллюстрирует занятые поднесущие в полях, предшествующих HE-STF. Фрагмент HE иллюстрирует занятые поднесущие в поле HE-STF, HE-LTF и HE-Data и, следовательно, показывает распределение RU. При нажатии на RU появится информация о RU. Номер RU соответствует i-му элементу RU cfgMU.RU
свойство. Размер и индекс - подробности RU. Индекс RU является i-м возможным RU соответствующего размера RU в пределах полосы пропускания канала, например, индекс 2 является 2-м возможным RU с 106 тонами в пределах полосы пропускания канала 20 МГц. Номер пользователя соответствует i-му элементу User cfgMU.User
свойство и пользовательское поле в HE-SIG-B. Обратите внимание, что средний RU (RU # 2) разделен на поднесущие постоянного тока.
showAllocation(cfgMU);
axAlloc = gca; % Get axis handle for subsequent plotting
The 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
опишите строение передачи. The 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. The 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 определяется индексом выделения. The UserNumbers
свойство объекта RU указывает, какие пользователи (элементы cfgMU.User
Массивы ячеек) передаются на этом RU. Точно так же RUNumber
свойство каждого объекта User, указывает, какой RU (элемент cfgMU.RU
массив ячеек) используется для передачи пользователю:
Это позволяет легко обращаться к свойствам RU, сопоставленным с Пользователем:
ruNum = cfgMU.User{2}.RUNumber; % Get the RU number associated with user 2 disp(cfgMU.RU{ruNum}.SpatialMapping); % Display the spatial mapping
Direct
Когда RU обслуживает многих пользователей, в строении MU-MIMO UserNumbers
свойство может индексировать многих пользователей:
Один раз в cfgMU
создается объект, параметры передачи могут быть установлены как показано ниже.
% Configure RU 1 and user 1 cfgMU.RU{1}.SpatialMapping = 'Direct'; cfgMU.User{1}.APEPLength = 1e3; cfgMU.User{1}.MCS = 2; cfgMU.User{1}.NumSpaceTimeStreams = 4; cfgMU.User{1}.ChannelCoding = 'LDPC'; % Configure RU 2 and user 2 cfgMU.RU{2}.SpatialMapping = 'Fourier'; cfgMU.User{2}.APEPLength = 500; cfgMU.User{2}.MCS = 3; cfgMU.User{2}.NumSpaceTimeStreams = 2; cfgMU.User{2}.ChannelCoding = 'LDPC'; % Configure RU 3 and user 3 cfgMU.RU{3}.SpatialMapping = 'Fourier'; cfgMU.User{3}.APEPLength = 100; cfgMU.User{3}.MCS = 4; cfgMU.User{3}.DCM = true; cfgMU.User{3}.NumSpaceTimeStreams = 1; cfgMU.User{3}.ChannelCoding = 'BCC';
Некоторые параметры передачи являются общими для всех пользователей в передаче HE MU.
% Configure common parameters for all users
cfgMU.NumTransmitAntennas = 4;
cfgMU.SIGBMCS = 2;
Чтобы сгенерировать сигнал HE MU, мы сначала создадим случайный PSDU для каждого пользователя. Массив ячеек используется для хранения PSDU для каждого пользователя, поскольку длины PSDU различаются. The getPSDULength()
метод возвращает вектор с необходимым PSDU для каждого пользователя при заданном строении. Затем генератор формы волны используется для создания пакета.
psduLength = getPSDULength(cfgMU); psdu = cell(1,allocInfo.NumUsers); for i = 1:allocInfo.NumUsers psdu{i} = randi([0 1],psduLength(i)*8,1,'int8'); % Generate random PSDU end % Create MU packet txMUWaveform = wlanWaveformGenerator(psdu,cfgMU);
Чтобы сконфигурировать передачу OFDMA с пропускной способностью канала, превышающей 20 МГц, для каждого подканала 20 МГц должен быть предусмотрен индекс выделения. Для примера, чтобы сконфигурировать передачу OFDMA на 80 МГц, требуются четыре индексов выделения. В этом примере сконфигурированы четыре 242-тональных RU. Индекс выделения 192
задает один 242-тональный RU с одним пользователем в подканале 20 МГц, поэтому индексы выделения [192 192 192 192]
используются для создания четырех из этих RU, более 80 МГц:
% Display 192 allocation index properties in the table (the 193rd row) disp('Allocation #192 table entry:') disp(allocationTable(193,:)) % Create 80 MHz MU configuration, with four 242-tone RUs cfgMU80MHz = wlanHEMUConfig([192 192 192 192]);
Allocation #192 table entry: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ _______ _____________ ____ 192 "11000000" 1 1 {[1]} {[242]} {[1]} ""
Когда задано несколько подканалов на 20 МГц, ChannelBandwidth
для свойства задано соответствующее значение. Для этого строения установлено значение 'CBW80'
как заданы четыре подканала 20 МГц. Это также видно на графике выделения.
disp('Channel bandwidth for HE MU allocation:')
disp(cfgMU80MHz.ChannelBandwidth)
showAllocation(cfgMU80MHz,axAlloc)
Channel bandwidth for HE MU allocation: CBW80
Пакет HE MU может также передавать RU многим пользователям, используя MU-MIMO. Для выделения полной полосы MU-MIMO, индексы выделения между 192 и 199 конфигурируют выделение полного диапазона 20 МГц (242-тональный RU). Индекс в этой области значений определяет, сколько пользователей настроено. Подробные данные перерасчета можно просмотреть в таблице перерасчета. Обратите внимание на NumUsers
столбец в таблице растет с индексом, но NumRUs
всегда равен 1. Таблица распределения также можно просмотреть в Приложении.
disp('Allocation #192-199 table entries:') disp(allocationTable(193:200,:)) % Indices 192-199 (rows 193 to 200)
Allocation #192-199 table entries: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ _______ _____________ ____ 192 "11000000" 1 1 {[1]} {[242]} {[1]} "" 193 "11000001" 2 1 {[1]} {[242]} {[2]} "" 194 "11000010" 3 1 {[1]} {[242]} {[3]} "" 195 "11000011" 4 1 {[1]} {[242]} {[4]} "" 196 "11000100" 5 1 {[1]} {[242]} {[5]} "" 197 "11000101" 6 1 {[1]} {[242]} {[6]} "" 198 "11000110" 7 1 {[1]} {[242]} {[7]} "" 199 "11000111" 8 1 {[1]} {[242]} {[8]} ""
Индекс выделения 193
передает 20 МГц 242-тоновый RU двум пользователям. В этом примере мы создадим передачу с матрицей случайного пространственного отображения, которая отображает один пространственно-временной поток для каждого пользователя на две передающие антенны.
% Configure 2 users in a 20 MHz channel cfgMUMIMO = wlanHEMUConfig(193); % Set the transmission properties of each user cfgMUMIMO.User{1}.APEPLength = 100; % Bytes cfgMUMIMO.User{1}.MCS = 2; cfgMUMIMO.User{1}.ChannelCoding = 'LDPC'; cfgMUMIMO.User{1}.NumSpaceTimeStreams = 1; cfgMUMIMO.User{2}.APEPLength = 1000; % Bytes cfgMUMIMO.User{2}.MCS = 6; cfgMUMIMO.User{2}.ChannelCoding = 'LDPC'; cfgMUMIMO.User{2}.NumSpaceTimeStreams = 1; % Get the number of occupied subcarriers in the RU ruIndex = 1; % Get the info for the first (and only) RU ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgMUMIMO,ruIndex); numST = ofdmInfo.NumTones; % Number of occupied subcarriers % Set the number of transmit antennas and generate a random spatial mapping % matrix numTx = 2; allocInfo = ruInfo(cfgMUMIMO); numSTS = allocInfo.NumSpaceTimeStreamsPerRU(ruIndex); cfgMUMIMO.NumTransmitAntennas = numTx; cfgMUMIMO.RU{ruIndex}.SpatialMapping = 'Custom'; cfgMUMIMO.RU{ruIndex}.SpatialMappingMatrix = rand(numST,numSTS,numTx); % Create packet with a repeated bit sequence as the PSDU txMUMIMOWaveform = wlanWaveformGenerator([1 0 1 0],cfgMUMIMO);
Полная полоса передача MU-MIMO с пропускной способностью канала, превышающей 20 МГц, создается путем обеспечения единого индекса выделения RU в пределах области значений 200-223 при создании wlanHEMUConfig
объект. Для этих присвоений используется сжатие HE-SIG-B.
Индексы распределения между 200 и 207 конфигурируют полнополосное выделение MU-MIMO 40 МГц (484-тональное RU). Индекс в этой области значений определяет, сколько пользователей настроено. Подробные данные перерасчета можно просмотреть в таблице перерасчета. Обратите внимание на NumUsers
столбец в таблице растет с индексом, но NumRUs
всегда равен 1.
disp('Allocation #200-207 table entries:') disp(allocationTable(201:208,:)) % Indices 200-207 (rows 201 to 208)
Allocation #200-207 table entries: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ _______ _____________ ____ 200 "11001000" 1 1 {[1]} {[484]} {[1]} "" 201 "11001001" 2 1 {[1]} {[484]} {[2]} "" 202 "11001010" 3 1 {[1]} {[484]} {[3]} "" 203 "11001011" 4 1 {[1]} {[484]} {[4]} "" 204 "11001100" 5 1 {[1]} {[484]} {[5]} "" 205 "11001101" 6 1 {[1]} {[484]} {[6]} "" 206 "11001110" 7 1 {[1]} {[484]} {[7]} "" 207 "11001111" 8 1 {[1]} {[484]} {[8]} ""
Точно так же индексы распределения между 208 и 215 конфигурируют полнополосное выделение MU-MIMO 80 МГц (996-тоновое RU), а индексы распределения между 216 и 223 конфигурируют полнополосное выделение MU-MIMO 160 МГц (2x996
Как пример, индекс выделения 203
задает RU с 484 тонами с 4 пользователями:
cfg484MU = wlanHEMUConfig(203); showAllocation(cfg484MU,axAlloc)
Для передачи HE MU с пропускной способностью канала более 20 МГц для сигнализации пользовательских строений используются два канала содержимого HE-SIG-B. Эти каналы контента дублируются по каждому подканалу 40 МГц для больших пропускных способностей канала, как описано в разделе 27.3.10.8.3 [1]. Когда размер RU, больший 242, задан как часть системы OFDMA, пользователи, назначенные RU, могут сигнализировать по любому из двух каналов содержимого HE-SIG-B. Индекс выделения, предоставляемый при создании wlanHEMUConfig
объект управляет тем, какой канал содержимого сигнализируется каждому пользователю. Таблица присвоения в Приложении показывает соответствующие индексы присвоения.
В качестве примера рассмотрим следующее строение 80 МГц, которая обслуживает 7 пользователей:
Один 484-тональный RU (RU # 1) с четырьмя пользователями (пользователи # 1-4)
Один 242-тональный RU (RU # 2) с одним пользователем (пользователь # 5)
Два 106-тональных RU (RU # 3 и # 4), каждый с одним пользователем (пользователи # 6 и # 7)
Чтобы сконфигурировать передачу OFDMA на 80 МГц, необходимо четыре индексов распределения, по одному для каждого подканала 20 МГц. Для настройки вышеописанного сценария используются следующие индексы распределения:
[X Y 192 96]
X
и Y
сконфигурируйте 484-тональный RU с пользователями # 1-4. Возможные значения X
и Y
обсуждаются ниже.
192
конфигурирует 242-тональный RU с одним пользователем, пользователем # 5.
96
сигнализирует о двух 106-тональных RU, каждый с одним пользователем, пользователями # 6 и # 7.
Выбор X
и Y
конфигурирует соответствующее количество пользователей в 242-тональном RU и определяет, какой канал содержимого HE-SIG-B используется для сигнализации пользователей. RU с 484 тонами охватывает два подканала на 20 МГц, поэтому требуются два индексов распределения. Все семь пользователей из четырех RU будут сигнализированы по содержимому каналам HE-SIG-B, а пока мы будем рассматривать только сигнализацию пользователей по 484-тональному RU. Для RU 484-тонального сигнала четыре пользователя могут сигнализировать по двум каналам содержимого HE-SIG-B в различных комбинациях, как показано в таблице 1.
Индекс выделения в области значений 200-207 задает 1-8 пользователей на RU с 484 тонами. Чтобы не сигнализировать пользователям о канале содержимого, индекс выделения 114
или 115
может использоваться для 448-тонального или 996-тонального RU. Поэтому комбинации в таблице 1 могут быть определены с помощью двух индексов распределения, как показано в таблице 2. Два индекса распределения в каждой строке таблицы 2 X
и Y
.
Поэтому для конфигурирования 'Combination E' используются следующие индексы выделения 80 МГц:
[114 203 192 96]
114
и 203
сконфигурируйте 484-тональный RU с пользователями # 1-4.
192
конфигурирует 242-тональный RU с одним пользователем, пользователем # 5.
96
сигнализирует о двух 106-тональных RU, каждый с одним пользователем, пользователями # 6 и # 7.
cfg484OFDMA = wlanHEMUConfig([114 203 192 96]); showAllocation(cfg484OFDMA,axAlloc);
Для просмотра сигнализации выделения HE-SIG-B используйте hePlotHESIGBAllocationMapping
функция. Это показывает пользовательские поля, сигнализируемые по каждому содержимому каналу HE-SIG-B, и какие RU и пользователь в wlanHEMUConfig
объект, каждый сигнал пользовательского поля. В этом случае мы можем видеть, что пользователи RU # 1, 3 и 4 все сигнализируются по каналу 2 содержимое, и пользователь RU # 2 сигнализируется по каналу 1 содержимого. Второй канал содержимого сигнализирует о шести пользователях, в то время как первый канал содержимого сигнализирует только об одном пользователе. Поэтому первый канал содержимого заполняется до длины второго канала для передачи. На схеме информация выделения RU предоставляется в виде размера индекса, например, RU8-106 является 8-м 106-тональным RU.
figure;
hePlotHESIGBAllocationMapping(cfg484OFDMA);
axSIGB = gca; % Get axis handle for subsequent plotting
Чтобы сбалансировать сигнализацию пользовательского поля в HE-SIG-B, мы можем использовать 'Combination B' в таблице 2 при создании индекса выделения для RU с 484 тонами. Это приводит к сигнализации двух пользователей по каждому каналу содержимого HE-SIG-B, созданию лучшего баланса пользовательских полей и потенциально меньшему количеству символов HE-SIG-B в передаче.
cfg484OFDMABalanced = wlanHEMUConfig([201 201 96 192]); hePlotHESIGBAllocationMapping(cfg484OFDMABalanced,axSIGB);
В передаче на 80 МГц, когда полная полоса RU не используется, центральный 26-тональный RU может быть необязательно активен. Центральный 26-тональный RU активируется с помощью пары "имя-значение" при создании wlanHEMUConfig
объект.
% Create a configuration with no central 26-tone RU cfgNoCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',false); showAllocation(cfgNoCentral,axAlloc); % Create a configuration with a central 26-tone RU cfgCentral = wlanHEMUConfig([192 192 192 192],'LowerCenter26ToneRU',true); showAllocation(cfgCentral,axAlloc);
Точно так же для 160 МГц передачи можно опционально использовать центральный 26-тональный RU в каждом сегменте 80 МГц. Каждый центральный 26-тональный RU может быть включен с помощью пар "имя-значение" при создании wlanHEMUConfig
объект. В этом примере создается только верхний центральный 26-тональный RU. Четыре 242-тональных RU, каждый с одним пользователем, заданы индексом выделения [200 114 114 200 200 114 114 200]
.
cfgCentral160MHz = wlanHEMUConfig([200 114 114 200 200 114 114 200],'UpperCenter26ToneRU',true);
disp(cfgCentral160MHz)
wlanHEMUConfig with properties: RU: {1x5 cell} User: {1x5 cell} PrimarySubchannel: 1 NumTransmitAntennas: 1 STBC: 0 GuardInterval: 3.2000 HELTFType: 4 SIGBMCS: 0 SIGBDCM: 0 UplinkIndication: 0 BSSColor: 0 SpatialReuse: 0 TXOPDuration: 127 HighDoppler: 0 Read-only properties: ChannelBandwidth: 'CBW160' AllocationIndex: [200 114 114 200 200 114 114 200] LowerCenter26ToneRU: 0 UpperCenter26ToneRU: 1
В частоте передачи 80 МГц или 160 МГц подканалы 20 МГц могут быть проколоты, чтобы позволить унаследованной системе работать в прокалываемом канале. Этот способ также описан как канальное соединение. Чтобы обнулить подканал 20 МГц, индекс выделения подканала 20 МГц 113
может использоваться. Проколотый подканал 20 МГц можно просмотреть с помощью showAllocation
способ.
% Null second lowest 20 MHz subchannel in a 160 MHz configuration cfgNull = wlanHEMUConfig([192 113 114 200 208 115 115 115]); % Plot the allocation showAllocation(cfgNull,axAlloc);
Проколотые 20 МГц можно также просмотреть с помощью сгенерированной формы волны и анализатора спектра.
% Set the transmission properties of each user in all RUs cfgNull.User{1}.APEPLength = 100; cfgNull.User{1}.MCS = 2; cfgNull.User{1}.ChannelCoding = 'LDPC'; cfgNull.User{1}.NumSpaceTimeStreams = 1; cfgNull.User{2}.APEPLength = 1000; cfgNull.User{2}.MCS = 6; cfgNull.User{2}.ChannelCoding = 'LDPC'; cfgNull.User{2}.NumSpaceTimeStreams = 1; cfgNull.User{3}.APEPLength = 100; cfgNull.User{3}.MCS = 1; cfgNull.User{3}.ChannelCoding = 'LDPC'; cfgNull.User{3}.NumSpaceTimeStreams = 1; % Create packet txNullWaveform = wlanWaveformGenerator([1 0 1 0],cfgNull); % Visualize signal spectrum fs = wlanSampleRate(cfgNull); ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgNull,1); fftsize = ofdmInfo.FFTLength; spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,... 'AveragingMethod','Exponential','ForgettingFactor',0.99,... 'RBWSource','Property','RBW',fs/fftsize,... 'Title','160 MHz HE MU Transmission with Punctured 20 MHz Channel'); spectrumAnalyzer(txNullWaveform);
Формат, основанный на триггере HE (TB), позволяет осуществлять передачу OFDMA или MU-MIMO в восходящей линии связи. Каждая станция (STA) передает пакет TB одновременно, когда инициируется точкой доступа (AP). Передача TB полностью управляется AP. Все параметры, необходимые для передачи, предоставляются в триггерной системе координат всем STA, участвующим в передаче TB. В этом примере сконфигурирована передача ТБ в ответ на триггерную систему координат для трех пользователей в системе OFDMA/MU-MIMO; три STA будут передавать одновременно на AP.
Выделение 20 МГц 97
используется, что соответствует двум RU, один из которых обслуживает двух пользователей в MU-MIMO.
disp('Allocation #97 table entry:') disp(allocationTable(98,:)) % Index 97 (row 98)
Allocation #97 table entry: Allocation BitAllocation NumUsers NumRUs RUIndices RUSizes NumUsersPerRU Note __________ _____________ ________ ______ _________ ___________ _____________ ____ 97 "01100001" 3 2 {[1 2]} {[106 106]} {[1 2]} ""
Информация о выделении получена путем создания строения MU с wlanHEMUConfig
.
% Generate an OFDMA allocation
cfgMU = wlanHEMUConfig(97);
allocationInfo = ruInfo(cfgMU);
В передаче TB несколько параметров одинаковы для всех пользователей в передаче. Некоторые из них указаны ниже:
% These parameters are the same for all users in the OFDMA system trgMethod = 'TriggerFrame'; % Method used to trigger an HE TB PPDU channelBandwidth = cfgMU.ChannelBandwidth; % Bandwidth of OFDMA system lsigLength = 142; % L-SIG length preFECPaddingFactor = 2; % Pre-FEC padding factor ldpcExtraSymbol = false; % LDPC extra symbol numHELTFSymbols = 2; % Number of HE-LTF symbols
Передача TB для одного пользователя в системе сконфигурирована с wlanHETBConfig
объект. В этом примере для описания передачи трех пользователей создается массив ячеек из трех объектов.
% Create a trigger configuration for each user
numUsers = allocationInfo.NumUsers;
cfgTriggerUser = repmat({wlanHETBConfig},1,numUsers);
Свойства, не относящиеся к системе по умолчанию, заданы для каждого пользователя.
for userIdx = 1:numUsers cfgTriggerUser{userIdx}.TriggerMethod = trgMethod; cfgTriggerUser{userIdx}.ChannelBandwidth = channelBandwidth; cfgTriggerUser{userIdx}.LSIGLength = lsigLength; cfgTriggerUser{userIdx}.PreFECPaddingFactor = preFECPaddingFactor; cfgTriggerUser{userIdx}.LDPCExtraSymbol = ldpcExtraSymbol; cfgTriggerUser{userIdx}.NumHELTFSymbols = numHELTFSymbols; end
Далее задаются свойства для каждого пользователя. Когда многие пользователи передают в одном и том же RU, в строении MU-MIMO, каждый пользователь должен передавать по различным пространственно-временным индексам потока. Свойства StartingSpaceTimeStream
и NumSpaceTimeStreamSteams
должен быть установлен для каждого пользователя, чтобы убедиться, что используются различные пространственно-временные потоки. В этом примере пользователи 1 и 2 находятся в строении MU-MIMO, поэтому StartingSpaceTimeStream
для пользователя два установлено значение 2
, так как пользователь сконфигурирован для передачи 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 показывает различные фрагменты используемого спектра и перекрытие в MU-MIMO RU.
fs = wlanSampleRate(cfgTriggerUser{1}); ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgTriggerUser{1}); spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,... 'AveragingMethod','Running','SpectralAverages',1,... 'ChannelNames', {'RU#1 User 1','RU#1 User 2','RU#2'},... 'ShowLegend',true,'Title','Transmitted HE TB Waveform per User'); spectrumAnalyzer(txTrigStore);
Таблица выделения RU для выделений < = 20 МГц показана ниже с аннотированными описаниями.
Выделение RU и пользовательская сигнализация HE-SIG-B для выделений > 20 МГц показаны в таблице ниже с аннотированными описаниями.
IEEE P802.11ax™/D4.1 Проект стандарта на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического Слоя (PHY) - Поправка 6: Усовершенствования для высокой Эффективности WLAN.