Main Content

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

comm.ChannelFilter

指定されたパス遅延でマルチパス ゲインを使用して信号をフィルター処理

R2020b 以降

説明

comm.ChannelFilter System object™ を使用し、指定したパス遅延でのマルチパス ゲインを使用して信号をフィルター処理します。

マルチパス ゲインを使用して信号をフィルター処理するには、次を行います。

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

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

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

作成

説明

chanFilt = comm.ChannelFilter は、指定されたパス遅延のパス ゲインで入力信号をフィルター処理するマルチパス チャネル フィルター System object を作成します。

chanFilt = comm.ChannelFilter(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、'SampleRate',1e6 はサンプル レートを 1 MHz に設定します。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

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

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

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

入力信号のサンプルレート。実数の正のスカラーとして指定します。

データ型: double

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

データ型: double

チャネル フィルターの遅延ソース。'Auto' または 'Custom' のいずれかとして指定します。

  • FilterDelaySource'Auto' に設定して、チャネル フィルター遅延に可能な最小値を指定します。

  • FilterDelaySource'Custom' に設定して、チャネル フィルター遅延にカスタム値を指定します。カスタム値は、可能な最小値を下回ることはできません。

データ型: char

サンプルのチャネル フィルターの遅延。実数で非負の整数スカラーとして指定します。

依存関係

このプロパティを有効にするには、FilterDelaySource プロパティを 'Custom' に設定します。指定する値は、FilterDelaySource'Auto' に設定した場合に自動的に決定されたチャネル フィルターの遅延以上でなければなりません。

データ型: double

受信アンテナの数による出力の正規化。論理値 1 (true) または 0 (false) として指定します。

データ型: logical

使用法

説明

y = chanFilt(x,g) は、PathDelays プロパティで指定されたパス遅延の位置における、パス ゲイン g でマルチパス チャネルを通じて入力信号 x をフィルター処理します。

入力引数

すべて展開する

入力信号。行列として指定します。引数 x は Ns 行 Nt 列の行列でなければなりません。ここで、Ns はサンプルの数、Nt は送信アンテナ数です。

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

パス ゲイン。配列として指定します。入力 G は、Ns x Np x Nt x Nr または 1 x Np x Nt x Nr の配列でなければなりません。ここで、Nr は受信アンテナの数、Np はパスの数、つまり PathDelays プロパティの長さです。

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

出力引数

すべて展開する

チャネル出力。Ns 行 Nr 列の行列として返されます。x または g がデータ型 single として入力される場合、出力データ型は single です。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

分散 MIMO システムで、地理的に離れた 2 つの送信機から同じ信号を送信して、それらの信号を 1 つの受信機で受信して結合し、空間ダイバーシティを調査します。レイ トレーシングを使用して、各送信機から受信機までの間の伝播パスとゲインを解析します。

レイ トレーシングの実行

シカゴ市の建物データを OpenStreetMap® (osm) ファイルからsiteviewerにインポートします。osm ファイルの詳細については、[1] を参照してください。市内に 2 つの送信機サイトと 1 つの受信機サイトを配置します。

sv = siteviewer("Buildings","Chicago.osm"); 
rx = rxsite("Name","Receiver", ...
    "Latitude",41.878543,"Longitude",-87.630599, ...
    "AntennaHeight",1.5);
show(rx)
tx1 = txsite("Name","Transmitter #1", ...
    "Latitude",41.878996,"Longitude",-87.629361); 
show(tx1)
tx2 = txsite("Name","Transmitter #2", ...
    "Latitude",41.880142,"Longitude",-87.630850);
show(tx2)

送信機サイトから受信機サイトまでのレイ トレーシングを実行します。その後、伝播パスをプロットします。既定では、関数 raytrace は Shooting and Bouncing Rays (SBR) 法を使用して、最大 2 回の反射を伴うパスを計算します。

rays = raytrace([tx1 tx2],rx);
plot([rays{:}])

Many propagation paths from transmitter site to receiver site

レイ トレーシングでは、それぞれの送信機から受信機までの複数の光線のパスが検出されます。マップから、最初の送信機が 2 番目の送信機よりも受信機に近いことを視覚的に確認できます。また、最初の送信機のほうが受信機への反射パスの数が多いことも確認できます。各送信機に関連付けられた伝播遅延を表示します。

pd1 = [rays{1}.PropagationDelay]
pd1 = 1×10
10-6 ×

    0.3830    0.3839    0.5476    0.6482    0.5485    0.5486    0.6572    0.6945    0.7140    0.8874

pd2 = [rays{2}.PropagationDelay]
pd2 = 1×5
10-6 ×

    0.5967    0.5973    0.6059    0.6066    0.6255

送信機サイトごとに 1 つのチャネル フィルターを作成します。サンプル レートを 30 MHz に指定し、7 つの光線の中で最小遅延を時間 0 の基準として使用します。

chanFilt1 = comm.ChannelFilter( ...
    "SampleRate",30e6, ...
    "PathDelays",pd1-min([pd1, pd2]))
chanFilt1 = 
  comm.ChannelFilter with properties:

                 SampleRate: 30000000
                 PathDelays: [0 8.7598e-10 1.6459e-07 2.6516e-07 1.6553e-07 1.6565e-07 2.7417e-07 3.1151e-07 3.3105e-07 5.0442e-07]
          FilterDelaySource: 'Auto'
    NormalizeChannelOutputs: true

chanFilt2 = comm.ChannelFilter( ...
    "SampleRate",30e6, ...
    "PathDelays",pd2-min([pd1, pd2]))
chanFilt2 = 
  comm.ChannelFilter with properties:

                 SampleRate: 30000000
                 PathDelays: [2.1372e-07 2.1434e-07 2.2294e-07 2.2357e-07 2.4247e-07]
          FilterDelaySource: 'Auto'
    NormalizeChannelOutputs: true

2 つの送信機の個々のチャネル フィルターにより、異なるフィルター遅延値が得られます。comm.ChannelFilterのオブジェクト関数 info を使用して、2 つのチャネル フィルターのフィルター遅延を表示します。

fd1 = chanFilt1.info.ChannelFilterDelay
fd1 = 7
fd2 = chanFilt2.info.ChannelFilterDelay
fd2 = 1

受信機サイトでチャネル出力を結合するためには、2 つのチャネル フィルターのフィルター遅延が同じでなければなりません。各チャネル フィルターのフィルター遅延をカスタマイズして、個別に計算された遅延値のうちの大きいほうの値を使用します。

set(chanFilt1,"FilterDelaySource","Custom", ...
    "FilterDelay",max(fd1,fd2));
set(chanFilt2,"FilterDelaySource","Custom", ...
    "FilterDelay",max(fd1,fd2));

受信信号結合の適用

システム パラメーターを設定してサイトごとに 1 つの等方性アンテナのみを割り当てます。

Nt = 1;    % Number of transmit elements
Ns = 1000; % Samples per frame
M  = 64;   % Modulation order 

計算された光線からパス ゲインを取得します。サイトは静的であり、ドップラー シフトは生じないと仮定します。

pg1  = 10.^(-[rays{1}.PathLoss]/20) .* ...
    exp(1i*[rays{1}.PhaseShift]);
pg2  = 10.^(-[rays{2}.PathLoss]/20) .* ...
    exp(1i*[rays{2}.PhaseShift]);

ランダムな 64-QAM 信号のフレームを生成します。各送信機サイトのチャネル フィルター処理と受信信号結合を実行します。結合された 2x1 分散 MIMO チャネルでは max(fd1, fd2) のフィルター遅延が発生します。

x  = qammod(randi([0, M-1],Ns,Nt),M);
y = chanFilt1(x,pg1) + chanFilt2(x,pg2);

付録

[1] osm ファイルは、クラウドソーシングによる世界中の地図データへのアクセスを提供する https://www.openstreetmap.org からダウンロードされたものです。このデータは Open Data Commons Open Database License (ODbL) https://opendatacommons.org/licenses/odbl/ によりライセンスされています。

LTE 拡張車両 A モデル (EVA) 遅延プロファイルを使用してチャネル フィルター オブジェクトを構築します。

chanFilt = comm.ChannelFilter( ...
    'SampleRate', 30.72e6, ...
    'PathDelays', [0 30 150 310 370 710 1090 1730 2510]*1e-9);

システム パラメーターを設定します。2 つの送信機アンテナと受信機アンテナがあります。

[Nt, Nr] = deal(2);
Ns = 30720;
Np = length(chanFilt.PathDelays);
M  = 256;

ランダムな 256-QAM 信号と複素数のパス ゲインを生成します。

x = qammod(randi([0, M-1], Ns, Nt), M);
g = complex(rand(Ns, Np, Nt, Nr), rand(Ns, Np, Nt, Nr));

信号を EVA 遅延プロファイルのパス ゲインでフィルター処理します。

y = chanFilt(x, g);

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

アルゴリズム

チャネル フィルターでは、0、0.02、0.04、…、0.98 における各候補の非整数遅延に対して長さ 16 の係数を使用して非整数遅延 (FD) 有限インパルス応答 (FIR) バンドパス フィルターを実装します。

各離散パスは、その最も近い候補の非整数遅延へ丸められ、遅延エラー制限はサンプル時間の 1% になります。80% を超える群遅延帯域幅および 90% を超える振幅帯域幅を達成するには、アルゴリズムで各非整数遅延の最適な FIR 係数値を選択し、同時に次の基準を満たします。

  • 群遅延リップル ≤ 10%

  • 振幅リップル ≤ 2 dB

  • 振幅バンドエッジ減衰 = 3 dB

プロットは、群遅延リップル、振幅リップル、および振幅バンドエッジ減衰の設計基準を満たす帯域幅を示します。

詳細については、MATLAB® Central の A Matlab-based Object-Oriented Approach to Multipath Fading Channel Simulation を参照してください。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2020b で導入