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

[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-LTF и VHT-Data.

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-by-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-LTF и VHT-Data.

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

Передайте сигнал поля VHT-данных для первого пользователя через канал 4x1, потому что этот сигнал состоит из одного пространственно-временного потока. Передайте поле VHT-Data для вторых пользовательских данных через канал 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-передачи, восстановленной из канала SISO AWGN, используя алгоритм эквализации с нулями.

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

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 N R.

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

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

Примечание

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

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

Оценка канала для занятых поднесущих, заданная как комплексный массив размера N ST-by N STS-by- N R.

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

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

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

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

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

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

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

Строение передачи VHT, заданная как wlanVHTConfig объект.

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

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

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

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

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

Примечание

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

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

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

Задайте необязательные разделенные разделенными запятой парами 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' когда применяется любое из этих условий.

  • The NumSpaceTimeStreams свойство cfgVHT вход 1.

  • The NumSpaceTimeStreams и STBC свойства cfgVHT входные параметры 2 и 1 (true), соответственно.

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

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

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

  • 'None' - Отключить отслеживание фазы управления.

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

Алгоритм декодирования 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 свойство cfgVHT вход в '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 свойство cfgVHT вход в 'LDPC' для пользователя, соответствующего userIdx вход.

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

Включите раннее прекращение декодирования LDPC, заданное как разделенная разделенными запятой парами, состоящая из 'EarlyTermination' и 1 (true) или 0 (false).

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

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

Зависимости

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

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

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

свернуть все

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

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

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

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

Выравниваемые символы OFDM, содержащие поле VHT-данных, возвращенные как комплексный массив размера N SD-by N Sym-by N SS.

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

  • N SYM является количеством символов OFDM в поле VHT-Data

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

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

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

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

Подробнее о

свернуть все

Поле данных VHT

Поле VHT-Data содержит одни или несколько систем координат с слоя управления доступом к среде (MAC). Это поле соответствует полю VHT-SIG-B в VHT PPDUs.

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

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

  • PSDU - поле переменной длины, содержащее модуль служебных данных PLCP

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

  • Tail - биты, необходимые для завершения сверточного кода (не требуется, когда передача использует кодирование канала 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 для танха (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] IEEE STD 802.11ac™-2013 (Поправка к IEEE Std 802.11-2012 с поправками IEEE Std 802.11ae™-2012, IEEE Std 802.11a™-2012 и IEEE Std 802.11ad™-2012). "Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического слоя (PHY). Поправка 4: Улучшения для очень высокой пропускной способности в полосах ниже 6 ГГц ". Стандарт IEEE на информационные технологии - телекоммуникации и обмен информацией между системами. Локальные и столичные сети - Особые требования.

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

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