Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

comm.RayleighChannel

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

説明

comm.RayleighChannel System object™ は、マルチパス レイリー フェージング チャネルによる入力信号をフィルター処理します。フェージング モデルの処理の詳細については、マルチパス フェージング チャネルのシミュレーションの方法論の節を参照してください。

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

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

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

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

作成

説明

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

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

プロパティ

すべて展開する

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

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

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

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

データ型: double

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

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

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

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

データ型: double

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

データ型: double

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

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

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

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

データ型: logical

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

最大ドップラー シフトの制限は各チャネル パスに適用されます。このプロパティを 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

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

  • 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

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

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' として指定します。詳細については、チャネルの可視化のトピックを参照してください。

依存関係

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

データ型: char | string

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

依存関係

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

データ型: double

表示するサンプルの割合。'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 に設定します。

入力引数

すべて展開する

入力信号。NS 行 1 列のベクトル (NS はサンプル数) として指定します。

このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。

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

秒単位の初期時間オフセット。非負のスカラーとして指定します。

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

データ型: single | double

出力引数

すべて展開する

出力信号。入力信号 X と同じデータ精度の複素数値の NS 行 1 列のベクトルとして返されます。NS は、サンプル数です。

出力パス ゲイン。NSNP 列の行列として返されます。NS は、サンプル数です。NP は、PathDelays プロパティにより指定される離散遅延パスの数です。pathgains には複素数値が含まれています。

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

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

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.

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

詳細

すべて展開する

参照

[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.

拡張機能

バージョン履歴

R2013b で導入

すべて展開する