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: [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 DMRSEnhancedR18: 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 シンボルは、サイズ 行 列の行列に保存されます。ここで、 はシンボルの数、 はレイヤーの数です。
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