wlanHEDataBitRecover

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

Описание

пример

dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,cfgHE) восстанавливает dataBits, вектор-столбец из бит, из rxDataSym, выравниваемые символы OFDM, которые содержат поле HE-данных высокоэффективной передачи с одним пользователем (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 для заданного пользователя в передаче HE MU и улучшает демпфирование поднесущих OFDM с помощью информации о состоянии канала

пример

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

Примеры

свернуть все

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

Сконфигурируйте передачу SU HE путем создания объекта строения с заданной схемой модуляции и кодирования (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);

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

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

Извлеките поле HE-Данные из полученной формы волны.

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-данных для соответствующей оценки отклонения шума, принимая оценку 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.

Сконфигурируйте передачу HE MU для двух пользователей, задав пропускную способность канала 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 для заданного ОСШ.

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

Извлеките поле HE-Данные из полученной формы волны.

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

Выполните демодуляцию OFDM в принятом поле HE-данных для каждого 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.

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

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

Передайте форму волны через канал AWGN с ОСШ 30 дБ.

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

Извлеките поле HE-Данные из полученной формы волны.

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 и отклонения шума, реализуя нормализованное декодирование min-sum с низкой плотностью проверки четности (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-данных для пользователя, заданное как комплексный массив размера N SD-by N Sym-by N SS.

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

  • N Sym является количеством символов OFDM.

  • N SS является количеством пространственных потоков.

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

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

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

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

Информация о состоянии канала, заданная как действительный массив размера N SD-by N SS.

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

  • N SS является количеством пространственных потоков.

Типы данных: 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' и одно из следующих значений:

  • 'bp' - Используйте алгоритм декодирования распространения убеждений (BP). Для получения дополнительной информации см. «Декодирование распространения убеждений».

  • 'layered-bp' - Используйте многоуровневый алгоритм декодирования BP, подходящий для квазициклических матриц проверки четности (PCM). Для получения дополнительной информации см. «Декодирование Многоуровневого Распространения Убеждений».

  • 'norm-min-sum' - Используйте многоуровневый алгоритм декодирования BP с нормализованной аппроксимацией min-sum. Для получения дополнительной информации смотрите Нормированное декодирование Min-Sum.

  • 'offset-min-sum' - Используйте многоуровневый алгоритм декодирования BP с смещением min-sum. Для получения дополнительной информации смотрите Offset Min-Sum Decoding.

Примечание

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

Зависимости

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

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

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

Зависимости

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

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

Смещение для декодирования min-sum смещения 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 × L PSDU, где L PSDU является длиной PSDU в байтах. Вычислите длину PSDU при помощи getPSDULength функция объекта со cfgHE вход.

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

Подробнее о

свернуть все

Поле HE-данных

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

Как описано в [1], количество символов OFDM в поле HE-данных зависит от значения длины устаревшего поля сигнала (L-SIG) в соответствии с уравнением (27-11), длительности преамбулы и настроек GI + LTF Size, Pre-FEC коэффициент заполнения, и

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

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

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

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

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

Для получения дополнительной информации см. WLAN PPDU Structure и 802.11ax Parameterization for Генерация Сигналов and Simulation.

Алгоритмы

свернуть все

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

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

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

L(ci)=log(Pr(ci=0|channel output for ci)Pr(ci=0| выход для ci)).

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

L(rji)=2atanh(iVj\{i}tanh(12L(qij))),

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

L(Qi)=L(ci)+jCiL(rji).

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

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

Этот рисунок демонстрирует, как вычислить эти наборы индексов для PCM H для случая i = 5 и j = 3.

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

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

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

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

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

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

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

(3) Amj=nN(m)\{j}Ψ(L(qmn))

(4) smj=nN(m)\{j}sgn(L(qmn))

(5) Rmj=smjΨ(Amj)

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

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

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

Нормированное декодирование Min-Sum

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

Amj=minnN(m)\{j}(α|L(qmn)|),

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

Декодирование смещения Min-Sum

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

Amj=max(minnN(m)\{j}(|L(qmn)|β), 0),

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

Ссылки

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

[2] Gallager, Robert G. Коды проверки четности с низкой плотностью. Cambridge, MA: MIT Press, 1963.

[3] Hocevar, D.E. «A Reduced Complexity Decoder Архитектуры with Layered Decoding of LDPC Codes». Семинар IEEE по системам обработки сигналов, 2004 год. SIPS 2004., 107-12. Остин, Техас, США: IEEE, 2004. https://doi.org/10.1109/SIPS.2004.1363033.

[4] Jinghu Chen, R.M. Tanner, C. Jones и Yan Li. «Улучшенные алгоритмы декодирования Min-Sum для нерегулярных кодов LDPC». В производстве. Международный симпозиум по теории информации, 2005 год. ISIT 2005., 449-53, 2005. https://doi.org/10.1109/ISIT.2005.1523374.

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

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

.
Введенный в R2018b