Восстановите биты данных с Поля данных HE
восстанавливает dataBits
= wlanHEDataBitRecover(rxDataSym
,noiseVarEst
,cfg
)dataBits
, Биты данных HE в однопользовательской высокой эффективности (SU HE) передача.
Функция восстанавливает dataBits
от rxDataSym
, компенсируемые символы HE-Data OFDM. cfg
введите параметрирует передачу, которая подвергается шумовой оценке отклонения noiseVarEst
.
возвращает восстановленные биты данных для заданного пользователя многопользовательской высокой эффективности (HE МУ), передача, как определено пользователем индексируют dataBits
= wlanHEDataBitRecover(rxDataSym
,noiseVarEst
,cfg
,userIdx
)userIdx
.
задает опции алгоритма при помощи одного или нескольких аргументов пары "имя-значение". Когда вы не задаете пару "имя-значение", функция использует значение по умолчанию.dataBits
= wlanHEDataBitRecover(___,Name,Value
)
Восстановите Поле данных 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 из однопользовательской пакетной формы волны 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, пройдите через канал AWGN, затем демодулируйте и восстановите Поле данных HE с полученной формы волны.
Сгенерируйте форму волны Тбайта HE WLAN в ответ на систему координат, содержащую подполе управления TRS.
cfgHE = getTRSConfiguration(wlanHETBConfig);
psduLength = 8*getPSDULength(cfgHE);
psdu = randi([0,1],psduLength,1,'int8');
waveform = wlanWaveformGenerator(psdu,cfgHE);
Передайте форму волны через канал AWGN с ОСШ 30 дБ.
snr = 30; rxWaveform = awgn(waveform,snr);
Извлеките поле данных из полученной формы волны.
ind = wlanFieldIndices(cfgHE); rxData = rxWaveform(ind.HEData(1):ind.HEData(2),:);
Демодулируйте форму волны и извлеките поднесущие данных.
demod = wlanHEDemodulate(rxData,'HE-Data',cfgHE); info = wlanHEOFDMInfo('HE-Data',cfgHE); rxDataSym = demod(info.DataIndices,:,:);
Восстановите биты данных, удовлетворяющие заданным оценкам для CSI и шумового отклонения, реализовав нормированную сумму min декодирование LDPC.
csi = ones(length(rxDataSym),1); noiseVarEst = 10^(-snr/10); dataBits = wlanHEDataBitRecover(rxDataSym,noiseVarEst,csi,cfgHE,'LDPCDecodingMethod','norm-min-sum');
Подтвердите, что восстановленные информационные биты совпадают с переданным PSDU.
disp(isequal(dataBits,psdu))
1
rxDataSym
— Компенсируемые символы HE-Data OFDMКомпенсируемые символы HE-Data OFDM для пользователя в виде SD N NSym NSS массивом с комплексным знаком. SD N является количеством поднесущих данных в Поле данных HE, N, Sym является количеством символов OFDM и N, SS является количеством пространственных потоков. Содержимое и размер rxDataSym
зависьте от HE настройка формата PPDU.
Типы данных: double
Поддержка комплексного числа: Да
noiseVarEst
— Шумовая оценка отклоненияШумовая оценка отклонения в виде неотрицательного скаляра.
Типы данных: double
csi
— Информация о состоянии каналаИнформация о состоянии канала в виде ST-by-NSS N матрица с действительным знаком. ST N является количеством поднесущих и N, SS является количеством пространственных потоков.
Типы данных: double
cfg
— Настройка формата HEwlanHESUConfig
возразите | wlanHEMUConfig
возразите | wlanHETBConfig
возразите | wlanHERecoveryConfig
объектНастройка формата HE в виде объекта типа wlanHESUConfig
, wlanHEMUConfig
, wlanHETBConfig
, или wlanHERecoveryConfig
.
userIdx
— Пользовательский индексПользовательский индекс в виде целого числа в интервале [1, 8].
Типы данных: double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'MaximumLDPCIterationCount','12','EarlyTermination','false'
задает максимум 12 LDPC декодирование итераций и отключает раннее завершение так, чтобы декодер завершил эти 12 итераций.'LDPCDecodingMethod'
— LDPC декодирование алгоритма'bp'
(значение по умолчанию) | 'layered-bp'
| 'norm-min-sum'
| 'offset-min-sum'
LDPC декодирование алгоритма в виде одного из этих значений:
'bp'
— Используйте алгоритм декодирования распространения веры (BP). Для получения дополнительной информации смотрите, что Распространение Веры Декодирует.
'layered-bp'
— Используйте многоуровневый алгоритм декодирования BP, подходящий для квазициклических матриц проверки четности (PCMs). Для получения дополнительной информации смотрите, что Многоуровневое Распространение Веры Декодирует.
'norm-min-sum'
— Используйте многоуровневый алгоритм декодирования BP нормированным приближением суммы min. Для получения дополнительной информации смотрите, что Нормированная Сумма Min Декодирует.
'offset-min-sum'
— Используйте многоуровневый алгоритм декодирования BP приближением суммы min смещения. Для получения дополнительной информации смотрите, что Сумма Min Смещения Декодирует.
Когда вы задаете этот вход как 'norm-min-sum'
или 'offset-min-sum'
, wlanHEDataBitRecover
функция устанавливает входные значения отношения логарифмической правдоподобности (LLR), которые больше 1e10
или меньше, чем -1e10
к 1e10
и -1e10
, соответственно. Функция затем использует эти значения при выполнении LDPC декодирование алгоритма.
Чтобы включить этот аргумент, задайте ChannelCoding
свойство cfg
введите как 'LDPC'
для пользователя, соответствующего userIdx
входной параметр.
Типы данных: char |
string
'MinSumScalingFactor'
— Масштабный коэффициент за нормированную сумму min декодирование LDPC
(значение по умолчанию) | скаляр в интервале (0, 1]Масштабный коэффициент за нормированную сумму min LDPC, декодирующий в виде скаляра в интервале (0, 1].
Чтобы включить этот аргумент, задайте '
LDPCDecodingMethod
'
аргумент пары "имя-значение" как 'norm-min-sum'
.
Типы данных: double
'MinSumOffset'
— Возместите за сумму min смещения декодирование LDPC
(значение по умолчанию) | неотрицательный скалярВозместите за сумму min смещения LDPC, декодирующий в виде неотрицательного скаляра.
Чтобы включить этот аргумент, задайте '
LDPCDecodingMethod
'
аргумент пары "имя-значение" как 'offset-min-sum'
.
Типы данных: double
'MaximumLDPCIterationCount'
— Максимальное количество LDPC декодирование итераций
(значение по умолчанию) | положительное целое число'EarlyTermination'
— Включите раннее завершение декодирования LDPCfalse
или 0
(значение по умолчанию) | true
или 1
Включите раннее завершение LDPC, декодирующего в виде 1
TRUE
) или 0
ложь
).
Когда вы устанавливаете это значение к 0
ложь
), декодирование LDPC завершает количество итераций, заданных 'MaximumLDPCIterationCount'
независимо от состояния проверки четности.
Когда вы устанавливаете это значение к 1
TRUE
), декодирование LDPC завершает работу, когда всем проверкам четности удовлетворяют.
Чтобы включить этот аргумент, задайте ChannelCoding
свойство cfg
введите как 'LDPC'
для пользователя, соответствующего userIdx
входной параметр.
Типы данных: логический
dataBits
— Восстановленные информационные биты в Поле данных HE
| 0
| вектор-столбецВосстановленные информационные биты в Поле данных HE, возвращенном как 8 LPSDU вектор-столбцом, где L PSDU является длиной PSDU. Можно определить длину PSDU при помощи getPSDULength
функция.
Типы данных: int8
Поле данных HE HE PPDU содержит данные для одного или нескольких пользователей.
Как описано в [1], количество символов OFDM в Поле данных HE определяется значением длины устаревшего поля (L-SIG) сигнала (см. уравнение (27-11)), длительность преамбулы и настройки Размера GI+LTF, Дополнительного Фактора Pre-FEC и полей PE Disambiguity в поле HE-SIG-A (см. 27.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 PPDU.
wlanHEDataBitRecover
функционируйте поддерживает эти четыре LDPC декодирование алгоритмов.
wlanHEDataBitRecover
функционируйте реализует алгоритм BP на основе алгоритма декодирования, представленного в [2]. Для переданной LDPC-закодированной кодовой комбинации , вход к декодеру LDPC является LLR, данным
.
В каждой итерации функция обновляет ключевые компоненты алгоритма на основе этих уравнений:
,
, инициализированный как перед первой итерацией, и
.
В конце каждой итерации, обновленная оценка значения LLR для переданного бита, . Значение мягкое решение выход для . Если отрицательно, трудное решение выход для 1. В противном случае выход 0.
Индексируйте наборы и основаны на PCM, таким образом что наборы и соответствуйте всем ненулевым элементам в столбце i и строка j PCM, соответственно.
Этот рисунок демонстрирует, как вычислить эти наборы индекса для PCM для случая i = 5 и j = 3.
Чтобы избежать бесконечных чисел в уравнениях алгоритма, atanh (1) и atanh (–1) установлены в 19,07 и –19.07, соответственно. Из-за конечной точности, MATLAB® возвращается 1 для tanh (19.07) и –1 для tanh (–19.07).
Когда вы задаете '
EarlyTermination
'
аргумент пары "имя-значение" как 0
ложь
), декодирование завершает работу после количества итераций, заданных '
MaximumLDPCIterationCount
'
аргумент пары "имя-значение". Когда вы задаете '
EarlyTermination
'
аргумент пары "имя-значение" как 1
TRUE
), декодирование завершает работу, когда всем проверкам четности удовлетворяют () или после того, как количество итераций задано '
MaximumLDPCIterationCount
'
аргумент пары "имя-значение".
wlanHEDataBitRecover
функционируйте реализует многоуровневый алгоритм BP на основе алгоритма декодирования, представленного в Разделе II.A [3]. Цикл декодирования выполняет итерации по подмножествам строк (слои) PCM.
Для каждой строки, m, в слое и каждом битном индексе, j, реализация обновляет ключевые компоненты алгоритма на основе этих уравнений.
(1)
(2)
(3)
(4)
(5)
(6)
Для каждого слоя уравнение декодирования (6) работает над объединенным входом, полученным из текущих входных параметров LLR, , и предыдущие обновления слоя, .
Поскольку многоуровневый алгоритм BP обновляет только подмножество узлов в слое, этот алгоритм быстрее, чем алгоритм BP. Чтобы достигнуть того же коэффициента ошибок, как достигнуто с декодированием BP, используйте половину количества декодирования итераций при использовании многоуровневого алгоритма BP.
wlanHEDataBitRecover
функционируйте реализует нормированный алгоритм декодирования суммы min следующим многоуровневый алгоритм BP уравнением (3) замененный
,
где α является масштабным коэффициентом, заданным '
MinSumScalingFactor
'
аргумент пары "имя-значение". Это уравнение является адаптацией уравнения (4) представленный в [4].
wlanHEDataBitRecover
функционируйте реализует алгоритм декодирования суммы min смещения следующим многоуровневый алгоритм BP уравнением (3) замененный
,
где β является смещением, заданным '
MinSumOffset
'
аргумент пары "имя-значение". Это уравнение является адаптацией уравнения (5) представленный в [4].
[1] IEEE P802.11ax™/D4.1. “Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования. Поправка 1: Улучшения для Высокой эффективности WLAN”. Спроектируйте Стандарт для Информационных технологий — Телекоммуникации и обмен информацией между системами. Локальные сети и городские компьютерные сети — Конкретные требования.
[2] Gallager, Роберт Г. Имеющие малую плотность коды с проверкой четности. Кембридж, MA: нажатие MIT, 1963.
[3] Hocevar, D.E. "Уменьшаемая Архитектура Декодера Сложности через Многоуровневое Декодирование Кодов LDPC". В Семинаре IEEE по Системам Обработки сигналов, 2004. ГЛОТКИ 2004., 107-12. Остин, Техас, США: IEEE, 2004. https://doi.org/10.1109/SIPS.2004.1363033.
[4] Джингу Чен, R.M. Крем для загара, К. Джонс и Ян Ли. "Улучшенные алгоритмы декодирования суммы Min для неправильных кодов LDPC". В продолжениях. Международный симпозиум по теории информации, 2005. ISIT 2005., 449-53, 2005. https://doi.org/10.1109/ISIT.2005.1523374.
wlanHEMUConfig
| wlanHERecoveryConfig
| wlanHESUConfig
| wlanHETBConfig
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.