Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

レイトレーシングを使用した屋内 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 つであり、多くの場合、さまざまな 3D ソフトウェアで他の 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);

Figure contains an axes. The axes with title Array Geometry contains 5 objects of type scatter, text.

helperViewArray(rxArray);

Figure contains an axes. The axes with title Array Geometry contains 17 objects of type scatter, text.

部屋の天井の隅近くにある送信機サイトを指定します。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]);

関数 helperVisualizeScenario を使用し、MATLAB™ 関数を使用して 3 次元シナリオを可視化します。送信機サイトと受信機サイトはそれぞれ赤と青に色付けされます。

helperVisualizeScenario(mapFileName,tx,rx);

Figure contains an axes. The axes contains 4 objects of type patch, line, scatter.

レイトレーシング

送信機サイトと受信機サイトの間でレイ トレーシング解析を実行し、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,'Map',mapFileName);

cell 配列の戻り値から計算されたレイを抽出します。

rays = rays{1,1};

それぞれのレイの反射の回数、伝播距離、およびパス損失値を確認して、レイトレーシングの結果を調べます。25 のレイが見つかります (見通し内のレイ 1 つ、1 回反射のレイ 6 つ、2 回反射のレイ 18)。

[rays.NumReflections]
ans = 1×25

     0     1     1     1     1     1     1     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2

[rays.PropagationDistance]
ans = 1×25

    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.9868    5.9868    6.7170    8.0161    8.0460

[rays.PathLoss]
ans = 1×25

   56.5350   72.1633   70.0647   72.3180   73.3102   76.4133   76.4508   81.5418   83.8254   81.5531   83.6891   83.7784   85.7801   85.8271   83.7662   86.0508   91.6822   91.7764   86.5438   86.5283   91.2897   91.2969   94.8444   96.4455   96.4796

関数 helperVisualizeRays を使用して、以前にプロットされた 3 次元シーンに計算されたレイを追加します。それぞれのレイは、そのパス損失値に基づいて色付けされています。

helperVisualizeRays(rays);

Figure contains an axes. The axes contains 29 objects of type patch, line, scatter.

レイトレーシングからの確定的なチャネル モデル

前述のレイトレーシングの結果を使用して、確定的マルチパス チャネル モデルを作成します。屋内環境でのデバイスの典型的な低可動性を反映する受信機の瞬間速度を指定します。

rtChan = comm.RayTracingChannel(rays, tx, rx);
rtChan.SampleRate = 300e6;
rtChan.ReceiverVirtualVelocity = [0.1; 0.1; 0]
rtChan = 
  comm.RayTracingChannel with properties:

                      SampleRate: 300000000
                 PropagationRays: [1x25 comm.Ray]
                   TransmitArray: [1x1 arrayConfig]
    TransmitArrayOrientationAxes: [3x3 double]
                    ReceiveArray: [1x1 arrayConfig]
     ReceiveArrayOrientationAxes: [3x3 double]
         ReceiverVirtualVelocity: [3x1 double]
       NormalizeImpulseResponses: true
         NormalizeChannelOutputs: true

オブジェクト関数 showProfile を使用して、チャネル内のレイの電力遅延プロファイル (PDP)、発射角 (AoD)、到来角 (AoA) を可視化します。可視化において、PDP は、それぞれのレイのパス損失に加え、送信アレイおよび受信アレイ パターンのゲインを考慮します。

showProfile(rtChan);

Figure contains 3 axes. Axes 1 with title Power Delay Profile contains an object of type stem. Axes 2 with title Angle of Departure contains 7 objects of type quiver, text. Axes 3 with title Angle of Arrival contains 7 objects of type quiver, text.

オブジェクト関数 info を使用して、送信素子および受信素子の数を取得します。

rtChanInfo = info(rtChan)
rtChanInfo = struct with fields:
             CarrierFrequency: 5.8000e+09
             CoordinateSystem: 'Cartesian'
        TransmitArrayLocation: [3x1 double]
         ReceiveArrayLocation: [3x1 double]
          NumTransmitElements: 4
           NumReceiveElements: 16
           ChannelFilterDelay: 7
    ChannelFilterCoefficients: [25x21 double]
          NumSamplesProcessed: 0

numTx = rtChanInfo.NumTransmitElements;
numRx = rtChanInfo.NumReceiveElements;

システム パラメーター

LDPC 符号化、64-QAM、および 256 の副搬送波を使用する OFDM を使用する通信リンクを構成します。フレームごとに 4 つの LDPC 符号語を指定します。これは、結果としてフレームごとに 50 の OFDM シンボルになります。

% Create LDPC encoder and decoder objects
ldpcEnc = comm.LDPCEncoder;
ldpcDec = comm.LDPCDecoder;
numCodewordsPerFrame = 4;
codewordLen = size(ldpcEnc.ParityCheckMatrix, 2);

% Parameters for QAM modulation per subcarrier
bitsPerCarrier = 6;
modOrder = 2^bitsPerCarrier;
codeRate = size(ldpcEnc.ParityCheckMatrix, 1)/size(ldpcEnc.ParityCheckMatrix, 2);

% 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;

誤り率計算オブジェクトを作成してビット誤り率 (BER) を計算します。

errRate = comm.ErrorRate;

Eb/No の値を割り当て、そこから SNR 値を導出して AWGN に使用します。

EbNo = 30; % in dB
bitsPerSymbol = bitsPerCarrier*codeRate;
snr = 10^(EbNo/10) * bitsPerSymbol; % Linear

リンクのシミュレーション

関数 helperIndoorRayTracingWaveformGen は、次の手順を実行することで、送信機サイトで 1 フレームから構成される波形を生成します。

  1. ランダムに生成されたビットを LDPC で符号化する

  2. 符合化されたビットを 64-QAM で変調する

  3. OFDM 変調を適用し、信号を周波数領域から時間領域に変換する

rng(100); % Set RNG for repeatability
[txWave, srcBits] = helperIndoorRayTracingWaveformGen(numCodewordsPerFrame, ldpcEnc, modOrder, ofdmMod);

レイトレーシング チャネル モデルを通して波形を渡し、ホワイト ノイズを追加します。チャネル フィルター遅延を考慮に入れるには、追加の null OFDM シンボルを波形の最後に付加します。

chanIn = [txWave; zeros(fftLen + cpLen, numTx)];
[chanOut, CIR] = rtChan(chanIn);
rxWave = awgn(chanOut, snr, numTx/numRx, 'linear');

関数 helperIndoorRayTracingRxProcessing は、次の手順を実行することで、チャネルで劣化した波形を受信機サイトで復号化します。

  1. チャネル インパルス応答 (CIR) 出力とチャネル オブジェクトの info メソッドからのチャネル フィルター係数を使用した完全なチャネル推定

  2. 信号を周波数領域に戻すための OFDM 復調

  3. 各副搬送波に対するシンボルのイコライズ

  4. LLR を取得するための 64-QAM 軟復調

  5. LDPC 復号化

[decBits, eqSym] = helperIndoorRayTracingRxProcessing(rxWave, CIR, rtChanInfo, ldpcDec, modOrder, ofdmDemod, snr);

BER を計算します。

ber = errRate(srcBits, double(decBits));
disp(ber(1));
    0.0140

EbNo 値の範囲に対して BER 曲線をプロットするには、関数 helperIndoorRayTracingSimulationLoop を使用して、各 EbNo 値で最大 300 フレームにわたって上記の単一フレーム処理を繰り返します。

EbNoRange = 27:36;
helperIndoorRayTracingSimulationLoop(ldpcEnc, ldpcDec, ofdmMod, ofdmDemod, rtChan, errRate, ...
    modOrder, numCodewordsPerFrame, EbNoRange);

Figure contains an axes. The axes contains an object of type line.

まとめとその他の調査

この例では、屋内の会議室でのレイトレーシング結果を使用して確定的なチャネル モデルを構築する方法について説明しました。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.