このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
信号の次元の決定
Simulink® ブロックは、1 次元または 2 次元の信号を出力することができます。Simulink ユーザー インターフェイスとドキュメンテーションは、一般に 1 次元信号を ベクトル、2 次元信号を行列として参照します。1 要素配列はスカラーとも呼びます。行ベクトルは、1 行の 2 次元配列です。列ベクトルは、1 列の 2 次元配列です。
1 次元信号は、シミュレーション タイム ステップごとに 1 つの配列 (ベクトル) をもつ単一周波数の 1 次元配列出力のシリーズで構成されます。
2 次元信号は、ブロックのサンプル時間ごとに 1 つの 2 次元配列 (行列) をもつ単一周波数の 2 次元配列のシリーズで構成されます。
多次元信号は、ブロック サンプル時間ごとに 1 つの配列という頻度で出力される多次元 (2 次元以上) 配列のシリーズで構成されます。多次元配列は、[4 3] のように、有効な MATLAB® 多次元表現を使用して指定できます。多次元配列については、多次元配列を参照してください。
Simulink ブロックは、シミュレーション中に受け取ったり出力することが可能な信号の次元で変化します。ブロックの中には、任意の次元の信号を受け入れ、出力できるものがあります。スカラーまたはベクトル信号のみを受け入れ、出力できるものもあります。
メモ
Simulink は、シミュレーション中に信号の大きさが動的に変化することをサポートしません。つまり、信号の次元は、シミュレーションの実行中に定数でなければなりません。ただし、シミュレーション中に信号のサイズを変更できます。可変サイズの信号の基礎を参照してください。
ブロックが非スカラー信号を出力可能な場合、ブロックが出力する信号の次元は、ブロックがソース ブロックである場合はブロックのパラメーターによって決まり、そうでない場合はブロックの入力とパラメーターの次元によって決まります。
信号が最終的にシミュレーションで使用する次元を判別するには、最初にブロック線図を更新します (たとえば Ctrl+D を押します)。次に以下のいずれかの方法を選択します。
ブロック線図に直接次元を表示します。この手法を使用してブロックのパスに沿って信号の次元をトレースします。モデルで、[デバッグ] タブで [情報のオーバーレイ] 、 [信号の次元]) を選択します。
モデル データ エディターで次元を調べます。検索および並べ替えが可能なテーブルに情報が表示されます。テーブルの [次元] 列の各セルの右側に、モデル内の対応する信号線の正しい次元が表示されます。
多次元信号をサポートする Simulink ブロック
Simulink ブロック データ型サポート テーブルには、多次元信号をサポートするブロックを識別する列が含まれます。
MATLAB コマンド ラインで「
showblockdatatypetable
」と入力します。別のウィンドウで Simulink ブロック データ型サポート テーブルが表示されます。
[ブロック] 列で、Simulink ブロックという名前を見つけます。右の列はデータ型または機能です。列に [X] が付いている場合は、その機能がサポートされていることを示します。
Simulink は、32 次元までの信号をサポートしています。32 次元以上の信号は使用しないでください。
ソース ブロックの出力の次元の決定
ソース ブロックは、入力のないブロックです。ソース ブロックの例としては、Constant ブロックや Sine Wave ブロックなどがあります。Simulink ソース ブロックの一覧は、Sourcesを参照してください。ソース ブロックの出力の次元は、そのブロックの [ベクトル パラメーターを 1 次元として解釈] パラメーターがオフである (すなわち [ブロック パラメーター] ダイアログ ボックスで選択されていない) 場合は、ソース ブロックの出力値パラメーターの次元と同じになります。[ベクトル パラメーターを 1 次元として解釈] パラメーターがオンである場合は、パラメーターの次元が N 行 1 列または 1 行 N 列でない限り、出力の次元は出力値パラメーターの次元と同じになります。後者の場合、ブロックは幅 N のベクトル信号を出力します。
ソース ブロックの出力値パラメーター (複数の場合もあり) と [ベクトル パラメーターを 1 次元として解釈] パラメーターによってソース ブロックの出力の次元がどのように決定されるかを考える例として、Constant ブロックの場合を見てみましょう。このブロックは、[定数値] パラメーターに等しい定数信号を出力します。[定数値] パラメーターの次元と [べクトル パラメーターを 1 次元として解釈] パラメーターの設定によって、ブロック出力の次元がどのように決まるかを次の表に示します。
定数値 | ベクトル パラメーターを 1 次元として解釈 | 出力 |
---|---|---|
スカラー | オフ | 1 要素配列 |
スカラー | オン | 1 要素配列 |
1 行 N 列 | オフ | 1 行 N 列 |
1 行 N 列 | オン | N 要素ベクトル |
N 行 1 列 | オフ | N 行 1 列 |
N 行 1 列 | オン | N 要素ベクトル |
M 行 N 列 | オフ | M 行 N 列 |
M 行 N 列 | オン | M 行 N 列 |
Simulink のソース ブロックでは、出力する信号の次元または Simulink による次元の推測元である値を指定することができます。したがって、ソース ブロックを使用して、さまざまな次元の信号をモデルに組み込むことができます。
非ソース ブロックの出力の次元の決定
ブロックに入力がある場合、スカラー拡張後の出力の次元は入力の次元と同じになります (信号とパラメーターの次元に関するルールで説明するように、すべての入力の次元が同じでなければなりません)。
信号とパラメーターの次元に関するルール
Simulink モデルを作成する際には、信号とパラメーターの次元に関する次のルールに従わなければなりません。
入力信号の次元に関するルール
ブロックへのすべての非スカラー入力は、次元が同じでなければなりません。
1 つのブロックにスカラー入力と非スカラー入力が混在していても構いませんが、すべての非スカラー入力の次元が同じでなければなりません。Simulink は、非スカラー入力と次元が同じになるようにスカラー入力を拡張します (入力とパラメーターのスカラー拡張を参照)。
ブロックパラメーターの次元に関するルール
一般に、ブロック パラメーターは、ブロックへの入力の次元と同じ次元をもたなければなりません。Simulink は、この一般ルールに関連した柔軟性を提供する処理をいくつか実行します。
ブロックは、非スカラー入力に対応するスカラー パラメーターをもつことができます。この場合、Simulink は、非スカラー入力と次元が同じになるようにスカラー パラメーターを拡張します (入力とパラメーターのスカラー拡張を参照)。
入力がベクトルの場合、対応するパラメーターは、Nx1 または 1xN の行列になります。この場合、Simulink は、N 個の行列要素を、入力ベクトルの対応する要素に適用します。このような例外処理が行われるため、実際には 1xN または Nx1 の行列である MATLAB の行ベクトルや列ベクトルを使用して、ベクトル入力に適用するパラメーターを指定することができます。
ベクトルや行列の入力変換に関するルール
Simulink は、次のように、ベクトルを行または列の行列に、あるいは行または列の行列をベクトルに変換します。
行列を必要とする入力にベクトル信号が接続される場合、Simulink は、ベクトルを 1 行または 1 列の行列に変換します。
1 列あるいは 1 行の行列が、ベクトルを必要とする入力に接続される場合、Simulink は行列をベクトルに変換します。
ブロックへの入力が、ベクトルと行列の混在で、行列入力がすべて 1 列あるいは1行の場合、Simulink は、それぞれベクトルを 1 列あるいは1行の行列に変換します。
メモ
シミュレーション中にベクトルや行列の変換が発生した場合に警告メッセージやエラー メッセージを表示するように、Simulink を構成することができます。詳細については、ベクトル/行列ブロック入力変換を参照してください。
入力とパラメーターのスカラー拡張
"スカラー拡張" とは、スカラー値を非スカラー配列に変換することです。Simulink は、ほとんどのブロックに対する入力またはパラメーターにスカラー拡張を適用します。Simulink がブロックの入力とパラメーターにスカラー拡張を適用するかどうかについては、それぞれのブロックの節に記載されています。
入力のスカラー拡張とは、他の非スカラー入力や非スカラー パラメーターの次元と一致するようにスカラー入力を拡張する処理です。ブロックへの入力にスカラー信号と非スカラー信号が混在している場合、Simulink は、スカラー信号を拡張して、他の非スカラー入力と同じ次元の非スカラー信号にします。たとえば、関連付けられた非スカラー入力が 3 の次元をもつ場合、4 のスカラーがベクトル [4 4 4] に拡張されます。
パラメーターのスカラー拡張とは、非スカラー入力の次元と一致するようにスカラー ブロック パラメーターを拡張する処理です。
入力 | 関連付けられたブロック パラメーター | スカラー拡張 |
---|---|---|
スカラー | 非スカラー | パラメーターの次元に一致するように入力が拡張されます。 スカラー入力と非スカラー パラメーターを参照してください。 |
非スカラー | スカラー | 入力要素の数と一致するようにスカラー パラメーターが拡張されます。 非スカラー入力とスカラー パラメーターを参照してください。 |
スカラーと非スカラーの組み合わせ | 対応するパラメーターなし | 最大の非スカラー入力の次元と一致するようにスカラー入力が拡張されます。 スカラー入力、非スカラー入力、関連付けられていないパラメーターを参照してください。 |
スカラー入力と非スカラー パラメーター
この例では、Gain ブロックへの Constant ブロック入力はスカラーです。Gain ブロックの [ゲイン] パラメーターは非スカラーです。Simulink は、非スカラーの [ゲイン] パラメーターの次元に一致するようにスカラー入力を拡張します。これは、Display ブロックのシミュレーション結果に反映されています。
非スカラー入力とスカラー パラメーター
この例では、Gain ブロックへの Constant ブロック入力は非スカラーです。Gain ブロックの [ゲイン] パラメーターはスカラーです。Simulink は、Constant ブロックの非スカラー入力の次元に一致するようにスカラー パラメーターを拡張します。これは、Display ブロックのシミュレーション結果に反映されています。
スカラー入力、非スカラー入力、関連付けられていないパラメーター
この例では、Sum ブロックへの Constant1 ブロック入力は非スカラーであり、Constant2 ブロック入力はスカラーです。Sum ブロックには、関連付けられたパラメーターがありません。Simulink は、非スカラーの Constant1 ブロック入力の次元と一致するように Constant2 のスカラー入力を拡張します。入力は拡張されてベクトル [3 3 3]
になります。
コンパイルされた端子の次元の取得
以下の例では、CompiledPortDimensions
パラメーターを使用して、コンパイル中に Simulink モデル内にあるブロックの端子信号の次元を取得する方法を示します。非バス信号の場合、端子信号の次元はクエリする端子に関連付けられた信号の次元を表します。バスの場合、端子信号の次元は、クエリする端子に関連付けられたバスの型、バスにより伝達される信号の数、およびこれらの信号の次元で構成されます。信号の次元を表示するには、Simulink エディターの [デバッグ] タブで [情報のオーバーレイ]、[信号]、[信号の次元] をクリックします。信号の次元の詳細については、信号の次元を参照してください。
非バス信号におけるコンパイルされた端子の次元の取得
Constant ブロックの出力端子をクエリするときにConstantブロックの端子信号の次元を取得します。ブロックは非バス信号 OutSig
を出力するため、配列 dim
で表される端子信号の次元は非バス出力信号の次元です。
SimulationCommand
を使用して ex_nonBusPortDim
モデルをプログラムによってステップ実行します。
open_system('ex_nonBusPortDim.slx') set_param('ex_nonBusPortDim','SimulationCommand','start') set_param('ex_nonBusPortDim','SimulationCommand','pause')
PortHandles
パラメーターを使用してブロック名をプログラムによって変数に保存します。その後、CompiledPortDimensions
パラメーターを使用して次元を取得します。
gcb='ex_nonBusPortDim/Constant'; ph= get_param(gcb,'PortHandles'); dim= get_param(ph.Outport,'CompiledPortDimensions')
dim = 1×3
2 2 3
非バス信号の場合、結果は最初の要素が OutSig
の次元数 2
である配列になります。次の 2 つの要素は 2
と 3
で、これらは次元の値です。
シミュレーションをプログラムによって停止するには、SimulationCommand
を使用します。
set_param('ex_nonBusPortDim','SimulationCommand','stop')
バーチャル バスにおけるコンパイルされた端子の次元の取得
Bus Creator1 ブロックの出力端子をクエリするときにBus Creatorブロックの端子信号の次元を取得します。ブロックはバーチャル バスを出力するため、配列 dim
で表される端子信号の次元は、Bus Creator1 ブロックの出力端子に関連付けられたバスの型、バスにより伝達される信号の数、およびこれらの信号の次元で構成されます。
SimulationCommand
を使用して ex_virtualBusPortDim
モデルをプログラムによってステップ実行します。
open_system('ex_virtualBusPortDim.slx') set_param('ex_virtualBusPortDim','SimulationCommand','start') set_param('ex_virtualBusPortDim','SimulationCommand','pause')
PortHandles
パラメーターを使用してブロック名をプログラムによって変数に保存します。その後、CompiledPortDimensions
パラメーターを使用して次元を取得します。
gcb='ex_virtualBusPortDim/Bus Creator1'; ph= get_param(gcb,'PortHandles'); dim= get_param(ph.Outport,'CompiledPortDimensions')
dim = 1×16
-2 4 1 2 1 1 3 4 5 6 5 2 3 4 5 6
バスの場合は、結果に追加の要素が含まれます。最初の要素は -2
で、これは Bus Creator1 ブロックの出力端子がバーチャル バスに対応することを示します。2 番目の要素は 4
で、これはリーフ ノードの数です。その後の要素のパターンは非バス信号と同じです。
最初のリーフ ノードの出力端子は
1
次元で、その次元の値は2
です。2 番目のリーフ ノードの出力端子は
1
次元で、その次元の値は1
です。3 番目のリーフ ノードの出力端子は
3
次元で、それらの次元の値は4 5 6
です。4 番目のリーフ ノードの出力端子は
5
次元で、それらの次元の値は2 3 4 5 6
です。
シミュレーションをプログラムによって停止するには、SimulationCommand
を使用します。
set_param('ex_virtualBusPortDim','SimulationCommand','stop')
非バーチャル バスにおけるコンパイルされた端子の次元の取得
Bus Creator1 ブロックの出力端子をクエリするときにBus Creatorブロックの端子信号の次元を取得します。Bus Creator1 ブロックはいずれかの入力端子で非バーチャル バスを受け取り、バーチャル バスを出力します。ブロックはバーチャル バスを出力するため、配列 dim
で表される端子信号の次元は、Bus Creator1 ブロックの出力端子に関連付けられたバスの型、バスにより伝達される信号の数、およびこれらの信号の次元で構成されます。
SimulationCommand
を使用して ex_nonvirtualBusPortDim
をステップ実行します。
open_system('ex_nonvirtualBusPortDim.slx') set_param('ex_nonvirtualBusPortDim','SimulationCommand','start') set_param('ex_nonvirtualBusPortDim','SimulationCommand','pause')
PortHandles
パラメーターを使用してブロック名をプログラムによって変数に保存します。その後、CompiledPortDimensions
パラメーターを使用して次元を取得します。
gcb='ex_nonvirtualBusPortDim/Bus Creator1'; ph= get_param(gcb,'PortHandles'); dim= get_param(ph.Outport,'CompiledPortDimensions')
dim = 1×8
-2 3 1 2 1 1 1 1
次元をクエリするときは、非バーチャル バスはスカラーとして扱われます。最初の要素は -2
で、これは Bus Creator1 ブロックの出力端子がバーチャル バスに対応することを示します。非バーチャル バスはスカラーとして扱われるため、配列 dim
の 2 番目の要素は 3
で、これはリーフ ノードの数が 4 つではなく 3 つであることを示します。その後の要素のパターンは非バス信号と同じです。
最初のリーフ ノードの出力端子は
1
次元で、その次元の値は2
です。2 番目のリーフ ノードの出力端子は
1
次元で、その次元の値は1
です。3 番目のリーフ ノードは、非バーチャル バス
NestedBus
を出力する Bus Creator ブロックに対応します。3 番目のリーフ ノードの出力端子は1
次元で、その次元の値は1
です。
シミュレーションをプログラムによって停止するには、SimulationCommand
を使用します。
set_param('ex_nonvirtualBusPortDim','SimulationCommand','stop')