В этом примере показано, как сконфигурировать и сгенерировать 5G векторную форму восходящего канала с PUSCH и SRS для несущей компонента основной полосы частот при помощи nrWaveformGenerator
функция.
В этом примере показано, как параметризовать и сгенерировать 5G сигнал восходящего канала (NR) при помощи nrWaveformGenerator
функция. Сгенерированная форма волны содержит эти каналы и сигналы:
PUSCH и связанные с ним DM-RS и PT-RS
SRS
Этот пример демонстрирует, как параметризовать и сгенерировать сигнал несущей компонента основной полосы частот, характеризующийся множеством несущих с интервалами поднесущих (SCS) и частей полосы пропускания (BWP). Можно сгенерировать несколько образцов физического общего канала восходящей линии связи (PUSCH) и зондирующего опорного сигнала (SRS) по различным BWP.
Пример также показывает, как параметризовать и сгенерировать управляющую информацию восходящего канала (UCI) на PUSCH с CG-UCI и SRS для позиционирования.
Генерация сигналов основной полосы частот параметризована nrULCarrierConfig
объект и набор дополнительных объектов, сопоставленных с каналами формы волны и сигналами.
С nrULCarrierConfig
объект, можно задать эти параметры конфигурации оператора связи восходящей линии связи.
Метка для этого строения поставщика услуг UL
Пропускная способность несущей SCS в ресурсных блоках
Идентификатор камеры оператора связи
Длина сгенерированной формы волны в подкадрах
Работа с окнами
Частота дискретизации модулированной формы волны OFDM
Несущая частота для компенсации фазы символа
Вы можете управлять полосами пропускания и полосами защиты SCS, используя NStartGrid
и NSizeGrid
свойства nrSCSCarrierConfig
объект.
waveconfig = nrULCarrierConfig(); % Create an instance of the waveform's parameter object waveconfig.Label = 'UL carrier 1'; % Label for this uplink waveform configuration waveconfig.NCellID = 0; % Cell identity waveconfig.ChannelBandwidth = 50; % Channel bandwidth (MHz) waveconfig.FrequencyRange = 'FR1'; % 'FR1' or 'FR2' waveconfig.NumSubframes = 10; % Number of 1ms subframes in generated waveform (1,2,4,8 slots per 1ms subframe, depending on SCS) waveconfig.WindowingPercent = 0; % Percentage of windowing relative to FFT length waveconfig.SampleRate = []; % Sample rate of the OFDM modulated waveform waveconfig.CarrierFrequency = 0; % Carrier frequency in Hz. This property is used for symbol phase % compensation before OFDM modulation, not for upconversion % Define a set of SCS specific carriers, using the maximum sizes for a % 50 MHz NR channel. See TS 38.101-1 for more information on defined % bandwidths and guardband requirements scscarriers = {nrSCSCarrierConfig(),nrSCSCarrierConfig()}; scscarriers{1}.SubcarrierSpacing = 15; scscarriers{1}.NSizeGrid = 270; scscarriers{1}.NStartGrid = 0; scscarriers{2}.SubcarrierSpacing = 30; scscarriers{2}.NSizeGrid = 133; scscarriers{2}.NStartGrid = 1;
BWP формируется набором смежных ресурсов, разделяющих нумерологию на данной несущей. Можно задать несколько BWP с помощью массива ячеек. Каждый элемент в массиве ячеек nrWavegenBWPConfig
объекты определяют BWP. Для каждого BWP можно задать SCS, длину циклического префикса (CP) и пропускную способность. The SubcarrierSpacing
свойство сопоставляет BWP с одной из определенных ранее несущих SCS. The NStartBWP
свойство контролирует местоположение BWP в несущей относительно точки A. Это выражается в общих ресурсных блоках (CRB) в терминах нумерологии BWP. Различные BWP могут перекрываться друг с другом.
% Bandwidth parts configurations bwp = {nrWavegenBWPConfig(),nrWavegenBWPConfig()}; bwp{1}.BandwidthPartID = 1; % Bandwidth part ID bwp{1}.Label = 'BWP @ 15 kHz'; % Label for this BWP bwp{1}.SubcarrierSpacing = 15; % BWP subcarrier spacing bwp{1}.CyclicPrefix = 'Normal'; % BWP cyclic prefix for 15 kHz bwp{1}.NSizeBWP = 25; % Size of BWP in PRBs bwp{1}.NStartBWP = 10; % Position of BWP, relative to point A (i.e. CRB) bwp{2}.BandwidthPartID = 2; % Bandwidth part ID bwp{2}.Label = 'BWP @ 30 kHz'; % Label for this BWP bwp{2}.SubcarrierSpacing = 30; % BWP subcarrier spacing bwp{2}.CyclicPrefix = 'Normal'; % BWP cyclic prefix for 30 kHz bwp{2}.NSizeBWP = 51; % Size of BWP in PRBs bwp{2}.NStartBWP = 40; % Position of BWP, relative to point A (i.e. CRB)
В этом разделе указывается набор образцов PUSCH в форме волны при помощи массива ячеек. Каждый элемент в массиве ячеек nrWavegenPUSCHConfig
объекты определяют последовательность образцов PUSCH. Этот пример задает две последовательности PUSCH.
Общие параметры
Установите эти параметры для каждой последовательности PUSCH:
Включите или отключите эту последовательность PUSCH
Задайте метку для этой последовательности PUSCH
Укажите BWP, несущий PUSCH. PUSCH использует SCS, заданный для этого BWP
Масштабирование степени в дБ
Включите или отключите кодирование транспортного канала UL-SCH
RNTI
NID для скремблирования бит PUSCH
Прекодирование преобразования. Когда прекодирование преобразования true
, предварительное кодирование преобразования включено, и результирующей формой волны является DFT-s-OFDM. Когда прекодирование преобразования false
, результирующей формой волны является CP-OFDM
Целевая скорость кода, используемая для вычисления размеров транспортных блоков
Служебный параметр
Схема передачи. Когда схема передачи 'codebook'
включено предварительное кодирование MIMO, и матрица предварительного кодирования выбрана на основе количества слоев, количества портов антенны и переданного индикатора матрицы предварительного кодирования. Когда коробка передач установлена в 'nonCodebook'
, используется матрица тождеств, что приводит к отсутствию предварительного кодирования MIMO
Символьная модуляция
Количество слоев. Количество слоев ограничено максимум 4 в восходящей линии связи, так как существует только одна передача кодового слова. Номинально количество слоев устанавливается равным 1, когда включено предварительное кодирование преобразования. Это значение игнорируется, когда DMRS.PortSet
задано свойство
Количество портов антенны. Он используется, когда включена передача кодовой книги. Количество портов антенны должно быть больше или равно количеству сконфигурированных портов DM-RS
Переданный матричный индикатор предварительного кодирования
Последовательность версии избыточности (RV)
Скачкообразное изменение частоты
Смещение ресурсного блока для второго скачка
Транспортный источник данных блока. Можно использовать массив бит или один из следующих стандартных псевдошумовых последовательностей: 'PN9-ITU'
, 'PN9'
, 'PN11'
, 'PN15'
, 'PN23'
. Seed для генератора может быть задано с помощью массива ячеек в форме {'PN9', seed}
. Если seed не задан, генератор инициализируется всеми таковыми
pusch = {nrWavegenPUSCHConfig()}; pusch{1}.Enable = 1; % Enable PUSCH sequence pusch{1}.Label = 'PUSCH @ 15 kHz'; % Label for this PUSCH sequence pusch{1}.BandwidthPartID = 1; % Bandwidth part of PUSCH transmission pusch{1}.Power = 0; % Power scaling in dB pusch{1}.Coding = 1; % Enable the UL-SCH transport channel coding pusch{1}.NID = 1; % Scrambling for data part pusch{1}.RNTI = 0; % RNTI pusch{1}.TransformPrecoding = false; % Transform precoding pusch{1}.TargetCodeRate = 0.47; % Code rate used to calculate transport block sizes pusch{1}.XOverhead = 0; % Rate matching overhead % Transmission settings pusch{1}.TransmissionScheme = 'codebook'; % 'codebook','nonCodebook' pusch{1}.Modulation = 'QPSK'; % 'pi/2-BPSK','QPSK','16QAM','64QAM','256QAM' pusch{1}.NumLayers = 2; % Number of PUSCH layers pusch{1}.NumAntennaPorts = 4; % Number of antenna ports pusch{1}.TPMI = 0; % Transmitted precoding matrix indicator (0...27) pusch{1}.RVSequence = [0,2,3,1]; % RV sequence to be applied cyclically across the PUSCH allocation sequence pusch{1}.FrequencyHopping = 'interSlot'; % Intra-slot frequency hopping ('enabled','disabled') pusch{1}.SecondHopStartPRB = 10; % Resource block offset for second hop % Data source pusch{1}.DataSource = 'PN9'; % Channel data source
Распределение
Эта схема представляет некоторые параметры, используемые в распределении PUSCH.
Для управления распределением PUSCH можно задать следующие параметры. Эти параметры относятся к BWP.
Тип отображения PUSCH
Символы в пазе, выделенные каждому образцу PUSCH. Для типа отображения PUSCH 'A'
начальный символ в пазе должен быть нулем, а длина может быть от 4 до 14 (для обычного CP) и до 12 (для расширенного CP). Для типа отображения PUSCH 'B'
, начальный символ может быть из любого символа в пазе
Пазы в системе координат, используемом для последовательности PUSCH
Период выделения в пазах. Пустой период указывает на отсутствие повторения
Выделенные PRB относительно BWP
pusch{1}.MappingType = 'A'; % PUSCH mapping type ('A'(slot-wise),'B'(non slot-wise)) pusch{1}.SymbolAllocation = [0,14]; % First symbol and length pusch{1}.SlotAllocation = [0 1]; % Allocated slots indices for PUSCH sequence pusch{1}.Period = 5; % Allocation period in slots pusch{1}.PRBSet = 0:10; % PRB allocation
PUSCH DM-RS Строения
Установите параметры DM-RS.
% Antenna port and DM-RS configuration (TS 38.211 section 6.4.1.1) pusch{1}.DMRSPower = 0; % Additional power boosting in dB pusch{1}.DMRS.DMRSConfigurationType = 1; % DM-RS configuration type (1,2) pusch{1}.DMRS.NumCDMGroupsWithoutData = 2; % Number of DM-RS CDM groups without data. The value can be one of the set {1,2,3} pusch{1}.DMRS.DMRSPortSet = [0 2]; % DM-RS antenna ports used ([] gives port numbers 0:NumLayers-1) pusch{1}.DMRS.DMRSTypeAPosition = 2; % Mapping type A only. First DM-RS symbol position (2,3) pusch{1}.DMRS.DMRSLength = 1; % Number of front-loaded DM-RS symbols (1(single symbol),2(double symbol)) pusch{1}.DMRS.DMRSAdditionalPosition = 2; % Additional DM-RS symbol positions (max range 0...3) pusch{1}.DMRS.NIDNSCID = 1; % Scrambling identity for CP-OFDM (0...65535). Use empty ([]) to use physical layer cell identity pusch{1}.DMRS.NSCID = 0; % Scrambling initialization for CP-OFDM (0,1) pusch{1}.DMRS.NRSID = 0; % Scrambling identity for DFT-s-OFDM DM-RS (0...1007). Use empty ([]) to use physical layer cell identity pusch{1}.DMRS.GroupHopping = true; % Group hopping configuration. This property is used only when transform precoding is enabled pusch{1}.DMRS.SequenceHopping = false; % Sequence hopping configuration. This property is used only when transform precoding is enabled
The GroupHopping
свойство используется в генерации последовательности DM-RS, когда включено предварительное кодирование преобразования. Можно задать GroupHopping
кому:
'enable'
для указания наличия скачкообразного изменения группы. Он сконфигурирован параметром более высокого уровня sequenceGroupHopping
'disable'
для указания наличия скачкообразного изменения последовательности. Он сконфигурирован параметром более высокого уровня sequenceHopping
'neither'
чтобы указать, что и скачкообразное изменение группы, и скачкообразное изменение последовательности отсутствуют
Количество групп CDM DM-RS без данных зависит от типа строения. Максимальное количество групп CDM DM-RS может составлять 2 для типа строения DM-RS и 3 для типа 2 строения DM-RS.
PUSCH PT-RS Строения
Установите параметры PT-RS.
% PT-RS configuration (TS 38.211 section 6.4.1.2) pusch{1}.EnablePTRS = 0; % Enable or disable the PT-RS (1 or 0) pusch{1}.PTRSPower = 0; % Additional PT-RS power boosting in dB for CP-OFDM pusch{1}.PTRS.TimeDensity = 1; % Time density (L_PT-RS) of PT-RS (1,2,4) pusch{1}.PTRS.FrequencyDensity = 2; % Frequency density (K_PT-RS) of PT-RS for CP-OFDM (2,4) pusch{1}.PTRS.NumPTRSSamples = 2; % Number of PT-RS samples (NGroupSamp) for DFT-s-OFDM (2,4) pusch{1}.PTRS.NumPTRSGroups = 2; % Number of PT-RS groups (NPTRSGroup) for DFT-s-OFDM (2,4,8) pusch{1}.PTRS.REOffset = '00'; % PT-RS resource element offset for CP-OFDM ('00','01','10','11') pusch{1}.PTRS.PTRSPortSet = 0; % PT-RS antenna ports must be a subset of DM-RS ports for CP-OFDM pusch{1}.PTRS.NID = 0; % PT-RS scrambling identity for DFT-s-OFDM (0...1007)
Когда PT-RS включена для CP-OFDM, порты DM-RS должны находиться в области значений от 0 до 3 для типа 1 строения DM-RS и в области значений от 0 до 5 для типа 2 строения DM-RS. Когда PT-RS активизируется для DFT-s-OFDM, и количество групп PT-RS устанавливается равным 8, количество выборок PT-RS должно быть установлено равным 4.
UCI на PUSCH
Можно задать эти параметры, чтобы сконфигурировать передачу UCI на PUSCH:
Включите или отключите передачу HARQ-ACK, части 1 CSI, части 2 CSI и CG-UCI
Количество HARQ-ACK, CSI- 1, CSI- 2 и CG-UCI бит
BetaOffsetACK
, BetaOffsetCSI1
, BetaOffsetCSI2
, и BetaOffsetCGUCI
можно установить из таблиц 9.3-1 и 9.3-2 ТУ 38.213
Источник данных для HARQ-ACK, части 1 CSI, части 2 CSI и CG-UCI. Можно использовать массив бит или один из следующих стандартных псевдошумовых последовательностей: 'PN9-ITU'
, 'PN9'
, 'PN11'
, 'PN15'
, 'PN23'
. Seed для генератора может быть задано с помощью массива ячеек в форме {'PN9', seed}
. Если seed не задан, генератор инициализируется всеми таковыми
Включите передачу UL-SCH с UCI
UCIScaling
обеспечивается параметром более высокого слоя scaling
, согласно ТУ 38.212, раздел 6.3.2.4
pusch{1}.EnableACK = true; % Enable or disable HARQ-ACK pusch{1}.NumACKBits = 5; % Number of HARQ-ACK bits pusch{1}.BetaOffsetACK = 1; % Power factor of HARQ-ACK pusch{1}.DataSourceACK = 'PN9'; % HARQ-ACK data source pusch{1}.EnableCSI1 = true; % Enable or disable CSI part 1 pusch{1}.NumCSI1Bits = 10; % Number of CSI part 1 bits pusch{1}.BetaOffsetCSI1 = 2; % Power factor of CSI part 1 pusch{1}.DataSourceCSI1 = 'PN9'; % CSI part 1 data source pusch{1}.EnableCSI2 = true; % Enable or disable CSI part 2 pusch{1}.NumCSI2Bits = 10; % Number of CSI part 2 bits pusch{1}.BetaOffsetCSI2 = 2; % Power factor of CSI part 2 pusch{1}.DataSourceCSI2 = 'PN9'; % CSI part 2 data source pusch{1}.EnableCGUCI = false; % Enable or disable CG-UCI pusch{1}.NumCGUCIBits = 10; % Number of CG-UCI bits pusch{1}.BetaOffsetCGUCI = 2; % Power factor of CG-UCI pusch{1}.DataSourceCGUCI = 'PN9'; % CG-UCI data source pusch{1}.EnableULSCH = true; % Enable or disable UL-SCH when there is UCI transmission on PUSCH pusch{1}.UCIScaling = 1; % Scaling factor (0.5, 0.65, 0.8, 1)
Когда включены и HARQ-ACK, и CG-UCI, раздел 6.3.2.1.4 TS 38.212 определяет битовую последовательность UCI как объединение бит CG-UCI и бит HARQ-ACK. Поэтому обработка UCI на PUSCH рассматривает любой активный источник CG-UCI как расширение HARQ-ACK и только значение BetaOffsetACK
используется в этом случае.
Определение нескольких последовательностей PUSCH
Задайте вторую последовательность PUSCH для второго BWP.
pusch{2} = pusch{1}; pusch{2}.Enable = 1; pusch{2}.Label = 'PUSCH @ 30 kHz'; pusch{2}.BandwidthPartID = 2; % PUSCH mapped to 2nd BWP pusch{2}.SymbolAllocation = [0,12]; pusch{2}.SlotAllocation = [5 6 7 8]; pusch{2}.PRBSet = 5:10; % PRB allocation, relative to BWP pusch{2}.Period = 10; pusch{2}.TransformPrecoding = 1; pusch{2}.FrequencyHopping = 'interSlot'; pusch{2}.NumLayers = 1; pusch{2}.RNTI = 0; pusch{2}.DMRS.GroupHopping = false; pusch{2}.DMRS.DMRSPortSet = 1;
В этом разделе настраивается SRS в форме волны. Каждый элемент в массиве ячеек nrWavegenSRSConfig
объекты определяют последовательность образцов SRS, связанных с BWP. Этот пример задает две последовательности SRS, которые отключены.
Общие параметры
Установите эти параметры для каждой последовательности SRS:
Включите или отключите эту последовательность SRS
Задайте метку для этой последовательности SRS
Укажите BWP, несущий эту последовательность SRS. В строении последовательности SRS используется SCS, заданный для этого BWP
Задайте масштабирование степени в дБ
srs = {nrWavegenSRSConfig()}; srs{1}.Enable = 0; srs{1}.Label = 'SRS @ 15 kHz'; srs{1}.BandwidthPartID = 1; srs{1}.Power = 3; % Power scaling in dB
Строение SRS
Можно сконфигурировать эти параметры для каждой последовательности SRS:
Количество портов антенны SRS
Символы в пазе, выделенные каждой последовательности SRS
Пазы в течение периода, используемого для передачи SRS
Период выделения в пазах. Пустой период указывает на отсутствие повторения
Начальное положение последовательности SRS в BWP в RB
Дополнительное смещение частоты от начального положения в 4-PRB блоках
Ширина полосы пропускания и строения скачкообразного изменения частоты. Занимаемая полоса пропускания зависит от свойств CSRS
, BSRS
, и BHop
. Задайте BHop < BSRS
для включения скачкообразного изменения частоты
Гребень передачи для определения плотности частоты SRS в поднесущих
Смещение передающей гребни в поднесущих
Циклический сдвиг, вращающий базовую последовательность с низким PAPR. Максимальное количество циклических сдвигов, 8 или 12, зависит от номера гребня передачи, 2 или 4. Для 4 портов антенны SRS набор поднесущих, выделенный SRS в первом и третьем портах антенны, зависит от циклического сдвига
Количество повторных символов SRS в пазе. Это отключает скачкообразное изменение частоты в блоках Repetition
символы. Задайте Repetition = 1
без повторения
Скачкообразное изменение группы или последовательности. Это может быть 'neither'
, 'groupHopping'
или 'sequenceHopping'
Скремблирование тождеств. Он инициализирует псевдослучайную двоичную последовательность, когда включена перескок группы или последовательности
srs{1}.NumSRSPorts = 1; % Number of SRS ports (1,2,4) srs{1}.NumSRSSymbols = 4; % Number of SRS symbols in a slot (1,2,4) srs{1}.SymbolStart = 10; % Time-domain position of the SRS in the slot. (8...13) for normal CP and (6...11) for extended CP srs{1}.SlotAllocation = 2; % Allocated slots indices srs{1}.Period = 5; % Allocation period in slots srs{1}.FrequencyStart = 0; % Frequency position of the SRS in BWP in RBs srs{1}.NRRC = 0; % Additional offset from FreqStart specified in blocks of 4 PRBs (0...67) srs{1}.CSRS = 13; % Bandwidth configuration C_SRS (0...63). It controls the allocated bandwidth to the SRS srs{1}.BSRS = 2; % Bandwidth configuration B_SRS (0...3). It controls the allocated bandwidth to the SRS srs{1}.BHop = 1; % Frequency hopping configuration (0...3). Set BHop < BSRS to enable frequency hopping srs{1}.KTC = 2; % Comb number (2,4). It indicates the allocation of the SRS every KTC subcarriers srs{1}.KBarTC = 0; % Subcarrier offset of the SRS sequence (0...KTC-1) srs{1}.CyclicShift = 0; % Cyclic shift number (0...NCSmax-1). NCSmax = 8 for KTC = 2 and NCSmax = 12 for KTC = 4. srs{1}.Repetition = 1; % Repetition factor (1,2,4). It indicates the number of equal consecutive SRS symbols in a slot srs{1}.GroupSeqHopping = 'neither'; % Group or sequence hopping ('neither', 'groupHopping', 'sequenceHopping') srs{1}.NSRSID = 0; % Scrambling identity (0...1023) srs{1}.SRSPositioning = false; % Enable SRS for user positioning
Определение нескольких последовательностей SRS
Задайте вторую последовательность SRS для второго BWP.
srs{2} = srs{1};
srs{2}.Enable = 0;
srs{2}.Label = 'SRS @ 30 kHz';
srs{2}.BandwidthPartID = 2;
srs{2}.NumSRSSymbols = 2;
srs{2}.SymbolStart = 12;
srs{2}.SlotAllocation = [5 6 7 8];
srs{2}.Period = 10;
srs{2}.BSRS = 0;
srs{2}.BHop = 0;
В этом разделе все параметры канала и сигнала присваиваются основному объекту строения поставщика услуг nrULCarrierConfig
, затем генерирует и строит график формы волны.
waveconfig.SCSCarriers = scscarriers;
waveconfig.BandwidthParts = bwp;
waveconfig.PUSCH = pusch;
waveconfig.SRS = srs;
% Generate complex baseband waveform
[waveform,info] = nrWaveformGenerator(waveconfig);
Постройте график величины формы волны основной полосы для набора заданных портов антенны.
figure; plot(abs(waveform)); title('Magnitude of 5G Uplink Baseband Waveform'); xlabel('Sample Index'); ylabel('Magnitude');
Постройте спектрограмму формы волны для первого порта антенны.
samplerate = info.ResourceGrids(1).Info.SampleRate; nfft = info.ResourceGrids(1).Info.Nfft; figure; spectrogram(waveform(:,1),ones(nfft,1),0,nfft,'centered',samplerate,'yaxis','MinThreshold',-130); title('Spectrogram of 5G Uplink Baseband Waveform');
Функция генератора формы волны возвращает форму волны во временной области и структуру info
, который содержит базовую сетку ресурсного элемента и разбивку ресурсов, используемых всеми образцами PUSCH и SRS в форме волны.
The ResourceGrids
поле является массивом структур, который содержит следующие поля:
Ресурсная сетка, соответствующая каждому BWP
Ресурсная сетка общей полосы пропускания, содержащей каналы и сигналы в каждой BWP
Информационная структура с информацией, соответствующей каждому BWP. Содержимое этой информационной структуры для первого BWP показано ниже.
disp('Modulation information associated with BWP 1:')
disp(info.ResourceGrids(1).Info)
Modulation information associated with BWP 1: Nfft: 4096 SampleRate: 61440000 CyclicPrefixLengths: [1x14 double] SymbolLengths: [1x14 double] Windowing: 0 SymbolPhases: [0 0 0 0 0 0 0 0 0 0 0 0 0 0] SymbolsPerSlot: 14 SlotsPerSubframe: 1 SlotsPerFrame: 10 k0: 0
Обратите внимание, что сгенерированная ресурсная сетка является матрицей 3D, где различные плоскости представляют порты антенны. Для различных физических каналов и сигналов самый нижний порт сопоставлен с первой плоскостью сетки.