Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

5G 物理チャネルと信号のリソース グリッドへのマッピング

この例では、5G Toolbox™ の機能を使用して、5G New Radio (NR) の物理チャネルと信号を生成し、リソース グリッドにマッピングする方法を示します。

はじめに

次の図は、5G ダウンリンク リンクのコンテキストのうち、この例においてモデル化されるリンク要素を示しています。その要素は以下のとおりです。

  • 物理ダウンリンク共有チャネル (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 をキャリアと同じサイズの bandwidth part (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) モデリングを含めていません。

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

空のリソース グリッドを生成します。このグリッドは 1 つのスロットにまたがります。

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) を表示します。このビューは単一の 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

関連するトピック