nrPUSCHDecode

Декодируйте символы модуляции PUSCH

Описание

пример

[cw,symbols] = nrPUSCHDecode(sym,mod,nid,rnti) возвращает мягкие биты cw и символы созвездия symbols следуя из обратной операции физического восходящего канала совместно использованный канал (PUSCH), обрабатывающий от Раздела TS 38.211 6.3.1 [1]. Декодирование состоит из слоя demapping, демодуляции символов sym со схемой mod модуляции, и дескремблирование с борющейся идентичностью nid. Вход rnti радиосеть временный идентификатор (RNTI) оборудования пользователя (UE). Эта функция выполняет данные, дескремблирующие только. Поскольку местоположения бита заполнителя восходящей управляющей информации (UCI) неизвестны, функция не может правильно дескремблировать UCIs если существующий во входе.

[cw,symbols] = nrPUSCHDecode(___,nVar) задает шумовой масштабный коэффициент отклонения мягких битов в демодуляции PUSCH в дополнение к входным параметрам в первом синтаксисе.

[cw,symbols] = nrPUSCHDecode(___,transformPrecode,mrb) задает преобразовывают deprecoding как логическое значение и количество выделенных блоков ресурса PUSCH. Задайте эти входные параметры в дополнение к входным параметрам во втором синтаксисе. Когда transformPrecode установлен в true, функция применяет инверсию предварительного кодирования преобразования, заданного в Разделе TS 38.211 6.3.1.4. mrb задает выделенное количество блоков ресурса PUSCH.

пример

[cw,symbols] = nrPUSCHDecode(___,txScheme,nLayers,tpmi) задает схему передачи в дополнение к входным параметрам в третьем синтаксисе. Когда txScheme установлен в 'codebook', функция выполняет мультивход мультивыводится (MIMO) deprecoding на основе конкретного количества слоев nLayers передачи и переданный предварительно кодирующий матричный индикатор (TPMI) tpmi.

пример

[cw,symbols] = nrPUSCHDecode(carrier,pusch,sym,nVar) возвращает мягкие биты cw и символы созвездия symbols для заданной настройки поставщика услуг carrier и настройка PUSCH pusch. Вход sym получен символы PUSCH, чтобы декодировать. Дополнительный вход nVar задает шумовой масштабный коэффициент отклонения мягких битов.

Примеры

свернуть все

Задайте случайную последовательность двоичных значений, соответствующих кодовой комбинации 8 064 битов.

cw = randi([0 1],8064,1);

Используя 256-QAM модуляцию, сгенерируйте символы модуляции PUSCH для заданного личного номера ячейки физического уровня, RNTI и двух слоев передачи. По умолчанию эта функция отключает, преобразовывают предварительное кодирование и основанную на некниге шифров передачу.

modulation = '256QAM';
nlayers = 2;
ncellid = 17;
rnti = 111;
sym = nrPUSCH(cw,modulation,nlayers,ncellid,rnti)
sym = 504×2 complex

  -0.9971 - 0.8437i   0.0767 + 0.2301i
   0.3835 + 0.2301i   0.9971 - 0.5369i
  -0.3835 - 1.1504i  -0.3835 + 0.9971i
   0.5369 + 0.0767i  -0.9971 + 0.8437i
   1.1504 - 0.9971i  -0.8437 - 0.6903i
  -0.6903 + 0.0767i   1.1504 - 0.3835i
   0.8437 + 0.6903i   1.1504 + 0.2301i
  -0.6903 - 0.2301i  -0.8437 + 1.1504i
   0.0767 + 0.8437i  -0.0767 + 0.6903i
   0.3835 - 0.8437i   0.3835 + 0.9971i
      ⋮

Декодируйте символы модуляции PUSCH.

demod = nrPUSCHDecode(sym,modulation,ncellid,rnti)
demod = 8064×1
1010 ×

   -1.1529
   -0.8471
    0.2118
   -0.0941
   -0.0235
    0.0235
    0.0235
   -0.0235
   -0.0235
   -0.0941
      ⋮

Выполните трудное решение относительно мягкой метрики.

rxcw = double(demod<0)
rxcw = 8064×1

     1
     1
     0
     1
     1
     0
     0
     1
     1
     1
      ⋮

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

isequal(cw,rxcw)
ans = logical
   1

Задайте случайную последовательность двоичных значений, соответствующих кодовой комбинации 8 064 битов.

cw = randi([0 1],8064,1);

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

modulation = 'QPSK';
ncellid = 17;
rnti = 111;
nlayers = 1;
transformPrecode = true;
txScheme = 'codebook';
mrb = 6;
tpmi = 1;
nports = 4;
sym = nrPUSCH(cw,modulation,nlayers,ncellid,rnti,transformPrecode,mrb,txScheme,nports,tpmi)
sym = 4032×4 complex

   0.0000 + 0.0000i  -0.1667 + 0.0833i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -0.0632 - 0.2911i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -0.1519 - 0.0450i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.3677 + 0.3664i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -0.3079 - 0.5027i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -0.8082 - 0.1640i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -0.0640 - 0.2388i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.3936 - 0.4160i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0851 - 0.4625i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0345 - 0.3333i   0.0000 + 0.0000i   0.0000 + 0.0000i
      ⋮

Декодируйте символы модуляции PUSCH, принимающие нулевое шумовое отклонение.

nVar = 0;
demod = nrPUSCHDecode(sym,modulation,ncellid,rnti,nVar,transformPrecode,mrb,txScheme,nlayers,tpmi)
demod = 8064×1
1010 ×

   -2.0000
   -2.0000
    2.0000
   -2.0000
   -2.0000
    2.0000
    2.0000
   -2.0000
   -2.0000
   -2.0000
      ⋮

Выполните трудное решение относительно мягкой метрики.

rxcv = double(demod<0)
rxcv = 8064×1

     1
     1
     0
     1
     1
     0
     0
     1
     1
     1
      ⋮

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

isequal(cw,rxcv)
ans = logical
   1

Создайте объект настройки поставщика услуг с идентичностью ячейки физического уровня как 42.

carrier = nrCarrierConfig;
carrier.NCellID = 42;

Создайте объект настройки PUSCH с этими свойствами.

pusch = nrPUSCHConfig;
pusch.Modulation = '256QAM';
pusch.NumLayers = 2;
pusch.RNTI = 111;
pusch.TransformPrecoding = 0;
pusch.TransmissionScheme = 'nonCodebook';
pusch.NID = []; % Use empty to be equal to NCellID of carrier
pusch.NSizeBWP = 25;
pusch.NStartBWP = 10;
pusch.PRBSet = 0:pusch.NSizeBWP-1; % Occupy entire bandwidth part

Сгенерируйте символы PUSCH для одной кодовой комбинации 8064 биты с заданной настройкой поставщика услуг и восходящим каналом совместно использованная настройка канала.

cw = randi([0 1],8064,1);
sym = nrPUSCH(carrier,pusch,cw)
sym = 504×2 complex

  -0.3835 - 0.8437i  -1.1504 - 0.3835i
   0.6903 + 0.6903i   0.0767 + 0.3835i
  -1.1504 - 0.2301i  -1.1504 + 0.2301i
   0.9971 - 0.6903i  -0.2301 - 0.8437i
  -0.0767 + 0.2301i   0.2301 + 0.8437i
  -0.6903 + 1.1504i   0.8437 + 0.3835i
  -0.0767 + 0.8437i  -0.3835 + 0.5369i
   0.3835 + 0.5369i  -0.8437 - 1.1504i
   0.3835 + 0.2301i  -1.1504 - 0.8437i
   0.2301 - 0.0767i  -0.3835 + 1.1504i
      ⋮

Добавьте аддитивный белый Гауссов шум (AWGN) в символы PUSCH. Затем демодулируйте, чтобы произвести мягкие битные оценки.

SNR = 30; % SNR in dB
rxsym = awgn(sym,SNR);
demod = nrPUSCHDecode(carrier,pusch,rxsym)
demod = 8064×1
1010 ×

   -0.2106
   -0.8118
    0.0949
   -0.0824
   -0.0231
    0.0294
    0.0239
   -0.0176
   -1.4404
   -0.1963
      ⋮

Выполните трудное решение относительно мягкой метрики.

rxcw = double(demod<0);

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

isequal(cw,rxcw)
ans = logical
   1

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

свернуть все

Полученные символы модуляции PUSCH в виде комплексной матрицы.

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

Схема Modulation в виде 'pi/2-BPSK', 'QPSK', '16QAM', '64QAM', или '256QAM'. Эта схема модуляции определяет тип модуляции и количество битов, используемых на символ модуляции.

Схема модуляцииКоличество битов на символ
'pi/2-BPSK'1
'QPSK'2
'16QAM'4
'64QAM'6
'256QAM'8

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

Скремблирование идентичности в виде целого числа от 0 до 1 023. nid более высокий параметр слоя dataScramblingIdentityPUSCH, в пределах от от 0 до 1 023, если более высокий параметр слоя сконфигурирован. В противном случае, nid личный номер ячейки физического уровня NCellID, в пределах от от 0 до 1 007. Для получения дополнительной информации смотрите Раздел TS 38.211 6.3.1.1.

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

RNTI UE в виде целого числа от 0 до 65 535.

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

Шумовое отклонение в виде неотрицательного числового скаляра. Мягкие биты масштабируются с отклонением аддитивного белого Гауссова шума (AWGN). Значение по умолчанию соответствует ОСШ 100 дБ, приходя к модульной власти сигнала.

Примечание

Значение по умолчанию принимает, что декодер и кодер соединяются спина к спине, где шумовое отклонение является нулем. Избегать -Inf или +Inf значения в выходе, функция использует 1e-10 как значение по умолчанию для шумового отклонения. Чтобы получить соответствующие результаты, когда сигнал будет передан через шумный канал, настройте шумовое отклонение соответственно.

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

Преобразуйте deprecoding в виде false или true. Для получения дополнительной информации смотрите Раздел TS 38.211 6.3.1.4.

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

Количество выделенного ресурса PUSCH блокируется в виде целого числа от 1 до 275. Для получения дополнительной информации смотрите Раздел TS 38.214 6.1.2.

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

Схема Transmission в виде одного из этих значений:

  • 'nonCodebook' — Используйте эту опцию, чтобы отключить MIMO deprecoding.

  • 'codebook' — Используйте эту опцию для основанной на книге шифров передачи с помощью MIMO deprecoding.

Для получения дополнительной информации смотрите Раздел TS 38.211 6.3.1.4.

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

Количество слоев передачи в виде целого числа от 1 до 4. Для получения дополнительной информации смотрите Раздел TS 38.211 6.3.1.3.

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

Переданный предварительно кодирующий матричный индикатор в виде целого числа от 0 до 27. Допустимая область значений tpmi зависит от конкретного количества слоев nLayers передачи и количество портов. Для получения дополнительной информации см. таблицы 6.3.1.5-1 TS 38.211 к 6.3.1.5-7.

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

Параметры конфигурации поставщика услуг для определенной нумерологии OFDM в виде nrCarrierConfig объект. Эта функция использует только NCellID свойство этого nrCarrierConfig объект.

Поле свойстваЗначенияОписание
NCellID

1 (значение по умолчанию), целое число от 0 до 1 007

Идентичность ячейки физического уровня

Параметры конфигурации PUSCH для определенной нумерологии OFDM в виде nrPUSCHConfig объект. Эта функция только использует их nrPUSCHConfig свойства объектов.

Поле свойстваЗначенияОписание
Modulation

'QPSK', '16QAM', '64QAM', или '256QAM', 'pi/2-BPSK', строковый скаляр или символьный массив

Схема Modulation кодовой комбинации

NumLayers

1 (значение по умолчанию), целое число от 1 до 4

Количество слоев передачи

NID

[] (значение по умолчанию), целое число от 0 до 1 023

Скремблирование идентичности в виде целого числа от 0 до 1 023. Использование значение, чтобы позволить этому свойству быть равным NCellID из carrier входной параметр.

RNTI

1 (значение по умолчанию), целое число от 0 до 65 535

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

TransformPrecoding

0 (значение по умолчанию), 1

Преобразуйте флаг перед кодированием в виде одного из этих значений.

  • 0 — Предварительное кодирование преобразования отключено, и типом формы волны является CP-OFDM.

  • 1 — Предварительное кодирование преобразования включено, и типом формы волны является DFT-s-OFDM.

PRBSet

[0:51] (значение по умолчанию), вектор из неотрицательных целых чисел от 0 до 274

Физические блоки ресурса, выделенные для разделяемого канала в BWP (на основе 0)

TransmissionScheme

'nonCodebook' (значение по умолчанию), 'codebook'

Схема передачи PUSCH

TPMI

0 (значений по умолчанию), целое число от 0 до 27

Переданный предварительно кодирующий матричный индикатор

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

свернуть все

Аппроксимированное отношение логарифмической правдоподобности (LLR) мягкие биты, возвращенные как действительный вектор-столбец. cw наследовал тип данных sym. Знак представляет твердые биты.

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

Символы созвездия для cw, возвращенный как вектор-столбец комплексных чисел. symbols наследовал тип данных sym.

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

Ссылки

[1] 3GPP TS 38.211. “NR; Физические каналы и модуляция”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

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

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

Смотрите также

Функции

Объекты

Введенный в R2019a