wlanVHTDataRecover

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

Описание

пример

dataBits = wlanVHTDataRecover(rxDataSig,chEst,noiseVarEst,cfgVHT) восстанавливает dataBits, вектор-столбец битов, от rxDataSig, полученное VHT-поле-данных очень высокопроизводительного (VHT) однопользовательская передача. Функция восстанавливает dataBits при помощи chEst, оценка канала для занятых поднесущих, noiseVarEst, оценка шумового отклонения и cfgVHT, объект настройки, который содержит параметры передачи VHT.

Для получения дополнительной информации о VHT-поле-данных, смотрите VHT-поле-данных.

пример

dataBits = wlanVHTDataRecover(rxDataSig,chEst,noiseVarEst,cfgVHT,userIdx) восстанавливает dataBits для одного пользователя, заданного пользователем, индексируют userIdx, в многопользовательской передаче VHT.

dataBits = wlanVHTDataRecover(rxDataSig,chEst,noiseVarEst,cfgVHT,userIdx,numSTS) восстанавливает dataBits для одного пользователя в многопользовательской передаче VHT для numSTS, количество пространственно-временных потоков в передаче.

пример

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

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

[dataBits,crcBits,eqSym] = wlanVHTDataRecover(___) возвращает eqSym, компенсируемые символы OFDM, которые включают поднесущие данных VHT-поля-данных, с помощью любой комбинации входных аргументов от предыдущих синтаксисов.

[dataBits,crcBits,eqSym,cpe] = wlanVHTDataRecover(___) возвращает cpe, общая ошибка фазы между полученными и ожидаемыми символами OFDM, с помощью любой комбинации входных аргументов от предыдущих синтаксисов.

Примеры

свернуть все

Восстановите биты с VHT-поля-данных формы волны VHT, переданной хотя 2x2 исчезающий канал при помощи оценки канала на VHT длинное учебное поле (VHT-LTF).

Сконфигурируйте передачу VHT с полосой пропускания канала 160 МГц, двумя передающими антеннами и двумя каналами передачи.

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

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

psduLength = 8*cfgVHT.PSDULength;
bits = randi([0 1],psduLength,1);
txLTF  = wlanVHTLTF(cfgVHT); 
txDataSig = wlanVHTData(bits,cfgVHT);

Передайте переданную форму волны через 2x2 квазистатический исчезающий канал с аддитивным белым Гауссовым шумом (AWGN).

snr = 10;
H = complex(randn(2,2),randn(2,2))/sqrt(2);
rxLTF  = awgn(txLTF*H,snr);
rxDataSig = awgn(txDataSig*H,snr);

Вычислите принимаемую мощность сигнала и оцените шумовое отклонение.

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

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

sym = wlanVHTLTFDemodulate(rxLTF,cfgVHT,1);
chEst = wlanVHTLTFChannelEstimate(sym,cfgVHT);

Восстановите биты с полученного VHT-поля-данных и подтвердите, что полученные биты совпадают с переданными битами.

dataBits = wlanVHTDataRecover(rxDataSig,chEst,noiseVarEst,cfgVHT);
numErr = biterr(bits,dataBits)
numErr = 0

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

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

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

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

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

psduLength = 8*cfgVHT.PSDULength;
numUsers = cfgVHT.NumUsers;
bits = cell(1,2);
for nu = 1:numUsers
    bits{nu} = randi([0 1],psduLength(nu),1);
end

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

txLTF  = wlanVHTLTF(cfgVHT); 
txDataSym = wlanVHTData(bits,cfgVHT);

Передайте сигнал VHT-поля-данных для первого пользователя через 4x1 канал, потому что этот сигнал состоит из одного пространственно-временного потока. Передайте VHT-поле-данных для вторых пользовательских данных через 4x3 канал, потому что этот сигнал состоит из трех пространственно-временных потоков. Примените AWGN к каждому сигналу, приняв ОСШ 15 дБ.

snr = 15; 
H{1} = complex(randn(4,1),randn(4,1))/sqrt(2);
H{2} = complex(randn(4,3),randn(4,3))/sqrt(2);
number = zeros(2,1);
ratio = zeros(2,1);
for userIdx = 1:numUsers
    rxDataSym = awgn(txDataSym*H{userIdx},snr,'measured');

Примените ту же обработку канала к VHT-LTF для каждого пользователя.

    rxLTF = awgn(txLTF*H{userIdx},snr,'measured');

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

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

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

    demod = wlanVHTLTFDemodulate(rxLTF,cbw,numSTS);
    chEst = wlanVHTLTFChannelEstimate(demod,cbw,numSTS);

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

    dataBits = wlanVHTDataRecover(rxDataSym,chEst,noiseVarEst,cfgVHT,userIdx);
    [number(userIdx),ratio(userIdx)] = biterr(bits{userIdx},dataBits);
    disp(number(userIdx))
    disp(ratio(userIdx))
end
        4269
    0.5082
        2444
    0.0968

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

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

cfgVHT = wlanVHTConfig('APEPLength',512);
psduLength = 8*cfgVHT.PSDULength;
bits = randi([0 1],psduLength,1); 
txDataSig = wlanVHTData(bits,cfgVHT);

Передайте передачу через канал AWGN.

snr = 10;
rxDataSig = awgn(txDataSig,snr);

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

chEst = ones(242,1);
noiseVarEst = 10^(-snr/10);
[dataBits,crcBits,eqSym,cpe] = wlanVHTDataRecover(rxDataSig,chEst,noiseVarEst,cfgVHT,'EqualizationMethod','ZF');

Проверьте, что восстановленный сигнал не содержит битовых ошибок.

number = biterr(bits,dataBits)
number = 0

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

disp(crcBits')
   1   1   0   1   0   1   1   0

Вычислите и отобразите максимальную общую ошибку фазы.

max(abs(cpe))
ans = 0.2828

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

свернуть все

Полученное VHT-поле-данных в виде массива с комплексным знаком размера N S-by-NR.

  • N S является целым числом, больше, чем или равный количеству выборок временного интервала.

  • N R является количеством, получают антенны.

Примечание

Функциональные процессы одно поле данных PPDU на запись. Если вы задаете N S как значение, больше, чем длина поля, функция не обрабатывает дополнительные выборки в конце rxDataSig. Чтобы обработать конкатенированный поток полей данных PPDU, необходимо вызвать функцию многократно.

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

Оценка канала для занятых поднесущих в виде массива с комплексным знаком размера ST N NSTS NR.

  • ST N является количеством занятых поднесущих, которое зависит от ChannelBandwidth свойство cfgVHT введите в соответствии с этой таблицей.

    Значение ChannelBandwidth СвойствоЗначение ST N
    'CBW20'56
    'CBW40'114
    'CBW80'242
    'CBW160'484

  • STS N является количеством пространственно-временных потоков, которые должны совпадать с NumSpacetimeStreams свойство cfgVHT входной параметр. Для многопользовательских передач N STS является общим количеством пространственно-временных потоков для всех пользователей.

  • N R является количеством, получают антенны.

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

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

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

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

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

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

  • Для однопользовательской передачи задайте этот вход как целое число в интервале [1, 4]

  • для многопользовательской передачи задайте этот вход как вектор-строку из целых чисел в интервале [1, 4] длины Пользователи N, где Пользователи N являются общим количеством пользователей в передаче.

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

Примечание

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

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

Аргументы name-value

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

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

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

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

Метод эквализации в виде разделенной запятой пары, состоящей из 'EqualizationMethod' и одно из этих значений.

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

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

Когда полученный сигнал имеет, несколько получают антенны, функциональное разнообразие приемника использования во время эквализации. Когда количество переданных пространственно-временных потоков один, и вы задаете этот аргумент как 'ZF', функция выполняет объединение максимального отношения.

Примечание

Задайте этот аргумент как 'ZF' когда любое из этих условий применяется.

  • NumSpaceTimeStreams свойство cfgVHT входом является 1.

  • NumSpaceTimeStreams и STBC свойства cfgVHT входом является 2 и 1 TRUE), соответственно.

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

Отслеживание экспериментального этапа в виде разделенной запятой пары, состоящей из 'PilotPhaseTracking' и одно из этих значений.

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

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

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

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

Примечание

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

Зависимости

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

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

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

Зависимости

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

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

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

Зависимости

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

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

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

Зависимости

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

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

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

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

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

Зависимости

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

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

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

свернуть все

Биты восстановились с VHT-поля-данных, возвращенного как вектор-столбец длины 8×LPSDU, где L PSDU является длиной PSDU в байтах.

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

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

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

Компенсируемые символы OFDM, включающие VHT-поле-данных, возвращенное как массив с комплексным знаком размера SD N NSym NSS.

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

  • N SYM является количеством символов OFDM в VHT-поле-данных

  • N SS является количеством пространственных потоков. Когда STBC свойство cfgVHT входом является 0 ложь), N SS равен N STS, количество пространственно-временных потоков в передаче. Когда STBC свойство cfgVHT входом является 0 ложь), N SS равен N STS/2.

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

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

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

Больше о

свернуть все

VHT-поле-данных

VHT-поле-данных несет одну или несколько систем координат от слоя среднего управления доступом (MAC). Это поле следует за полем VHT-SIG-B в VHT PPDUs.

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

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

  • PSDU — Поле переменной длины, содержащее модуль эксплуатационных данных PLCP

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

  • Хвост — Биты, требуемые отключать сверточный код (не требуемый, когда передача использует кодирование канала LDPC),

Алгоритмы

свернуть все

Эта функция поддерживает эти четыре 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) отрицательно, трудное решение выход для 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' аргумент пары "имя-значение".

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

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

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

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

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

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

Функция реализует алгоритм декодирования суммы 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] Джингу Чен, Р.М. Таннер, К. Джонс и Ян Ли. "Улучшенные Алгоритмы Декодирования Суммы Min для Неправильных Кодов LDPC". В Продолжениях. Международный Симпозиум по Теории информации, 2005. ISIT 2005., 449-53, 2005. https://doi.org/10.1109/ISIT.2005.1523374.

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

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

Введенный в R2015b