このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 でのシステム設計を参照してください。
SampleRate
— サンプル レート
1
Hz (既定値) | 実数の正のスカラー
入力信号のサンプルレート。実数の正のスカラーとして指定します。
データ型: double
PathDelays
— 離散パス遅延
0
(既定値) | 実数スカラー | 実数ベクトル
離散パスの遅延 (秒単位)。実数スカラーまたはベクトルとして指定します。
データ型: double
FilterDelaySource
— チャネル フィルターの遅延ソース
'Auto'
(既定値) | 'Custom'
チャネル フィルターの遅延ソース。'Auto'
または 'Custom'
のいずれかとして指定します。
FilterDelaySource
を'Auto'
に設定して、チャネル フィルター遅延に可能な最小値を指定します。FilterDelaySource
を'Custom'
に設定して、チャネル フィルター遅延にカスタム値を指定します。カスタム値は、可能な最小値を下回ることはできません。
データ型: char
FilterDelay
— チャネル フィルターの遅延
7
(既定値) | 実数で非負の整数スカラー
サンプルのチャネル フィルターの遅延。実数で非負の整数スカラーとして指定します。
依存関係
このプロパティを有効にするには、FilterDelaySource
プロパティを 'Custom'
に設定します。指定する値は、FilterDelaySource
を 'Auto'
に設定した場合に自動的に決定されたチャネル フィルターの遅延以上でなければなりません。
データ型: double
NormalizeChannelOutputs
— Normalize outputs by number of receive antennas
1
または true
(既定値) | 0
または false
受信アンテナの数による出力の正規化。論理値 1
(true
) または 0
(false
) として指定します。
データ型: logical
使用法
説明
は、PathDelays プロパティで指定されたパス遅延の位置における、パス ゲイン Y
= chanFilt(X
,G
)G
でマルチパス チャネルを通じて入力信号 X
をフィルター処理します。
入力引数
X
— 入力信号
行列
入力信号。行列として指定します。引数 X
は NS 行 NT 列の行列でなければなりません。ここで、NS はサンプルの数、NT は送信アンテナ数です。
このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。
データ型: double
| single
複素数のサポート: あり
G
— パス ゲイン
配列
パス ゲイン。配列として指定します。入力 G は、NS×NP×NT×NR または 1×NP×NT×NR の配列でなければなりません。ここで、NR は受信アンテナの数、NP は PathDelays プロパティの長さによって決まるパスの数です。
データ型: double
| single
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
分散 MIMO システムにおけるチャネルの空間ダイバーシティの調査
分散 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 2x2 EVA プロファイルのチャネル フィルター処理の実行
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);
MIMO チャネルの相互関係にあるダウンリンク伝送とアップリンク伝送
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
アルゴリズム
チャネル フィルターでは、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++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この System object は GPU 配列の入力をサポートします。詳細については、GPU を使用したシミュレーションの高速化を参照してください。
使用上の注意および制限:
バージョン履歴
R2020b で導入MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)