exponenta event banner

wlanHEDataBitRecover

Восстановление битов из поля HE-Data

Описание

пример

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,cfgHE) приходит в себя dataBits, вектор столбца битов, от rxDataSym, выровненные символы OFDM, которые содержат поле HE-Data высокоэффективной однопользовательской (HE SU) передачи. Функция восстанавливается dataBits используя оценку дисперсии шума noiseVarEst и параметры передачи HE cfgHE.

пример

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

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

пример

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

пример

dataBits = wlanHEDataBitRecover(___,Name,Value) задает параметры алгоритма, используя один или несколько аргументов пары имя-значение, в дополнение к любой комбинации входных аргументов из предыдущих синтаксисов. Например, 'LDPCDecodingMethod','layered-bp' определяет алгоритм декодирования с низкоплотной проверкой четности (LDPC).

Примеры

свернуть все

Восстановление битов из поля HE-Data передачи HE SU.

Сконфигурируйте передачу HE SU путем создания объекта конфигурации с указанной схемой модуляции и кодирования (MCS). Извлеките полосу пропускания канала.

cfgHESU = wlanHESUConfig('MCS',0);
cbw = cfgHESU.ChannelBandwidth;       % Channel bandwidth of transmission

Создайте последовательность битов данных и создайте сигнал HE SU.

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

Создайте объект конфигурации восстановления WLAN, указав известную полосу пропускания канала и формат пакета.

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, предполагая наличие бесшумного канала, и используйте поле длины для обновления объекта восстановления.

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

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

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

Обновите объект конфигурации восстановления с помощью восстановленных битов HE-SIG-A и получите обновленные индексы полей.

cfgHE = interpretHESIGABits(cfgRX,sigaBits);
ind = wlanFieldIndices(cfgHE);

Извлеките и декодируйте поле HE-Data.

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

Убедитесь, что восстановленные биты соответствуют переданным битам.

isequal(bits,dataBits)
ans = logical
   1

Восстановление битов из поля HE-Data формы сигнала HE SU, передаваемого по каналу аддитивного белого гауссова шума (AWGN).

cfgHE = wlanHESUConfig('MCS',11);

Формирование сигнала передачи, содержащего восемь пакетов данных.

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

Установите отношение сигнал/шум (SNR) 30 дБ и передайте сигнал через канал AWGN.

snr = 30;
rx = awgn(waveform,snr);

Извлеките поле HE-Data из принятого сигнала.

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

Выполните демодуляцию OFDM для принятого поля HE-Data.

sym = wlanHEDemodulate(rxData,'HE-Data',cfgHE);

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

info = wlanHEOFDMInfo('HE-Data',cfgHE);
rxDataSym = sym(info.DataIndices);

Восстановите биты из поля HE-Data для соответствующей оценки дисперсии шума, предполагая оценку CSI единиц.

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

Убедитесь, что восстановленные биты соответствуют переданным битам.

isequal(bits,dataBits)
ans = logical
   1

Восстановление битов из поля HE-Data формы сигнала HE MU, передаваемого через канал AWGN.

Сконфигурируйте передачу MU HE для двух пользователей, указав полосу пропускания канала 20 МГц и два блока ресурсов 106 тональных сигналов (RU).

AllocationIndex = 96;
cfgHE = wlanHEMUConfig(AllocationIndex);

Укажите MCS для обоих пользователей и длину APEP для второго пользователя.

cfgHE.User{1}.MCS = 4;
cfgHE.User{2}.APEPLength = 1e3;
cfgHE.User{2}.MCS = 7;

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

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

Формирование сигнала OFDMA и передача по каналу AWGN для указанного SNR.

waveform = wlanWaveformGenerator(bits,cfgHE);
snr = 25;
noiseVarEst = 10^(-snr/10);
rx = awgn(waveform,snr);

Извлеките поле HE-Data из принятого сигнала.

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

Выполните демодуляцию OFDM для принятого поля HE-Data для каждого RU, получите поднесущие данных и восстановите биты для каждого пользователя.

allocationInfo = ruInfo(cfgHE);
for userIdx = 1:allocationInfo.NumUsers
    ruNumber = allocationInfo.RUNumbers(userIdx);
    sym = wlanHEDemodulate(rxData,'HE-Data',cfgHE,ruNumber);

Поскольку в этом примере не используется выравнивание, мы должны масштабировать принятые символы на коэффициент масштабирования, равный отношению общего количества тонов к количеству тонов в представляющем интерес RU.

    sf = sqrt(sum(allocationInfo.RUSizes)/allocationInfo.RUSizes(userIdx));
    symScaled = sf*sym;

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

    ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgHE,ruNumber);
    rxDataSym = symScaled(ofdmInfo.DataIndices,:,:);

Предположим, что оценка CSI всех битов и восстановите биты, подтвердив, что восстановленные биты соответствуют переданным битам.

    csi = ones(length(rxDataSym),1);
    dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,csi,cfgHE,userIdx);
    disp(isequal(dataBits,bits{userIdx}))
end
   1

   1

Восстановление битов из поля HE-Data формы сигнала HE TB, передаваемого по каналу AWGN.

Генерирование сигнала WLAN HE TB в ответ на кадр, содержащий подполе управления TRS.

cfgHE = getTRSConfiguration(wlanHETBConfig);
psduLength = 8*getPSDULength(cfgHE);
bits = randi([0,1],psduLength,1,'int8');
waveform = wlanWaveformGenerator(bits,cfgHE);

Пропускают сигнал через канал AWGN с SNR 30 дБ.

snr = 30;
rx = awgn(waveform,snr);

Извлеките поле HE-Data из принятого сигнала.

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

Демодулируют форму сигнала и извлекают поднесущие данных.

demod = wlanHEDemodulate(rxData,'HE-Data',cfgHE);
info = wlanHEOFDMInfo('HE-Data',cfgHE);
rxDataSym = demod(info.DataIndices,:,:);

Восстановите биты данных, подлежащие указанным оценкам для CSI и дисперсии шума, реализуя декодирование с нормированной минимальной суммой с низкой плотностью проверки на четность (LDPC).

csi = ones(length(rxDataSym),1);
noiseVarEst = 10^(-snr/10);
dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,csi,cfgHE, ...
    'LDPCDecodingMethod','norm-min-sum');

Убедитесь, что восстановленные информационные биты соответствуют переданному PSDU.

isequal(dataBits,bits)
ans = logical
   1

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

свернуть все

Демодулированное поле HE-Data для пользователя, указанное как массив комплексных значений размера NSD-by-NSym-by-NSS.

  • NSD - количество поднесущих данных в поле HE-Data.

  • NSym - количество символов OFDM.

  • NSS - количество пространственных потоков.

Содержимое и размер этого ввода зависят от формата HE, указанного в cfgHE вход.

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

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

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

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

  • NSD - количество поднесущих данных в поле HE-Data.

  • NSS - количество пространственных потоков.

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

Конфигурация передачи HE, указанная как объект типа wlanHESUConfig, wlanHEMUConfig, wlanHETBConfig, или wlanHERecoveryConfig.

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

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

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

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

Пример: 'MaximumLDPCIterationCount','12','EarlyTermination','false' задает максимум 12 итераций декодирования LDPC и отключает раннее завершение, так что декодер завершает 12 итераций.

Алгоритм декодирования LDPC, заданный как разделенная запятыми пара, состоящая из 'LDPCDecodingMethod' и одно из этих значений:

Примечание

При указании этого ввода как 'norm-min-sum' или 'offset-min-sum', функция устанавливает значения входного логарифмического отношения правдоподобия (LLR), которые больше, чем 1e10 или менее -1e10 кому 1e10 и -1e10соответственно. Затем функция использует эти значения при выполнении алгоритма декодирования LDPC.

Зависимости

Чтобы включить этот аргумент, укажите ChannelCoding имущества cfgHE ввод в качестве 'LDPC' для пользователя, соответствующего userIdx вход.

Типы данных: char | string

Коэффициент масштабирования для нормализованного декодирования LDPC с минимальной суммой, определяемый как пара, разделенная запятыми, состоящая из 'MinSumScalingFactor' и скаляр в интервале (0, 1].

Зависимости

Чтобы включить этот аргумент, укажите 'LDPCDecodingMethod' аргумент пары имя-значение как 'norm-min-sum'.

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

Смещение для декодирования LDPC с минимальной суммой смещения, указанное как пара, разделенная запятыми, состоящая из 'MinSumOffset' и неотрицательный скаляр.

Зависимости

Чтобы включить этот аргумент, укажите 'LDPCDecodingMethod' аргумент пары имя-значение как 'offset-min-sum'.

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

Максимальное количество итераций декодирования LDPC, указанное как пара, разделенная запятыми, состоящая из 'MaximumLDPCIterationCount' и положительное целое число.

Зависимости

Чтобы включить этот аргумент, установите ChannelCoding имущества cfgHE вход в 'LDPC' для пользователя, соответствующего userIdx вход.

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

Разрешить раннее завершение декодирования LDPC, указанного как разделенная запятыми пара, состоящая из 'EarlyTermination' и 1 (true) или 0 (false).

  • При установке этого значения в значение 0 (false), декодирование LDPC завершает количество итераций, указанных в 'MaximumLDPCIterationCount'' аргумент пары имя-значение независимо от состояния проверки четности.

  • При установке этого значения в значение 1 (true), декодирование LDPC завершается, когда выполняются все проверки четности.

Зависимости

Чтобы включить этот аргумент, установите ChannelCoding имущества cfgHE вход в 'LDPC' для пользователя, соответствующего userIdx вход.

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

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

свернуть все

Биты, восстановленные из поля HE-Data, возвращаемые как вектор столбца с двоичным значением длины 8 × LPSDU, где LPSDU - длина PSDU в байтах. Рассчитайте длину PSDU с помощью getPSDULength объектная функция с помощью cfgHE вход.

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

Подробнее

свернуть все

Поле данных HE

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

Как описано в [1], количество символов OFDM в поле HE-Data зависит от значения длины поля унаследованного сигнала (L-SIG) в соответствии с уравнением (27-11), длительности преамбулы и установок GI + LTF Size, Pre-FEC Padding Factor и PE Disambiguity.

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

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

  • Блоки HE PPDU имеют однопотоковые пилоты в поле HE-Data.

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

Когда передача использует кодирование LDPC, поле HE-Data состоит из поля SERVICE, PSDU, битов заполнения до FEC, битов заполнения после FEC и поля расширения пакета (PE).

Дополнительные сведения см. в разделах Структура PPDU WLAN и Параметризация 802.11ax для генерации и моделирования формы сигнала.

Алгоритмы

свернуть все

Эта функция поддерживает эти четыре алгоритма декодирования LDPC.

Декодирование распространения убеждений

Функция реализует алгоритм BP на основе алгоритма декодирования, представленного в [2]. Для передаваемого LDPC-кодированного кодового слова c = (c0, c1,..., cn − 1) вход в LDPC-декодер является LLR, задаваемым

L (ci) = log (Pr (ci = 0 |  выход канала для ci) Pr ( ci = 0 |  выход канала для ci)).

В каждой итерации функция обновляет ключевые компоненты алгоритма на основе следующих уравнений:

L (rji) = 2 атан (∏i′∈Vj\{ i} танх (12L (qi′j))),

L (qij) = L (ci) +∑j'∈Ci\{ j} L (rj′i), инициализированный как L (qij) = L (ci) перед первой итерацией, и

L (Qi) = L (ci) +∑j′∈CiL (rj′i).

В конце каждой итерации L (Qi) является обновленной оценкой значения LLR для передаваемого бита ci. Значение L (Qi) является выходным сигналом мягкого решения для ci. Если L (Qi) отрицательный, выход жесткого решения для ci равен 1. В противном случае выходной сигнал равен 0.

Наборы индексов Ci\{ j} и Vj\{ i} основаны на ИКМ так, что наборы Ci и Vj соответствуют всем ненулевым элементам в столбце i и строке j ИКМ соответственно.

На этом рисунке показано, как вычислить эти наборы индексов для ИКМ Н для случая i = 5 и j = 3.

Чтобы избежать бесконечных чисел в уравнениях алгоритма, atanh (1) и atanh (-1) установлены в 19.07 и -19.07 соответственно. Из-за конечной точности MATLAB ® возвращает 1 для tanh (19.07) и -1 для tanh (-19.07).

При указании 'EarlyTermination' аргумент пары имя-значение как 0 (false), декодирование завершается после числа итераций, указанного 'MaximumLDPCIterationCount' аргумент пары имя-значение. При указании 'EarlyTermination' аргумент пары имя-значение как 1 (true), декодирование завершается, когда все проверки четности удовлетворены (HcT = 0) или после числа итераций, указанных 'MaximumLDPCIterationCount' аргумент пары имя-значение.

Декодирование распространения многоуровневого убеждения

Функция реализует многоуровневый алгоритм BP на основе алгоритма декодирования, представленного в разделе II.A [3]. Цикл декодирования итерируется по подмножествам строк (уровней) ИКМ.

Для каждой строки m в слое и каждого битового индекса j реализация обновляет ключевые компоненты алгоритма на основе этих уравнений.

(1) L (qmj) = L (qj) − Rmj

(2) (x) = log (| tanh (x/2) |)

(3) Amj=∑n∈N (m )\{ j} (L (qmn))

(4) smj=∏n∈N (м )\{ j} sgn (L (qmn))

(5) Rmj = smjStart( Amj)

(6) L (qj) = L (qmj) + Rmj

Для каждого уровня уравнение (6) декодирования работает на объединенном входе, полученном из текущих входов LLR, L (qmj), и предыдущий уровень обновляется, Rmj.

Поскольку многоуровневый алгоритм BP обновляет только подмножество узлов уровня, этот алгоритм быстрее алгоритма BP. Для достижения той же частоты ошибок, что и при декодировании BP, используйте половину числа итераций декодирования при использовании многоуровневого алгоритма BP.

Декодирование нормализованной минимальной суммы

Функция реализует нормированный алгоритм декодирования с минимальной суммой путем следования многоуровневому алгоритму BP с уравнением (3), замененным на

Amj=minn∈N (m )\{ j} (α 'L (qmn) |),

где α - коэффициент масштабирования, заданный 'MinSumScalingFactor' аргумент пары имя-значение. Это уравнение является адаптацией уравнения (4), представленного в [4].

Декодирование минимальной суммы смещения

Функция реализует алгоритм декодирования со смещением с минимальной суммой путем следования многоуровневому алгоритму BP с уравнением (3), замененным на

Amj = max (minn∈N (m )\{ j} (| L ( qmn) | − β), 0),

где β - смещение, указанное 'MinSumOffset' аргумент пары имя-значение. Это уравнение является адаптацией уравнения (5), представленного в [4].

Ссылки

[1] P802.11ax™/D4.1 IEEE. "Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY). Поправка 1: Усовершенствования для высокоэффективной WLAN. " Проект стандарта на информационные технологии - телекоммуникации и обмен информацией между системами. Локальные и столичные сети - особые требования.

[2] Галлагер, Роберт Г. Коды проверки четности с низкой плотностью. Кембридж, Массачусетс: MIT Press, 1963.

[3] Hocevar, D.E. «Архитектура декодера с уменьшенной сложностью посредством многоуровневого декодирования кодов LDPC». Семинар IEEE по системам обработки сигналов, 2004 год. SIPS 2004., 107-12. Остин, Техас, США: IEEE, 2004. https://doi.org/10.1109/SIPS.2004.1363033.

[4] Цзинху Чен, Р. М. Таннер, К. Джонс и Янь Ли. «Улучшенные алгоритмы декодирования минимальной суммы для нерегулярных LDPC-кодов». В разбирательстве. Международный симпозиум по теории информации, 2005 год. ISIT 2005., 449-53, 2005. https://doi.org/10.1109/ISIT.2005.1523374.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2018b