最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

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

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

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

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

  3. step メソッドを使用してチャネル System object を信号に適用し、ランダムな離散パス ゲインを生成し、入力信号をフィルター処理します。

チャネルの特性は System object がサポートする組み込みの可視化を使用して確認できます。

初期化

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

sampleRate500kHz = 500e3;    % Sample rate of 500K Hz
sampleRate20kHz  = 20e3;     % Sample rate of 20K Hz
maxDopplerShift  = 200;      % Maximum 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 power to diffuse power
specDopplerShift = 100;  % Doppler shift of specular component (Hz)

チャネル System object の作成

上記で指定したパラメーターを使用すると、comm.RayleighChannel System object および comm.RicianChannel System object を作成できます。指定したシードで内蔵の乱数ストリームを使用してパス ゲインを生成するようにオブジェクトを構成します。

% Configure a Rayleigh channel object
rayChan = comm.RayleighChannel( ...
    'SampleRate',          sampleRate500kHz, ...
    'PathDelays',          delayVector, ...
    'AveragePathGains',    gainVector, ...
    'MaximumDopplerShift', maxDopplerShift, ...
    'RandomStream',        'mt19937ar with seed', ...
    'Seed',                10, ...
    'PathGainsOutputPort', true);

% Configure a Rician channel object
ricChan = comm.RicianChannel( ...
    'SampleRate',              sampleRate500kHz, ...
    'PathDelays',              delayVector, ...
    'AveragePathGains',        gainVector, ...
    'KFactor',                 KFactor, ...
    'DirectPathDopplerShift',  specDopplerShift, ...
    'MaximumDopplerShift',     maxDopplerShift, ...
    'RandomStream',            'mt19937ar with seed', ...
    'Seed',                    100, ...
    'PathGainsOutputPort',     true);

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

comm.QPSKModulator System object を作成して、チャネル データを変調します。このデータは関数 RANDI を使用して生成済みです。次に示すコードで 'frame' が情報ビットのベクトルを参照することに注意してください。この例では、位相オフセット pi/4 が使用されます。

qpskMod = comm.QPSKModulator( ...
    'BitInput',    true, ...
    'PhaseOffset', pi/4);

% Number of bits transmitted per frame is set to be 1000. For QPSK
% modulation, this corresponds to 500 symbols per frame.
bitsPerFrame = 1000;
msg = randi([0 1],bitsPerFrame,1);

% Modulate data for transmission over channel
modSignal = qpskMod(msg);

% Apply Rayleigh or Rician channel object on the modulated data
rayChan(modSignal);
ricChan(modSignal);

可視化

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

release(rayChan);
release(ricChan);

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

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

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

入力サンプルを可視化するパーセンテージは SamplesToDisplay プロパティを変更することで制御できます。一般にパーセンテージが小さいほどシミュレーションの実行速度は速くなります。可視化された図が表示されたら、[Playback] ボタンをクリックし、[更新を減らして性能を改善] または [プロットの比率を下げて性能を改善] オプションをオフにして表示の精度を上げます。シミュレーション速度を上げるために、既定ではこのオプションがオンになっています。すべての入力サンプルのチャネル応答を確認するには、このオプションをオフにして SamplesToDisplay'100%' に設定します。

rayChan.Visualization = 'Impulse and frequency responses';
rayChan.SamplesToDisplay = '100%';

numFrames = 2;

for i = 1:numFrames % Display impulse and frequency responses for 2 frames
    % Create random data
    msg = randi([0 1],bitsPerFrame,1);
    % Modulate data
    modSignal = qpskMod(msg);
    % Filter data through channel and show channel responses
    rayChan(modSignal);
end

見てわかるように、チャネル周波数応答はフラットではなく、500K Hz 帯域幅を超えると大きく減衰する場合があります。これは、信号の帯域幅を超えると強度レベルが変化することが原因で、周波数選択性フェージングと呼ばれます。

同じチャネル仕様について、今度はその最初の離散パスのドップラー スペクトルを表示します。これはフェージング処理の統計的特性描写です。System object はドップラー スペクトル (青色の星) を定期的に測定します。時間の経過とともに System object で処理されるサンプルが増えるに従い、この測定値の平均が理論上のドップラー スペクトル (黄色の曲線) に近づいていきます。

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

numFrames = 5000;

for i = 1:numFrames % Display Doppler spectrum from 5000 frame transmission
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    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

numFrames = 2;

for i = 1:numFrames % Display impulse and frequency responses for 2 frames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChan(modSignal);
end

モデル化を簡略化して高速にするため、狭帯域フェージング チャネルは一般に、単一パス フェージング チャネルとしてモデル化されます つまり、マルチパス フェージング モデルは、狭帯域フェージング チャネルを重複して指定したものです。次の設定は、狭帯域フェージング チャネルに対応します。帯域制限インパルス応答の形状がフラットであることに注意してください。

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

for i = 1:numFrames % Display impulse and frequency responses for 2 frames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChan(modSignal);
end

ライス フェージング チャネル System object は、拡散マルチパス散乱と共に見通し内伝播をモデル化します。これにより、パス ゲインの振幅の変化が小さくなります。レイリー チャネルとライス チャネルの間の変動を比較するため、dsp.TimeScope System object を使用してパス ゲインを経時的に表示します。レイリー フェージング チャネル (黄色の曲線) の振幅が 30 ~ 40 dB であるの対し、ライス フェージング チャネル (青色の曲線) の場合、振幅は約 10 dB の範囲で変動することに注意してください。ライス フェージング チャネルでは、この変化は、K ファクター (現在の設定値は 10) を大きくするとさらに小さくなります。

release(rayChan);
rayChan.Visualization = 'Off'; % Turn off System object's visualization
ricChan.Visualization = 'Off'; % Turn off System object's 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 = dsp.TimeScope( ...
    'SampleRate', rayChan.SampleRate, ...
    'TimeSpan',   bitsPerFrame/2/rayChan.SampleRate, ... % One frame span
    'Name',       'Multipath Gain', ...
    '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 = qpskMod(msg);
[~, 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.ConstellationDiagram System object を使用してコンスタレーションに与える狭帯域フェージングの影響を示します。可視化するためにチャネル ダイナミクスを減速させ、最大ドップラー シフトを 5 Hz に低減しました。QPSK チャネルの入力信号に比べ、チャネル出力時の信号の減衰と回転のほかに、受信信号の ISI が少量であるために生じる歪みも確認できます。

clear hRicChan hMultipathGain;
release(rayChan);

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

% Configure a Constellation Diagram System object to show received signal
constDiag = comm.ConstellationDiagram( ...
    'Name', 'Received Signal After Rayleigh Fading');

numFrames = 16;

for n = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChanOut = rayChan(modSignal);
    % Display constellation diagram for Rayleigh channel output
    constDiag(rayChanOut);
end

信号帯域幅を 500 kb/s (250 ksym/s) に広げると、コンスタレーションにおける歪みがかなり増大することがわかります。この歪みは、広帯域信号の時間分散に由来する ISI です。チャネルの遅延スパン (15 マイクロ秒) が、QPSK シンボル周期 (4 マイクロ秒) より大きいので、結果として得られる帯域制限インパルス応答はほぼフラットではなくなります。

release(rayChan);
release(constDiag);
rayChan.SampleRate = sampleRate500kHz;

for n = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChanOut = rayChan(modSignal);
    constDiag(rayChanOut);
end