レイ トレーシングを使用した屋内 MIMO-OFDM 通信リンク
この例では、屋内の環境でレイ トレーシングを実行し、その結果を使用して、MIMO-OFDM 手法でリンク レベルのシミュレーションのチャネル モデルを構築する方法について説明します。
はじめに
レイ トレーシング [1] は、数十 GHz の範囲の RF 周波数で動作する現代の通信システムのトレンドにより、無線周波数 (RF) 解析、サイト プランニング、チャネルのモデル化、およびリンク レベル解析の一般的な手法になっています。確率的なモデルとは異なり、レイ トレーシング手法は 3 次元環境に固有かつトランシーバー サイトに固有であり、周囲の環境から大きな影響を受けることがあります。距離ベースのパス損失を計算する単純な公式がないため、レイ トレーシング手法は数値シミュレーションに依存しており、一般的に、実地の測定より費用はかかりません。レイ トレーシングからの結果は、通信システムのマルチパス チャネル モデルの構築に使用できます。たとえば、レイ トレーシングに基づくチャネル モデルは、5G については TR 38.901 [2] の第 8 節で、WLAN [3] については IEEE 802.11ay で指定されています。
この例では、3 次元の会議室にある 1 つの送信機サイトと 1 つの受信機サイトの間のレイ トレーシング解析を最初に行います。計算されたレイを使用して、2 つのサイトに特有の確定的チャネル モデルを構築します。チャネル モデルは MIMO-OFDM 通信リンクのシミュレーションで使用されます。次の図は、通信リンクの特徴を表しています。
レイ トレーシングは屋内環境で実行されます。同じレイ トレーシング手法を、屋内環境と屋外環境の両方でチャネル モデルの構築に適用できます。屋外の都市設定でのレイ トレーシング解析については、レイ トレーシングを使用した都市のリンクとカバレッジの解析の例を参照してください。
3 次元の屋内シナリオ
テーブル 1 台と椅子が 4 脚ある小さい会議室の STL 形式の屋内 3 次元マップを指定します。STL 形式は最も一般的な 3 次元マップの形式の 1 つであり、多くの場合、さまざまな 3-D ソフトウェアで他の 3 次元マップ形式から変換できます。
mapFileName = "conferenceroom.stl";
搬送波周波数を 5.8 GHz で定義し、波長を計算します。
fc = 5.8e9;
lambda = physconst("lightspeed")/fc;
送信アンテナは 4 素子の等間隔直線アレイ (ULA) で、素子間の波長は 2 倍あります。受信アンテナは 4x4 の等間隔矩形アレイ (URA) で、素子間は波長の 1 倍です。両方のアンテナがarrayConfig
オブジェクトで指定されています。
txArray = arrayConfig("Size",[4 1],"ElementSpacing",2*lambda); rxArray = arrayConfig("Size",[4 4],"ElementSpacing",lambda);
関数 helperViewArray を使用して、アンテナ素子が入力と出力のストリームについて番号付けされた ULA および URA のジオメトリを可視化します。
helperViewArray(txArray);
helperViewArray(rxArray);
部屋の天井の隅近くにある送信機サイトを指定します。Wi-Fi アクセス ポイントなどが該当します。テーブルの少し上で椅子の前にある、ラップトップまたはモバイル デバイスを表す受信機サイトを指定します。
tx = txsite("cartesian", ... "Antenna",txArray, ... "AntennaPosition",[-1.46; -1.42; 2.1], ... 'TransmitterFrequency',5.8e9); rx = rxsite("cartesian", ... "Antenna",rxArray, ... "AntennaPosition",[.3; .3; .85], ... "AntennaAngle",[0;90]);
関数 siteviewer
を、指定されたマップ ファイルと共に使用して、サイト ビューアーで 3 次元シーンを表示します。関数 show
を使用して送信機と受信機を可視化します。
siteviewer("SceneModel",mapFileName); show(tx,"ShowAntennaHeight",false) show(rx,"ShowAntennaHeight",false)
パンするには左クリックします。ズームするには右クリックまたはスクロール ホイールを使用します。表示を回転させるには、中央ボタンをクリックしてドラッグするか、Ctrl を押しながら左クリックしてドラッグします。
レイ トレーシング
送信機サイトと受信機サイトの間でレイ トレーシング解析を実行し、Shooting and Bounicng Rays (SBR) 法を使用してcomm.Ray
オブジェクトを返します。シーンの表面材料を木と指定して、最大 2 回の反射のレイを探します。SBR 法では最大 10 次反射までサポートします。
pm = propagationModel("raytracing", ... "CoordinateSystem","cartesian", ... "Method","sbr", ... "AngularSeparation","low", ... "MaxNumReflections",2, ... "SurfaceMaterial","wood"); rays = raytrace(tx,rx,pm);
cell 配列の戻り値から計算されたレイを抽出します。
rays = rays{1,1};
それぞれのレイの反射の回数、伝播距離、およびパス損失値を確認して、レイ トレーシングの結果を調べます。24 のレイが見つかります (見通し内のレイ 1 つ、1 回反射のレイ 6 つ、2 回反射のレイ 17)。
[rays.NumInteractions]
ans = 1×24
0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[rays.PropagationDistance]
ans = 1×24
2.7602 2.8118 2.8487 2.8626 3.2029 4.6513 4.6719 2.8988 2.9125 2.9481 3.2475 3.2916 3.3243 4.6821 4.7247 4.7331 4.7433 4.7936 4.9269 4.9464 5.9869 6.7170 8.0161 8.0460
[rays.PathLoss]
ans = 1×24
56.5350 68.2594 70.1109 68.4824 73.3105 75.0911 75.1708 83.0074 83.4028 82.9619 84.6714 84.9932 85.7742 85.0379 83.0395 85.2208 89.4165 89.5028 85.6436 85.6669 90.3408 94.8430 95.6098 95.6684
関数 plot
を使用して、サイト ビューアーで 3 次元シーンに光線をプロットします。それぞれのレイは、そのパス損失値に基づいて色付けされています。光線をクリックすると、その光線に関する情報が表示されます。
plot(rays,"Colormap",jet,"ColorLimits",[50, 95])
レイ トレーシングからの確定的なチャネル モデル
前述のレイ トレーシングの結果を使用して、確定的マルチパス チャネル モデルを作成します。屋内環境でのデバイスの典型的な低可動性を反映する受信機の瞬間速度を指定します。
rtChan = comm.RayTracingChannel(rays,tx,rx); rtChan.SampleRate = 300e6; rtChan.ReceiverVirtualVelocity = [0.1; 0.1; 0]
rtChan = comm.RayTracingChannel with properties: SampleRate: 300000000 PropagationRays: [1×24 comm.Ray] MinimizePropagationDelay: true TransmitArray: [1×1 arrayConfig] TransmitArrayOrientationAxes: [3×3 double] ReceiveArray: [1×1 arrayConfig] ReceiveArrayOrientationAxes: [3×3 double] ReceiverVirtualVelocity: [3×1 double] NormalizeImpulseResponses: true NormalizeChannelOutputs: true ChannelFiltering: true
オブジェクト関数 showProfile
を使用して、チャネル内の光線の電力遅延プロファイル (PDP)、発射角 (AoD)、到来角 (AoA) を可視化します。可視化において、PDP は、それぞれのレイのパス損失に加え、送信アレイおよび受信アレイ パターンのゲインを考慮します。
showProfile(rtChan);
オブジェクト関数 info
を使用して、送信素子および受信素子の数を取得します。
rtChanInfo = info(rtChan)
rtChanInfo = struct with fields:
CarrierFrequency: 5.8000e+09
CoordinateSystem: 'Cartesian'
TransmitArrayLocation: [3×1 double]
ReceiveArrayLocation: [3×1 double]
NumTransmitElements: 4
NumReceiveElements: 16
ChannelFilterDelay: 7
ChannelFilterCoefficients: [24×21 double]
NumSamplesProcessed: 0
LastFrameTime: 0
numTx = rtChanInfo.NumTransmitElements; numRx = rtChanInfo.NumReceiveElements;
システム パラメーター
LDPC 符号化、64-QAM、および 256 のサブキャリアを使用する OFDM を使用する通信リンクを構成します。フレームごとに 4 つの LDPC コードワードを指定します。これは、結果としてフレームごとに 50 の OFDM シンボルになります。
% Create LDPC encoder and decoder configuration objects cfgLDPCEnc = ldpcEncoderConfig(dvbs2ldpc(1/2)); cfgLDPCDec = ldpcDecoderConfig(cfgLDPCEnc); numCodewordsPerFrame = 4; codewordLen = cfgLDPCEnc.BlockLength; % Parameters for QAM modulation per subcarrier bitsPerCarrier = 6; modOrder = 2^bitsPerCarrier; codeRate = cfgLDPCEnc.CodeRate; % Create OFDM modulator and demodulator objects fftLen = 256; cpLen = fftLen/4; numGuardBandCarriers = [9; 8]; pilotCarrierIdx = [19:10:119, 139:10:239]'; numDataCarriers = ... fftLen - sum(numGuardBandCarriers) - length(pilotCarrierIdx) - 1; numOFDMSymbols = ... numCodewordsPerFrame * codewordLen / ... bitsPerCarrier / numDataCarriers / numTx; ofdmMod = comm.OFDMModulator( ... "FFTLength",fftLen, .... "NumGuardBandCarriers",numGuardBandCarriers, ... "InsertDCNull",true, ... "PilotInputPort",true, ... "PilotCarrierIndices",pilotCarrierIdx, ... "CyclicPrefixLength",cpLen, ... "NumSymbols",numOFDMSymbols, ... "NumTransmitAntennas",numTx); ofdmDemod = comm.OFDMDemodulator(ofdmMod); ofdmDemod.NumReceiveAntennas = numRx; cd = comm.ConstellationDiagram( ... "ReferenceConstellation", qammod(0:modOrder-1, modOrder, 'UnitAveragePower', true), ... "XLimits", [-2 2], ... "YLimits", [-2 2]);
エラー レート計算オブジェクトを作成してビット エラー レート (BER) を計算します。
errRate = comm.ErrorRate;
Eb/No の値を割り当て、そこから SNR 値を導出して AWGN に使用します。
EbNo = 30; % in dB SNR = convertSNR(EbNo,"ebno", ... "BitsPerSymbol",bitsPerCarrier, ... "CodingRate",codeRate); SNRLin = 10^(SNR/10); % Linear
リンクのシミュレーション
関数 helperIndoorRayTracingWaveformGen は、次の手順を実行することで、送信機サイトで 1 フレームから構成される波形を生成します。
ランダムに生成されたビットを LDPC で符号化する
符合化されたビットを 64-QAM で変調する
OFDM 変調を適用し、信号を周波数領域から時間領域に変換する
rng(100); % Set RNG for repeatability [txWave,srcBits] = ... helperIndoorRayTracingWaveformGen( ... numCodewordsPerFrame,cfgLDPCEnc,modOrder,ofdmMod);
レイ トレーシング チャネル モデルを通して波形を渡し、ホワイト ノイズを追加します。チャネル フィルター遅延を考慮に入れるには、追加の null OFDM シンボルを波形の最後に付加します。
chanIn = [txWave; zeros(fftLen + cpLen,numTx)];
[chanOut,CIR] = rtChan(chanIn);
rxWave = awgn(chanOut,SNRLin,numTx/numRx,'linear');
関数 helperIndoorRayTracingRxProcessing は、次の手順を実行することで、チャネルで劣化した波形を受信機サイトで復号化します。
チャネル インパルス応答 (CIR) 出力とチャネル オブジェクトの
info
メソッドからのチャネル フィルター係数を使用した完全なチャネル推定信号を周波数領域に戻すための OFDM 復調
各サブキャリアに対するシンボルのイコライズ
LLR を取得するための 64-QAM 軟復調
LDPC 復号化
[decBits, eqSym] = ... helperIndoorRayTracingRxProcessing(rxWave,CIR, ... rtChanInfo,cfgLDPCDec,modOrder,ofdmDemod,SNRLin); cd(eqSym(:));
BER を計算します。
ber = errRate(srcBits,double(decBits)); disp(ber(1));
0.0112
EbNo 値の範囲に対して BER 曲線をプロットするには、関数 helperIndoorRayTracingSimulationLoop を使用して、各 EbNo 値で最大 300 フレームにわたって上記の単一フレーム処理を繰り返します。
EbNoRange = 27:36; helperIndoorRayTracingSimulationLoop( ... cfgLDPCEnc,cfgLDPCDec,ofdmMod,ofdmDemod,rtChan,errRate, ... modOrder,numCodewordsPerFrame,EbNoRange);
まとめとその他の調査
この例では、屋内の会議室でのレイ トレーシング結果を使用して確定的なチャネル モデルを構築する方法について説明しました。LDPC および MIMO-OFDM 手法を使用したリンクレベルのシミュレーションがチャネル モデルに対して実行され、BER 結果がプロットされました。
さらに詳しく調査するには、次のような方法があります。
さまざまな 3 次元マップや表面材料
送信機サイトや受信機サイトのさまざまな位置
送信アンテナ アレイや受信アンテナ アレイのさまざまな仕様
送信アンテナ アレイや受信アンテナ アレイのさまざまな方向
SBR レイ トレーシング法でのさらに多い数の反射
送信や受信のビームフォーミング
付録
この例では、以下の補助関数を使用します。
参考文献
[1] Z. Yun, and M. F. Iskander, “Ray tracing for radio propagation modeling:Principles and applications,” IEEE Access, vol. 3, pp. 1089-1100, Jul. 2015.
[2] 3GPP TR 38.901.Study on channel model for frequencies from 0.5 to 100 GHz.3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[3] Maltsev, A., et al. Channel Models for 802.11ay.IEEE 802.11-15/1150r9, March 2017.