comm.ChannelFilter
指定されたパス遅延でマルチパス ゲインを使用して信号をフィルター処理
説明
comm.ChannelFilter
System object™ を使用し、指定したパス遅延でのマルチパス ゲインを使用して信号をフィルター処理します。
マルチパス ゲインを使用して信号をフィルター処理するには、次を行います。
comm.ChannelFilter
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
説明
は、指定されたパス遅延のパス ゲインで入力信号をフィルター処理するマルチパス チャネル フィルター System object を作成します。chanFilt
= comm.ChannelFilter
は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、chanFilt
= comm.ChannelFilter(Name
,Value
)'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
使用法
説明
は、PathDelays プロパティで指定されたパス遅延の位置における、パス ゲイン Y
= chanFilt(X
,G
)G
でマルチパス チャネルを通じて入力信号 X
をフィルター処理します。
入力引数
入力信号。NS 行 NT 列の行列または dlarray
(Deep Learning Toolbox) オブジェクトとして指定します。NS はサンプル数、NT は送信アンテナ数です。詳細については、配列のサポートを参照してください。
このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。
データ型: double
| single
複素数のサポート: あり
パス ゲイン。配列として指定します。詳細については、配列のサポートを参照してください。
入力 G
は、NS×NP×NT×NR または 1×NP×NT×NR の配列でなければなりません。ここで、NR は受信アンテナの数、NP は PathDelays プロパティの長さによって決まるパスの数です。
データ型: double
| single
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
分散 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{:}])
レイ トレーシングでは、それぞれの送信機から受信機までの複数の光線のパスが検出されます。マップから、最初の送信機が 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 チャネル オブジェクトから返されたダウンリンクとアップリンクのパス ゲイン配列のサイズを x x x 配列として表示します。
は、サンプル数です。
は、パス遅延の数です。
は、送信アンテナの数です。ダウンリンクの場合は
Nant1
、アップリンクの場合はNant2
です。は、受信アンテナの数です。ダウンリンクの場合は
Nant2
、アップリンクの場合はNant1
です。
size(pgDownlink)
ans = 1×4
1000 3 3 2
size(pgUplink)
ans = 1×4
1000 3 2 3
MIMI チャネル オブジェクトから返されたチャネル出力の行列のサイズを 行 列の行列として表示します。ここで、 はサンプル数、 は受信アンテナの数です。
size(yDL)
ans = 1×2
1000 2
size(yUL)
ans = 1×2
1000 3
詳細
comm.ChannelFilter
オブジェクトは、配列、dlarray
(Deep Learning Toolbox)、または gpuArray
(Parallel Computing Toolbox) で表される入力信号をサポートします。
X
がgpuArray
を保持するdlarray
である場合、G
はgpuArray
でなければなりません。X
が配列を保持するdlarray
である場合、G
は配列でなければなりません。バッチ観測値の数 (NB) はオプションの次元で、サポートされているどのデータ タイプであってもこの入力に追加することができます。変数 NB はサポートされていません。NB 次元が含まれる場合は次のようになります。
dlarray
オブジェクトをサポートする Communications Toolbox™ 機能の一覧については、無線用 AIを参照してください。
アルゴリズム
チャネル フィルターでは、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 を参照してください。
拡張機能
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
この System object は GPU 配列の入力をサポートします。詳細については、GPU を使用したシミュレーションの高速化を参照してください。
使用上の注意および制限:
バージョン履歴
R2020b で導入MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)