Main Content

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

マルチパス フェージング チャネル

この例では、レイリーおよびライス マルチパス フェージング チャネル System object と組み込みの可視化を使用して、フェージング チャネルをモデル化し、チャネルのスペクトル特性を表示する方法を示します。レイリーおよびライス フェージング チャネルは、無線通信における実際の現象の有効なモデルです。これらの現象には、マルチパス散乱効果、時間分散、送信側と受信側の間の相対的な運動が原因で起こるドップラー シフトが含まれます。

フェージング チャネルを使用した信号の処理の手順は次のとおりです。

  1. 使用するチャネルを記述するチャネル System object™ を作成します。チャネル オブジェクトは、チャネルについての情報 (最大ドップラー シフトなど) を含む MATLAB® 変数の一種です。

  2. チャネルをモデル化するために、必要に応じて System object のプロパティを調整します。たとえば、パス遅延や平均パス ゲインを変更できます。

  3. チャネル System object を関数のように呼び出してチャネル モデルを適用します。これにより、ランダムな離散パス ゲインを生成し、入力信号をフィルター処理します。

初期化

次の変数は、レイリー チャネル オブジェクトとライス チャネル オブジェクトの両方を制御します。既定の設定では、チャネルは 4 つのフェージング パスとしてモデル化され、各パスはほぼ同じ遅延で受信するマルチパス成分の集まりを表します。

sampleRate500KHz = 500e3;    % Sample rate of 500 KHz
sampleRate20KHz  = 20e3;     % Sample rate of 20 KHz
maxDopplerShift  = 200; % Max Doppler shift of diffuse components (Hz)
delayVector = (0:5:15)*1e-6; % Discrete delays of four-path channel (s)
gainVector  = [0 -3 -6 -9];  % Average path gains (dB)

最大ドップラー シフトは v×f/c で計算されます。ここで、v は移動体速度、f は搬送波周波数、c は光速です。たとえば、最大ドップラー シフト 200 Hz (上を参照) は、移動体速度 65 mph (30 m/s) と搬送波周波数 2 GHz に対応します。

慣例により、最初のパスの遅延は一般にゼロに設定されます。それ以降のパスの場合、1 マイクロ秒の遅延はパス長では 300 m の違いに相当します。一部の屋外のマルチパス環境では、反射されたパスが最短パスより数キロメートルも長くなることがあります。パス遅延を上のように指定した場合、最後のパスは最短パスより 4.5 Km 長くなるため、15 マイクロ秒遅れて到着します。

さらに、チャネルの平均遅延プロファイルは、パス遅延とパス ゲインの影響を受けます。一般に、平均パス ゲインは遅延により指数関数的に減衰 (dB 値は直線的に減衰) しますが、特定の遅延プロファイルは伝播環境に依存します。上で指定した遅延プロファイルでは、5 マイクロ秒のパス遅延ごとに平均電力が 3 dB 減衰すると想定しています。

次の変数は、ライス チャネル System object を制御します。反射成分のドップラー シフトは一般に、最大ドップラー シフト (上記) より小さくなり、反射成分の方向に対する移動体の移動方向に依存します。K ファクターは、関連付けられた拡散成分の平均受信電力に対する反射成分の平均受信電力の線形比を指定します。

KFactor = 10;           % Linear ratio of specular to diffuse power
specDopplerShift = 100; % Doppler shift of specular component (Hz)

チャネル System object の作成

上で定義した変数を使用してcomm.RayleighChannelSystem object およびcomm.RicianChannelSystem object を作成します。指定したシードで内蔵の乱数ストリームを使用してパス ゲインを生成するようにオブジェクトを構成します。

rayChan = comm.RayleighChannel( ...
    SampleRate=sampleRate500KHz, ...
    PathDelays=delayVector, ...
    AveragePathGains=gainVector, ...
    MaximumDopplerShift=maxDopplerShift, ...
    RandomStream="mt19937ar with seed", ...
    Seed=10, ...
    PathGainsOutputPort=true);

ricChan = comm.RicianChannel( ...
    SampleRate=sampleRate500KHz, ...
    PathDelays=delayVector, ...
    AveragePathGains=gainVector, ...
    KFactor=KFactor, ...
    DirectPathDopplerShift=specDopplerShift, ...
    MaximumDopplerShift=maxDopplerShift, ...
    RandomStream="mt19937ar with seed", ...
    Seed=100, ...
    PathGainsOutputPort=true);

変調とチャネル フィルター処理

関数randiを使用して信号データのフレームを生成します。次に示すコードでは、フレームが情報ビットのベクトルを参照します。フレームごとの送信ビット数を 1000 に指定します。QPSK 変調の場合、これはフレームあたり 500 シンボルに相当します。関数pskmodを使用し、π/4 位相オフセットとビット入力を指定して、データのフレームを QPSK 変調します。データを可視化せずに、変調されたデータにレイリーおよびライス チャネル フィルター処理を適用します。

M = 4;               % QPSK modulation
phaseoffset = pi/4;  % Phase offset for QPSK
bitsPerFrame = 1000;
msg = randi([0 1],bitsPerFrame,1);

modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
rayChan(modSignal);
ricChan(modSignal);

チャネル応答の可視化

フェージング チャネル System object には、オブジェクトの実行時にチャネル インパルス応答、周波数応答またはドップラー スペクトルを表示するための組み込みの可視化があります。これを呼び出すには、オブジェクトを呼び出す前に Visualization プロパティを目的の値に設定します。レイリー チャネル System object とライス チャネル System object を再構成するには、オブジェクトを解放し、それらのプロパティ値を変更します。

release(rayChan);
release(ricChan);

Visualization プロパティを "Impulse response" に設定すると、帯域制限インパルス応答 (黄色の円) が表示されます。この可視化には、インパルス応答のピーク近辺に密集して存在する、潜在的なフェージング パス ゲイン (ピンクのステムバー) の遅延と振幅も示されます。ドップラー効果によりゲインは経時変化するため、パス ゲインは AveragePathGains プロパティ値と同じではありません。

同様に Visualization プロパティを "Frequency response" に設定すると、周波数応答 (DFT 変換) が表示されます。また、Visualization を "Impulse and frequency responses" に設定すれば、インパルスと周波数の両方の応答を並べて表示できます。

Visualization プロパティを "Doppler spectrum" に設定すると、最初の離散パスのドップラー スペクトルが表示されます。これはフェージング処理の統計的特性描写です。ドップラー スペクトル (青色の星) の瞬間的な経験的測定値がプロットされます。時間の経過とともに処理されるサンプルが増えるに従い、この測定値の平均が理論上のドップラー スペクトル (黄色の曲線) に近づいていきます。

可視化設定により、最適なプロット精度とシミュレーション速度の間でトレードオフを行うことができます。SamplesToDisplay プロパティは、可視化する入力サンプルのパーセンテージを制御します。一般にパーセンテージが小さいほどシミュレーションの実行速度は速くなります。すべての入力サンプルのチャネル応答を確認するには、SamplesToDisplay を "100%" に設定します。ただし、これによりシミュレーションの実行時間が長くなります。また、代表的な信号プロットには通常は必要ありません。

広帯域または周波数選択性フェージング

レイリー フェージング後の QPSK 変調信号のインパルス応答と周波数応答を表示します。チャネル周波数応答はフラットではなく、500 KHz 帯域幅で大きな減衰が生じます。これは、信号の帯域幅を超えると強度レベルが変化することが原因で、広帯域フェージングまたは周波数選択性フェージングと呼ばれます。

rayChan.Visualization = "Impulse and frequency responses";
rayChan.SamplesToDisplay = "100%";
% Display impulse and frequency responses for 2 frames
numFrames = 2;
for i = 1:numFrames
    % Create random data
    msg = randi([0 1],bitsPerFrame,1);
    % Modulate data
    modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
    % Filter data through channel and show channel responses
    rayChan(modSignal);
end

レイリー チャネル オブジェクトを解放し、最初の離散パスのドップラー スペクトルを表示するようにオブジェクトを再構成して、同じチャネル仕様についてフェージング プロセスの統計的特性を表示します。

release(rayChan);
rayChan.Visualization = "Doppler spectrum";

% Display Doppler spectrum from 5000 frame transmission
numFrames = 5000;
for i = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
    rayChan(modSignal);
end

狭帯域または周波数フラット フェージング

帯域幅が狭く信号を個別の成分に分解できないと、周波数応答はほぼフラットになります。これは、マルチパス チャネルが引き起こした最小の時間分散が原因です。このようなマルチパス フェージングは、"狭帯域フェージング" または "周波数フラット フェージング" とも呼ばれます。

信号帯域幅を 500 Kb/s (250 Ksym/s) から 20 Kb/s (10 Ksym/s) に減らします。これでチャネルの遅延スパン (15 マイクロ秒) が QPSK シンボル周期 (100 マイクロ秒) よりかなり小さくなります。結果として得られるインパルス応答の符号間干渉 (ISI) が非常に小さくなり、周波数応答がほぼフラットになります。

release(rayChan);
rayChan.Visualization = "Impulse and frequency responses";
rayChan.SampleRate = sampleRate20KHz;
rayChan.SamplesToDisplay = "25%";  % Display one of every four samples

% Display impulse and frequency responses for 2 frames
numFrames = 2;
for i = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
    rayChan(modSignal);
end

狭帯域フェージング チャネルの場合、チャネルは単一パス フェージング モデルで正確に表せます。チャネルに狭帯域フェージングがある場合にシミュレーションを簡略化して高速にするには、マルチパス フェージング モデルを単一パス フェージング モデルに置き換えることを検討します。次の設定は狭帯域フェージング チャネルに対応し、プロットに示されているように、周波数応答が完全にフラットになります。

release(rayChan);
rayChan.PathDelays = 0;        % Single fading path with zero delay
rayChan.AveragePathGains = 0;  % Average path gain of 1 (0 dB)

インパルス応答と周波数応答を 2 フレーム表示します。

for i = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
    rayChan(modSignal);
end

ライス フェージング チャネル System object は、拡散マルチパス散乱と共に見通し内伝播をモデル化します。これにより、パス ゲインの振幅の変化が小さくなります。レイリー チャネルとライス チャネルの間の変動を比較するため、timescopeオブジェクトを使用してパス ゲインを経時的に表示します。

レイリー フェージング チャネル (黄色の曲線) の振幅が 30 ~ 40 dB であるの対し、ライス フェージング チャネル (青色の曲線) の場合、振幅は約 10 dB の範囲で変動することがわかります。ライス フェージング チャネルでは、この変化は、K ファクター (現在の設定値は 10) を大きくするとさらに小さくなります。

release(rayChan);
rayChan.Visualization = "Off"; % Turn off Rayliegh object visualization
ricChan.Visualization = "Off"; % Turn off Rician object visualization

% Same sample rate and delay profile for the Rayleigh and Rician objects
ricChan.SampleRate = rayChan.SampleRate;
ricChan.PathDelays = rayChan.PathDelays;
ricChan.AveragePathGains = rayChan.AveragePathGains;

% Configure a Time Scope System object to show path gain magnitude
gainScope = timescope( ...
    SampleRate=rayChan.SampleRate, ...
    TimeSpanSource="Property",...
    TimeSpan=bitsPerFrame/2/rayChan.SampleRate, ... % One frame span
    Name="Multipath Gain", ...
    ChannelName=["Rayleigh","Rician"], ...
    ShowGrid=true, ...
    YLimits=[-40 10], ...
    YLabel="Gain (dB)");

% Compare the path gain outputs from both objects for one frame
msg = randi([0 1],bitsPerFrame,1);
modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
[~,rayPathGain] = rayChan(modSignal);
[~,ricPathGain] = ricChan(modSignal);
% Form the path gains as a two-channel input to the time scope
gainScope(10*log10(abs([rayPathGain,ricPathGain]).^2));

信号コンスタレーションに与えるフェージング チャネルの影響

元の 4 パス レイリー フェージング チャネルに戻り、comm.ConstellationDiagramSystem object を使用して信号コンスタレーションに与える狭帯域フェージングの影響を示します。可視化するためにチャネル ダイナミクスを減速させ、最大ドップラー シフトを 5 Hz に低減しました。QPSK チャネルの入力信号に比べ、チャネル出力時の信号の減衰と回転のほかに、受信信号の ISI が少量であるために生じる歪みも確認できます。

release(rayChan);

rayChan.PathDelays = delayVector;
rayChan.AveragePathGains = gainVector;
rayChan.MaximumDopplerShift = 5;

constDiag = comm.ConstellationDiagram( ...
    Name="Received Signal After Rayleigh Fading");

numFrames = 16;
for n = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
    rayChanOut = rayChan(modSignal);
    constDiag(rayChanOut);
end
release(rayChan);
release(constDiag);

レイリー チャネルのサンプル レートを 500 KHz に調整します。これにより、信号帯域幅が 500 Kb/s に増加します。これは、QPSK 変調信号の 250 Ksym/s に相当します。コンスタレーション ダイアグラムを再プロットすると、広帯域信号の時間分散に関連する ISI によって信号コンスタレーションにおける歪みがかなり増大することがわかります。チャネルの遅延スパン (15 マイクロ秒) が、QPSK シンボル周期 (4 マイクロ秒) より大きいので、結果として得られる帯域制限インパルス応答はほぼフラットではなくなります。

rayChan.SampleRate = sampleRate500KHz;

for n = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = pskmod(msg,M,phaseoffset,InputType='bit');
    rayChanOut = rayChan(modSignal);
    constDiag(rayChanOut);
end