Main Content

comm.MIMOChannel

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

説明

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

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

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

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

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

作成

説明

mimochannel = comm.MIMOChannel は、MIMO 周波数選択性/周波数フラット フェージング チャネル System object を作成します。

mimochannel = comm.MIMOChannel(Name,Value) は、名前と値からなる 1 つ以上の引数を使用してプロパティを設定します。たとえば、'SampleRate',2 は入力信号のサンプル レートを 2 に設定します。

プロパティ

すべて展開する

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

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

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

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

データ型: double

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

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

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

PathDelays プロパティおよび AveragePathGains プロパティの長さは同じでなければなりません。

データ型: double

パスの平均ゲイン (dB)。スカラーまたは行ベクトルとして指定します。AveragePathGains プロパティおよび PathDelays プロパティの長さは同じでなければなりません。

データ型: double

パス ゲインの正規化。次のいずれかの logical 値として指定します。

  • 1 (true) — フェージング処理が正規化され、長時間で平均したパス ゲインの強度の総和は 0 dB になります。

  • 0 (false) — パス ゲインの強度の総和は正規化されません。

AveragePathGains プロパティは、パス ゲインの平均強度を指定します。

データ型: logical

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

データ型: char | string

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

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

  • KFactor をベクトルに設定した場合、KFactor ベクトルの正の要素に対応する離散パスは、この要素によってライス K ファクターが指定されるライス フェージング処理です。KFactor ベクトルのゼロ値の要素に対応する離散パスはレイリー フェージング処理です。少なくとも 1 つの要素は非ゼロでなければなりません。

依存関係

このプロパティを有効にするには、FadingDistribution プロパティを 'Rician' に設定します。

データ型: double

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

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

  • DirectPathDopplerShift を行ベクトルに設定した場合、KFactor ベクトルの正の要素に対応する離散パスがライス フェージング処理となります。DirectPathDopplerShift の対応する要素が、その離散パスのドップラー シフトの見通し内成分を指定します。

依存関係

このプロパティを有効にするには、FadingDistribution プロパティを 'Rician' に設定します。

データ型: double

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

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

  • DirectPathInitialPhase を行ベクトルに設定した場合、KFactor ベクトルの正の要素に対応する離散パスがライス フェージング処理となります。DirectPathInitialPhase の対応する要素が、その離散パスの初期位相の見通し内成分を指定します。

依存関係

このプロパティを有効にするには、FadingDistribution プロパティを 'Rician' に設定します。

データ型: double

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

最大ドップラー シフトの制限は各チャネル パスに適用されます。このプロパティを 0 に設定すると、チャネルは入力全体に対して静的になります。新しいチャネルは、オブジェクト関数 reset を使用して生成できます。MaximumDopplerShift プロパティの値は各パスについて SampleRate/10/fc より小さくなければなりません。ここで、fc はそのパスのカットオフ周波数係数です。ほとんどのドップラー スペクトル タイプでは、fc の値は 1 です。ガウスおよび二重ガウス ドップラー スペクトル タイプでは、fc はドップラー スペクトル構造体フィールドによって異なります。fc の定義方法の詳細については、カットオフ周波数係数の節を参照してください。

データ型: double

すべてのチャネル パスのドップラー スペクトルの形状。ドップラー スペクトル構造体またはドップラー スペクトル構造体の 1 行 NP 列の cell 配列として指定します。これらのドップラー スペクトル構造体は、関数 doppler から返される形式の出力でなければなりません。NP は、PathDelays プロパティにより指定される離散パス遅延の数です。MaximumDopplerShift プロパティは、ドップラー スペクトルを指定する際に、DopplerSpectrum プロパティで許容される最大ドップラー シフトの値を定義します。

  • DopplerSpectrum を単一のドップラー スペクトル構造体に設定すると、すべてのパスは、指定された同じドップラー スペクトルを持ちます。

  • DopplerSpectrum をドップラー スペクトル構造体の cell 配列に設定すると、それぞれのパスは、cell 配列内の対応する構造体で指定されるドップラー スペクトルを持ちます。

スペクトル タイプのオプションは、関数 doppler への specType 入力を使用して指定されます。FadingTechnique プロパティを 'Sum of sinusoids' に設定する場合、DopplerSpectrumdoppler('Jakes') に設定しなければなりません。

依存関係

このプロパティを有効にするには、MaximumDopplerShift プロパティを正のスカラーに設定します。

データ型: struct | cell

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

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

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

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

データ型: char | string

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

依存関係

このプロパティを有効にするには、SpatialCorrelationSpecification プロパティを 'None' または 'Combined' に設定します。

データ型: double

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

依存関係

このプロパティを有効にするには、SpatialCorrelationSpecification プロパティを 'None' または 'Combined' に設定します。

データ型: double

送信機の空間相関。NT 行 NT 列の行列または NT x NT x NP の配列として指定します。NT は、送信アンテナの数です。NP は、PathDelays プロパティにより指定される離散パス遅延の数です。

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

  • PathDelays をベクトルに設定する場合、チャネルに周波数選択性があり、TransmitCorrelationMatrix を次のいずれかのオプションとして指定できます。

    • NT 行 NT 列の行列。この場合、各パスは同じ送信空間相関行列をもちます。

    • NT x NT x NP の配列。この場合、各パスは指定された独自の送信空間相関行列をもちます。

依存関係

このプロパティを有効にするには、SpatialCorrelationSpecification プロパティを 'Separate Tx Rx' に設定します。

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

受信機の空間相関。NR 行 NR 列の行列または NR x NR x NP の配列として指定します。NR は、受信アンテナの数です。NP は、PathDelays プロパティにより指定される離散パス遅延の数です。

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

  • PathDelays をベクトルに設定する場合、チャネルに周波数選択性があり、ReceiveCorrelationMatrix を次のいずれかのオプションとして指定できます。

    • NR 行 NR 列の行列。この場合、各パスは同じ受信空間相関行列をもちます。

    • NR x NR x NP の配列。この場合、各パスは指定された独自の受信空間相関行列をもちます。

依存関係

このプロパティを有効にするには、SpatialCorrelationSpecification プロパティを 'Separate Tx Rx' に設定します。

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

組み合わせた空間相関行列。NTR 行 NTR 列の行列または NTR x NTR x NP の配列として指定します。NTR = (NT ✕ NR) であり、NP は離散遅延パスの数、つまり PathDelays プロパティの長さです。

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

  • PathDelays をベクトルに設定する場合、チャネルに周波数選択性があり、SpatialCorrelationMatrix を次のいずれかのオプションとして指定できます。

    • NTR 行 NTR 列の行列。この場合、各パスは同じ組み合わせた空間相関行列をもちます。

    • NTR x NTR x NP の配列。この場合、各パスは指定された独自の組み合わせた空間相関行列をもちます。

依存関係

このプロパティを有効にするには、SpatialCorrelationSpecification プロパティを 'Combined' に設定します。

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

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

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

データ型: char | string

チャネル出力の正規化。次のいずれかの logical 値として指定します。

  • 1 (true) — 受信アンテナの数によってチャネル出力が正規化されます。

  • 0 (false) — チャネル出力の正規化は行われません。

データ型: logical

チャネル フィルター処理。次のいずれかの論理値として指定します。

  • 1 (true) — チャネルは入力信号を受け入れ、フィルター処理された出力信号を生成します。

  • 0 (false) — オブジェクトは入力信号を受け入れず、フィルター処理された出力信号を生成しません。チャネル パス ゲインのみを出力します。NumSamples プロパティを使用して、フェージング処理の期間を指定する必要があります。

データ型: logical

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

依存関係

このプロパティを有効にするには、ChannelFiltering プロパティを true に設定します。

データ型: logical

フェージング処理の期間に使用するサンプル数。非負の整数として指定します。

調整可能: Yes

依存関係

このプロパティを有効にするには、ChannelFiltering プロパティを false に設定します。

データ型: double

パス ゲイン出力のデータ型。'double' または 'single' を指定します。

依存関係

このプロパティを有効にするには、ChannelFiltering プロパティを false に設定します。

データ型: char | string

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

データ型: char | string

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

依存関係

このプロパティを有効にするには、FadingTechnique プロパティを 'Sum of sinusoids' に設定します。

データ型: double

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

  • InitialTimeSource'Property' に設定する場合は、InitialTime プロパティを使用して初期時間オフセットを設定します。

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

依存関係

このプロパティを有効にするには、FadingTechnique プロパティを 'Sum of sinusoids' に設定します。

データ型: char | string

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

InitialTime は最後のフレームの終了時間より大きくなければなりません。mod(InitialTime/SampleRate) が非ゼロの場合、オブジェクトは初期時間オフセットを最も近い整数方向のサンプル位置に切り上げます。

依存関係

このプロパティを有効にするには、FadingTechnique プロパティを 'Sum of sinusoids' に、InitialTimeSource プロパティを 'Property' に設定します。

データ型: double

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

  • 'Global stream' を指定すると、オブジェクトは乱数発生に現在のグローバル乱数ストリームを使用します。この場合、オブジェクト関数 reset はフィルターのリセットのみを行います。

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

データ型: char | string

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

依存関係

このプロパティを有効にするには、RandomStream プロパティを 'mt19937ar with seed' に設定します。

データ型: double

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

依存関係

このプロパティを有効にするには、FadingTechnique プロパティを 'Filtered Gaussian noise' に設定します。

データ型: char | string

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

依存関係

このプロパティを有効にするには、Visualization プロパティを 'Impulse response''Frequency response''Doppler spectrum'、または 'Impulse and frequency responses' に設定します。

データ型: double

表示されるドップラー スペクトルのパス。範囲 [1, NP] の整数として指定します。NP は、PathDelays プロパティにより指定される離散パス遅延の数です。このプロパティを使用して、ドップラー スペクトル プロットの構築に使用される離散パスを選択します。

依存関係

このプロパティを有効にするには、Visualization プロパティを 'Doppler spectrum' に設定します。

データ型: double

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

依存関係

このプロパティを有効にするには、Visualization プロパティを 'Impulse response''Frequency response'、または 'Impulse and frequency responses' に設定します。

データ型: char | string

使用法

説明

y = mimochannel(x) は、MIMO フェージング チャネルを通る入力信号 x をフィルター処理し、y に結果を返します。

この構文を有効にするには、ChannelFiltering プロパティを true に設定します。

y = mimochannel(x,seltx) は、seltx によって指定された送信アンテナを使用して、MIMO フェージング チャネルを通る入力信号をフィルター処理します。

この構文を有効にするには、AntennaSelection プロパティを 'Tx' に設定します。

たとえば、次のコードは最初の送信アンテナと 3 番目の送信アンテナ インデックスをアクティブなものとして選択する方法を示しています。

mimochannel = comm.MIMOChannel('AntennaSelection','Tx');
seltx = [1 0 1];
...
y = mimochannel(x,seltx);

y = mimochannel(x,selrx) は、selrx によって選択された受信アンテナを使用して、MIMO フェージング チャネルを通る入力信号をフィルター処理します。

この構文を有効にするには、AntennaSelection プロパティを 'Rx' に設定します。

たとえば、次のコードは 2 番目の受信アンテナ インデックスをアクティブなものとして選択する方法を示しています。

mimochannel = comm.MIMOChannel('AntennaSelection','Rx');
selrx = [0 1];
...
y = mimochannel(x,selrx);

y = mimochannel(x,seltx,selrx) は、seltx および selrx によって選択された送受信アンテナを使用して、MIMO フェージング チャネルを通る入力信号をフィルター処理します。

この構文を有効にするには、AntennaSelection プロパティを 'Tx and Rx' に設定します。

たとえば次のコードは、最初と 2 番目の送信アンテナおよび 2 番目の受信アンテナをアクティブなものとして選択する方法を示しています。

mimochannel = comm.MIMOChannel( ...
    'AntennaSelection','Tx and Rx');
seltx = [1 1];
selrx = [0 1];
...
y = mimochannel(x,selrx);

y = mimochannel(___,inittime) は、前のいずれかの構文における入力引数の組み合わせに加えて、フェージング処理の開始時間を指定します。

この構文を有効にするには、さらに FadingTechnique プロパティを 'Sum of sinusoids' に設定し、InitialTimeSource プロパティを 'Input port' に設定します。

また、[y,pathgains] = mimochannel(___) は、前述の構文における入力引数の任意の組み合わせを使用して、アンテナ選択スキームの MIMO チャネル パス ゲインを返します。

pathgains = mimochannel() は、潜在的なフェージング処理のチャネル パス ゲインを返します。この場合、チャネルは入力信号を必要とせず、パス ゲインのソースとして機能します。

この構文を有効にするには、ChannelFiltering プロパティを false に設定します。

pathgains = mimochannel(seltx) は、seltx によって指定された送信アンテナを使用して、潜在的なフェージング処理のチャネル パス ゲインを返します。

この構文を有効にするには、ChannelFiltering プロパティを false に設定し、AntennaSelection プロパティを 'Tx' に設定します。

pathgains = mimochannel(selrx) は、selrx によって指定された送信アンテナを使用して、潜在的なフェージング処理のチャネル パス ゲインを返します。

この構文を有効にするには、ChannelFiltering プロパティを false に設定し、AntennaSelection プロパティを 'Rx' に設定します。

pathgains = mimochannel(seltx,selrx) は、seltx および selrx によって選択された送受信アンテナを使用して、潜在的なフェージング処理のチャネル パス ゲインを返します。

この構文を有効にするには、ChannelFiltering プロパティを false に設定し、AntennaSelection プロパティを 'Tx and Rx' に設定します。

pathgains = mimochannel(___,inittime) は、前のいずれかの構文における入力引数の組み合わせに加えて、フェージング処理の開始時間を指定します。

この構文を有効にするには、さらに FadingTechnique プロパティを 'Sum of sinusoids' に設定し、InitialTimeSource プロパティを 'Input port' に設定します。

入力引数

すべて展開する

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

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

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

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

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

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

データ型: single | double

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

データ型: single | double

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

mod(inittime/SampleRate) が非ゼロの場合、初期時間オフセットは最も近い整数方向のサンプル位置に切り上げられます。

データ型: single | double

出力引数

すべて展開する

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

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

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

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

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

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

  • NP は、PathDelays プロパティにより指定される離散パス遅延の数です。

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

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

ChannelFiltering プロパティを false に設定すると、この出力のデータ型は、入力信号 x と同じ精度を持ちます。ChannelFiltering プロパティを true に設定すると、この出力のデータ型は OutputDataType プロパティで指定されます。

オブジェクト関数

オブジェクト関数を使用するには、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);

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

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

MIMO チャネル System object を作成して、名前と値のペアを使用してプロパティを設定します。チャネルは 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)
title('Channel Response Power (dBW)')
xlabel('Time (s)')
ylabel('Power (dBW)')

Figure contains an axes object. The axes object with title Channel Response Power (dBW) contains an object of type line.

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

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, ...
    'ChannelFiltering',false);

MIMO チャネル オブジェクトを使用して、チャネル応答のパス ゲインを生成します。

pathGains = mimoChan();

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

corrcoef(squeeze(pathGains(:,1,:,1)))
ans = 2×2 complex

   1.0000 + 0.0000i  -0.3391 + 0.4285i
  -0.3391 - 0.4285i   1.0000 + 0.0000i

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

corrcoef(squeeze(pathGains(:,2,:,2)))
ans = 2×2 complex

   1.0000 + 0.0000i  -0.8989 - 0.2663i
  -0.8989 + 0.2663i   1.0000 + 0.0000i

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

corrcoef(squeeze(pathGains(:,1,2,:)))
ans = 2×2 complex

   1.0000 + 0.0000i   0.9170 + 0.3141i
   0.9170 - 0.3141i   1.0000 + 0.0000i

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

corrcoef(squeeze(pathGains(:,2,1,:)))
ans = 2×2 complex

   1.0000 + 0.0000i   0.9227 - 0.3435i
   0.9227 + 0.3435i   1.0000 + 0.0000i

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

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

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

2x2 MIMO チャネル System object を作成し、前に定義したパラメーターを指定して、インパルス応答および周波数応答をプロットするようにチャネルの可視化を設定します。既定では、最初の送信アンテナと受信アンテナに対応するアンテナ ペアがプロットに表示されます。

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

2 番目の送信アンテナおよび最初の受信アンテナに対応するアンテナ ペアを表示するには、MIMO チャネル System object を解放し、AntennaPairsToDisplay プロパティを [2 1] に設定します。AntennaPairsToDisplay プロパティは調整できないため、値を変更するには System object を解放しなければなりません。

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

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

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

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

2x2 MIMO チャネル System object を作成します。2 つのパスと 100 Hz の最大ドップラー シフトを指定し、チャネル フィルター処理を無効化して、最初のドップラー パスに対するドップラー スペクトルの可視化を有効にします。

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

MIMO チャネルを使用して、最初のパスのドップラー スペクトルを生成します。ドップラー スペクトルのプロットはバッファーが満たされるまで更新されないため、推定の精度を改善するために、MIMO チャネル オブジェクトを複数回呼び出します。スペクトルがベル型で、最低周波数と最高周波数が MaximumDopplerShift プロパティで指定した制限の範囲内にあることを確認します。

for k = 1:25
    mimoChan();
end

MIMO チャネル オブジェクトを解放して、2 番目のパスを表示するように PathsForDopplerDisplay プロパティを設定します。PathsForDopplerDisplay プロパティは調整できないため、値を変更するには System object を解放しなければなりません。オブジェクトを複数回呼び出して、2 番目のパスのドップラー スペクトルを表示します。結果は、スペクトルがフラットであることを示しています。

release(mimoChan)
mimoChan.PathsForDopplerDisplay = 2;
for k = 1:25
    y = mimoChan();
end

正弦波加算フェージング手法を使用するように構成された MIMO チャネル System object を使用して、不連続送信のためにチャネル状態が維持されていることを示します。連続チャネル応答に重なる不連続チャネル応答セグメントを観測します。

チャネルのプロパティを設定します。

fs = 1000;               % Sample rate (Hz)
pathDelays = [0 2.5e-3]; % Path delays (s)
pathPower = [0 -6];      % Path power (dB)
fD = 5;                  % Maximum Doppler shift (Hz)
ns = 1000;               % Number of samples
nsdel = 100;             % Number of samples for delayed paths

連続時間範囲と 3 つの不連続時間セグメントを定義します。この上にチャネル応答をプロットして表示します。時刻 0 から開始する 1000 サンプル連続チャネル応答と、時刻 0.1 秒、0.4 秒、および 0.7 秒から開始する 3 つの 100 サンプル連続チャネル応答を別々に表示します。

to0 = 0.0;
to1 = 0.1;
to2 = 0.4;
to3 = 0.7;
t0 = (to0:ns-1)/fs;      % Transmission 0
t1 = to1+(0:nsdel-1)/fs; % Transmission 1
t2 = to2+(0:nsdel-1)/fs; % Transmission 2
t3 = to3+(0:nsdel-1)/fs; % Transmission 3

チャネル フィルター処理を無効化し、1000 Hz のサンプリング レート、正弦波加算フェージング手法、および表示するサンプル数を指定して、フラット フェージング 2x2 MIMO チャネル System object を作成します。結果を反復できるように、シードの値を指定します。既定の InitialTime プロパティ設定を使用して、フェージング チャネルが時刻 0 からシミュレーションされるようにします。

mimoChan1 = comm.MIMOChannel('SampleRate',fs, ...
    'MaximumDopplerShift',fD, ...
    'RandomStream','mt19937ar with seed', ...
    'Seed',17, ...
    'FadingTechnique','Sum of sinusoids', ...
    'ChannelFiltering',false, ...
    'NumSamples',ns);

MIMO チャネル System object のクローンを作成します。遅延パスのサンプル数および初期時間のソースを変更し、System object を呼び出す際にフェージング チャネルのオフセット時間を入力引数として指定できるようにします。

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

mimoChan1 オブジェクトを使用して連続チャネル応答のパス ゲイン出力を保存し、初期時間オフセットを入力引数として指定した mimoChan2 オブジェクトを使用して、不連続遅延チャネル応答のパス ゲイン出力を保存します。

pg0 = mimoChan1();
pg1 = mimoChan2(to1);
pg2 = mimoChan2(to2);
pg3 = mimoChan2(to3);

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
title('Continuous and Discontinuous Channel Response')
xlabel('Time (sec)')
ylabel('Path Gain (dB)')
legend('Continuous','Discontinuous','location','nw')

Figure contains an axes object. The axes object with title Continuous and Discontinuous Channel Response 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 チャネル System object を作成し、サンプル レートを指定して、既定のフィルター処理済みガウス ノイズ手法を使用します。

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

同様の MIMO チャネル System object を作成して、前述の MIMO チャネル オブジェクトと同じサンプル レートを指定しますが、正弦波加算手法を使用します。さらに、48 個の正弦波を指定し、フェージング処理の開始時間が入力引数として与えられるように指定します。

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

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

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

データ バーストを毎秒送信するため、for ループの内部で正弦波加算 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.6896

1 つの MIMO チャネル System object™ と 2 つの同じ構成のチャネル フィルター System object を使用して、3 x 2 ダウンリンク信号伝送と、相互関係にある 2 x 3 アップリンク信号伝送の間でリンクレベルのシミュレーションを切り替えます。

システム パラメーターを定義します。

modOrder = 256;        % Modulation order
Nant1 = 3;             % Number of 'transmit' antennas
Nant2 = 2;             % Number of 'receive' antennas   
Rs = 1e6;              % Sample rate 
pd = [0 1.5 2.3]*1e-6; % Path delays
frmLen = 1e3;          % Frame length

MIMO チャネル System object™ を作成し、チャネル フィルター処理を無効にしてパス ゲインを生成するように構成します。

chan = comm.MIMOChannel( ...
    'SampleRate',Rs, ...
    'PathDelays',pd, ...
    'AveragePathGains',[1.5 1.2 0.2], ...
    'MaximumDopplerShift',300, ...
    'SpatialCorrelationSpecification','none', ...
    'NumTransmitAntennas',Nant1, ...
    'NumReceiveAntennas',Nant2, ...
    'ChannelFiltering',false, ...
    'NumSamples',frmLen);

両方の伝送方向に対して同一のチャネル フィルター System object を作成します。一方は Nant1 x Nant2 ダウンリンク チャネル (3 つの送信アンテナに対して 2 つの受信アンテナ) に使用し、もう一方の相互関係にあるチャネル フィルターは Nant2 x Nant1 アップリンク チャネル (2 つの送信アンテナに対して 3 つの受信アンテナ) に使用します。

chanFiltDownlink = comm.ChannelFilter( ...
    'SampleRate',Rs, ...
    'PathDelays',pd);
chanFiltUplink = clone(chanFiltDownlink);

ダウンリンク伝送

3 x 2 ダウンリンク チャネルの 1 フレームでランダムなパス ゲインを生成します。ランダムに生成された 256-QAM 信号を 3 x 2 ダウンリンク チャネル経由で渡します。

pgDownlink = chan();
x = qammod(randi([0 modOrder-1],frmLen,Nant1),modOrder);
yDL = chanFiltDownlink(x,pgDownlink);

アップリンク伝送

リンク方向を切り替えます。チャネル オブジェクトを実行して別のフレームでパス ゲインを生成し、相互関係にある 2 x 3 アップリンク チャネルで 3 番目 (Tx) と 4 番目 (Rx) の次元を並べ替えます。ランダムに生成された 256-QAM 信号を、相互関係にある 2 x 3 アップリンク チャネル経由で渡します。

pgUplink = permute(chan(),[1 2 4 3]);
x = qammod(randi([0 modOrder-1],frmLen,Nant2),modOrder);
yUL = chanFiltUplink(x,pgUplink);

ダウンリンクおよびアップリンクの配列の次元

MIMI チャネル オブジェクトから返されたダウンリンクとアップリンクのパス ゲイン配列のサイズを NS x NP x NT x NR 配列として表示します。

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

  • NP は、パス遅延の数です。

  • NT は、送信アンテナの数です。ダウンリンクの場合は Nant1、アップリンクの場合は Nant2 です。

  • NR は、受信アンテナの数です。ダウンリンクの場合は Nant2、アップリンクの場合は Nant1 です。

size(pgDownlink)
ans = 1×4

        1000           3           3           2

size(pgUplink)
ans = 1×4

        1000           3           2           3

MIMI チャネル オブジェクトから返されたチャネル出力の行列のサイズを NSNR 列の行列として表示します。ここで、NS はサンプル数、NR は受信アンテナの数です。

size(yDL)
ans = 1×2

        1000           2

size(yUL)
ans = 1×2

        1000           3

アルゴリズム

すべて展開する

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

参照

[1] Oestges, Claude, and Bruno Clerckx. MIMO Wireless Communications: From Real-World Propagation to Space-Time Code Design. 1st ed. Boston, MA: Elsevier, 2007.

[2] Correia, Luis M., and European Cooperation in the Field of Scientific and Technical Research (Organization), eds. Mobile Broadband Multimedia Networks: Techniques, Models and Tools for 4G. 1st ed. Amsterdam ; Boston: Elsevier/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 in Communications 20, no. 6 (August 2002): 1211–26. https://doi.org/10.1109/JSAC.2002.801223.

[4] Jeruchim, Michel C., Philip Balaban, and K. Sam Shanmugan. Simulation of Communication Systems. Second edition. Boston, MA: Springer US, 2000.

[5] Patzold, M., Cheng-Xiang Wang, and B. Hogstad. “Two New Sum-of-Sinusoids-Based Methods for the Efficient Generation of Multiple Uncorrelated Rayleigh Fading Waveforms.” IEEE Transactions on Wireless Communications 8, no. 6 (June 2009): 3122–31. https://doi.org/10.1109/TWC.2009.080769.

拡張機能

バージョン履歴

R2012a で導入

すべて展開する