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 通信リンクのシミュレーションで使用されます。次の図は、通信リンクの特徴を表しています。

Block diagram showing MIMO-OFDM communications link.

レイ トレーシングは屋内環境で実行されます。同じレイ トレーシング手法を、屋内環境と屋外環境の両方でチャネル モデルの構築に適用できます。屋外の都市設定でのレイ トレーシング解析については、レイ トレーシングを使用した都市のリンクとカバレッジの解析の例を参照してください。

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

Figure contains an axes object. The axes object with title Array Geometry, xlabel y, ylabel z contains 5 objects of type scatter, text.

helperViewArray(rxArray);

Figure contains an axes object. The axes object with title Array Geometry, xlabel y, ylabel z 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]);

関数 siteviewer を、指定されたマップ ファイルと共に使用して、サイト ビューアーで 3 次元シーンを表示します。関数 show を使用して送信機と受信機を可視化します。

siteviewer("SceneModel",mapFileName);
show(tx,"ShowAntennaHeight",false)
show(rx,"ShowAntennaHeight",false)

パンするには左クリックします。ズームするには右クリックまたはスクロール ホイールを使用します。表示を回転させるには、中央ボタンをクリックしてドラッグするか、Ctrl を押しながら左クリックしてドラッグします。

Site Viewer with conference room model

レイ トレーシング

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

Site Viewer with ray paths in conference room model

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

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

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

Figure contains 3 axes objects. Axes object 1 with title Power Delay Profile, xlabel Delay (s), ylabel Magnitude contains an object of type stem. Axes object 2 with title Angle of Departure, xlabel x, ylabel y contains 7 objects of type quiver, text. Axes object 3 with title Angle of Arrival, xlabel x, ylabel y contains 7 objects of type quiver, text.

オブジェクト関数 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 フレームから構成される波形を生成します。

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

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

  3. 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 は、次の手順を実行することで、チャネルで劣化した波形を受信機サイトで復号化します。

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

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

  3. 各サブキャリアに対するシンボルのイコライズ

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

  5. 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);

Figure contains an axes object. The axes object with xlabel Eb/No (dB), ylabel BER 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.

参考

関数

オブジェクト

関連するトピック