wlanHEDataBitRecover

Восстановите биты данных с Поля данных HE

Описание

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,cfgHE) восстанавливает dataBits, Биты данных HE в однопользовательской высокой эффективности (SU HE) передача.

Функция восстанавливает dataBits от rxDataSym, компенсируемые символы HE-Data OFDM. cfgHE введите параметризовал передачу, которая подвергается шумовой оценке отклонения noiseVarEst.

пример

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,csi,cfgHE)возвращает восстановленные биты данных с помощью информации о состоянии канала csi улучшать demapping поднесущих OFDM.

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,cfgHE,userIdx) возвращает восстановленные биты данных для заданного пользователя многопользовательской высокой эффективности (HE МУ), передача, как определено пользователем индексируют userIdx.

пример

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,csi,cfgHE,userIdx)возвращает восстановленные биты данных для заданного пользователя HE передача МУ, с помощью информации о состоянии канала, чтобы улучшить demapping поднесущих OFDM.

пример

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,cfgRx) возвращает биты данных, восстановленные с передачи, параметризованной cfgRx, объект настройки восстановления HE.

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,csi,cfgRx) возвращает восстановленные биты данных для объекта настройки восстановления HE и информации о состоянии канала.

recBits = wlanHEDataBitRecover(___,Name,Value) возвращает восстановленные биты данных для дополнительных опций, заданных одним или несколькими аргументами пары "имя-значение". Когда вы не задаете пару "имя-значение", значение по умолчанию используется.

Примеры

свернуть все

Восстановите данные о HE из однопользовательской пакетной формы волны HE, переданной, хотя AWGN образовывает канал.

cfgHE = wlanHESUConfig('MCS',11);

Сгенерируйте форму волны передачи, содержащую восемь пакетов данных.

msgLen = getPSDULength(cfgHE)*8;
txBits = randi([0 1],msgLen,1,'int8');
txWaveform = wlanWaveformGenerator(txBits,cfgHE);

Добавьте шум в форму волны.

snr = 30;
rxWaveform = awgn(txWaveform,snr);

Извлеките поле данных.

ind = wlanFieldIndices(cfgHE);
rxData = rxWaveform(ind.HEData(1):ind.HEData(2),:);

Принимая пропускную способность канала на 20 МГц и защитный интервал с 3.2 микросекундами, OFDM демодулируют полученную форму волны и извлекают несущие данные поднесущие.

Nfft = 256; % FFT length (20 MHz)
Ncp = 64;   % Cyclic prefix length (3.2 us at 20 MHz)
pilotSC = [-116; -90; -48; -22; 22; 48; 90; 116]; % Pilot indices
ruSC = [-122:-2 2:122].'; % Active subcarrier indices
nullIdx = setdiff((-Nfft/2:(Nfft/2-1)).',ruSC)+Nfft/2+1;
pilotIdx = pilotSC+Nfft/2+1;
sf = (1/sqrt(numel(ruSC)))*Nfft; % Scaling factor
rxSym = ofdmdemod(rxData,Nfft,Ncp,Ncp,nullIdx,pilotIdx)/sf;

Восстановите биты данных.

csi = ones(length(rxSym),1); % Assume CSI estimate of all ones
nVar = 10^(-snr/10); % Noise variance
rxBits = wlanHEDataBitRecover(rxSym,nVar,csi,cfgHE);

Сравните восстановленные биты с исходными информационными битами.

disp(isequal(txBits,rxBits));
   1

Декодируйте Поле данных HE для каждого пользователя в передаче OFDMA.

Генерация сигналов

Создайте многопользовательский объект HE и пакетную настройку.

allocationIndex = 96; % Two 106-tone RUs, two users, 20 MHz
cfg = wlanHEMUConfig(allocationIndex);
cfg.User{1}.MCS = 4;
cfg.User{2}.APEPLength = 1e3;
cfg.User{2}.MCS = 7;

Сгенерируйте случайные данные на основе определенной длины PSDU на пользователя.

numUsers = numel(cfg.User);
psduLength = getPSDULength(cfg);
txBits = cell(1,numUsers);
for i = 1:numUsers
   txBits{i} = randi([0 1],psduLength(i)*8,1);
end

Сгенерируйте форму волны OFDMA, сигнализируют и добавляют AWGN в сигнал.

txWaveform = wlanWaveformGenerator(txBits,cfg);
snr = 25;
rxWaveform = awgn(txWaveform,snr);

Обработка получателя на пользователя

Используя структуру индексов поля PPDU, извлеките Поле данных HE для каждого пользователя.

ind = wlanFieldIndices(cfg)
ind = struct with fields:
      LSTF: [1 160]
      LLTF: [161 320]
      LSIG: [321 400]
     RLSIG: [401 480]
    HESIGA: [481 640]
    HESIGB: [641 880]
     HESTF: [881 960]
     HELTF: [961 1280]
    HEData: [1281 6720]
      HEPE: [0x2 double]

rxData = rxWaveform(ind.HEData(1):ind.HEData(2),:);       

Для каждого пользователя OFDM демодулируют и извлекают несущие данные поднесущие, принимающие пропускную способность канала на 20 МГц и защитный интервал с 3.2 микросекундами для соответствующего модуля ресурса (RU).

for userIdx = 1:numUsers
   Nfft = 256; % FFT length (20 MHz)
   Ncp = 64;  % Cyclic prefix length (3.2 us at 20 MHz)
   pilotSC = [-116; -90; -48; -22; 22; 48; 90; 116]; % Pilot indices
   if userIdx==1
      ruSC = (-122:-17).'; % Active subcarrier indices RU #1
   else
      ruSC = (17:122).'; % Active subcarrier indices RU #2
   end
   nullIdx = setdiff((-Nfft/2:(Nfft/2-1)).',ruSC)+Nfft/2+1;
   pilotIdx = pilotSC(ismember(pilotSC,ruSC))+Nfft/2+1;
   sf = (1/sqrt(2*numel(ruSC)))*Nfft; % Scaling factor
   rxSym = ofdmdemod(rxData,Nfft,Ncp,Ncp,nullIdx,pilotIdx)/sf;        
  
   % Recover data bits and compare with transmitted
   csi = ones(length(rxSym),1); % Assume CSI estimate of all ones
   nVar = 10^(-snr/10); % Noise variance
   rxBits = wlanHEDataBitRecover(rxSym,nVar,csi,cfg,userIdx);
   disp(isequal(rxBits,txBits{userIdx}))
end
   1

   1

Восстановите Поле данных HE для пакета ФОРМАТА SU HE путем декодирования HE сигнальные поля, обновления неизвестных свойств в объекте настройки восстановления и передачи обновленного объекта в функцию Восстановления данных HE.

Создайте объект настройки ФОРМАТА SU HE, задав MCS, и извлеките пропускную способность канала.

cfgHESU = wlanHESUConfig('MCS',0);
cbw = cfgHESU.ChannelBandwidth;

Сгенерируйте форму волны для заданного объекта настройки.

bits = randi([0 1],8*getPSDULength(cfgHESU),1,'int8');
waveform = wlanWaveformGenerator(bits,cfgHESU);

Создайте объект настройки восстановления WLAN, задав известную пропускную способность канала и пакет ФОРМАТА SU HE.

cfgRx = wlanHERecoveryConfig('ChannelBandwidth',cbw,'PacketFormat','HE-SU');

Восстановите HE сигнальные поля путем получения полевых индексов и выполнения соответствующих операций демодуляции.

ind = wlanFieldIndices(cfgRx);
heLSIGandRLSIG = waveform(ind.LSIG(1):ind.RLSIG(2),:);
symLSIG = wlanHEDemodulate(heLSIGandRLSIG,'L-SIG',cbw);
info = wlanHEOFDMInfo('L-SIG',cbw);

Объедините поля L-SIG и RL-SIG для разнообразия и получите поднесущие данных.

symLSIG = mean(symLSIG,2);
lsig = symLSIG(info.DataIndices,:);

Декодируйте поле L-SIG, принимая бесшумный канал, и используйте поле длины, чтобы обновить объект восстановления.

[~,~,lsigInfo] = wlanLSIGBitRecover(lsig,0);
cfgRx.LSIGLength = lsigInfo.Length;

Восстановите и демодулируйте поле HE-SIG-A, получите поднесущие данных и восстановите биты "SIG HE".

heSIGA = waveform(ind.HESIGA(1):ind.HESIGA(2),:);
symSIGA = wlanHEDemodulate(heSIGA,'HE-SIG-A',cbw);
siga = symSIGA(info.DataIndices,:);
[sigaBits,failCRC] = wlanHESIGABitRecover(siga,0);

Обновите объект настройки восстановления с восстановленными битами "SIG HE" и получите обновленные полевые индексы.

cfgRx = interpretHESIGABits(cfgRx,sigaBits);
ind = wlanFieldIndices(cfgRx);

Получите и декодируйте Поле данных HE.

heData = waveform(ind.HEData(1):ind.HEData(2),:);
symData = wlanHEDemodulate(heData,'HE-Data', ... 
    cbw,cfgRx.GuardInterval,[cfgRx.RUSize cfgRx.RUIndex]);
infoData = wlanHEOFDMInfo('HE-Data',cbw,cfgRx.GuardInterval,[cfgRx.RUSize cfgRx.RUIndex]);
data = symData(infoData.DataIndices,:,:);
dataBits = wlanHEDataBitRecover(data,0,cfgRx);

Проверяйте, что возвращенные биты данных совпадают с битами передаваемых данных.

isequal(bits,dataBits)
ans = logical
   1

Входные параметры

свернуть все

Компенсируемые символы HE-Data OFDM для пользователя, заданного как SD N NSym NSS массивом с комплексным знаком. SD N является количеством поднесущих данных в Поле данных HE, N, Sym является количеством символов OFDM и N, SS является количеством пространственных потоков. Содержимое и размер rxDataSym зависьте от HE настройка формата PPDU.

Типы данных: double
Поддержка комплексного числа: Да

Шумовая оценка отклонения, заданная как неотрицательный скаляр.

Типы данных: double

Информация состояния канала, указанная как ST-by-NSS N матрица с действительным знаком. ST N является количеством поднесущих и N, SS является количеством пространственных потоков.

Типы данных: double

Настройка формата HE, заданная как объект типа wlanHESUConfig или wlanHEMUConfig.

Настройка восстановления HE, заданная как wlanHERecoveryConfig объект.

Пользовательский индекс, заданный как целое число в интервале [1, 8].

Типы данных: double

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'MaximumLDPCIterationCount','12','EarlyTermination','false' задает максимум 12 итераций декодирования для имеющей малую плотность проверки четности (LDPC) и отключает раннее завершение декодирования LDPC так, чтобы это завершило эти 12 итераций.

Максимальное количество декодирования итераций в имеющей малую плотность проверке четности (LDPC), заданной как положительное целое число. Этот аргумент применяется, когда кодирование канала установлено в LDPC для пользователя интереса.

Для получения информации об опциях кодирования канала смотрите 802.11™ предмет интереса настройки формата.

Типы данных: double

Включите раннее завершение декодирования LDPC, заданного как логическое значение 1 TRUE) или 0 ложь). Это свойство применяется, когда кодирование канала установлено в LDPC для пользователя интереса.

  • Когда установлено в false, Декодирование LDPC завершает количество итераций, заданных MaximumLDPCIterationCount, независимо от состояния проверки четности.

  • Когда установлено в true, Декодирование LDPC завершает работу, когда всем проверкам четности удовлетворяют.

Для получения информации об опциях кодирования канала смотрите 802,11 предмета интереса настройки формата.

Типы данных: логический

Выходные аргументы

свернуть все

Восстановленные информационные биты в Поле данных HE, возвращенном как 8 LPSDU вектор-столбцом, где L PSDU является длиной PSDU. Можно определить длину PSDU при помощи getPSDULength функция.

Типы данных: int8

Больше о

свернуть все

Поле данных HE

Поле данных HE HE PPDU содержит данные для одного или нескольких пользователей.

Как описано в [1], количество символов OFDM в Поле данных HE определяется значением длины устаревшего поля (L-SIG) сигнала (см. уравнение (28-11)), длительность преамбулы и настройки Размера GI+LTF, Дополнительного Фактора Pre-FEC и полей PE Disambiguity в поле HE-SIG-A (см. 28.3.10.7 (SIG HE)).

  • Символы данных в HE PPDU используют период дискретного преобразования Фурье (DFT) 12,8 μs и интервал поднесущей 78,125 кГц.

  • Символы данных в HE PPDU поддерживают защитную длительность интервала 0,8 μs, 1,6 μs и 3,2 μs.

  • HE PPDUs имеет пилотов единого потока в Поле данных HE.

Когда кодирование BCC используется, Поле данных HE состоит из поля SERVICE, PSDU, предварительного FEC PHY дополнение битов, битов хвоста и дополнительных битов пост-FEC. Пакетное расширение принято, чтобы быть нулем.

Когда кодирование LDPC используется, Поле данных HE состоит из поля SERVICE, PSDU, предварительного FEC PHY дополнение битов, дополнительных битов пост-FEC и пакетного расширения. Никакие биты хвоста не присутствуют, когда кодирование LDPC используется.

Для получения дополнительной информации см. Пакетный HE Структуры и Сборки WLAN PPDU.

Ссылки

[1] Станд. IEEE Черновой Стандарт P802.11ax™/D3.1 для Информационных технологий — Телекоммуникаций и обмена информацией между системами — Локальными сетями и городскими компьютерными сетями — Конкретными требованиями — Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации — Поправка 6: Улучшения для Высокой эффективности WLAN.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018b