Main Content

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

comm.MIMOChannel

MIMO マルチパス フェージング チャネルによる入力信号のフィルター処理

説明

comm.MIMOChannel オブジェクトは、多入力多出力 (MIMO) マルチパス フェージング チャネルからの入力信号をフィルター処理します。このオブジェクトはレイリーとライスの両方のフェージング チャネルをモデル化し、リンク間の空間相関のモデル化にはクロネッカー モデルを使用します。処理の詳細は、アルゴリズムの節を参照してください。

MIMO マルチパス フェージング チャネルにより入力信号をフィルター処理するには、以下の手順に従います。

  1. comm.MIMOChannel オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

mimochan = comm.MIMOChannel は、多入力多出力 (MIMO) 周波数選択性/周波数フラット フェージング チャネル System object™ を作成します。このオブジェクトは、マルチパス MIMO チャネルからの実数または複素数の入力信号をフィルター処理して、チャネルで劣化した信号を取得します。

mimochan = comm.MIMOChannel(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を一重引用符で囲みます。

例: comm.MIMOChannel('SampleRate',2)

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

入力信号のサンプルレート (Hz 単位)。正のスカラーとして指定します。

データ型: double

離散パスの遅延 (秒)。スカラーまたは行ベクトルとして指定します。

  • PathDelays をスカラーに設定すると、MIMO チャネルは周波数フラットになります。

  • PathDelays をベクトルに設定すると、MIMO チャネルは周波数選択性になります。

データ型: double

パスの平均ゲイン (dB)。スカラーまたは行ベクトルとして指定します。AveragePathGainsPathDelays と同じサイズでなければなりません。

データ型: double

パス ゲインの正規化。true または false で指定します。

  • このプロパティを true に設定すると、フェージング処理が正規化され、長時間で平均したパス ゲインの強度の総和は 0 dB になります。

  • このプロパティを false に設定すると、パス ゲインの正規化は行われません。

パス ゲインの平均強度は AveragePathGains プロパティによって指定されます。

データ型: logical

チャネルに使用するフェージング分布。'Rayleigh' または 'Rician' として指定します。

データ型: char

ライス フェージング チャネルの K ファクター。正のスカラーまたは正の実数値の要素の 1 行 NP 列のベクトルとして指定します。NP は、PathDelays プロパティによって指定されるパスの遅延と等しくなります。

  • KFactor をスカラーに設定した場合、最初の離散パスはライス K ファクターが KFactor のライス フェージング処理です。残りの離散パスは、独立したレイリー フェージング処理になります。

  • KFactor を行ベクトルに設定した場合、KFactor ベクトルの正の要素に対応する離散パスは、この要素によってライス K ファクターが指定されるライス フェージング処理です。KFactor ベクトルのゼロ値の要素に対応する離散パスはレイリー フェージング処理です。

依存関係

このプロパティは、FadingDistributionRician である場合に適用されます。

データ型: double

ライス フェージング チャネルの見通し内成分のドップラー シフト (ヘルツ単位)。スカラーまたは行ベクトルとして指定します。このプロパティは、KFactor と同じサイズでなければなりません。

  • DirectPathDopplerShift をスカラーに設定した場合、この値は、ライス フェージング処理である最初の離散パスの見通し内成分のドップラー シフトを表します。

  • DirectPathDopplerShift を行ベクトルに設定した場合、ライス フェージング処理である離散パスは、KFactor ベクトルの正の要素に対応する DirectPathDopplerShift の要素によって指定される見通し内成分のドップラー シフトをもちます。

依存関係

このプロパティは、FadingDistributionRician である場合に適用されます。

データ型: double

ライス フェージング チャネルの見通し内成分の初期位相 (ラジアン単位)。スカラーまたは行ベクトルとして指定します。このプロパティは、KFactor と同じサイズでなければなりません。

  • DirectPathInitialPhase をスカラーに設定した場合、この値は、ライス フェージング処理である最初の離散パスの見通し内成分の初期位相を表します。

  • DirectPathInitialPhase を行ベクトルに設定した場合、ライス フェージング処理である離散パスは、KFactor ベクトルの正の要素に対応する DirectPathInitialPhase の要素によって指定される見通し内成分の初期位相をもちます。

依存関係

このプロパティは、FadingDistributionRician である場合に適用されます。

データ型: double

すべてのチャネル パスの最大ドップラー シフト (ヘルツ単位)。非負のスカラーとして指定します。

このドップラー シフトはチャネルのすべてのパスに適用されます。このプロパティを 0 に設定すると、チャネルは入力全体に対して静的になります。新しいチャネルは、オブジェクト関数 reset を使用して生成できます。

MaximumDopplerShift は各パスについて (SampleRate/10)/fc より小さくなければなりません。ここで fc はそのパスのカットオフ周波数係数を表します。カットオフ周波数の詳細については、カットオフ周波数係数を参照してください。

データ型: double

すべてのチャネル パスのドップラー スペクトルの形状。関数 doppler から返される単一のドップラー スペクトル構造体またはそのような構造の 1 行 NP 列のセル配列として指定します。このプロパティの既定値は Jakes ドップラー スペクトル (doppler('Jakes')) です。

  • doppler に単一の呼び出しを割り当てると、すべてのパスは同じ指定されたドップラー スペクトルをもちます。

  • 1 行 NP 列のセル配列の呼び出しを、任意の指定された構文を使用して doppler に割り当てると、各パスは、配列の対応するドップラー スペクトル構造体により指定されるドップラー スペクトルをもちます。この場合、NP は、PathDelays プロパティの値と等しくなります。

ドップラー スペクトルを指定するのに必要な最大ドップラー シフトの値は、MaximumDopplerShift によって与えられます。

依存関係

このプロパティは、MaximumDopplerShift がゼロより大きい場合に適用されます。

FadingTechnique プロパティを 'Sum of sinusoids' に代入する場合、DopplerSpectrumdoppler('Jakes') に設定しなければなりません。

空間相関の仕様。'Separate Tx Rx''None'、または 'Combined' として指定します。

  • 送信アンテナの数 (NT) と受信アンテナの数 (NR) が導出される送受信空間相関行列を個別に指定する場合、'Spatial Tx Rx' を選択します。

  • 送信アンテナ数および受信アンテナ数を指定するには、'None' を選択します。

  • チャネル全体に単一の相関行列を指定するには、'Combined' を選択します。ここから、NT と NR が得られます。

データ型: char

送信アンテナの数。正の整数として指定します。

依存関係

このプロパティは、SpatialCorrelationSpecification'None' または 'Combined' である場合に適用されます。

データ型: double

受信アンテナの数。正の整数として指定します。

依存関係

このプロパティは、SpatialCorrelationSpecification'None' または 'Combined' である場合に適用されます。

データ型: double

送信機の空間相関を、NT 行 NT 列の行列または NT x NT x NP の配列として指定します。NT は、送信アンテナの数です。また、NPPathDelays プロパティの値に等しくなります。

  • PathDelays がスカラーの場合は、チャネルが周波数フラットであり、TransmitCorrelationMatrix は NT 行 NT 列のエルミート行列です。非対角要素の振幅は、対応する対角要素の幾何平均よりも小さくなければなりません。

  • PathDelays がベクトルの場合は、チャネルに周波数選択性があり、TransmitCorrelationMatrix を行列として指定できます。各パスは同じ送信空間相関行列をもちます。

  • また、TransmitCorrelationMatrix は NT x NT x NP の配列として指定できます。ここで、各パスはそれぞれ異なる送信空間相関行列をもちます。

依存関係

このプロパティは、SpatialCorrelationSpecification プロパティを 'Separate Tx Rx' に設定した場合に適用されます。

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

受信機の空間相関を、NR 行 NR 列の行列または NR x NR x NP の配列として指定します。NR は、受信アンテナの数です。また、NPPathDelays プロパティの値に等しくなります。

  • PathDelays がスカラーの場合は、チャネルが周波数フラットであり、ReceiveCorrelationMatrix は NR 行 NR 列のエルミート行列です。非対角要素の振幅は、対応する対角要素の幾何平均よりも小さくなければなりません。

  • PathDelays がベクトルの場合は、チャネルに周波数選択性があり、ReceiveCorrelationMatrix を行列として指定できます。各パスは同じ受信空間相関行列をもちます。

  • また、ReceiveCorrelationMatrix は NR x NR x NP の配列として指定できます。ここで、各パスはそれぞれ異なる受信空間相関行列をもちます。

依存関係

このプロパティは、SpatialCorrelationSpecification プロパティを 'Separate Tx Rx' に設定した場合に適用されます。

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

組み合わせた空間相関行列を NTR 行 NTR 列の行列または NTR x NTR x NP の配列として指定します。ここで、NTR = (NT x NR) です。また、NP は、PathDelays プロパティの値に等しくなります。

  • PathDelays がスカラーの場合は、チャネルが周波数フラットであり、SpatialCorrelationMatrix は NTR 行 NTR 列のエルミート行列です。非対角要素の振幅は、対応する対角要素の幾何平均よりも小さくなければなりません。

  • PathDelays がベクトルの場合は、チャネルに周波数選択性があり、SpatialCorrelationMatrix を行列として指定できます。各パスは同じ空間相関行列をもちます。

  • また、SpatialCorrelationMatrix は NTR x NTR x NP の配列として指定できます。ここで、各パスはそれぞれ異なる組み合わせた空間相関行列をもちます。

依存関係

このプロパティは、SpatialCorrelationSpecification プロパティを 'Combined' に設定した場合に適用されます。

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

アンテナ選択スキーム。'Off''Tx''Rx'、または 'Tx and Rx' のいずれかに指定します。

Tx は送信アンテナを表し、Rx は受信アンテナを表します。既定の設定以外のアンテナ選択構成にする場合は、どのアンテナが信号伝送用として選択されたかを 1 つまたは複数の入力パラメーターで指定する必要があります。詳細については、アンテナの選択を参照してください。

データ型: char

チャネル出力の正規化。true または false で指定します。

  • このプロパティを true に設定すると、受信アンテナの数によってチャネル出力が正規化されます。

  • このプロパティを false に設定すると、チャネル出力の正規化は行われません。

データ型: logical

チャネルのモデル化のフェージング手法。'Filtered Gaussian noise' または 'Sum of sinusoids' として指定します。

データ型: char

フェージング処理のモデル化に使用される正弦波の数。正の整数で指定します。

依存関係

このプロパティは、FadingTechnique'Sum of sinusoids' である場合に適用されます。

データ型: double

フェージング処理の開始時間を制御するソース。'Property' または 'Input port' として指定します。

  • 'Property' -- InitialTime プロパティを使用して初期時間オフセットを設定します。

  • 'Input port' -- オブジェクトに対する initialtime の入力を使用してフェージング処理の開始時間を指定します。入力値は、オブジェクトに対する連続呼び出しで変更できます。

依存関係

このプロパティは、FadingTechnique'Sum of sinusoids' である場合に適用されます。

フェージング モデルの初期時間オフセット (秒)。非負のスカラーで指定します。

InitialTime が 1/SampleRate の倍数でない場合、最も近い整数方向のサンプル位置に切り上げられます。

依存関係

このプロパティは、FadingTechnique プロパティが 'Sum of sinusoids' に設定され、InitialTimeSource プロパティが 'Property' に設定されている場合に適用されます。

データ型: double

乱数ストリームのソース。'Global stream' または 'mt19937ar with seed' として指定します。

  • 'Global stream' -- 正規分布の乱数発生に現在のグローバル乱数ストリームが使用されます。この場合は、オブジェクト関数 reset でフィルターがリセットされるだけです。

  • 'mt19937ar with seed' -- 正規分布の乱数発生に mt19937ar アルゴリズムが使用されます。この場合、オブジェクト関数 reset はフィルターをリセットし、乱数ストリームを Seed プロパティの値に再初期化します。

データ型: char

mt19937ar 乱数ストリームの初期シード。非負の整数で指定します。オブジェクト関数 reset を呼び出すたびに、mt19937ar 乱数ストリームが Seed の値に再初期化されます。

依存関係

このプロパティは、RandomStream プロパティを 'mt19937ar with seed' に設定した場合に適用されます。

データ型: double

パス ゲインを出力するためのオプション。false または true として指定します。このプロパティを true に設定すると、潜在的なフェージング処理のチャネル パス ゲインが出力されます。

データ型: logical

チャネル可視化設定。'Off''Impulse response''Frequency response''Impulse and frequency responses'、または 'Doppler spectrum' として指定します。可視化がオンの場合、インパルス応答やドップラー スペクトルなどの選択したチャネルの特性が別のウィンドウに表示されます。詳細はチャネルの可視化を参照してください。

依存関係

可視化は、FadingTechnique プロパティが 'Filtered Gaussian noise' に設定されている場合のみ適用されます。

表示する送受信アンテナ ペア。1 行 2 列の行ベクトルとして指定します。ここで、最初の要素は目的とする送信アンテナ、2 番目の要素は目的とする受信アンテナに対応します。現時点では、単一のペアのみを表示できます。

依存関係

このプロパティは、VisualizationOff でない場合に適用されます。

表示されるドップラー スペクトルのパス。正の整数 1 から NP として指定します。ここで、NP は、PathDelays プロパティの値に等しくなります。

依存関係

このプロパティは、Visualization'Doppler spectrum' に設定されている場合に適用されます。

表示するサンプルの割合。10%25%50%、または 100% として指定します。パーセンテージを大きくすると表示の精度が向上しますが、シミュレーションの速度が低下します。

依存関係

このプロパティは、Visualization'Impulse response''Frequency response'、または 'Impulse and frequency responses' である場合に適用されます。

使用法

説明

outsignal = mimochan(insignal) は、mimochan によって指定された MIMO フェージング チャネルを通る入力信号をフィルター処理し、outsignal に結果を返します。

outsignal = mimochan(insignal,seltx) は、チャネル処理のために seltx によって選択された送信アンテナを有効にします。

この構文は、オブジェクトの AntennaSelection プロパティを 'Tx' に設定した場合に適用されます。

たとえば、以下のように、最初の送信アンテナと 3 番目の送信アンテナ インデックスをアクティブなものとして選択します。

mimochan = comm.MIMOChannel('AntennaSelection','Tx');
seltx = [1 0 1];
...
outsignal = mimochan(insignal,seltx);

outsignal = mimochan(insignal,selrx) は、チャネル処理のために selrx によって選択された受信アンテナを有効にします。

この構文は、オブジェクトの AntennaSelection プロパティを 'Rx' に設定した場合に適用されます。

たとえば、以下のように、2 番目の受信アンテナ インデックスをアクティブなものとして選択します。

mimochan = comm.MIMOChannel('AntennaSelection','Rx');
selrx = [0 1];
...
outsignal = mimochan(insignal,selrx);

outsignal = mimochan(insignal,seltx,selrx) は、送受信アンテナを有効にします。これは、チャネル処理のために seltx および selrx によって選択されたものです。

この構文は、オブジェクトの AntennaSelection プロパティを 'Tx and Rx' に設定した場合に適用されます。

次に例を示します。

mimochan = comm.MIMOChannel('AntennaSelection','Tx and Rx');
seltx = [1 1];
selrx = [0 1];
...
outsignal = mimochan(insignal,selrx);

outsignal = mimochan(___,initialtime) は、フェージング処理の開始時間を指定します。

この構文は、オブジェクトの FadingTechnique プロパティを 'Sum of sinusoids' に設定し、オブジェクトの InitialTimeSource プロパティを 'Input port' に設定した場合に適用されます。この構文は、前述の構文からの入力オプションをサポートします。

また、[outsignal,pathgains] = mimochan(___) は、アンテナ選択スキームの MIMO チャネル パス ゲインを返します。この構文は、前述の構文からの入力オプションをサポートします。

入力引数

すべて展開する

入力信号。スカラー、NS 要素の列ベクトル、NS 行 NT 列の行列、または NS 行 NST 列の行列として指定します。

  • NS は、サンプル数です。

  • NT は、送信アンテナの数です。NT は、オブジェクトの TransmitCorrelationMatrix または NumTransmitAntennas プロパティの値によって決定されます。

  • NST は、seltx の入力に提供されるベクトルにおいて、1 に設定された要素の数により決定される、選択された送信アンテナの数です。

送信アンテナの数は、オブジェクトの TransmitCorrelationMatrix または NumTransmitAntennas プロパティの値によって決定されます。

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

アクティブな送信アンテナを選択します。1 行 NT 列のバイナリ ベクトルとして指定します。NT は、送信アンテナの数を表します。1 に設定された要素は選択されたアンテナのインデックスを識別し、0 に設定された要素は選択されていないアンテナのインデックスを識別します。

データ型: double

アクティブな受信アンテナを選択します。1 行 NR 列のバイナリ ベクトルとして指定します。NR は、受信アンテナの数を表します。1 に設定された要素は選択されたアンテナのインデックスを識別し、0 に設定された要素は選択されていないアンテナのインデックスを識別します。

データ型: double

フェージング モデルの初期時間オフセット (秒)。非負のスカラーで指定します。

初期時間オフセットは、最後のフレーム終了時間よりも大きくなければなりません。initialtime が 1/SampleRate の倍数でない場合、最も近い整数方向のサンプル位置に切り上げられます。

データ型: double

出力引数

すべて展開する

出力データ信号。NS 行 NR 列または NS 行 NSR 列の行列として返されます。

  • NS は、サンプル数です。

  • NR は、受信アンテナの数です。NR は、オブジェクトの ReceiveCorrelationMatrix または NumReceiveAntennas プロパティの値によって決定されます。

  • NSR は、selrx の入力に提供されるベクトルにおいて、1 に設定された要素の数により決定される、選択された受信アンテナの数です。

出力パスのゲイン。選択されていない送信/受信アンテナ ペアに NaN の値をもつ NS x NP x NT x NR の配列として返されます。

  • NS は、サンプル数です。

  • NP は、PathDelays プロパティの値と等しくなります。

  • NT は、送信アンテナの数です。

  • NR は、受信アンテナの数です。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

infoフェージング チャネル オブジェクトの特性情報
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

メモ

  • オブジェクトの RandomStream プロパティを 'Global stream' に設定した場合、オブジェクト関数 reset ではフィルターのみがリセットされます。

  • RandomStream'mt19937ar with seed' に設定した場合、オブジェクト関数 reset はフィルターをリセットし、乱数ストリームを Seed プロパティの値に再初期化します。

すべて折りたたむ

MIMO チャネル System object を使用して、4x2 MIMO チャネルを作成します。データを変調して空間的に符号化し、そのデータをチャネルを介して渡します。

QPSK 変調データを生成します。

data = randi([0 3],1000,1);
modData = pskmod(data,4,pi/4);

直交空間時間ブロック符号化器を作成して、変調データを空間的に分離された 4 つのストリームに符号化します。データを符号化します。

ostbc = comm.OSTBCEncoder('NumTransmitAntennas',4,'SymbolRate',1/2);
txSig = ostbc(modData);

MIMO チャネル オブジェクトを作成して、名前と値のペアを使用してプロパティを設定します。チャネルは 2 つのパスで構成され、最大ドップラー シフトは 5 Hz です。SpatialCorrelationSpecification プロパティを 'None' に設定します。これによって、送受信アンテナの数を指定する必要が生じます。送信アンテナの数を 4、受信アンテナの数を 2 に設定します。

mimochannel = comm.MIMOChannel('SampleRate',1000, ...
    'PathDelays',[0 2e-3],'AveragePathGains',[0 -5], ...
    'MaximumDopplerShift',5,'SpatialCorrelationSpecification','None', ...
    'NumTransmitAntennas',4,'NumReceiveAntennas',2);

変調して符号化したデータを、MIMO チャネルを介して渡します。

rxSig = mimochannel(txSig);

時間ベクトル t を作成し、受信信号の強度をプロットします。

ts = 1/mimochannel.SampleRate;
t = (0:ts:(size(txSig,1)-1)*ts)';

アンテナ 1 で受信した信号の強度を計算してプロットします。

pwrdB = 20*log10(abs(rxSig(:,1)));
plot(t,pwrdB)
xlabel('Time (s)')
ylabel('Power (dBW)')

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

アンテナ選択を指定しない場合に、2x2 レイリー フェージング チャネルを通る PSK 変調データをフィルター処理し、チャネルに実現される空間相関特性を調べます。オブジェクト関数 release を使用してオブジェクトをアンロックし、AntennaSelection プロパティを 'Tx and Rx' に設定します。その後、選択されていない送信/受信アンテナ ペアを確認します。

アンテナ選択を指定しない場合の空間相関特性の検証

PSK 変調器 System object™ を作成して、ランダムに生成されたデータを変調します。

pskModulator = comm.PSKModulator;
modData = pskModulator(randi([0 pskModulator.ModulationOrder-1],1e5,1));

変調データを 2 つの空間ストリームに分割します。

channelInput = reshape(modData,[2 5e4]).';

2 つの離散パスをもつ 2x2 MIMO チャネル System object を作成します。各パスは、TransmitCorrelationMatrix プロパティと ReceiveCorrelationMatrix プロパティで指定される、異なる送信相関行列と受信相関行列をもちます。

mimoChan = comm.MIMOChannel('SampleRate',1000, 'PathDelays',[0 1e-3], ...
    'AveragePathGains',[3 5], 'NormalizePathGains',false, 'MaximumDopplerShift',5, ...
    'TransmitCorrelationMatrix',cat(3,eye(2),[1 0.1;0.1 1]), ...
    'ReceiveCorrelationMatrix',cat(3,[1 0.2;0.2 1],eye(2)), ...
    'RandomStream','mt19937ar with seed', 'Seed',33, 'PathGainsOutputPort',true);

MIMO チャネル オブジェクトを使用して、変調データをフィルター処理します。

[~,pathGains] = mimoChan(channelInput);

最初の離散パスの最初の受信アンテナにおける送信空間相関は、TransmitCorrelationMatrix プロパティで単位行列として指定されます。関数 corrcoef を使用して、チャネル出力 pathGains が同じ統計的特性を示していることを確認します。

disp('Tx spatial correlation, first path, first Rx:');
Tx spatial correlation, first path, first Rx:
disp(corrcoef(squeeze(pathGains(:,1,:,1))));
   1.0000 + 0.0000i   0.0357 - 0.0253i
   0.0357 + 0.0253i   1.0000 + 0.0000i

2 番目の離散パスの 2 番目の受信アンテナにおける送信空間相関は、TransmitCorrelationMatrix プロパティで [1 0.1;0.1 1] として指定されます。チャネル出力 pathGains が同じ統計的特性を示していることを確認します。

disp('Tx spatial correlation, second path, second Rx:');
Tx spatial correlation, second path, second Rx:
disp(corrcoef(squeeze(pathGains(:,2,:,2))));
   1.0000 + 0.0000i   0.0863 + 0.0009i
   0.0863 - 0.0009i   1.0000 + 0.0000i

最初の離散パスの 2 番目の送信アンテナにおける受信空間相関は、ReceiveCorrelationMatrix プロパティで [1 0.2;0.2 1] として指定されます。チャネル出力 pathGains が同じ統計的特性を示していることを確認します。

disp('Rx spatial correlation, first path, second Tx:');
Rx spatial correlation, first path, second Tx:
disp(corrcoef(squeeze(pathGains(:,1,2,:))));
   1.0000 + 0.0000i   0.2236 + 0.0550i
   0.2236 - 0.0550i   1.0000 + 0.0000i

2 番目の離散パスの最初の送信アンテナにおける受信空間相関は、ReceiveCorrelationMatrix プロパティで単位行列として指定されます。チャネル出力 pathGains が同じ統計的特性を示していることを確認します。

disp('Rx spatial correlation, second path, first Tx:');
Rx spatial correlation, second path, first Tx:
disp(corrcoef(squeeze(pathGains(:,2,1,:))));
   1.0000 + 0.0000i  -0.0088 - 0.0489i
  -0.0088 + 0.0489i   1.0000 + 0.0000i

アンテナ選択を指定する場合の空間相関特性の検証

mimoChan オブジェクトの送信アンテナと受信アンテナを選択できるようにします。入力フレーム サイズを 100 に減らします。

release(mimoChan);
mimoChan.AntennaSelection = 'Tx and Rx';
modData = pskModulator(randi([0 pskModulator.ModulationOrder-1],100,1));

最初の送信アンテナと 2 番目の受信アンテナを選択します。

[channelOutput,pathGains] = mimoChan(modData,[1 0],[0 1]);

MATLAB® から返されたパス ゲインで、選択していない送信/受信アンテナ ペアの値が NaN の値になっていることを確認します。

disp('Return 1 if the path gains for the second transmit antenna are NaN:');
Return 1 if the path gains for the second transmit antenna are NaN:
disp(isequal(isnan(squeeze(pathGains(:,:,2,:))), ones(100,2,2)));
   1
disp('Return 1 if the path gains for the first receive antenna are NaN:');
Return 1 if the path gains for the first receive antenna are NaN:
disp(isequal(isnan(squeeze(pathGains(:,:,:,1))), ones(100,2,2)));
   1

周波数選択性 MIMO チャネルを作成して、インパルス応答および周波数応答を表示します。

拡張車両 A (EVA) チャネル パラメーターを使用して、サンプルレートを 10 MHz に設定してパスの遅延とゲインを指定します。最大ドップラー シフトを 70 Hz に設定します。

fs = 10e6;                                                  % Hz
pathDelays = [0 30 150 310 370 710 1090 1730 2510]*1e-9;    % sec
avgPathGains = [0 -1.5 -1.4 -3.6 -0.6 -9.1 -7 -12 -16.9];   % dB
fD = 70;                                                    % Hz

前に定義したパラメーターで 2x2 MIMO チャネル System object を作成し、名前と値のペアを使用して Visualization プロパティを Impulse and frequency responses に設定します。既定では、送信アンテナ 1 と受信アンテナ 1 に対応するアンテナ ペアが表示されます。

mimoChan = comm.MIMOChannel('SampleRate',fs, ...
    'PathDelays',pathDelays, ...
    'AveragePathGains',avgPathGains, ...
    'MaximumDopplerShift',fD, ...
    'Visualization','Impulse and frequency responses');

ランダムなバイナリ データを生成し、MIMO チャネルを介して渡します。インパルス応答プロットにより、個々のパスとそれに対応するフィルター係数を簡単に特定できます。EVA チャネルの周波数選択性が周波数応答プロットによって示されています。

x = randi([0 1],1000,2);
y = mimoChan(x);

mimoChan を解放し、AntennaPairsToDisplay プロパティを [2 1] に設定して、送信アンテナ 2 と受信アンテナ 1 に対応するアンテナ ペアを表示します。プロパティは調整不可能であるため、オブジェクトを解放する必要があります。

release(mimoChan)
mimoChan.AntennaPairsToDisplay = [2 1];
y = mimoChan(x);

2 つのパスをもつ MIMO チャネルのドップラー スペクトルを作成して可視化します。

チャネルの作成に使用する、ドップラー構造体のセル配列を作成します。最初のパスのドップラー スペクトルはベル型に設定されているのに対し、2 番目のパスはフラットです。

dp{1} = doppler('Bell');
dp{2} = doppler('Flat');

名前と値のペアを使用して、2 つのパスをもち最大ドップラー シフトが 100 Hz の、既定の 2x2 MIMO チャネルを作成します。Visualization プロパティを Doppler spectrum に設定し、PathsForDopplerDisplay を 1 に設定します。1 番目のパスのドップラー スペクトルが表示されます。

mimoChan = comm.MIMOChannel('SampleRate',1000, ...
    'PathDelays',[0 0.002], ...
    'AveragePathGains',[0 -3], ...
    'MaximumDopplerShift',100, ...
    'DopplerSpectrum',dp, ...
    'Visualization','Doppler spectrum', ...
    'PathsForDopplerDisplay',1);

MIMO チャネルを介してランダム データを渡し、最初のパスのドップラー スペクトルを生成します。ドップラー スペクトルのプロットが更新されるのは、バッファーが満たされた場合のみなので、推定の精度を改善するため、関数 mimoChan が複数回呼び出されます。スペクトルがベル型で、最低周波数と最高周波数が MaximumDopplerShift で指定した制限の範囲内にあることを確認します。

for k = 1:25
    x = randi([0 1],10000,2);
    y = mimoChan(x);
end

mimoChan を解放し、PathsForDopplerDisplay プロパティを 2 に設定します。プロパティは調整不可能であるため、オブジェクトを解放する必要があります。関数を複数回呼び出して、2 番目のパスのドップラー スペクトルを表示します。スペクトルがフラットであることを確認します。

release(mimoChan)
mimoChan.PathsForDopplerDisplay = 2;
for k = 1:25
    x = randi([0 1],10000,2);
    y = mimoChan(x);
end

正弦波の和の手法を使用して MIMO チャネル オブジェクトを作成し、それを介してデータを渡します。この例では、データが不連続に送信される場合にチャネルの状態がどのように維持されるかを示します。

全体的なシミュレーション時間とデータが送信される 3 つの時間セグメントを定義します。この場合、チャネルはサンプリング レート 1000 Hz で 1 秒間シミュレートされます。時刻 0 で、1000 サンプルの連続したデータ シーケンスが 1 つ送信されます。時刻 0.1 秒、0.4 秒および 0.7 秒で、100 サンプルのデータ パケットが 3 つ送信されます。

t0 = 0:0.001:0.999;   % Transmission 0
t1 = 0.1:0.001:0.199; % Transmission 1
t2 = 0.4:0.001:0.499; % Transmission 2
t3 = 0.7:0.001:0.799; % Transmission 3

前に定義した時間間隔に対応する、ランダムなバイナリ データを生成します。

d0 = randi([0 1],1000,2);  % 1000 samples
d1 = randi([0 1],100,2);   % 100 samples
d2 = randi([0 1],100,2);   % 100 samples
d3 = randi([0 1],100,2);   % 100 samples

フラットなフェージング 2x2 MIMO チャネル System object を Sum of sinusoids フェージング手法を使用して作成します。結果を反復できるように、名前と値のペアを使用してシードを指定します。InitialTime プロパティが指定されていないため、フェージング チャネルは時刻 0 からシミュレートされます。パス ゲイン出力端子を有効にします。

mimoChan1 = comm.MIMOChannel('SampleRate',1000, ...
    'MaximumDopplerShift',5, ...
    'RandomStream','mt19937ar with seed', ...
    'Seed',17, ...
    'FadingTechnique','Sum of sinusoids', ...
    'PathGainsOutputPort',true);

MIMO チャネル System object のクローンを作成します。フェージング チャネル オフセット時間を関数 mimoChan への入力引数として指定できるように、InitialTimeSource プロパティを Input port に設定します。

mimoChan2 = clone(mimoChan1);
mimoChan2.InitialTimeSource = 'Input port';

ランダムなバイナリ データを最初のチャネル オブジェクト mimoChan1 を介して渡します。データは 1000 時間サンプルすべてにわたって送信されます。この例では、複素数のパス ゲインのみが必要です。

[~,pg0] = mimoChan1(d0);

ランダム データを 2 番目のチャネル オブジェクト mimoChan2 を介して渡します。ここで、初期時間オフセットは入力引数として指定されます。

[~,pg1] = mimoChan2(d1,0.1);
[~,pg2] = mimoChan2(d2,0.4);
[~,pg3] = mimoChan2(d3,0.7);

info メソッドを使用して、2 つのチャネルによって処理されたサンプル数を比較します。mimoChan1 では 1000 サンプルが処理されたのに対し、mimoChan2 では 300 サンプルしか処理されていないことがわかります。

G = info(mimoChan1);
H = info(mimoChan2);
[G.NumSamplesProcessed H.NumSamplesProcessed]
ans = 1×2

        1000         300

最初の送信アンテナと最初の受信アンテナに対応するパスについて、パス ゲインをデシベルに変換します。

pathGain0 = 20*log10(abs(pg0(:,1,1,1)));
pathGain1 = 20*log10(abs(pg1(:,1,1,1)));
pathGain2 = 20*log10(abs(pg2(:,1,1,1)));
pathGain3 = 20*log10(abs(pg3(:,1,1,1)));

連続的な場合と非連続的な場合のパス ゲインをプロットします。3 つのセグメントのゲインが、連続的な場合のゲインに完全に一致することを確認します。2 つの一致は、正弦波の和の手法は、データが送信されていない場合でもチャネル特性が保たれるため、パケット化されたデータのシミュレーションに最適であることを強調しています。

plot(t0,pathGain0,'r--')
hold on
plot(t1,pathGain1,'b')
plot(t2,pathGain2,'b')
plot(t3,pathGain3,'b')
grid
xlabel('Time (sec)')
ylabel('Path Gain (dB)')
legend('Continuous','Discontinuous','location','nw')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Continuous, Discontinuous.

バースト データのあるチャネルのシミュレーション時における、正弦波の和のフェージング手法の効果を示します。

サンプリング レートが 100 kHz、全シミュレーション時間が 100 秒、バースト データのデューティ比が 25% になるように、シミュレーション パラメーターを設定します。

fs = 1e5;            % Hz
tsim = 100;          % seconds
dutyCycle = 0.25;

フラット フェージング 2x2 MIMO チャネル オブジェクトを、既定の Filtered Gaussian noise 手法を使用して作成します。

fgn = comm.MIMOChannel('SampleRate',fs);

同様の MIMO チャネル オブジェクトを Sum of sinusoids 手法を使用して作成します。ここで、フェージング処理の開始時間は入力引数として与えられます。

sos = comm.MIMOChannel('SampleRate',fs, ...
    'FadingTechnique','Sum of sinusoids', ...
    'NumSinusoids',48, ...
    'InitialTimeSource','Input port');

フィルター処理されたガウス ノイズ MIMO チャネル オブジェクトを介して、ランダム ビットの連続シーケンスを実行します。ストップウォッチ タイマー関数 tic および toc を使用して、関数呼び出しの実行時間を測定します。

tic
y = fgn(randi([0 1],fs*tsim,2));
tFGN = toc;

データ バーストを毎秒送信するため、for ループの内部で関数 sos を呼び出すことにより、正弦波の和 MIMO チャネル オブジェクトを介してランダム ビットを渡します。tic および toc ストップウォッチ タイマーを使用して実行時間を測定します。

tic
for k = 1:tsim
    z = sos(randi([0 1],fs*dutyCycle,2),0.5+(k-1));
end
tSOS = toc;

フィルター処理されたガウス ノイズの実行時間に対する正弦波の和の実行時間の比を比較します。比は 1 より小さく、正弦波の和の手法の方が高速であることを示しています。

tSOS/tFGN
ans = 0.2961

アルゴリズム

すべて展開する

リンクごとのフェージング処理はマルチパス フェージング チャネルのシミュレーションの方法論に従い、すべての MIMO チャネルのリンクについて同じパラメーター (NT × NR) を想定しています。各リンクには、そのリンクに対するすべてのマルチパスが含まれます。

参照

[1] Oestges, C., and B. Clerckx. MIMO Wireless Communications: From Real-World Propagation to Space-Time Code Design, Academic Press, 2007.

[2] Correira, L. M. Mobile Broadband Multimedia Networks: Techniques, Models and Tools for 4G, Academic Press, 2006.

[3] Kermoal, J. P., L. Schumacher, K. I. Pedersen, P. E. Mogensen, and F. Frederiksen. "A stochastic MIMO radio channel model with experimental validation." IEEE Journal on Selected Areas of Communications. Vol. 20, Number 6, 2002, pp. 1211–1226.

[4] Jeruchim, M., P. Balaban, and K. S. Shanmugan. Simulation of Communication Systems, Second Edition, New York: Kluwer Academic/Plenum, 2000.

[5] Pätzold, Matthias, Cheng-Xiang Wang, and Bjorn Olav Hogstand. "Two New Sum-of-Sinusoids-Based Methods for the Efficient Generation of Multiple Uncorrelated Rayleigh Fading Waveforms." IEEE Transactions on Wireless Communications. Vol. 8, Number 6, 2009, pp. 3122–3131.

拡張機能

R2012a で導入