wlanVHTDataRecover

Восстановите данные VHT

Описание

пример

recBits = wlanVHTDataRecover(rxSig,chEst,noiseVarEst,cfg) возвращает восстановленные биты полезной нагрузки в Поле данных VHT [] 1для однопользовательской передачи. Входные параметры включают полученный сигнал поля данных VHT, оценку канала, шумовую оценку отклонения, и объект настройки формата, cfg.

пример

recBits = wlanVHTDataRecover(rxSig,chEst,noiseVarEst,cfg,userNumber) возвращает восстановленные биты полезной нагрузки, в многопользовательской передаче, для пользователя, заданного userNumber.

recBits = wlanVHTDataRecover(rxSig,chEst,noiseVarEst,cfg,userNumber,numSTS) также задает количество пространственно-временных потоков, numSTS, для многопользовательской передачи.

пример

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

[recBits,crcBits] = wlanVHTDataRecover(___) также возвращает биты контрольной суммы VHT-SIG-B, crcBits, использование аргументов от предыдущих синтаксисов.

[recBits,crcBits,eqSym] = wlanVHTDataRecover(___) также возвращает компенсируемые символы, eqSym.

[recBits,crcBits,eqSym,cpe] = wlanVHTDataRecover(___) также возвращает общую ошибку фазы, cpe.

Примеры

свернуть все

Восстановите биты в VHT-поле-данных с помощью оценки канала на поле VHT-LTF по 2 x 2 квазистатических исчезающих канала.

Создайте объект настройки VHT с пропускной способностью канала на 160 МГц и двумя каналами передачи.

cbw = 'CBW160';
vht = wlanVHTConfig('ChannelBandwidth',cbw,'NumTransmitAntennas',2,'NumSpaceTimeStreams',2,'APEPLength',512);

Сгенерируйте сигналы VHT-поля-данных и VHT-LTF.

txDataBits = randi([0 1],8*vht.PSDULength,1);
txVHTLTF  = wlanVHTLTF(vht); 
txVHTData = wlanVHTData(txDataBits,vht);

Передайте переданную форму волны через 2 x 2 квазистатических исчезающих канала с AWGN.

snr = 10;
H = 1/sqrt(2)*complex(randn(2,2),randn(2,2));
rxVHTLTF  = awgn(txVHTLTF*H,snr);
rxVHTData = awgn(txVHTData*H,snr);

Вычислите полученную степень сигнала и используйте ее, чтобы оценить шумовое отклонение.

powerDB = 10*log10(var(rxVHTData));
noiseVarEst = mean(10.^(0.1*(powerDB-snr)));

Выполните оценку канала на основе поля VHT-LTF.

demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,vht,1);
chanEst = wlanVHTLTFChannelEstimate(demodVHTLTF,vht);

Восстановите биты полезной нагрузки в VHT-поле-данных и сравните с исходными битами полезной нагрузки.

rxDataBits = wlanVHTDataRecover(rxVHTData,chanEst,noiseVarEst,vht);
numErr = biterr(txDataBits,rxDataBits)
numErr = 0

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

Создайте объект настройки VHT, имеющий пропускную способность канала на 160 МГц, двух пользователей и четыре антенны передачи. Присвойте один пространственно-временной поток первому пользователю и три пространственно-временных потока второму пользователю.

cbw = 'CBW160';
numSTS = [1 3];
vht = wlanVHTConfig('ChannelBandwidth',cbw,'NumUsers',2, ...
    'NumTransmitAntennas',4,'NumSpaceTimeStreams',numSTS);

Поскольку существует два пользователя, длина PSDU является 1 2 вектором-строкой.

psduLen = vht.PSDULength
psduLen = 1×2

        1050        3156

Сгенерируйте многопользовательские входные данные. Эти данные должны быть в форме 1 на N массивом ячеек, где N является количеством пользователей.

txDataBits{1} = randi([0 1],8*vht.PSDULength(1),1);
txDataBits{2} = randi([0 1],8*vht.PSDULength(2),1);

Сгенерируйте сигналы VHT-поля-данных и VHT-LTF.

txVHTLTF  = wlanVHTLTF(vht); 
txVHTData = wlanVHTData(txDataBits,vht);

Передайте поле данных для первого пользователя через 4x1 канал, потому что это состоит из одного пространственно-временного потока. Передайте данные второго пользователя через 4x3 канал, потому что это состоит из трех пространственно-временных потоков. Примените белый Гауссов шум к каждому пользовательскому сигналу.

snr = 15;
H1 = 1/sqrt(2)*complex(randn(4,1),randn(4,1));
H2 = 1/sqrt(2)*complex(randn(4,3),randn(4,3));

rxVHTData1 = awgn(txVHTData*H1,snr,'measured');
rxVHTData2 = awgn(txVHTData*H2,snr,'measured');

Повторите процесс для полей VHT-LTF.

rxVHTLTF1  = awgn(txVHTLTF*H1,snr,'measured');
rxVHTLTF2  = awgn(txVHTLTF*H2,snr,'measured');

Вычислите полученную степень сигнала для обоих пользователей и используйте ее, чтобы оценить шумовое отклонение.

powerDB1 = 10*log10(var(rxVHTData1));
noiseVarEst1 = mean(10.^(0.1*(powerDB1-snr)));

powerDB2 = 10*log10(var(rxVHTData2));
noiseVarEst2 = mean(10.^(0.1*(powerDB2-snr)));

Оцените характеристики канала с помощью полей VHT-LTF.

demodVHTLTF1 = wlanVHTLTFDemodulate(rxVHTLTF1,cbw,numSTS);
chanEst1 = wlanVHTLTFChannelEstimate(demodVHTLTF1,cbw,numSTS);

demodVHTLTF2 = wlanVHTLTFDemodulate(rxVHTLTF2,cbw,numSTS);
chanEst2 = wlanVHTLTFChannelEstimate(demodVHTLTF2,cbw,numSTS);

Восстановите биты VHT-поля-данных для первого пользователя и сравните с исходными битами полезной нагрузки.

rxDataBits1 = wlanVHTDataRecover(rxVHTData1,chanEst1,noiseVarEst1,vht,1);
[~,ber1] = biterr(txDataBits{1},rxDataBits1)
ber1 = 0.4983

Определите количество битовых ошибок для второго пользователя.

rxDataBits2 = wlanVHTDataRecover(rxVHTData2,chanEst2,noiseVarEst2,vht,2);
[~,ber2] = biterr(txDataBits{2},rxDataBits2)
ber2 = 0.0972

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

Восстановите сигнал VHT-поля-данных через канал AWGN SISO с помощью обеспечивающей нуль эквализации.

Сконфигурируйте объект настройки формата VHT, сгенерируйте случайные биты полезной нагрузки и сгенерируйте VHT-поле-данных.

cfg = wlanVHTConfig('APEPLength',512); 
txBits = randi([0 1],8*cfg.PSDULength,1); 
txSig = wlanVHTData(txBits,cfg);

Передайте переданные данные VHT через канал аддитивного белого Гауссова шума (AWGN).

awgnChan = comm.AWGNChannel('NoiseMethod','Variance','Variance',0.1);
rxSig = awgnChan(txSig);

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

chEst = ones(242,1);
noiseVarEst = 0.1;
recBits = wlanVHTDataRecover(rxSig,chEst,noiseVarEst,cfg,'EqualizationMethod','ZF');
numErr = biterr(txBits,recBits)
numErr = 0

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

свернуть все

Полученный сигнал VHT-поля-данных во временном интервале в виде NS-by-NR матрица. NR является количеством, получают антенны. NS должен быть больше или быть равен количеству выборок временного интервала во входе VHT-поля-данных.

Примечание

wlanVHTDataRecover обрабатывает одно поле данных PPDU на запись. Если NS больше длины поля, дополнительных выборок в конце rxSig не обрабатываются. Обработать конкатенированный поток полей данных PPDU, множественных вызовов wlanVHTDataRecover требуются. Если rxSig короче, чем длина VHT-поля-данных, ошибка происходит.

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

Оценка канала для данных и экспериментальных поднесущих в виде матрицы или массива размера NST-by-NSTS-by-NR. NST является количеством занятых поднесущих. NSTS является количеством пространственно-временных потоков. Для многопользовательских передач NSTS является общим количеством пространственно-временных потоков для всех пользователей. NR является количеством, получают антенны. NST и NSTS должны совпадать с cfg параметры объекта настройки для пропускной способности канала и количества пространственно-временных потоков.

ST N увеличивается с пропускной способностью канала.

ChannelBandwidthКоличество занятых поднесущих (ST N)Количество поднесущих данных (SD N)Количество экспериментальных поднесущих (SP N)
'CBW20'56524
'CBW40'1141086
'CBW80'2422348
'CBW160'48446816

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

Шумовая оценка отклонения в виде неотрицательного скаляра.

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

Настройка VHT PPDU в виде wlanVHTConfig объект.

Количество пользователя в многопользовательской передаче в виде целого числа, имеющего значение от 1 до Пользователей N. Пользователи N являются общим количеством пользователей.

Количество пространственно-временных потоков в многопользовательской передаче в виде вектора. Количество пространственно-временных потоков является 1 NUsers вектором целых чисел от 1 до 4, где Пользователи N являются целым числом от 1 до 4.

Пример: [1 3 2] количество пространственно-временных потоков для каждого пользователя.

Примечание

Сумма пространственно-временных потоковых элементов вектора не должна превышать восемь.

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

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

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

Пример: 'PilotPhaseTracking','None' отключает отслеживание экспериментального этапа.

Смещение выборки символа OFDM, представленное как часть длины циклического префикса (CP) в виде скаляра в интервале [0, 1]. Значение, которое вы задаете, указывает на местоположение запуска для демодуляции OFDM относительно начала циклического префикса. Значение 0 представляет запуск циклического префикса и значения 1 представляет конец циклического префикса.

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

Метод эквализации в виде одного из этих значений:

  • 'MMSE' — Получатель использует минимальный эквалайзер среднеквадратической ошибки.

  • 'ZF' — Получатель использует обеспечивающий нуль эквалайзер.

Примечание

Задайте этот аргумент как 'EqualizationMethod','ZF' когда вы устанавливаете любые из этих значений свойств в cfg входной параметр:

  • 'NumSpaceTimeStreams',1

  • 'NumSpaceTimeStreams',2,'STBC',true

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

Отслеживание экспериментального этапа в виде одного из этих значений:

  • 'PreEQ' — Включите отслеживание экспериментального этапа, которое выполняется перед любой операцией эквализации.

  • 'None' — Отключите отслеживание экспериментального этапа.

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

LDPC декодирование алгоритма в виде одного из этих значений.

Примечание

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

Зависимости

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

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

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

Зависимости

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

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

Возместите за сумму min смещения LDPC, декодирующий в виде неотрицательного скаляра.

Зависимости

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

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

Максимальное количество LDPC декодирование итераций в виде положительного целого числа.

Зависимости

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

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

Включите раннее завершение LDPC, декодирующего в виде 1 TRUE) или 0 ложь).

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

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

Зависимости

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

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

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

свернуть все

Восстановленные биты полезной нагрузки в VHT-поле-данных, возвращенном как вектор-столбец длины 8 × cfgVHT.PSDULength. Смотрите wlanVHTConfig для PSDULength детали. Выход для отдельного пользователя, как определено userNumber.

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

Биты контрольной суммы для поля VHT-SIG-B, возвращенного как вектор столбца двоичных данных длины 8.

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

Компенсируемые символы, возвращенные как SD N NSYM NSS матрицей или массивом. SD N является количеством поднесущих данных. N SYM является количеством символов OFDM в VHT-поле-данных. N SS является количеством пространственных потоков, присвоенных пользователю. Когда STBC является false, N SS = N STS. Когда STBC является true, N SS = N STS/2.

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

Общая ошибка фазы в радианах, возвращенных как вектор-столбец, имеющий длину N SYM. N SYM является количеством символов OFDM в поле данных VHT.

Ограничения

wlanVHTDataRecover обрабатывая ограничения, ограничения и рекомендации:

  • Если только формат VHT PPDUs обрабатывается, то isa(cfgVHT, 'wlanVHTConfig') должен быть true.

  • Для однопользовательских сценариев, cfgVHT.NumUsers должен равняться 1.

  • Когда STBC включен, количество пространственно-временных потоков должно быть четным.

  • cfgRec.EqualizationMethod = 'ZF' рекомендуется когда cfgVHT.STBC = true и cfgVHT.NumSpaceTimeStreams = 2

  • cfgRec.EqualizationMethod = 'ZF' рекомендуется когда cfgVHT.NumSpaceTimeStreams = 1

Больше о

свернуть все

Поле данных VHT

Очень высокие данные о пропускной способности (данные VHT) поле используются, чтобы передать один или несколько кадров от слоя MAC. Это следует за полем VHT-SIG-B в пакетной структуре для формата VHT PPDUs.

Для подробного описания Поля данных VHT смотрите раздел 21.3.10 из IEEE® Std 802.11™-2016. Поле данных VHT состоит из четырех подполей.

  • Поле Service — Содержит семибитное состояние инициализации скремблера, один бит, зарезервированный для будущих факторов и восемь битов для поля VHT-SIG-B CRC.

  • PSDU — Поле переменной длины, содержащее модуль эксплуатационных данных PLCP. В 802,11, PSDU может состоять из агрегата нескольких модулей эксплуатационных данных MAC.

  • Клавиатура PHY — Переменное количество битов передало передатчику, чтобы создать полный символ OFDM.

  • Хвост — Биты раньше отключали сверточный код. Биты хвоста не нужны, когда LDPC используется.

Алгоритмы

свернуть все

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

Декодирование распространения веры

wlanVHTDataRecover функционируйте реализует алгоритм 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) отрицательно, трудное решение выход для L(Qi) 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 для tanh (19.07) и –1 для tanh (–19.07).

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

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

wlanVHTDataRecover функционируйте реализует многоуровневый алгоритм 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

wlanVHTDataRecover функционируйте реализует нормированный алгоритм декодирования суммы min следующим многоуровневый алгоритм BP уравнением (3) замененный

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

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

Возместите декодирование суммы Min

wlanVHTDataRecover функционируйте реализует алгоритм декодирования суммы min смещения следующим многоуровневый алгоритм BP уравнением (3) замененный

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

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

Ссылки

[1] STD IEEE 802.11ac™-2013 (Поправка к Станд. IEEE 802.11-2012, как исправлено Станд. IEEE 802.11ae™-2012, Станд. IEEE 802.11a™-2012 и Станд. IEEE 802.11ad™-2012). “Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования. Поправка 4: Улучшения для Очень Высокой Операции Пропускной способности в Полосах ниже 6 ГГц”. Стандарт IEEE для Информационных технологий — Телекоммуникации и обмен информацией между системами. Локальные сети и городские компьютерные сети — Конкретные требования.

[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.

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

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

Введенный в R2015b


[1]  802.11ac Станд. IEEE 2 013 Адаптированных и переизданные с разрешением от IEEE. Авторское право IEEE 2013. Все права защищены.