このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
comm.RayleighChannel
マルチパス レイリー フェージング チャネルによる入力信号のフィルター処理
説明
comm.RayleighChannel
System object™ は、マルチパス レイリー フェージング チャネルによる入力信号をフィルター処理します。フェージング モデルの処理の詳細については、マルチパス フェージング チャネルのシミュレーションの方法論の節を参照してください。
マルチパス レイリー フェージング チャネルによる入力信号をフィルター処理するには、以下の手順に従います。
comm.RayleighChannel
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
説明
は、周波数選択性または周波数フラット マルチパス レイリー フェージング チャネル System object を作成します。このオブジェクトは、マルチパス チャネルからの実数または複素数の入力信号をフィルター処理して、チャネルで劣化した信号を取得します。rayleighchan
= comm.RayleighChannel
は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、rayleighchan
= comm.RayleighChannel(Name
=Value
)comm.RayleighChannel(SampleRate=2)
は入力信号のサンプル レートを 2 に設定します。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
SampleRate
— 入力信号のサンプル レート
1
(既定値) | 正のスカラー
入力信号のサンプルレート (Hz 単位)。正のスカラーとして指定します。
データ型: double
PathDelays
— Discrete path delay
0
(既定値) | スカラー | 行ベクトル
離散パスの遅延 (秒)。スカラーまたは行ベクトルとして指定します。
PathDelays
をスカラーに設定すると、チャネルは周波数フラットになります。PathDelays
をベクトルに設定すると、チャネルは周波数選択性になります。
PathDelays
プロパティおよび AveragePathGains
プロパティの長さは同じでなければなりません。
データ型: double
AveragePathGains
— 離散パスの平均ゲイン
0
(既定値) | スカラー | 行ベクトル
離散パスの平均ゲイン (デシベル単位)。スカラーまたは行ベクトルとして指定します。AveragePathGains
プロパティおよび PathDelays
プロパティの長さは同じでなければなりません。
データ型: double
NormalizePathGains
— 平均パス ゲインの正規化
true
または 1
(既定値) | false
または 0
平均パス ゲインの正規化。次のいずれかの論理値として指定します。
1
(true
) — フェージング処理が正規化され、長時間で平均したパス ゲインの強度の総和は 0 dB になります。0
(false
) — パス ゲインの強度の総和は正規化されません。
AveragePathGains
プロパティは、パス ゲインの平均強度を指定します。
データ型: logical
MaximumDopplerShift
— すべてのチャネル パスの最大ドップラー シフト
0.001
(既定値) | 非負のスカラー
すべてのチャネル パスの最大ドップラー シフト。非負のスカラーとして指定します。単位はヘルツです。
最大ドップラー シフトの制限は各チャネル パスに適用されます。このプロパティを 0
に設定すると、チャネルは入力全体に対して静的になります。新しいチャネルは、オブジェクト関数 reset
を使用して生成できます。MaximumDopplerShift
プロパティの値は各パスについて SampleRate
/10/fc 以下でなければなりません。fc はそのパスのカットオフ周波数係数です。ほとんどのドップラー スペクトル タイプでは、fc の値は 1 です。ガウスおよび二重ガウス ドップラー スペクトル タイプでは、fc はドップラー スペクトル構造体フィールドによって異なります。fc の定義方法の詳細については、カットオフ周波数係数の節を参照してください。
データ型: double
DopplerSpectrum
— すべてのチャネル パスのドップラー スペクトルの形状
doppler('Jakes')
(既定値) | ドップラー スペクトル構造体 | 1 行 NP 列のドップラー スペクトル構造体の cell 配列
すべてのチャネル パスのドップラー スペクトルの形状。ドップラー スペクトル構造体またはドップラー スペクトル構造体の 1 行 NP 列の cell 配列として指定します。これらのドップラー スペクトル構造体は、関数 doppler
から返される形式の出力でなければなりません。NP は、PathDelays
プロパティにより指定される離散遅延パスの数です。MaximumDopplerShift
プロパティは、ドップラー スペクトルを指定する際に、DopplerSpectrum
プロパティで許容される最大ドップラー シフトの値を定義します。
DopplerSpectrum
を単一のドップラー スペクトル構造体に設定すると、すべてのパスは、指定された同じドップラー スペクトルを持ちます。DopplerSpectrum
をドップラー スペクトル構造体の cell 配列に設定すると、それぞれのパスは、cell 配列内の対応する構造体で指定されるドップラー スペクトルを持ちます。
スペクトル タイプのオプションは、関数 doppler
への specType
入力を使用して指定されます。FadingTechnique
プロパティを 'Sum of sinusoids'
に設定する場合、DopplerSpectrum
を doppler('Jakes')
に設定しなければなりません。
依存関係
このプロパティを有効にするには、MaximumDopplerShift
プロパティを正のスカラーに設定します。
データ型: struct
| cell
ChannelFiltering
— チャネル フィルター処理
true
または 1
(既定値) | false
または 0
チャネル フィルター処理。次のいずれかの論理値として指定します。
1
(true
) — チャネルは入力信号を受け入れ、フィルター処理された出力信号を生成します。0
(false
) — オブジェクトは入力信号を受け入れず、フィルター処理された出力信号を生成しません。チャネル パス ゲインのみを出力します。NumSamples
プロパティを使用して、フェージング処理の期間を指定する必要があります。
データ型: logical
PathGainsOutputPort
— チャネル パス ゲインの出力
false
または 0
(既定値) | true
または 1
チャネル パス ゲインの出力。logical 0
(false
) または 1
(true
) として指定します。このプロパティを true
に設定すると、潜在的なフェージング処理のチャネル パス ゲインが出力されます。
依存関係
このプロパティを有効にするには、ChannelFiltering
プロパティを true
に設定します。
データ型: logical
NumSamples
— サンプル数
100
(既定値) | 非負の整数
フェージング処理の期間に使用するサンプル数。非負の整数として指定します。
調整可能: Yes
依存関係
このプロパティを有効にするには、ChannelFiltering
プロパティを false
に設定します。
データ型: double
OutputDataType
— パス ゲイン出力のデータ型
'double'
(既定値) | 'single'
パス ゲイン出力のデータ型。'double'
または 'single'
を指定します。
依存関係
このプロパティを有効にするには、ChannelFiltering
プロパティを false
に設定します。
データ型: char
| string
FadingTechnique
— チャネルのモデル化のフェージング手法
'Filtered Gaussian noise'
(既定値) | 'Sum of sinusoids'
チャネルのモデル化のフェージング手法。'Filtered Gaussian noise'
または 'Sum of sinusoids'
として指定します。
データ型: char
| string
NumSinusoids
— 使用される正弦波の数
48
(既定値) | 正の整数
フェージング処理のモデル化に使用される正弦波の数。正の整数で指定します。
依存関係
このプロパティを有効にするには、FadingTechnique
プロパティを 'Sum of sinusoids'
に設定します。
データ型: double
InitialTimeSource
— フェージング処理の開始時間を制御するソース
'Property'
(既定値) | 'Input port'
フェージング処理の開始時間を制御するソース。'Property'
または 'Input port'
として指定します。
InitialTimeSource
を'Property'
に設定する場合は、InitialTime
プロパティを使用して初期時間オフセットを設定します。InitialTimeSource
が'Input port'
に設定されている場合、inittime
入力引数を使用して、フェージング処理の開始時間を指定します。入力値は、オブジェクトに対する連続呼び出しで変更できます。
依存関係
このプロパティを有効にするには、FadingTechnique
プロパティを 'Sum of sinusoids'
に設定します。
データ型: char
| string
InitialTime
— 初期時間オフセット
0
(既定値) | 非負のスカラー
フェージング モデルの初期時間オフセット (秒)。非負のスカラーで指定します。
mod
(InitialTime
/SampleRate
) が非ゼロの場合、初期時間オフセットは最も近い整数方向のサンプル位置に切り上げられます。
依存関係
このプロパティを有効にするには、FadingTechnique
プロパティを 'Sum of sinusoids'
に、InitialTimeSource
プロパティを 'Property'
に設定します。
データ型: double
RandomStream
— 乱数ストリームのソース
'Global stream'
(既定値) | 'mt19937ar with seed'
乱数ストリームのソース。'Global stream'
または 'mt19937ar with seed'
として指定します。
'Global stream'
を指定すると、オブジェクトは乱数発生に現在のグローバル乱数ストリームを使用します。この場合、オブジェクト関数reset
はフィルターのリセットのみを行います。'mt19937ar with seed'
を指定すると、オブジェクトは乱数発生に mt19937ar アルゴリズムを使用します。この場合、オブジェクト関数reset
はフィルターをリセットし、乱数ストリームをSeed
プロパティの値に再初期化します。
データ型: char
| string
Seed
— mt19937ar 乱数ストリームの初期シード
73
(既定値) | 非負の整数
mt19937ar 乱数ストリーム発生器のアルゴリズムの初期シード。非負の整数を指定します。オブジェクト関数 reset
を呼び出すと、mt19937ar 乱数ストリームが Seed
の値に再初期化されます。
依存関係
このプロパティを有効にするには、RandomStream
プロパティを 'mt19937ar with seed'
に設定します。
データ型: double
Visualization
— チャネルの可視化
'Off'
(既定値) | 'Impulse response'
| 'Frequency response'
| 'Impulse and frequency responses'
| 'Doppler spectrum'
チャネルの可視化。'Off'
、'Impulse response'
、'Frequency response'
、'Impulse and frequency responses'
、または 'Doppler spectrum'
として指定します。詳細については、チャネルの可視化のトピックを参照してください。
依存関係
このプロパティを有効にするには、FadingTechnique
プロパティを 'Filtered Gaussian noise'
に設定します。
データ型: char
| string
PathsForDopplerDisplay
— ドップラー スペクトルの表示に使用するパス
1
(既定値) | 正の整数
ドップラー スペクトルの表示に使用するパス。範囲 [1, NP] の正の整数として指定します。NP は、PathDelays
プロパティにより指定される離散遅延パスの数です。このプロパティを使用して、ドップラー スペクトル プロットの構築に使用される離散パスを選択します。
依存関係
このプロパティを有効にするには、Visualization
プロパティを 'Doppler spectrum'
に設定します。
データ型: double
SamplesToDisplay
— 表示するサンプルの割合
'25%'
(既定値) | '10%'
| '50%'
| '100%'
表示するサンプルの割合。'25%'
、'10%'
、'50%'
、または '100%'
として指定します。パーセンテージを大きくすると表示の精度が向上しますが、シミュレーションの速度が低下します。
依存関係
このプロパティを有効にするには、Visualization
プロパティを 'Impulse response'
、'Frequency response'
、または 'Impulse and frequency responses'
に設定します。
データ型: char
| string
使用法
構文
説明
は、マルチパス レイリー フェージング チャネルを通して入力信号 Y
= rayleighchan(X
)X
をフィルター処理し、Y
に結果を返します。
この構文を有効にするには、ChannelFiltering
プロパティを true
に設定します。
は、フェージング処理の開始時間を指定します。Y
= rayleighchan(X
,inittime
)
この構文を有効にするには、FadingTechnique
プロパティを 'Sum of sinusoids'
に設定し、InitialTimeSource
プロパティを 'Input port'
に設定します。
[
はまた、前述の構文の入力引数を任意に組み合わせて使用して、潜在的なマルチパス レイリー フェージング処理のチャネル パス ゲインを Y
,pathgains
] = rayleighchan(___)pathgains
に返します。
この構文を有効にするには、PathGainsOutputPort
プロパティを true
に設定します。
は、潜在的なフェージング処理のチャネル パス ゲインを返します。この場合、チャネルは入力信号を必要とせず、パス ゲインのソースとして機能します。pathgains
= rayleighchan()
この構文を有効にするには、ChannelFiltering
プロパティを false
に設定します。
は、指定された初期時間で開始する潜在的なフェージング処理のチャネル パス ゲインを返します。この場合、チャネルは入力信号を必要とせず、パス ゲインのソースとして機能します。pathgains
= rayleighchan(inittime
)
この構文を有効にするには、FadingTechnique
プロパティを 'Sum of sinusoids'
に、InitialTimeSource
プロパティを 'Input port'
に、ChannelFiltering
プロパティを false
に設定します。
入力引数
X
— 入力信号
NS 行 1 列のベクトル
入力信号。NS 行 1 列のベクトル (NS はサンプル数) として指定します。
このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。
データ型: single
| double
複素数のサポート: あり
inittime
— 初期時間オフセット
0
| 非負のスカラー
秒単位の初期時間オフセット。非負のスカラーとして指定します。
mod
(inittime
/SampleRate
) が非ゼロの場合、初期時間オフセットは最も近い整数方向のサンプル位置に切り上げられます。
データ型: single
| double
出力引数
Y
— 出力信号
NS 行 1 列のベクトル
出力信号。入力信号 X
と同じデータ精度の複素数値の NS 行 1 列のベクトルとして返されます。NS は、サンプル数です。
pathgains
— 出力パスのゲイン
NS 行 NP 列の行列
出力パス ゲイン。NS 行 NP 列の行列として返されます。NS は、サンプル数です。NP は、PathDelays
プロパティにより指定される離散遅延パスの数です。pathgains
には複素数値が含まれています。
ChannelFiltering
プロパティを false
に設定すると、この出力のデータ型は、入力信号 x
と同じ精度を持ちます。ChannelFiltering
プロパティを true
に設定すると、この出力のデータ型は OutputDataType
プロパティで指定されます。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
2 つの乱数発生メソッドを使用した同一のレイリー チャネル出力の作成
2 つの異なる乱数発生方法を使用して、同じマルチパス レイリー フェージング チャネル応答を作成します。マルチパス レイリー フェージング チャネル System object には 2 つの乱数発生方法が含まれています。現在のグローバル ストリーム、またはシードを指定した mt19937ar アルゴリズムを使用できます。グローバル ストリームと対話することで、System object は、2 つの方法から同じ出力を生成できます。
PSK 変調器 System object を作成して、ランダムに生成されたデータを変調します。
pskModulator = comm.PSKModulator; insig = randi([0,pskModulator.ModulationOrder-1],1024,1); channelInput = pskModulator(insig);
乱数発生方法を my19937ar アルゴリズムに、乱数シードを 22 に指定して、マルチパス レイリー フェージング チャネル System object を作成します。
rayleighchan = comm.RayleighChannel( ... 'SampleRate',10e3, ... 'PathDelays',[0 1.5e-4], ... 'AveragePathGains',[2 3], ... 'NormalizePathGains',true, ... 'MaximumDopplerShift',30, ... 'DopplerSpectrum',{doppler('Gaussian',0.6),doppler('Flat')}, ... 'RandomStream','mt19937ar with seed', ... 'Seed',22, ... 'PathGainsOutputPort',true);
マルチパス レイリー フェージング チャネル System object を使用して、変調されたデータをフィルター処理します。
[chanOut1,pathGains1] = rayleighchan(channelInput);
System object が乱数発生にグローバル ストリームを使用するよう設定します。
release(rayleighchan);
rayleighchan.RandomStream = 'Global stream';
マルチパス レイリー フェージング チャネル System object の作成時に指定されたのと同じシードを持つよう、グローバル ストリームを設定します。
rng(22)
マルチパス レイリー フェージング チャネル System object を使用して、変調されたデータを再度フィルター処理します。
[chanOut2,pathGains2] = rayleighchan(channelInput);
2 つの方法のそれぞれについて、チャネルおよびパス ゲインの出力が同じかどうかを検証します。
isequal(chanOut1,chanOut2)
ans = logical
1
isequal(pathGains1,pathGains2)
ans = logical
1
マルチパス レイリー フェージング チャネルのインパルス応答と周波数応答の表示
チャネル フィルター処理を無効にするように構成されている周波数選択性マルチパス レイリー フェージング チャネルの、インパルス応答および周波数応答を表示します。
シミュレーション変数を定義します。ITU 歩行者 B チャネル構成を使用してパスの遅延とゲインを指定します。
fs = 3.84e6; % Sample rate in Hz pathDelays = [0 200 800 1200 2300 3700]*1e-9; % in seconds avgPathGains = [0 -0.9 -4.9 -8 -7.8 -23.9]; % dB fD = 50; % Max Doppler shift in Hz
マルチパス レイリー フェージング チャネル System object を作成し、インパルス応答プロットと周波数応答プロットを可視化します。
rayleighchan = comm.RayleighChannel('SampleRate',fs, ... 'PathDelays',pathDelays, ... 'AveragePathGains',avgPathGains, ... 'MaximumDopplerShift',fD, ... 'ChannelFiltering',false, ... 'Visualization','Impulse and frequency responses');
入力信号なしでマルチパス レイリー フェージング チャネル System object を実行して、チャネル応答を可視化します。インパルス応答プロットにより、個々のパスとそれに対応するフィルター係数を特定できます。周波数応答プロットは、ITU 歩行者 B チャネルの周波数選択性を示しています。
rayleighchan();
正弦波加算手法を使用したマルチパス レイリー フェージング チャネルのモデル化
正弦波加算手法を使用するマルチパス レイリー フェージング チャネル System object を使用して、不連続送信のためにチャネル状態が維持されていることを示します。連続チャネル応答に重なる不連続チャネル応答セグメントを観測します。
チャネルのプロパティを設定します。
fs = 1000; % Sample rate (Hz) pathDelays = [0 2.5e-3]; % In seconds pathPower = [0 -6]; % In 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 サンプル レート、正弦波加算フェージング手法、チャネル フィルター処理の無効化、および表示するサンプル数を指定して、周波数フラット マルチパス レイリー フェージング チャネル System object を作成します。結果を反復できるように、シードの値を指定します。既定の InitialTime
プロパティ設定を使用して、フェージング チャネルが時刻 0 からシミュレーションされるようにします。
rayleighchan1 = comm.RayleighChannel('SampleRate',fs, ... 'MaximumDopplerShift',fD, ... 'RandomStream','mt19937ar with seed', ... 'Seed',17, ... 'FadingTechnique','Sum of sinusoids', ... 'ChannelFiltering',false, ... 'NumSamples',ns);
マルチパス レイリー フェージング チャネル System object のクローンを作成します。クローン オブジェクトで、遅延パスに対して表示するサンプルの数を設定します。さらに初期時間のソースを入力として構成し、System object を使用する際にフェージング チャネルのオフセット時間を入力引数として指定できるようにします。
rayleighchan2 = clone(rayleighchan1);
rayleighchan2.NumSamples = nsdel;
rayleighchan2.InitialTimeSource = 'Input port';
rayleighchan1
オブジェクトを使用して連続チャネル応答のパス ゲイン出力を保存し、初期時間オフセットを入力引数として指定した rayleighchan2
オブジェクトを使用して、不連続遅延チャネル応答のパス ゲイン出力を保存します。
pg0 = rayleighchan1(); pg1 = rayleighchan2(to1); pg2 = rayleighchan2(to2); pg3 = rayleighchan2(to3);
オブジェクト関数 info
を使用して、2 つのチャネルによって処理されたサンプル数を比較します。rayleighchan1
オブジェクトは 1000 サンプルを処理しましたが、rayleighchan2
オブジェクトは 300 サンプルしか処理していません。
G = info(rayleighchan1); H = info(rayleighchan2); [G.NumSamplesProcessed H.NumSamplesProcessed]
ans = 1×2
1000 300
パス ゲインをデシベルに変換します。
pathGain0 = 20*log10(abs(pg0)); pathGain1 = 20*log10(abs(pg1)); pathGain2 = 20*log10(abs(pg2)); pathGain3 = 20*log10(abs(pg3));
連続的な場合と非連続的な場合のパス ゲインをプロットします。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') title('Continuous and Discontinuous Transmission Path Gains')
マルチパス レイリー フェージング チャネル応答の再現
comm.RayleighChannel
System object のオブジェクト関数 info で返される ChannelFilterCoefficients
プロパティを使用して、複数のフレームにわたるマルチパス レイリー フェージング チャネルの出力を再現します。
2 つのパスを定義し、マルチパス レイリー フェージング チャネル System object を作成します。データを生成し、チャネルを介してデータを渡します。
rayleighchan = comm.RayleighChannel( ... 'SampleRate',1000, ... 'PathDelays',[0 1.5e-3], ... 'AveragePathGains',[0 -3], ... 'PathGainsOutputPort',true)
rayleighchan = comm.RayleighChannel with properties: SampleRate: 1000 PathDelays: [0 0.0015] AveragePathGains: [0 -3] NormalizePathGains: true MaximumDopplerShift: 1.0000e-03 DopplerSpectrum: [1x1 struct] ChannelFiltering: true PathGainsOutputPort: true Use get to show all properties
data = randi([0 1],600,1);
チャネルを通してデータを渡します。ChannelFilterCoefficients
プロパティの値を変数 coeff
に代入します。for
ループ内で、coeff
に格納されたパス遅延の位置における、非整数遅延の入力信号を計算し、パス ゲインを適用し、すべてのパスについての結果を合計します。マルチパス レイリー フェージング チャネル System object (chanout1
) の出力を、マルチパス レイリー フェージング チャネル System object (chanout2
) のパス ゲインと ChannelFilterCoefficients
プロパティを使用して再現された出力と比較します。
chaninfo = info(rayleighchan); coeff = chaninfo.ChannelFilterCoefficients; Np = length(rayleighchan.PathDelays); state = zeros(size(coeff,2)-1,size(coeff,1)); nFrames = 10; chkChan = zeros(nFrames,1); for jj = 1 : nFrames data = randi([0 1],600,1); [chanout1,pg] = rayleighchan(data); fracdelaydata = zeros(size(data,1),Np); % Calculate the fractional delayed input signal. for ii = 1:Np [fracdelaydata(:,ii),state(:,ii)] = ... filter(coeff(ii,:),1,data,state(:,ii)); end % Apply the path gains and sum the results for all of the paths. % Compare the channel outputs. chanout2 = sum(pg .* fracdelaydata,2); chkChan(jj) = isequal(chanout1,chanout2); end chkChan'
ans = 1×10
1 1 1 1 1 1 1 1 1 1
レイリー チャネル パス ゲインの自己相関の確認
レイリー チャネル System object からのパス ゲイン出力の自己相関がベッセル関数であることを確認します。[1] および [2] の付録 A の結果から、パス ゲイン出力の自己相関がベッセル関数である場合、ドップラー スペクトルは Jakes の形状になることがわかります。
シミュレーション パラメーターを初期化します。
Rsym = 9600; % Input symbol rate (symbols/s) sps = 10; % Number of samples per input symbol Fs = sps*Rsym; % Input sampling frequency (samples/s) Ts = 1/Fs; % Input sampling period (s) numsym = 1e6; % Number of input symbols to simulate numsamp = numsym*sps; % Number of channel samples to simulate fd = 100; % Maximum Doppler frequency shift (Hz) num_acsamp = 5000; % Number of samples of autocovariance % of complex fading process calculated numtx = 1; % Number of transmit antennas numrx = 1; % Number of receive antennas numsin = 48; % Number of sinusoids frmLen = 10000; numFrames = numsamp/frmLen;
レイリー チャネル System object を構成します。
chan = comm.RayleighChannel( ... 'FadingTechnique','Sum of sinusoids', ... 'NumSinusoids',numsin, ... 'RandomStream','mt19937ar with seed', ... 'PathDelays',0, ... 'AveragePathGains',0, ... 'SampleRate',Fs, ... 'MaximumDopplerShift',fd, ... 'PathGainsOutputPort',true);
DPSK 変調をランダム ビット ストリームに適用します。
tx = randi([0 1],numsamp,numtx); % Random bit stream dpskSig = dpskmod(tx,2); % DPSK signal
チャネルを通して変調信号を渡します。
outsig = zeros(numsamp,numrx); pg_rx = zeros(numsamp,numrx,numtx); for frmNum = 1:numFrames [outsig((1:frmLen)+(frmNum-1)*frmLen,:),pathGains] = ... chan(dpskSig((1:frmLen)+(frmNum-1)*frmLen,:)); for i = 1:numrx pg_rx((1:frmLen)+(frmNum-1)*frmLen,i,:) = ... pathGains(:,:,:,i); end end
アンテナあたりの受信チャネル パス ゲインを使用して、各送信-受信パスに対するフェージング プロセスの自己共分散を計算します。
autocov = zeros(frmLen+1,numrx,numtx); autocov_normalized_real = zeros(num_acsamp+1,numrx,numtx); autocov_normalized_imag = zeros(num_acsamp+1,numrx,numtx); for i = 1:numrx % Compute autocovariance of simulated complex fading process for j = 1:numtx autocov(:,i,j) = xcov(pg_rx(:,i,j),num_acsamp); % Real part of normalized autocovariance autocov_normalized_real(:,i,j) = ... real(autocov(num_acsamp+1:end,i,j) ... / autocov(num_acsamp+1,i,j)); % Imaginary part of normalized autocovariance autocov_normalized_imag(:,i,j) = ... imag(autocov(num_acsamp+1:end,i,j) ... / autocov(num_acsamp+1,i,j)); end end
関数besselj
を使用して、複素フェージング プロセスの理論上の自己共分散を計算します。
Rrr = zeros(1,num_acsamp+1); for n = 1:1:num_acsamp+1 Rrr(n) = besselj(0,2*pi*fd*(n-1)*Ts); end Rrr_normalized = Rrr/Rrr(1);
レイリー チャネル System object および関数 besselj
からの結果を比較する自己共分散を表示します。
subplot(2,1,1) plot(autocov_normalized_real,'b-') hold on plot(Rrr_normalized,'r-') hold off legend('comm.RayleighChannel', ... 'Bessel function of the first kind') title('Autocovariance of Real Part of Rayleigh Process') subplot(2,1,2) plot(autocov_normalized_imag) legend('comm.RayleighChannel') title('Autocovariance of Imaginary Part of Rayleigh Process')
以下の計算で得られる、レイリー チャネル オブジェクトの結果とベッセル関数の結果を比較する際の平均二乗誤差は、重要ではありません。
act_mse_real = ... sum((autocov_normalized_real-repmat(Rrr_normalized.',1,numrx,numtx)).^2,1) ... / size(autocov_normalized_real,1)
act_mse_real = 7.0043e-08
act_mse_imag = sum((autocov_normalized_imag-0).^2,1) ...
/ size(autocov_normalized_imag,1)
act_mse_imag = 4.1064e-07
参考文献
1.Dent, P., G.E. Bottomley, and T. Croft.“Jakes Fading Model Revisited.”Electronics Letters 29, no. 13 (1993):1162. https://doi.org/10.1049/el:19930777.
2.Pätzold, Matthias.Mobile Fading Channels.Chichester, UK: John Wiley & Sons, Ltd, 2002. https://doi.org/10.1002/0470847808.
経験上のレイリー チャネルと理論上のレイリー チャネルの PDF を比較する
1 つのパスをもつレイリー チャネルの経験上の確率密度関数 (PDF) と理論上の確率密度関数 (PDF) を計算してプロットします。
パラメーターを初期化し、チャネル フィルター処理を適用しないレイリー チャネル System object を作成します。
Ns = 1.92e6; Rs = 1.92e6; dopplerShift = 2000; chan = comm.RayleighChannel( ... 'SampleRate',Rs, ... 'PathDelays',0, ... 'AveragePathGains',0, ... 'MaximumDopplerShift',dopplerShift, ... 'ChannelFiltering',false, ... 'NumSamples',Ns, ... 'FadingTechnique','Sum of sinusoids');
関数fitdist
(Statistics and Machine Learning Toolbox)およびpdf
(Statistics and Machine Learning Toolbox)を使用し、レイリー チャネルの経験上の PDF と理論上の PDF を計算してプロットします。
figure; hold on; % Empirical PDF plot gain = chan(); pd = fitdist(abs(gain),'Kernel','BandWidth',.01); r = 0:.1:3; y = pdf(pd,r); plot(r,y) % Theoretical PDF plot exp_pdf_amplitude = raylpdf(r,0.7); plot(r,exp_pdf_amplitude') legend('Empirical','Theoretical') title('Empirical and Theoretical PDF Curves')
詳細
カットオフ周波数係数
カットオフ周波数係数、fc は、ドップラー スペクトルのタイプに応じて決まります。
ガウスと二重ガウス以外の種類のドップラー スペクトルでは、fc は 1 になります。
doppler
('Gaussian')
のスペクトル タイプでは、fc はNormalizedStandardDeviation
と等しくなります。doppler
('BiGaussian')
スペクトル タイプの場合は、以下のとおりです。PowerGains
(1)
およびNormalizedCenterFrequencies
(2)
フィールドの値が両方とも0
の場合は、fc がNormalizedStandardDeviation
(1)
と等しくなります。PowerGains
(2)
およびNormalizedCenterFrequencies
(1)
フィールドの値が両方とも0
の場合は、fc がNormalizedStandardDeviation
(2)
と等しくなります。NormalizedCenterFrequencies
フィールドの値が[0,0]
でNormalizedStandardDeviation
フィールドが 2 つの同一要素をもつ場合、fc はNormalizedStandardDeviation
(1)
と等しくなります。その他のすべての場合で、fc は 1 と等しくなります。
参照
[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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
C コードを生成するには、
DopplerSpectrum
プロパティを単一のドップラー スペクトル構造体に設定します。コード生成は、
Visualization
プロパティが'Off'
に設定されている場合のみ使用可能です。MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2013b で導入R2022b: チャネルの可視化表示の更新
チャネルの可視化機能で次が提供されるようになりました。
プロット ウィンドウの下部ツール バーのコンフィギュレーション設定。
Impulse and frequency response
チャネル可視化オプション選択時に、1 つのウィンドウで左右に並べてプロット。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)