Карта 5G Физические каналы и сигналы к сетке ресурса

В этом примере показано, как сгенерировать и Новое радио (NR) карты 5G физические каналы и сигналы к сетке ресурса с помощью 5G Toolbox ™ функции.

Введение

Этот рисунок показывает элементы link, которые моделируются в этом примере в контексте ссылки нисходящего канала 5G. Эти элементы:

  • Генерация физического нисходящего канала совместно использованный канал (PDSCH) и его опорный сигнал демодуляции (DM-RS)

  • Предварительное кодирование MIMO и отображение PDSCH и PDSCH DM-RS к сетке ресурса

  • Модуляция OFDM

Настройка несущей

Задайте количество передающих антенн и создайте объект настройки несущей. Этот объект управляет размером сетки ресурса. Для простоты используйте объект настройки несущей по умолчанию.

nTxAnts = 4;
carrier = nrCarrierConfig
carrier = 
  nrCarrierConfig with properties:

              NCellID: 1
    SubcarrierSpacing: 15
         CyclicPrefix: 'normal'
            NSizeGrid: 52
           NStartGrid: 0
                NSlot: 0
               NFrame: 0

   Read-only properties:
       SymbolsPerSlot: 14
     SlotsPerSubframe: 1
        SlotsPerFrame: 10

PDSCH и настройка PDSCH DM-RS

Создайте объект настройки PDSCH. Этот объект задает PDSCH-связанные параметры. Задайте 16-QAM модуляцию, два слоя и полное выделение полосы. Эта настройка сопоставляет PDSCH в часть полосы пропускания (BWP) равного размера несущей. Можно также использовать этот объект задать другие параметры выделения времени и настройки DM-RS.

pdsch = nrPDSCHConfig;
pdsch.Modulation = "16QAM";
pdsch.NumLayers = 2;
pdsch.PRBSet = 0:carrier.NSizeGrid-1; % Full band allocation

Отобразите параметры PDSCH DM-RS и PDSCH.

pdsch
pdsch = 
  nrPDSCHConfig with properties:

                NSizeBWP: []
               NStartBWP: []
             ReservedPRB: {[1x1 nrPDSCHReservedConfig]}
              ReservedRE: []
              Modulation: '16QAM'
               NumLayers: 2
             MappingType: 'A'
        SymbolAllocation: [0 14]
                  PRBSet: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... ]
    VRBToPRBInterleaving: 0
           VRBBundleSize: 2
                     NID: []
                    RNTI: 1
                    DMRS: [1x1 nrPDSCHDMRSConfig]
              EnablePTRS: 0
                    PTRS: [1x1 nrPDSCHPTRSConfig]

   Read-only properties:
            NumCodewords: 1

pdsch.DMRS
ans = 
  nrPDSCHDMRSConfig with properties:

      DMRSConfigurationType: 1
         DMRSReferencePoint: 'CRB0'
          DMRSTypeAPosition: 2
     DMRSAdditionalPosition: 0
                 DMRSLength: 1
            CustomSymbolSet: []
                DMRSPortSet: []
                   NIDNSCID: []
                      NSCID: 0
    NumCDMGroupsWithoutData: 2

   Read-only properties:
                  CDMGroups: [0 0]
                DeltaShifts: [0 0]
           FrequencyWeights: [2x2 double]
                TimeWeights: [2x2 double]
    DMRSSubcarrierLocations: [6x2 double]
                 CDMLengths: [2 1]

Генерация PDSCH

Сгенерируйте индексы, чтобы сопоставить PDSCH с сеткой.

[pdschIndices,pdschInfo] = nrPDSCHIndices(carrier,pdsch);

Сгенерируйте и сопоставьте случайные биты PDSCH с символами PDSCH. Входной параметр pdschInfo.G задает емкость в битах PDSCH, который является длиной кодовой комбинации от этапов кодирования канала. pdschInfo.G учитывает элементы ресурса (REs), доступный для передачи PDSCH. Для простоты этот пример не включает нисходящий канал совместно использованный канал (DL-SCH) моделирование.

pdschBits = randi([0 1],pdschInfo.G,1);

Сгенерируйте символы PDSCH. Символы PDSCH хранятся в матрице размера Ns-ν, где Ns количество символов и ν количество слоев.

pdschSymbols = nrPDSCH(carrier,pdsch,pdschBits);
size(pdschSymbols)
ans = 1×2

        8112           2

Генерация PDSCH RS DM

Сгенерируйте символы DM-RS и индексы.

dmrsSymbols = nrPDSCHDMRS(carrier,pdsch);
dmrsIndices = nrPDSCHDMRSIndices(carrier,pdsch);

Отобразите график созвездия с PDSCH и символами PDSCH DM-RS.

plot(pdschSymbols(:),"o");hold on
plot(dmrsSymbols(:),"xr");hold off
title("PDSCH and PDSCH DM-RS Symbols");xlabel("In-Phase Amplitude");ylabel("Quadrature Amplitude")
legend("PDSCH","PDSCH DM-RS")

Figure contains an axes object. The axes object with title PDSCH and PDSCH DM-RS Symbols contains 2 objects of type line. These objects represent PDSCH, PDSCH DM-RS.

Предварительное кодирование MIMO и отображение с сеткой ресурса

Примените предварительное кодирование. Измерения канала определяют веса перед кодированием (также называемый beamforming веса). Однако этот пример не демонстрирует канал распространения. Этот пример принимает, что веса перед кодированием известны.

% Precoding weights
W = fft(eye(nTxAnts))/sqrt(nTxAnts);              % Unitary precoding matrix
w = W(1:pdsch.NumLayers,:)/sqrt(pdsch.NumLayers); % Normalize by number of layers

Матрица перед кодированием, w, должна быть матрица размера ν-Ntx, где ν количество слоев и Ntx количество передающих антенн.

size(pdschSymbols)
ans = 1×2

        8112           2

size(w)
ans = 1×2

     2     4

Предварительно закодируйте символы PDSCH.

pdschSymbolsPrecoded = pdschSymbols*w;

Количество строк в pdschSymbolsPrecoded матрица соответствует количеству символов PDSCH, и количество столбцов соответствует количеству антенн.

size(pdschSymbolsPrecoded)
ans = 1×2

        8112           4

Сгенерируйте пустую сетку ресурса. Эта сетка охватывает один паз.

pdschGrid = nrResourceGrid(carrier,nTxAnts);

Когда вы сопоставляете символы PDSCH с сеткой ресурса, учитываете что индексы PDSCH, сгенерированные nrPDSCHIndices функция относится к слоям и не антеннам. Этот формат может быть полезным, когда вы сопоставляете символы PDSCH непосредственно со слоями. В этом случае получившиеся сетки ресурса не предварительно закодированы.

Поскольку этот пример применяет предварительное кодирование к символам PDSCH прежде, чем сопоставить с сеткой ресурса, предварительно закодированные символы PDSCH сопоставлены с антеннами и не слоями. Чтобы преобразовать индексы слоя в индексы антенны, используйте nrExtractResources функция.

[~,pdschAntIndices] = nrExtractResources(pdschIndices,pdschGrid);
pdschGrid(pdschAntIndices) = pdschSymbolsPrecoded;

Отобразите сетку ресурса для первой антенны. Синий разрыв оставлен для DM-RS.

imagesc([0 carrier.SymbolsPerSlot-1],[0 carrier.NSizeGrid*12-1],abs(pdschGrid(:,:,1)));
axis xy;title("Resource Grid (First Antenna) - PDSCH");xlabel("OFDM Symbol");ylabel("Subcarrier")

Figure contains an axes object. The axes object with title Resource Grid (First Antenna) - PDSCH contains an object of type image.

Предварительный код и карта символы DM-RS к сетке. Подобно индексам PDSCH индексы DM-RS относятся к слоям. Чтобы преобразовать эти слои в индексы мультиантенны, используйте nrExtractResources функционируйте снова.

% PDSCH DM-RS precoding and mapping
for p = 1:size(dmrsSymbols,2)
    [~,dmrsAntIndices] = nrExtractResources(dmrsIndices(:,p),pdschGrid);
    pdschGrid(dmrsAntIndices) = pdschGrid(dmrsAntIndices) + dmrsSymbols(:,p)*w(p,:);
end

Отобразите сетку ресурса для первой антенны.

imagesc([0 carrier.SymbolsPerSlot-1],[0 carrier.NSizeGrid*12-1],abs(pdschGrid(:,:,1)));
axis xy;title("Resource Grid (First Antenna) - PDSCH and PDSCH DM-RS");
    xlabel("OFDM Symbol");ylabel("Subcarrier")

Figure contains an axes object. The axes object with title Resource Grid (First Antenna) - PDSCH and PDSCH DM-RS contains an object of type image.

Отобразите один блок ресурса (RB) от сетки ресурса. Это представление масштабирует в один RB и обеспечивает подробное представление содержимого RE.

imagesc(abs(pdschGrid(1:12,:,1)));view(2)
axis xy;title("Resource Block - PDSCH and PDSCH DM-RS");ylabel("Subcarrier");xlabel("OFDM Symbol")

Figure contains an axes object. The axes object with title Resource Block - PDSCH and PDSCH DM-RS contains an object of type image.

Модуляция OFDM

OFDM-модулируйте сетку ресурса и отобразите форму волны временного интервала для первой антенны.

[txWaveform,waveformInfo] = nrOFDMModulate(carrier,pdschGrid);
plot(abs(txWaveform(:,1)));title("Time Domain Waveform (First Antenna)");xlabel("Sample Number");ylabel("Magnitude")

Figure contains an axes object. The axes object with title Time Domain Waveform (First Antenna) contains an object of type line.

waveformInfo выведите содержит информацию о форме волны временного интервала, такой как частота дискретизации.

waveformInfo
waveformInfo = struct with fields:
                   Nfft: 1024
             SampleRate: 15360000
    CyclicPrefixLengths: [80 72 72 72 72 72 72 80 72 72 72 72 72 72]
          SymbolLengths: [1104 1096 1096 1096 1096 1096 1096 1104 1096 ... ]
              Windowing: 36
           SymbolPhases: [0 0 0 0 0 0 0 0 0 0 0 0 0 0]
         SymbolsPerSlot: 14
       SlotsPerSubframe: 1
          SlotsPerFrame: 10

Похожие темы