メインコンテンツ

nrPDSCHPrecode

PDSCH PRG バンドリングのプリコーディング

R2023b 以降

    説明

    [antSym,antInd] = nrPDSCHPrecode(carrier,portSym,portInd,W) は、TS 38.214 の Section 5.1.2.3 で定義されているように、PDSCH プリコーディング リソース ブロック グループ (PRG) バンドリングのプリコーディングを実行します。この関数は、PDSCH プリコーディングされたシンボルである antSym と、対応する PDSCH アンテナ インデックスである antInd を返します。

    すべて折りたたむ

    キャリア オブジェクトを構成し、送信アンテナの数を指定します。

    carrier = nrCarrierConfig;
    carrier.NSizeGrid = 18;
    carrier.NStartGrid = 1;
    ntxants = 4;

    キャリア グリッドを作成します。

    txgrid = nrResourceGrid(carrier,ntxants);

    PDSCH パラメーターを構成します。

    pdsch = nrPDSCHConfig;
    pdsch.Modulation = 'QPSK';
    pdsch.NumLayers = 2;
    pdsch.DMRS.NumCDMGroupsWithoutData = 1;

    リソース ブロック 2 ~ 16、およびシンボル 1 から始まる 7 つの OFDM シンボルに割り当てられた PDSCH の PDSCH インデックスを作成します。これらのインデックスは 0 ベースです。

    pdsch.PRBSet = 2:16;
    pdsch.SymbolAllocation = [1 7];
    [portInd,indinfo] = nrPDSCHIndices(carrier,pdsch);

    PDSCH コードワードを作成し、PDSCH 変調を実行します。

    cw = randi([0 1],indinfo.G(1),1);
    portSym = nrPDSCH(carrier,pdsch,cw);

    プリコーディング行列を作成します。

    prgSize = 4;
    prgInfo = nrPRGInfo(carrier,prgSize);
    NPRG = prgInfo.NPRG;
    W = eye(pdsch.NumLayers,ntxants);
    W = reshape(kron(2:(NPRG+1),W),pdsch.NumLayers,ntxants,[]);

    PRG プリコーディングを実行します。

    [antSym,antInd] = nrPDSCHPrecode(carrier,portSym,portInd,W);

    プリコーディングされた PDSCH をキャリア グリッドにマッピングします。

    txgrid(antInd) = antSym;

    キャリア グリッドをプロットして PRG を表示します。PRG は共通リソース ブロック (CRB) 0 に揃えられるため、最初の PRG の最後の物理リソース ブロック (PRB) のみが PDSCH の割り当てと重複します。最初の CRB (0) は、carrier.NStartGrid=1 であるためキャリア グリッドの外にあり、次の 2 つの CRB (1 と 2) は、pdsch.PRBSet が 2 から始まるため PDSCH の割り当ての外にあります。

    最後の PRG は、割り当てサイズとアライメントによっては割り当てが部分的になる場合があります。

    figure;
    imagesc(abs(txgrid(:,:,1)));
    axis xy;
    title('PDSCH PRG Bundling');
    xlabel('OFDM Symbols');
    ylabel('Subcarriers');
    hold on;
    for i = 1:NPRG
        patch(NaN,NaN,i+1);
    end
    legend("PRG " + (1:NPRG));

    Figure contains an axes object. The axes object with title PDSCH PRG Bundling, xlabel OFDM Symbols, ylabel Subcarriers contains 6 objects of type image, patch. These objects represent PRG 1, PRG 2, PRG 3, PRG 4, PRG 5.

    既定のパラメーターを使用して、キャリア構成オブジェクトおよび PDSCH 構成オブジェクトを作成します。

    carrier = nrCarrierConfig;
    pdsch = nrPDSCHConfig;

    このキャリア構成の OFDM 情報を取得します。

    ofdmInfo = nrOFDMInfo(carrier);

    nrTDLChannelSystem object™ を作成します。

    tdl = nrTDLChannel;
    P = 3;
    tdl.NumTransmitAntennas = 3;
    tdl.ChannelFiltering = false;
    tdl.SampleRate = ofdmInfo.SampleRate;
    tdl.NumTimeSamples = tdl.SampleRate * 1e-3;

    PRG バンドル サイズを 2 に指定します。このバンドル サイズとキャリア構成の PRG 情報を取得します。

    prgSize = 2;
    prgInfo = nrPRGInfo(carrier,prgSize);

    このキャリア構成と PDSCH 構成の PDSCH インデックスを取得します。

    portInd = nrPDSCHIndices(carrier,pdsch);

    ランダムなプリコーディング行列を作成します。

    nLayers = pdsch.NumLayers;
    nPRG = prgInfo.NPRG;
    W = complex(randn([nLayers P nPRG]),randn([nLayers P nPRG]));

    チャネルのパス ゲイン、およびチャネルのパス フィルターのインパルス応答を取得します。

    pathGains = tdl();
    pathFilters = getPathFilters(tdl);

    チャネル推定を実行し、PDSCH リソースを抽出して、プリコーディングを適用します。この場合、出力は受信アンテナと送信レイヤーとの間の有効なチャネルを表します。

    H = nrPerfectChannelEstimate(carrier,pathGains,pathFilters);
    [symH,indH] = nrExtractResources(portInd,H);
    pdschH = nrPDSCHPrecode(carrier,symH,indH,permute(W,[2 1 3]));

    入力引数

    すべて折りたたむ

    キャリア構成パラメーター。nrCarrierConfig オブジェクトとして指定します。そのオブジェクト プロパティのみが、この関数に関連付けられます。

    PDSCH シンボル。次のいずれかの値として指定します。

    • サイズが NRENLAYERS 列である複素行列。ここで、NRE はリソース エレメントの数、NLAYERS はレイヤーの数です。

    • サイズが NRE×R×P である 3 次元複素配列。ここで、R は受信アンテナの数、P は送信アンテナの数です。この配列は、PDSCH チャネル推定のシンボルを表します。

    この入力と portInd 入力のサイズは同じでなければなりません。

    データ型: double | single
    複素数のサポート: あり

    PDSCH インデックス。次のいずれかの値として指定します。

    • 正の整数から成り、サイズが NRENLAYERS 列である行列。

    • 正の整数から成り、サイズが NRE×R×P である 3 次元配列。この配列は、PDSCH チャネル推定のインデックスを表します。

    データ型: double

    プリコーディング行列。次のいずれかの値として指定します。

    • サイズが NLAYERS×P×NPRG である 3 次元複素配列。ここで、NPRG はキャリア リソース グリッド内のプリコーディング リソース ブロック グループ (PRG) の数です。portSym および portInd を行列として指定する場合は、このサイズを使用します。

    • サイズが P×NLAYERS×NPRG である 3 次元複素配列。ここで、NPRG です。portSym および portInd を 3 次元配列として指定する場合は、このサイズを使用します。

    この入力には、PRG ごとに 1 つのプリコーディング行列が含まれます。

    データ型: double | single
    複素数のサポート: あり

    出力引数

    すべて折りたたむ

    プリコーディングされた PDSCH シンボル。次のいずれかの値として返されます。

    • サイズが NREP 列である複素行列。

    • サイズが NRE×R×NLAYERS である 3 次元複素配列。この配列は、受信アンテナと送信レイヤーとの間の有効なチャネルを表します。このオプションを使用すると、nrPerfectChannelEstimate 関数によって返されたチャネル推定から抽出した PDSCH 割り当てをプリコーディングできます。

    この関数は、portSymportInd を行列として指定した場合は行列を返し、3 次元配列として指定した場合は 3 次元配列を返します。

    データ型: double | single
    複素数のサポート: あり

    プリコーディングされた PDSCH アンテナ インデックス。次の値のいずれかとして返されます。

    • 正の整数から成り、サイズが NREP 列である行列。

    • 正の整数から成り、サイズが NRE×R×NLAYERS である 3 次元配列。これは、portSymportInd、および antSym が 3 次元配列である状況に対応します。

    データ型: double | single

    参照

    [1] 3GPP TS 38.214. “NR; Physical layer procedures for data.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

    [2] 3GPP TS 38.211. “NR; Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

    拡張機能

    すべて展開する

    C/C++ コード生成
    MATLAB® Coder™ を使用して C および C++ コードを生成します。

    バージョン履歴

    R2023b で導入

    参考

    関数

    オブジェクト