5G 物理チャネルと信号のリソース グリッドへのマッピング
この例では、5G Toolbox™ の機能を使用して、5G New Radio (NR) の物理チャネルと信号を生成し、リソース グリッドにマッピングする方法を示します。
はじめに
次の図は、5G ダウンリンク リンクのコンテキストのうち、この例においてモデル化されるリンク要素を示しています。その要素は以下のとおりです。
物理ダウンリンク共有チャネル (PDSCH) とその復調基準信号 (DM-RS) の生成
PDSCH および PDSCH DM-RS の MIMO プリコーディングおよびリソース グリッドへのマッピング
OFDM 変調

キャリア構成
送信アンテナの数を指定し、キャリア構成オブジェクトを作成します。このオブジェクトは、リソース グリッドのサイズを制御します。簡略化のため、既定のキャリア構成オブジェクトを使用します。
nTxAnts = 4; carrier = nrCarrierConfig
carrier =
nrCarrierConfig with properties:
NCellID: 1
SubcarrierSpacing: 15
CyclicPrefix: 'normal'
NSizeGrid: 52
NStartGrid: 0
NSlot: 0
NFrame: 0
IntraCellGuardBands: [0×2 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: {[1×1 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: [1×1 nrPDSCHDMRSConfig]
EnablePTRS: 0
PTRS: [1×1 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
DMRSEnhancedR18: 0
Read-only properties:
CDMGroups: [0 0]
DeltaShifts: [0 0]
FrequencyWeights: [2×2 double]
TimeWeights: [2×2 double]
DMRSSubcarrierLocations: [6×2 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 シンボルは、サイズ 行 列の行列に保存されます。ここで、 はシンボルの数、 はレイヤーの数です。
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")

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 は、サイズ 行 列の行列でなければなりません。ここで、 はレイヤーの数、 は送信アンテナの数です。

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 シンボルをレイヤーに直接マッピングする場合に役立ちます。この場合、結果のリソース グリッドはプリコーディングされません。

この例ではリソース グリッドにマッピングする前に 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")

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")

リソース グリッドから単一のリソース ブロック (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")

OFDM 変調
リソース グリッドを OFDM 変調し、最初のアンテナについて時間領域の波形を表示します。
[txWaveform,waveformInfo] = nrOFDMModulate(carrier,pdschGrid); plot(abs(txWaveform(:,1)));title("Time Domain Waveform (First Antenna)");xlabel("Sample Number");ylabel("Magnitude")

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