lteNPUSCHDecode

Декодируйте символы NPUSCH

Описание

[cw,stateOut,symbols] = lteNPUSCHDecode(ue,chs,sym) восстанавливает cw, кодовая комбинация мягких битов, путем декодирования sym, узкополосный восходящий канал совместно использованный канал (NPUSCH) символы для заданных настроек ue оборудования пользователя (UE) и настройка передачи канала chs. Процесс декодирования включает инвертирование кодирование канала NPUSCH, как описано в разделе 10.1.3 из [1]. Функция также возвращает stateOut, структура, содержащая декодер, утверждает для приема пакета и symbols, вектор из полученных символов созвездия.

[cw,stateOut,symbols] = lteNPUSCHDecode(ue,chs,sym,hEst,noiseEst) декодирует символы NPUSCH для заданной оценки канала hEst и спектральная плотность мощности шума оценивает noiseEst.

пример

[cw,stateOut,symbols] = lteNPUSCHDecode(___,stateIn) задает stateIn, начальное состояние декодера, в дополнение к любой комбинации входных аргументов от предыдущих синтаксисов.

Примеры

свернуть все

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

Сконфигурируйте настройки UE-specific.

ue = struct('NNCellID',0,'NBULSubcarrierSpacing','15kHz');

Задайте настройку передачи канала.

chs = struct('NPUSCHFormat','Data','NRUsc',12,'NRep',4,'NRU',1,...
    'NULSlots',2,'Modulation','QPSK','RNTI',0);

Сгенерируйте кодовую комбинацию битов.

cwLen = 2*20*chs.NRUsc*chs.NRU*chs.NULSlots;
cwIn = ones(cwLen,1);

Задайте начальные состояния энкодера и декодера как пустые структуры, указав на запуск пакета.

encoderStateIn = struct();
stateIn = struct();

Сгенерируйте символы NPUSCH для передачи пакета и декодируйте пакет на базисе паза пазом.

for SlotIdx = 0:(chs.NRep*chs.NRU*chs.NULSlots - 1)
    ue.NSlot = SlotIdx;
    [sym,encoderStateOut] = lteNPUSCH(ue,chs,cwIn,encoderStateIn);
    encoderStateIn = encoderStateOut;
    [cw,stateOut,symbols] = lteNPUSCHDecode(ue,chs,sym,stateIn);
    stateIn = stateOut;
end

Подтвердите, что передача и прием достигают конца пакета и что полученная кодовая комбинация соответствует входной кодовой комбинации.

disp(encoderStateOut.EndOfTx)
   1
disp(stateOut.EndOfTx)
   1
disp(isequal(cwIn,cw>0))
   1

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

свернуть все

Настройки UE-specific в виде структуры, содержащей эти поля.

Поле ЗначенияОписаниеТипы данных
NNCellIDЦелое число в интервале [0, 503]Узкополосная идентичность ячейки физического уровня (PCI)double
NBULSubcarrierSpacing'3.75kHz', '15kHz'

Расстояние между поднесущими восходящего канала NB-IoT

Чтобы установить расстояние между поднесущими 3,75 кГц, задайте это поле как '3.75kHz'. Чтобы установить расстояние между поднесущими 15 кГц, задайте это поле как '15kHz'.

charСтрока
NSlotНеотрицательное целое числоНомер слотаdouble
NFrame0 (значение по умолчанию), неотрицательное целое числоСтруктурируйте номерdouble

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

Настройка передачи канала в виде структуры, содержащей эти поля.

Поле ЗначенияОписаниеТипы данных
NPUSCHFormat'Data', 'Control'

Формат NPUSCH

Чтобы указать, что NPUSCH несет узкополосный восходящий канал совместно использованный канал (UL-SCH) данные, задайте это поле как 'Data'. Чтобы указать, что NPUSCH несет восходящую управляющую информацию, задайте это поле как 'Control'.

charСтрока
NRUsc1, 3, 6, 12

Количество последовательных поднесущих в модуле ресурса (RU)

Если вы задаете NPUSCHFormat поле как 'Control' или NBULSubcarrierSpacing поле ue введите как '3.75kHz', затем необходимо задать это поле как 1 .

double
NRep1, 2, 4, 8, 16, 32, 64, 128Количество повторений для кодовой комбинацииdouble
NRU1, 2, 3, 4, 5, 6, 8, 10Количество RUdouble
NULSlots2, 4, 8, 16

Количество пазов на RU

Если вы задаете NPUSCHFormat поле как 'Control', затем необходимо задать это поле как 4.

Если вы задаете NPUSCHFormat поле как 'Data', затем необходимо задать это поле как:

  • 16 когда вы задаете NRUsc поле как 1

  • 8 когда вы задаете NRUsc поле как 3

  • 4 когда вы задаете NRUsc поле как 6

  • 2 когда вы задаете NRUsc поле как 12

double
Modulation'BPSK', 'QPSK'

Тип модуляции

Чтобы включить бинарное манипулирование сдвига фазы (BPSK), задайте это поле как 'BPSK'. Чтобы включить квадратурное манипулирование сдвига фазы (QPSK), задайте это поле как 'QPSK'.

Если вы задаете NPUSCHFormat поле как 'Control', затем необходимо задать это поле как 'BPSK'.

charСтрока
RNTIНеотрицательное целое числоЗначение радиосети временного идентификатора (RNTI)double
CSI'On' (значение по умолчанию), 'Off'

Вес мягкие биты информацией о состоянии канала (CSI)

Масштабировать cw выведите с CSI, задайте это поле как 'On'. В противном случае задайте это поле как 'Off'.

charСтрока

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

Символы NPUSCH в виде матрицы с комплексным знаком размера N Sym-by-NRxAnts.

  • N, на который Sym является количеством символов, получает антенну, присвоенную NPUSCH для паза.

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

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

Оценка канала в виде матрицы с комплексным знаком размера N Sym-by-NRxAnts.

  • N, на который Sym является количеством символов, получает антенну, присвоенную NPUSCH для паза.

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

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

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

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

Начальное состояние декодера для приема пакета в виде структуры, содержащей эти поля.

Поле ЗначенияОписаниеТипы данных
SlotIdxЦелое число в интервале [0, (chs.NRU x chs.NULSlots x chs.NRep) – 1]Индекс паза в пакете, в основанной на нуле формеdouble
BlkFlushEnabled1 или true, 0 или falseЧтобы сбросить буферы в каждом блоке, задайте это поле как 1 TRUE). В противном случае задайте это поле как 0 ложь).logical
InitNSlotНеотрицательное целое числоНомер слота для скремблирования инициализации последовательностиdouble
InitNFrameНеотрицательное целое числоСтруктурируйте номер для скремблирования инициализации последовательностиdouble
EndOfBlk1 или true, 0 или falseТранспортный индикатор получения блокаlogical
EndOfCW1 или true, 0 или falseИндикатор получения кодовой комбинацииlogical
EndOfTx1 или true, 0 или falseКонец индикатора пакетаlogical
CWBufferВектор-столбец с действительным знаком той же длины как cw вывод .Буфер, чтобы сохранить восстановленную кодовую комбинациюdouble
CWSLCount(chs.NRU x chs.NULSlots) Вектор-by-1 из целых чиселСчетчик повторенияdouble

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

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

свернуть все

Кодовая комбинация мягких битов, возвращенных как вектор-столбец с действительным знаком.

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

Выведите состояние декодера, возвращенное как структура. Этот выход содержит внутреннее состояние каждого транспортного блока в этих полях.

Поле ЗначенияОписаниеТипы данных
SlotIdxЦелое число в интервале [0, (chs.NRU x chs.NULSlots x chs.NRep) – 1]

Индекс паза в пакете, в основанной на нуле форме

Функция возвращает это поле как SlotIdx поле stateIn введите увеличенный на одного. Когда SlotIdx поле stateIn введите достигает ее максимального значения, функция возвращает это поле как 0. Если вы не задаете SlotIdx поле stateIn введите, функция возвращает это поле как 0. Значение 0 указывает, что передача достигла конца пакета, на который функция также указывает путем установки EndOfTx поле к 1.

double
BlkFlushEnabled1, 0Индикатор, что функция сбрасывает буферы в каждом блокеlogical
InitNSlotНеотрицательное целое число

Номер слота для скремблирования инициализации последовательности

Когда обрабатываемый паз в точке инициализации, это поле равно NSlot поле ue входной параметр. В противном случае функция возвращает это поле как одно из этих значений.

  • Значение InitNSlot поле stateIn входной параметр

  • Значение NSlot поле ue введите, когда вы не зададите InitNSlot поле stateIn входной параметр

double
InitNFrameНеотрицательное целое число

Структурируйте номер для скремблирования инициализации последовательности

Когда обработанный кадр в точке инициализации, это поле равно NFrame поле ue входной параметр. В противном случае функция возвращает это поле как одно из этих значений.

  • Значение InitNFrame поле stateIn входной параметр

  • 0 когда вы не задаете InitNFrame поле stateIn входной параметр

double
EndOfBlk1, 0

Транспортный индикатор получения блока

Когда функция получила все пазы транспортного блока, по крайней мере, однажды, она возвращает это поле как 1.

В начале пакета функция сбрасывает это поле.

logical
EndOfCW1, 0

Индикатор получения кодовой комбинации

Когда функция получила целую кодовую комбинацию, то есть, когда каждый элемент CWSLCount поле как наименьшее количество 1, функция возвращает это поле как 1.

В начале пакета функция сбрасывает это поле.

logical
EndOfTx1, 0

Конец индикатора пакета

Когда передача достигает конца пакета, то есть, когда каждый элемент CWSLCount поле как наименьшее количество 1, функция возвращает это поле как 1. В противном случае функция возвращает это поле как 0.

В начале пакета функция сбрасывает это поле.

logical
CWBufferВектор-столбец с действительным знаком той же длины как cw вывод .

Буфер, чтобы сохранить восстановленную кодовую комбинацию

В начале пакета функция сбрасывает это поле.

double
CWSLCount(chs.NRU x chs.NULSlots) Вектор-by-1 из целых чисел

Счетчик повторения

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

В начале пакета функция сбрасывает это поле.

double

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

Полученные символы созвездия, возвращенные как вектор-столбец с комплексным знаком.

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

Больше о

свернуть все

Пакет

Пакет в слое среднего управления доступом (MAC) относится к повторным передачам транспортного блока.

Для получения дополнительной информации смотрите Раздел 5.3.2.1 из [2].

Советы

Чтобы использовать эту функцию для приема пакета, выполните эти шаги.

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

  2. Вызовите функцию снова, задав stateIn введите как stateOut выведите возвращенный предыдущим вызовом функции.

  3. Повторите шаг 2, пока функция не возвратит EndOfTx поле stateOut выведите как 1 TRUE), указывая на конец пакета.

Ссылки

[1] 3GPP TS 36.211. “Физические каналы и модуляция”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group; Развитый Универсальный Наземный Радио-доступ (к E-UTRA). https://www.3gpp.org.

[2] 3GPP TS 36.321. “Спецификация протокола Среднего управления доступом (MAC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group; Развитый Универсальный Наземный Радио-доступ (к E-UTRA). https://www.3gpp.org.

Введенный в R2020a