Main Content

5G의 물리 채널과 물리 신호를 리소스 그리드에 매핑하기

이 예제에서는 5G Toolbox™ 기능을 사용하여 5G NR(New Radio)의 물리 채널과 물리 신호를 생성하고, 리소스 그리드에 매핑하는 방법을 보여줍니다.

소개

아래 그림은 5G 다운링크 링크의 컨텍스트에서, 이 예제에서 모델링되는 링크 요소를 보여줍니다. 해당 요소는 다음과 같습니다.

  • PDSCH(physical downlink shared channel)와 PDSCH의 DM-RS(복조 기준 신호) 생성

  • 리소스 그리드에 대한 PDSCH와 PDSCH DM-RS의 MIMO 프리코딩 및 매핑

  • OFDM 변조

MappingToGridProcChain.png

반송파 구성

송신 안테나 수를 지정하고 반송파 구성 객체를 만듭니다. 이 객체는 리소스 그리드의 크기만 제어합니다. 문제를 단순화하기 위해 디폴트 반송파 구성 객체를 사용합니다.

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

                NCellID: 1
      SubcarrierSpacing: 15
           CyclicPrefix: 'normal'
              NSizeGrid: 52
             NStartGrid: 0
                  NSlot: 0
                 NFrame: 0
    IntraCellGuardBands: [0x2 double]

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

PDSCH와 PDSCH DM-RS 구성

PDSCH 구성 객체를 만듭니다. 이 객체는 PDSCH 관련 파라미터를 지정합니다. 16-QAM 변조, 2개의 계층, 전대역 할당을 지정합니다. 이 구성은 PDSCH를 반송파와 크기가 동일한 BWP(부분 대역폭)로 매핑합니다. 이 객체를 사용하여 다른 시간 할당 파라미터와 DM-RS 설정을 지정할 수도 있습니다.

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

PDSCH와 PDSCH DM-RS 파라미터를 표시합니다.

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 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51]
              PRBSetType: 'VRB'
    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
            DMRSDownlinkR16: 0

   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는 PDSCH 송신을 위해 사용 가능한 RE(리소스 요소)를 고려합니다. 문제를 단순화하기 위해 이 예제는 DL-SCH(downlink shared channel) 모델링을 포함하지 않습니다.

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

PDSCH 심볼을 생성합니다. PDSCH 심볼은 행렬 크기 Ns×ν로 저장되며, 여기서 Ns는 심볼 개수이고 ν는 계층 개수입니다.

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

        8112           2

PDSCH DM-RS 생성

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, xlabel In-Phase Amplitude, ylabel Quadrature Amplitude contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent PDSCH, PDSCH DM-RS.

MIMO 프리코딩 및 리소스 그리드에 매핑

프리코딩을 적용합니다. 채널 측정값은 프리 코딩 가중치(빔포밍 가중치라고도 함)를 결정합니다. 그러나 이 예제는 전파 채널을 모델링하지 않습니다. 이 예제에서는 프리코딩 가중치를 알고 있다고 가정합니다.

% 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는 송신 안테나 개수입니다.

MappingToGridArraySizes.png

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 심볼을 리소스 그리드에 매핑할 때, nrPDSCHIndices 함수에 의해 생성된 PDSCH 인덱스는 안테나가 아니라 계층을 참조한다는 점을 고려해야 합니다. 이 형식은 PDSCH 심볼을 계층에 직접 매핑할 때 유용합니다. 이 경우, 결과로 생성되는 리소스 그리드는 프리코딩되지 않습니다.

MappingToGridLayers.png

이 예제는 리소스 그리드에 매핑하기 전에 PDSCH 심볼에 프리코딩을 적용하므로, 프리코딩된 PDSCH 심볼은 계층이 아닌 안테나에 매핑됩니다. 계층 인덱스를 안테나 인덱스로 변환하려면 nrExtractResources 함수를 사용합니다.

MappingToGridAntennas.png

[~,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, xlabel OFDM Symbol, ylabel Subcarrier 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, xlabel OFDM Symbol, ylabel Subcarrier contains an object of type image.

리소스 그리드의 단일 RB(Resource Block)를 표시합니다. 다음 보기의 확대된 단일 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, xlabel OFDM Symbol, ylabel Subcarrier 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), xlabel Sample Number, ylabel Magnitude 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 1096 1096 1096 1096 1096]
              Windowing: 36
           SymbolPhases: [0 0 0 0 0 0 0 0 0 0 0 0 0 0]
         SymbolsPerSlot: 14
       SlotsPerSubframe: 1
          SlotsPerFrame: 10

관련 항목