NR セル間干渉のモデリング
この例では、マルチセル干渉シナリオをシミュレーションし、近接セルによって生じるダウンリンク (DL) セル間干渉がネットワーク パフォーマンスに与える影響を測定する方法を示します。この例では、同一周波数帯域で動作する複数セルから成る 5G New Radio (NR) ネットワークをモデル化します。各セルには、一連のユーザー端末 (UE) ノードにサービスを提供する gNodeB (gNB) があります。ノード上の NR スタックには、無線リンク制御 (RLC)、メディア アクセス制御 (MAC)、および物理レイヤー (PHY) が含まれます。
はじめに
この例では、以下をモデル化します。
同一チャネル セル間干渉。
物理ダウンリンク共有チャネル (PDSCH) リソースのスロットベース ラウンド ロビン スケジューリング。
3GPP TR 38.901 チャネル モデル。
単入力単出力 (SISO) アンテナ構成。
link-to-system マッピングに基づく抽象 PHY。
この例では、DL 割り当て、PDSCH フィードバック、およびチャネル品質インジケーター (CQI) レポートなどの制御パケットを帯域外として送信するものとみなします。帯域外とは、リソースを必要としない送信を指します。また、エラーのない確実な受信も指します。
同一チャネル干渉
同一チャネル セルとは、同一周波数で動作する NR セルのことです。これらは、互いに干渉し合う可能性があります。
3 つのセルで構成されるこのネットワーク トポロジーの例を考えてみましょう。Cell-1 と Cell-3 は、同一周波数帯域で動作します。Cell-2 は、異なる周波数帯域で動作するため、Cell-1 や Cell-3 と干渉することがありません。

シナリオ設定
無線ネットワーク シミュレーターを作成します。
rng("default") % Reset the random number generator numFrameSimulation =20; % Simulation time in terms of number of 10 ms frames networkSimulator = wirelessNetworkSimulator.init;
3 台の gNB の位置、およびメトリクスを可視化する対象の gNB を指定します。
gNBPositions = [1700 600 30; 3000 600 30; 2500 2000 30]; gNBOfInterestIdx =3; % Specify an integer value in the range [1, number of gNBs]
名前、位置、搬送波周波数、チャネル帯域幅、サブキャリア間隔、送信電力、および受信ゲインを指定して、gNB ノードを作成します。各 gNB に接続するすべての UE について、サウンディング基準信号 (SRS) の送信周期を 5 スロットに設定します。各 gNB は 1 つの NR セルを操作します。
gNBNames = "gNB-" + (1:size(gNBPositions,1)); gNBs = nrGNB(Name=gNBNames,Position=gNBPositions,CarrierFrequency=2.5e9, ... ChannelBandwidth=10e6,SubcarrierSpacing=30e3,TransmitPower=32, ... ReceiveGain=11,SRSPeriodicityUE=5);
configureScheduler 関数を使用して、スケジューラ パラメーター ResourceAllocationType を設定します。
for gNBIdx = 1:numel(gNBs) % Resource allocation type value 0 indicates a noncontiguous allocation of % frequency-domain resources in terms of RBGs configureScheduler(gNBs(gNBIdx),ResourceAllocationType=0) end
各セル内の UE ノードの位置を生成します。
numCells = numel(gNBs); cellRadius =500; % Radius of each cell (in meters) numUEsPerCell =
4; uePositions = generateUEPositions(cellRadius,gNBPositions,numUEsPerCell);
UE ノードを作成し、gNB に接続します。DL チャネル状態情報 (CSI) レポートの周期性を 10 スロットに設定し、DL 方向のトラフィックをフル バッファに構成します。
UEs = cell(numCells,1); for cellIdx = 1:numCells ueNames = "UE-" + (1:size(uePositions{cellIdx},1)); if cellIdx ~= gNBOfInterestIdx ueNames = "InterferingCell-" + cellIdx + "-" + ueNames; end UEs{cellIdx} = nrUE(Name=ueNames,Position=uePositions{cellIdx},ReceiveGain=11); connectUE(gNBs(cellIdx),UEs{cellIdx},CSIReportPeriodicity=10, ... FullBufferTraffic="DL") end
ネットワーク シミュレーターに gNB と UE を追加します。
addNodes(networkSimulator,gNBs); for cellIdx = 1:numCells addNodes(networkSimulator,UEs{cellIdx}) end
すべてのリンクに対して 3GPP TR 38.901 チャネル モデルを使用します。この例は、自由空間パス損失 (FSPL) モデルを使用して実行することもできます。
channelModel ="3GPP TR 38.901"; if strcmp(channelModel,"3GPP TR 38.901") % Define scenario boundaries pos = [reshape([gNBs.Position],3,[])]; % X-coordinate of the left edge of the scenario in meters minX = min(pos(1,:)); % Y-coordinate of the bottom edge of the scenario in meters minY = min(pos(2,:)); % Width (right edge of the 2D scenario) in meters, given as maxX - minX width = max(pos(1,:)) - minX; % Height (top edge of the 2D scenario) in meters, given as maxY - minY height = max(pos(2,:)) - minY; % Create the channel model channel = h38901Channel(Scenario="UMa",ScenarioExtents=[minX minY width height]); % Add the channel model to the simulator addChannelModel(networkSimulator,@channel.channelFunction); connectNodes(channel,networkSimulator,InterfererHasSmallScale=true); end
対象の gNB のセル ID を取得します。表示される可視化およびメトリクスは、このセルに関するものです。
cellToAnalyze = gNBs(gNBOfInterestIdx).ID;
トレースを記録するには、enableTraces を true に設定します。enableTraces パラメーターを false に設定した場合、シミュレーションでトレースは記録されません。ただし、enableTraces を false に設定すると、シミュレーションを高速化できます。
enableTraces =
true;MAC トレースおよび PHY トレースを記録するオブジェクトを作成します。
linkDir = "DL"; % Indicates DL if enableTraces simSchedulingLogger = cell(numCells,1); simPhyLogger = cell(numCells,1); for cellIdx = 1:numCells % Create an object for MAC DL scheduling traces logging simSchedulingLogger{cellIdx} = ... helperNRSchedulingLogger(numFrameSimulation, ... gNBs(cellToAnalyze),UEs{cellToAnalyze},LinkDirection=linkDir); % Create an object for PHY layer traces logging simPhyLogger{cellIdx} = helperNRPhyLogger(numFrameSimulation, ... gNBs(cellToAnalyze),UEs{cellToAnalyze}); end end
メトリクス プロットの 1 秒あたりの更新回数を設定します。
numMetricPlotUpdates =100; % Updates plots every 10 milliseconds
MAC メトリクスおよび PHY メトリクスを可視化するオブジェクトを作成します。
showSchedulerMetrics =true; showPhyMetrics =
true; metricsVisualizer = helperNRMetricsVisualizer(gNBs(cellToAnalyze), ... UEs{cellToAnalyze},CellOfInterest=cellToAnalyze, ... RefreshRate=numMetricPlotUpdates,PlotSchedulerMetrics=showSchedulerMetrics, ... PlotPhyMetrics=showPhyMetrics,LinkDirection=linkDir);
MAT ファイルにログを書き込みます。これらのログはシミュレーション後の解析に使用できます。
if enableTraces simulationLogFile = "simulationLogs"; % For logging the simulation traces end
目的のセル内の対象 UE ノードにモビリティ モデルを追加します。ランダム ウェイポイント モビリティ モデルまたはトレースベースのモビリティ モデルのいずれかを使用できます。
enableMobility =false; if enableMobility mobilityModel =
"RandomWaypoint"; ueWithMobility = UEs{cellToAnalyze}(2); % Get UE-2 in the cell of interest refreshIntervalInSec = 0.1; % How often the node updates its position and velocity information, with a single refresh occurring at each fixed interval if strcmp(mobilityModel,"RandomWaypoint") ueSpeedRange = [1 1000]; % In meters per second % Add random waypoint mobility to the selected UE addMobility(ueWithMobility,SpeedRange=ueSpeedRange,BoundaryShape="circle", ... Bounds=[gNBs(cellToAnalyze).Position(1:2) cellRadius],RefreshInterval=refreshIntervalInSec); else % Add trace-based mobility to the selected UE traceMobilityModel = hNodeMobilityTraceBased("MobilityTrace.mat"); % "MobilityTrace.mat" is the trace file name addMobility(ueWithMobility,MobilityModel=traceMobilityModel); end end
ネットワーク トポロジを表示します。
networkVisualizer = wirelessNetworkViewer(ShowNodeNames=false);
addNodes(networkVisualizer,gNBs)
addNodes(networkVisualizer,[UEs{:}])
% Show the cell boundary of each gNB
showBoundary(networkVisualizer,Position=gNBPositions,BoundaryShape="circle", ...
Bounds=cellRadius)指定したフレーム数 numFrameSimulation でシミュレーションを実行します。
% Calculate the simulation duration (in seconds) simulationTime = numFrameSimulation*1e-2; % Run the simulation run(networkSimulator,simulationTime);



この図は、構成されたセルラー トポロジを示しています。この図は、各セル内の gNB の位置および接続された UE ノードの位置を示しています。
ノードごとの統計を読み取ります。
gNBStats = statistics(gNBs); ueStats = cell(numCells, 1); for cellIdx = 1:numCells ueStats{cellIdx} = statistics(UEs{cellIdx}); end
シミュレーションの最後に、システム パフォーマンス インジケーターの達成値を、理論上のピーク値 (オーバーヘッドをゼロと仮定) と比較します。表示されるパフォーマンス インジケーターは、達成データ レート (DL)、達成スペクトル効率 (DL)、および UE で観測された BLER (DL) です。計算されたピーク値は、3GPP TR 37.910 に準拠します。指定した対象のセルでは、UE-1、UE-3、および UE-4 は、それぞれの gNB からほぼ等距離に位置しています。ただし、UE-1 と比較して、UE-3 と UE-4 はスループットが低いことが観測されます。これは、UE-3 と UE-4 がより強いセル間干渉を受けるためです。
displayPerformanceIndicators(metricsVisualizer)
Peak DL throughput: 59.72 Mbps Achieved cell DL throughput: 27.34 Mbps Achieved DL throughput for each UE: [6.74 12.15 3.35 5.1] Peak DL spectral efficiency: 5.97 bits/s/Hz Achieved DL spectral efficiency for cell: 2.73 bits/s/Hz Block error rate for each UE in the DL direction: [0.013 0 0.003 0.003]
シミュレーションの可視化
構成されたセルのパフォーマンスを評価するために、この例にはさまざまな実行時の可視化が含まれています。示されている実行時の可視化の詳細については、Simulation Visualizationsを参照してください。
シミュレーション ログ
この例では、シミュレーション後の解析および可視化のために、シミュレーション ログを MAT ファイルに保存します。シミュレーションでは、各セルのタイムステップごとのログ、スケジューリング割り当てログ、および PHY 受信ログを取得し、それらを MAT ファイル 'simulationLogFile' に保存します。シミュレーション後に、ファイルを開き、NCellID、DLTimeStepLogs、SchedulingAssignmentLogs、および PhyReceptionLogs をワークスペースに読み込みます。
NCellID: これには、シミュレーション ログが属するセルを表すセル ID が保存されます。
DL タイム ステップ ログ: これには、シミュレーションのスロットごとのログが保存されます。シミュレーション内の各スロットが 1 行で表されます。ログ形式の詳細については、NR Cell Performance Evaluation with MIMOの例の「Time step logs」セクションを参照してください。
スケジューリング割り当てログ: このファイルには、すべてのスケジューリング割り当ての情報および関連情報が記録されます。ログ形式の詳細については、NR Cell Performance Evaluation with MIMOの例の「Scheduling assignment logs」セクションを参照してください。
PHY 受信ログ: このファイルには、シミュレーションで観測されたパケット受信情報が記録されます。ログ形式の詳細については、NR Cell Performance Evaluation with MIMOの例の「Phy reception logs」セクションを参照してください。
if enableTraces % Obtain the logs simulationLogs = cell(numCells, 1); for cellIdx = 1:numCells if gNBs(cellIdx).DuplexMode == "FDD" logInfo = struct(NCellID=[],DLTimeStepLogs=[], ... SchedulingAssignmentLogs=[],PhyReceptionLogs=[]); logInfo.DLTimeStepLogs = getSchedulingLogs(simSchedulingLogger{cellIdx}); else % TDD logInfo = struct(NCellID=[],TimeStepLogs=[], ... SchedulingAssignmentLogs=[],PhyReceptionLogs=[]); logInfo.TimeStepLogs = getSchedulingLogs(simSchedulingLogger{cellIdx}); end logInfo.NCellID = gNBs(cellIdx).ID; % Obtain the scheduling assignments log logInfo.SchedulingAssignmentLogs = getGrantLogs(simSchedulingLogger{cellIdx}); % Obtain the Phy reception logs logInfo.PhyReceptionLogs = getReceptionLogs(simPhyLogger{cellIdx}); simulationLogs{cellIdx} = logInfo; end % Save simulation logs in a MAT-file save(simulationLogFile,"simulationLogs") end
その他の調査
この例を使用して、さらに次のオプションを調べることができます。
アップリンク関連の構成パラメーターを指定して、ノード間のアップリンク干渉をモデル化します。これに関する詳細については、NR Cell Performance Evaluation with MIMOの例を参照してください。
与干渉-被干渉シナリオのモデル化: 与干渉側は干渉の発生源であり、被干渉側はその干渉の影響を受けます。次の図に示す DL シナリオを考えてみます。マクロ セル UE が、マクロ基地局 (BS) からは遠く、スモール セルには近い位置にあります。DL 方向において、マクロ セル UE はスモール セル BS からの干渉を受けます。スモール セル BS は与干渉側であり、マクロ UE は被干渉側です。

各クラスターが異なる周波数で動作するセルで構成されている複数のクラスターをモデル化し、セル エッジ ユーザーに対する干渉の影響を解析します。
セル内モビリティがダウンリンク メトリクスに与える影響をモデル化します。UE に組み込まれたモビリティ モデルによって、その UE が特定のセル内を移動する際のパターンが決まります。
enableMobilityを true に設定して、CellToAnalyze内の UE-2 のモビリティを有効にします。次のプロットは、1000 フレームのシミュレーション期間において、UE モビリティがスループットに与える影響を示しています。UE が gNB から遠ざかるにつれて、スループットは徐々に低下していきます。一方で、静的な UE ノードは、シミュレーション全体を通してデータ レートを維持しています。

対象セルにおける静的な UE のスループット プロット

対象セルにおいて UE-2 にモビリティを組み込んだ場合のスループット プロット
ローカル関数
function uePositions = generateUEPositions(cellRadius,gNBPositions,numUEsPerCell) %generateUEPositions Return the position of UE nodes in each cell numCells = size(gNBPositions,1); uePositions = cell(numCells,1); ueHeight = 3; % In meters for cellIdx=1:numCells gnbXCo = gNBPositions(cellIdx,1); % gNB X-coordinate gnbYCo = gNBPositions(cellIdx,2); % gNB Y-coordinate theta = rand(numUEsPerCell,1)*(2*pi); % Use these expressions to calculate the position of UE nodes within the cell. By default, % the placement of the UE nodes is random within the cell r = sqrt(rand(numUEsPerCell,1))*cellRadius; x = round(gnbXCo + r.*cos(theta)); y = round(gnbYCo + r.*sin(theta)); z = ones(numUEsPerCell,1) * ueHeight; uePositions{cellIdx} = [x y z]; end end
サポート関数
この例では、次のヘルパーを使用します。
helperNRMetricsVisualizer:メトリクス可視化機能の実装helperNRSchedulingLogger: スケジューリング情報のロギング機能の実装helperNRPhyLogger:PHY パケット受信情報のロギング機能の実装h38901Channel:3GPP TR 38.901 チャネル モデルの実装hNRKPIManager: 重要性能評価指標を計算する機能の実装hNodeMobilityTraceBased: トレースベースのモビリティ モデル機能の実装
参照
[1] 3GPP TS 38.104. “NR; Base Station (BS) radio transmission and reception.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[2] 3GPP TS 38.214. “NR; Physical layer procedures for data.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[3] 3GPP TS 38.321. “NR; Medium Access Control (MAC) protocol specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[4] 3GPP TS 38.322. “NR; Radio Link Control (RLC) protocol specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[5] 3GPP TS 38.323. “NR; Packet Data Convergence Protocol (PDCP) specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[6] 3GPP TS 38.331. “NR; Radio Resource Control (RRC) protocol specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[7] 3GPP TR 37.910. “Study on self evaluation towards IMT-2020 submission.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
参考
オブジェクト
wirelessNetworkSimulator(Wireless Network Toolbox) |nrGNB|nrUE









