exponenta event banner

wlanVHTDataRecover

Восстановление битов из поля VHT-Data

Описание

пример

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

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

пример

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-Data формы сигнала VHT, передаваемого по каналу с замиранием 2x2, с использованием оценки канала в поле обучения VHT long (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-Data и подтвердите, что принятые биты соответствуют переданным битам.

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

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

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

Сконфигурируйте передачу 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-Data.

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

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

max(abs(cpe))
ans = 0.2828

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

свернуть все

Полученное поле VHT-Data, указанное как массив комплексных значений размера NS-by-NR.

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

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

Примечание

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

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

Оценка канала для занятых поднесущих, заданных как массив комплексных значений размера NST-by-NSTS-by-NR.

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

    Значение ChannelBandwidth СобственностьЗначение NST
    'CBW20'56
    'CBW40'114
    'CBW80'242
    'CBW160'484

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

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

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

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

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

Конфигурация передачи VHT, заданная как wlanVHTConfig объект.

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

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

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

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

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

  • 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

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

Зависимости

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

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

Смещение для декодирования 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 × LPSDU, где LPSDU - длина PSDU в байтах.

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

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

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

Выровненные символы OFDM, содержащие поле VHT-Data, возвращаемое как массив комплексных значений размера NSD-by-NSym-by-NSS.

  • NSD - количество поднесущих данных

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

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

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

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

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

Подробнее

свернуть все

Поле данных VHT

Поле VHT-Data переносит один или более кадров с уровня управления доступом к среде (MAC). Это поле следует за полем VHT-SIG-B в PPDU VHT.

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

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

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

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

  • Tail - биты, необходимые для завершения сверточного кода (не требуется, когда передача использует кодирование канала LDPC)

Алгоритмы

свернуть все

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

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

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

L (ci) = log (Pr (ci = 0 |  выход канала для ci) Pr ( ci = 0 |  выход канала для ci)).

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

L (rji) = 2 атан (∏i′∈Vj\{ i} танх (12L (qi′j))),

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

L (Qi) = L (ci) +∑j′∈CiL (rj′i).

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

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

На этом рисунке показано, как вычислить эти наборы индексов для ИКМ Н для случая i = 5 и j = 3.

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

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

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

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

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

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

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

(3) Amj=∑n∈N (m )\{ j} (L (qmn))

(4) smj=∏n∈N (м )\{ j} sgn (L (qmn))

(5) Rmj = smjStart( Amj)

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

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

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

Декодирование нормализованной минимальной суммы

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

Amj=minn∈N (m )\{ j} (α 'L (qmn) |),

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

Декодирование минимальной суммы смещения

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

Amj = max (minn∈N (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] Галлагер, Роберт Г. Коды проверки четности с низкой плотностью. Кембридж, Массачусетс: MIT Press, 1963.

[3] Hocevar, D.E. «Архитектура декодера с уменьшенной сложностью посредством многоуровневого декодирования кодов LDPC». Семинар IEEE по системам обработки сигналов, 2004 год. SIPS 2004., 107-12. Остин, Техас, США: IEEE, 2004. https://doi.org/10.1109/SIPS.2004.1363033.

[4] Цзинху Чен, Р. М. Таннер, К. Джонс и Янь Ли. «Улучшенные алгоритмы декодирования минимальной суммы для нерегулярных LDPC-кодов». В разбирательстве. Международный симпозиум по теории информации, 2005 год. ISIT 2005., 449-53, 2005. https://doi.org/10.1109/ISIT.2005.1523374.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2015b