Декодируйте символы модуляции PUCCH
[
декодирует физический восходящий канал управления (PUCCH) специфичное для формата декодирование и возвращает биты восходящей управляющей информации (UCI), uciBits
,symbols
,detMet
] = nrPUCCHDecode(carrier
,pucch
,ouci
,sym
)uciBits
, как задано в Разделах TS 38.211 6.3.2.3 к 6.3.2.6 для всех форматов PUCCH. Функция также возвращает полученные символы созвездия, symbols
, и метрика обнаружения, detMet
. Введите carrier
задает настройку несущей. Введите pucch
задает специфичную для формата настройку PUCCH. Введите ouci
задает незакодированные биты UCI. Когда количество битов UCI меньше 12, функция выполняет прерывистую передачу (DTX) обнаружение путем нахождения нормированного коэффициента корреляции всех возможных ссылочных последовательностей и затем сравнивает максимальное значение с порогом.
[
задает порог обнаружения, чтобы выполнить DTX в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах.uciBits
,symbols
,detMet
] = nrPUCCHDecode(___,'DetectionThreshold',detectionThreshold
)
Создайте объект настройки несущей по умолчанию.
carrier = nrCarrierConfig;
Задайте несущую на 15 кГц с нормальным циклическим префиксом. Установите номер слота на 63.
carrier.SubcarrierSpacing = 15;
carrier.CyclicPrefix = 'normal';
carrier.NSlot = 63;
Создайте объект настройки формата 0 PUCCH по умолчанию.
pucch = nrPUCCH0Config;
Задайте первый индекс символа в пазе передачи PUCCH как 11 и количество выделенных символов PUCCH как 2. Включите скачкообразное движение частоты внутрипаза и скачкообразное движение группы. Установите скачкообразно двигающуюся идентичность на 512 и начальный циклический сдвиг к 5.
pucch.SymbolAllocation = [11 2]; pucch.FrequencyHopping = 'intraSlot'; pucch.GroupHopping = 'enable'; pucch.HoppingID = 512; pucch.InitialCyclicShift = 5;
Задайте передачу без гибридного автоматического повторного подтверждения запроса (HARQ-ACK) и с положительным планированием запроса (SR).
ack = zeros(0,1);
sr = 1; % Positive SR transmission
Сгенерируйте символы модуляции формата 0 PUCCH.
sym = nrPUCCH(carrier,pucch,{ack sr});
Декодируйте символы модуляции формата 0 PUCCH.
uci = nrPUCCHDecode(carrier,pucch,[numel(ack) numel(sr)],sym);
Проверьте, что полученные биты UCI совпадают с переданными битами UCI.
isequal(uci{1},ack)
ans = logical
1
isequal(uci{2},sr)
ans = logical
1
Создайте объект настройки несущей по умолчанию.
carrier = nrCarrierConfig;
Задайте несущую на 60 кГц с расширенным циклическим префиксом. Установите номер слота на 7.
carrier.SubcarrierSpacing = 60;
carrier.CyclicPrefix = 'extended';
carrier.NSlot = 7;
Создайте объект настройки формата 1 PUCCH по умолчанию.
pucch = nrPUCCH1Config;
Задайте первый индекс символа в пазе передачи PUCCH как 3 и количество выделенных символов PUCCH как 9. Включите скачкообразное движение частоты внутрипаза и скачкообразное движение группы. Установите скачкообразно двигающуюся идентичность на 512, начальный циклический сдвиг к 9 и ортогональный индекс кода покрытия к 1.
pucch.SymbolAllocation = [3 9]; pucch.FrequencyHopping = 'intraSlot'; pucch.GroupHopping = 'enable'; pucch.HoppingID = 512; pucch.InitialCyclicShift = 9; pucch.OCCI = 1;
Сгенерируйте символы модуляции формата 1 PUCCH для 1-битного UCI.
uci = 1; sym = nrPUCCH(carrier,pucch,uci);
Декодируйте символы модуляции формата 1 PUCCH с порогом обнаружения 0,7.
rxUCI = nrPUCCHDecode(carrier,pucch,numel(uci),sym,'DetectionThreshold',0.7);
Проверьте, что полученные биты UCI совпадают с переданными битами UCI.
isequal(rxUCI{1},uci)
ans = logical
1
Создайте объект настройки несущей по умолчанию.
carrier = nrCarrierConfig;
Создайте объект настройки формата 2 PUCCH по умолчанию.
pucch = nrPUCCH2Config;
Задайте идентичность шифрования данных как 1 000 и радиосеть временный идентификатор как 160.
pucch.NID = 1000; pucch.RNTI = 160;
Получите случайные биты UCI.
ouci = 20; uci = randi([0 1],ouci,1);
Закодируйте биты UCI.
uciCW = nrUCIEncode(uci,100);
Сгенерируйте символы формата 2 модуляции PUCCH.
sym = nrPUCCH(carrier,pucch,uciCW);
Декодируйте символы формата 2 модуляции PUCCH.
rxUCI = nrPUCCHDecode(carrier,pucch,ouci,sym);
Проверьте, что полученные биты UCI совпадают с переданными битами UCI.
isequal(uciCW,double(rxUCI{1}<0))
ans = logical
1
Создайте объект настройки несущей по умолчанию.
carrier = nrCarrierConfig;
Задайте несущую на 30 кГц с расширенным циклическим префиксом. Определите номер блоков ресурса в сетке ресурса несущей к 80.
carrier.SubcarrierSpacing = 30; carrier.NSizeGrid = 80;
Создайте объект настройки формата 3 PUCCH по умолчанию.
pucch = nrPUCCH3Config;
Задайте схему модуляции как pi/2-BPSK, выделение физических блоков ресурса (PRB) PUCCH, чтобы лежать в диапазоне от 70 до 74 (занятие 5 блоков ресурса), и радиосеть временный идентификатор как 2 560.
pucch.Modulation = 'pi/2-BPSK';
pucch.PRBSet = 70:74;
pucch.RNTI = 2560;
Сгенерируйте индексы элемента ресурса формата 3 PUCCH.
[pucchIndices,pucchInfo] = nrPUCCHIndices(carrier,pucch);
G = pucchInfo.G; % Rate-matched length
Получите случайные биты UCI.
ouci = 30; uciBits = randi([0 1],ouci,1);
Закодируйте биты UCI.
codedUCI = nrUCIEncode(uciBits,G);
Сгенерируйте модулируемые символы формата 3 PUCCH.
sym = nrPUCCH(carrier,pucch,codedUCI);
Сгенерируйте опорный сигнал демодуляции (DM-RS) символы и индексы.
dmrsSym = nrPUCCHDMRS(carrier,pucch); dmrsInd = nrPUCCHDMRSIndices(carrier,pucch);
Создайте сетку ресурса. Сопоставьте символы PUCCH и символы DM-RS к сетке.
resGrid = nrResourceGrid(carrier); resGrid(pucchIndices) = sym; resGrid(dmrsInd) = dmrsSym;
Выполните модуляцию ортогонального мультиплексирования деления частоты (OFDM).
txWaveform = nrOFDMModulate(carrier,resGrid);
Выполните спина к спине декодирование.
rxWaveform = txWaveform; rxGrid = nrOFDMDemodulate(carrier,rxWaveform);
Извлеките символы формата 3 PUCCH из полученной сетки.
rxSym = nrExtractResources(pucchIndices,rxGrid);
Декодируйте символы модуляции формата 3 PUCCH, и затем декодируйте биты UCI.
rxUCI = nrPUCCHDecode(carrier,pucch,ouci,rxSym); rxUCIBits = nrUCIDecode(rxUCI{1},ouci);
Проверьте, что полученные биты UCI совпадают с переданными битами UCI.
isequal(uciBits,rxUCIBits)
ans = logical
1
Создайте объект настройки несущей по умолчанию, и затем установите идентичность ячейки как 140.
carrier = nrCarrierConfig; carrier.NCellID = 140;
Создайте объект настройки формата 4 PUCCH по умолчанию.
pucch = nrPUCCH4Config;
Задайте распространяющийся фактор как 4, OCCI как 3, и радиосеть временный идентификатор как 750.
pucch.SpreadingFactor = 4; pucch.OCCI = 3; pucch.RNTI = 750;
Получите случайные биты UCI.
ouci = 20; uci = randi([0 1],ouci,1);
Закодируйте биты UCI.
uciCW = nrUCIEncode(uci,60);
Сгенерируйте символы формата 4 модуляции PUCCH.
sym = nrPUCCH(carrier,pucch,uciCW);
Декодируйте символы формата 4 модуляции PUCCH.
rxUCI = nrPUCCHDecode(carrier,pucch,ouci,sym);
Проверьте, что полученные биты UCI совпадают с переданными битами UCI.
isequal(uciCW,double(rxUCI{1}<0))
ans = logical
1
Сравните передачу и прием форматов 0 и 2 PUCCH для двух различного оборудования пользователя.
Настройка несущей
Создайте объект настройки несущей по умолчанию, и затем установите идентичность ячейки на 10.
carrier = nrCarrierConfig; carrier.NCellID = 10;
Настройка PUCCH
Создайте объект настройки формата 0 PUCCH с заданными свойствами для оборудования пользователя (UE) 1.
pucch0 = nrPUCCH0Config; pucch0.PRBSet = 0; pucch0.HoppingID = 0;
Создайте объект настройки формата 2 PUCCH с заданными свойствами для UE 2.
pucch2 = nrPUCCH2Config; pucch2.PRBSet = 0; pucch2.RNTI = 10;
Настройка модели распространения канала
Задайте конфигурационную структуру канала с помощью nrTDLChannel
Системный объект.
channel = nrTDLChannel;
channel.NumReceiveAntennas = 4;
info1 = nrOFDMInfo(carrier);
channel.SampleRate = info1.SampleRate; % Set waveform sample rate
chInfo = info(channel);
maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate));
maxChDelay = maxChDelay + chInfo.ChannelFilterDelay;
Шумовая настройка
Нормируйте шумовую мощность несущей и конфигурировать генератор случайных чисел.
SNRdB = 21.0;
SNR = 10^(SNRdB/20);
N = 1/(SNR*sqrt(double(info1.Nfft)))/sqrt(2.0);
rng('default');
Символы PUCCH и генерация индексов для формата 0 и формата 2
Задайте биты HARQ-ACK для формата 0 PUCCH.
hi1 = [0;1];
disp('hi1:');
hi1:
disp(hi1.');
0 1
Сгенерируйте символы модуляции формата 0 PUCCH.
pucch0Sym = nrPUCCH(carrier,pucch0,hi1);
Сгенерируйте символы DM-RS для форматов 0 и 2 PUCCH.
pucch0DMRSSym = nrPUCCHDMRS(carrier,pucch0); pucch2DRSSym = nrPUCCHDMRS(carrier,pucch2);
Сгенерируйте индексы элемента ресурса формата 2 PUCCH.
[pucch2Ind,pucch2Info] = nrPUCCHIndices(carrier,pucch2);
Создайте биты информации о качестве канала (CQI).
cqi = [0; 1; 1; 0; 0; 1];
disp('cqi:');
cqi:
disp(cqi.');
0 1 1 0 0 1
Закодируйте биты CQI.
codedcqi = nrUCIEncode(cqi,pucch2Info.G);
Сгенерируйте символы модуляции формата 2 PUCCH.
pucch2Sym = nrPUCCH(carrier,pucch2,codedcqi);
PUCCH индексируют генерацию для формата 0 и формата 2
Сгенерируйте индексы PUCCH для форматов 0 и 2.
pucch0Indices = nrPUCCHIndices(carrier,pucch0); pucch2Indices = nrPUCCHIndices(carrier,pucch2);
Сгенерируйте индексы DM-RS для форматов 0 и 2 PUCCH.
pucch0DMRSIndices = nrPUCCHDMRSIndices(carrier,pucch0); pucch2DMRSIndices = nrPUCCHDMRSIndices(carrier,pucch2);
Передача с форматом 0 PUCCH
Создайте сетку ресурса. Сопоставьте символы PUCCH и символы DM-RS формата 0 к сетке.
grid1 = nrResourceGrid(carrier); grid1(pucch0Indices) = pucch0Sym; grid1(pucch0DMRSIndices) = pucch0DMRSSym;
Выполните модуляцию OFDM и передайте форму волны через канал коснувшейся линии задержки (TDL).
txwave1 = nrOFDMModulate(carrier,grid1); txwave1 = [txwave1; zeros(maxChDelay,size(txwave1,2))]; [rxwave1,pathGains1,sampleTimes1] = channel(txwave1);
Передача с форматом 2 PUCCH
Создайте сетку ресурса. Сопоставьте символы PUCCH и символы DM-RS формата 2 к сетке.
grid2 = nrResourceGrid(carrier); grid2(pucch2Indices) = pucch2Sym; grid2(pucch2DMRSIndices) = pucch2DRSSym;
Выполните модуляцию OFDM, и затем передайте форму волны через канал TDL.
txwave2 = nrOFDMModulate(carrier,grid2); release(channel); channel.Seed = 15; txwave2 = [txwave2; zeros(maxChDelay,size(txwave2,2))]; [rxwave2,pathGains,sampleTimes] = channel(txwave2);
Прием в базовой станции
Добавьте AWGN в полученный сигнал.
rxwave = rxwave1 + rxwave2; % Add both the faded signals
noise = N*complex(randn(size(rxwave)),randn(size(rxwave)));
rxwave = rxwave + noise;
Демодулируйте полученный сигнал и извлеките формат 0 PUCCH индексы RE.
rxgrid1 = nrOFDMDemodulate(carrier,rxwave(1:end,:)); rxpucch0 = nrExtractResources(pucch0Indices,rxgrid1);
Декодируйте символы формата 0 PUCCH
Декодируйте символы формата 0 PUCCH.
rxhi1 = nrPUCCHDecode(carrier,pucch0,length(hi1),rxpucch0);
disp('rxhi1:');
rxhi1:
disp(rxhi1{1}.');
0 1
Проверьте, что полученные биты HARQ-ACK совпадают с переданными битами HARQ-ACK.
if isequal(hi1,rxhi1{1}) disp('PUCCH format 0 data decoded') else disp('PUCCH format 0 data not decoded') end
PUCCH format 0 data decoded
Декодируйте символы формата 2 PUCCH
Оцените смещение синхронизации для передачи, и затем выполните демодуляцию OFDM на принятой форме волны.
[t,mag] = nrTimingEstimate(carrier,rxwave,pucch2DMRSIndices,pucch2DRSSym); if t > maxChDelay t = 0; end rxgrid2 = nrOFDMDemodulate(carrier,rxwave(1+t:end,:));
Получите практическую оценку канала, и затем извлеките формат 2 PUCCH индексы RE.
[H2, n0] = nrChannelEstimate(carrier,rxgrid2,pucch2DMRSIndices,pucch2DRSSym); [pucchrx2, pucchH2] = nrExtractResources(pucch2Indices,rxgrid2,H2);
Выполните эквализацию минимальной среднеквадратичной погрешности (MMSE) на извлеченных элементах ресурса формата 2 PUCCH.
pucch2eq = nrEqualizeMMSE(pucchrx2,pucchH2,n0);
Декодируйте символы модуляции формата 2 PUCCH, и затем декодируйте биты CQI.
rxcodedcqi = nrPUCCHDecode(carrier,pucch2,length(cqi),pucch2eq);
rxcqi = nrUCIDecode(rxcodedcqi{1},length(cqi));
disp('rxcqi:');
rxcqi:
disp(rxcqi.');
0 1 1 0 0 1
Проверьте, что полученные биты CQI совпадают с переданными битами CQI.
if isequal(cqi,rxcqi) disp('PUCCH format 2 data decoded') else disp('PUCCH format 2 data not decoded') end
PUCCH format 2 data decoded
carrier
— Параметры конфигурации несущейnrCarrierConfig
объектПараметры конфигурации несущей для определенной нумерологии OFDM в виде nrCarrierConfig
объект. Эта функция использует только их nrCarrierConfig
свойства объектов.
pucch
— Параметры конфигурации PUCCHnrPUCCH0Config
возразите | nrPUCCH1Config
возразите | nrPUCCH2Config
возразите | nrPUCCH3Config
возразите | nrPUCCH4Config
объектПараметры конфигурации PUCCH в виде одной из этих опций.
Для формата 0 задайте nrPUCCH0Config
объект. Функция использует только эти свойства объектов.
Для формата 1 задайте nrPUCCH1Config
объект. Функция использует только эти свойства объектов.
Для формата 2 задайте nrPUCCH2Config
объект. Функция использует только эти свойства объектов.
Для формата 3 задайте nrPUCCH3Config
объект. Функция использует только эти свойства объектов.
Для формата 4 задайте nrPUCCH4Config
объект. Функция использует только эти свойства объектов.
ouci
— Количество незакодированных битов UCIКоличество незакодированных битов UCI в виде неотрицательного целого числа или в зависимости от типа формата.
Для формата 0 необходимо задать неотрицательное целое число или двухэлементный вектор из неотрицательных целых чисел.
Когда вы задаете это значение, когда скаляр, незакодированные биты UCI представляют гибридное автоматическое повторное подтверждение запроса (HARQ-ACK) биты.
Когда вы задаете это значение как вектор, первый элемент представляет биты HARQ-ACK, и второй элемент представляет бит планирования запроса (SR).
Для формата 1 необходимо задать неотрицательное целое число. Когда вы задаете это значение, незакодированные биты UCI представляет биты HARQ-ACK или биты SR.
Для форматов 2, 3, и 4, незакодированные биты UCI представляют количество битов UCI в обеих частях.
Типы данных: double
sym
— Символы модуляции PUCCHСимволы модуляции PUCCH для заданного формата, возвращенного как вектор-столбец с комплексным знаком или матрица с комплексным знаком.
Для форматов 0 и 1, sym
аргумент должен быть матрицей с количеством столбцов, равных количеству, получают антенны. Для форматов 2, 3, и 4, sym
аргумент должен быть вектор-столбцом.
Типы данных: single
| double
Поддержка комплексного числа: Да
nVar
— Шумовое отклонение1e-10
(значение по умолчанию) | неотрицательный скалярШумовое отклонение в виде неотрицательного скаляра. Функция масштабирует символы с отклонением аддитивного белого Гауссова шума (AWGN). Значение по умолчанию соответствует сигналу к шумовому отношению (ОСШ) 100 дБ, приходя к модульной власти сигнала.
Когда шумовое значение отклонения меньше 1e-10, функция использует значение 1e-10
.
Типы данных: double
detectionThreshold
— Порог обнаружения[]
| скаляр в диапазоне от 0 до 1Порог обнаружения в виде []
или скаляр в диапазоне от 0 до 1. Когда вы не задаете вход, или вы устанавливаете его на []
, функция выбирает одно из этих значений по умолчанию на основе типа формата.
Для формата 0 значением по умолчанию является 0.49
для одного символа OFDM и 0.42
для двух символов OFDM.
Для формата 1 значением по умолчанию является 0.36
.
Для форматов 2, 3, и 4, значением по умолчанию является 0.45
.
Типы данных: double
uciBits
— Биты UCIБиты UCI, возвращенные как один - или двухэлементный массив ячеек в зависимости от типа формата. Для формата 0 и 1, типа данных uciBits
int8
. Для формата 2, 3, и 4, uciBits
наследовал тип данных sym
входной параметр.
Для формата 0, uciBits
один - или двухэлементный массив ячеек с UCI твердые биты.
Для массива ячеек с одним элементом функция возвращает HARQ-ACK твердые биты.
Для двухэлементного массива ячеек функция возвращает первый элемент как HARQ-ACK твердые биты и второй элемент как бит SR.
Декодирование формата 0 PUCCH включает обнаружение DTX, сопровождаемое путем нахождения последовательности, которая имеет максимальную нормированную метрику корреляции.
Для формата 1, uciBits
массив ячеек с одним элементом с UCI твердые биты. Декодирование формата 1 PUCCH включает обнаружение DTX, сопровождаемое согласованной фильтрацией.
Для форматов 2, 3, и 4, uciBits
массив ячеек с одним элементом с мягкими битами UCI. Для форматов 2, 3 PUCCH, и 4, UCI мягкие биты возвращены сообщение обнаружение DTX (применимый до 12 незакодированных uci битов) и обратная обработка кодирования PUCCH.
Типы данных: cell
symbols
— Полученные символы созвездияПолученные символы созвездия, возвращенные как вектор-столбец со знаком столбца. symbols
наследовал тип данных sym
входной параметр.
Типы данных: double |
single
Поддержка комплексного числа: Да
detMet
— Метрика обнаруженияМетрика обнаружения, возвращенная как целое число. Для форматов 2, 3 PUCCH, и 4, когда ouci
вход не находится в диапазоне от 3 до 11, этим выходом является 0
.
Типы данных: double |
single
[1] 3GPP TS 38.211. “NR; Физические каналы и модуляция”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
Указания и ограничения по применению:
Имена и значения в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, при определении 'single'
когда выходные данные вводят, включают {coder.Constant('OutputDataType'),coder.Constant('single')}
в -args
значение codegen
функция. Для получения дополнительной информации смотрите coder.Constant
(MATLAB Coder) класс.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.