Main Content

Simulink.sdi.Signal

信号データおよびメタデータにアクセスする

説明

Simulink.sdi.Signal オブジェクトには、シミュレーション データ インスペクターの信号のデータおよびメタデータが含まれます。Signal オブジェクト プロパティを使用して信号メタデータを検証し、時間プロットで信号を可視化し、関数 Simulink.sdi.compareSignals を使用して信号を比較します。

作成

Simulink.sdi.Signal オブジェクトは、モデル シミュレーション内でログ記録した信号ごとに作成されるか、シミュレーション データ インスペクターにインポートされます。シミュレーション データ インスペクター内の Signal オブジェクトにはいくつかの方法でアクセスできます。一般に、Signal オブジェクトにアクセスするには、信号が含まれる Simulink.sdi.Run オブジェクトを最初に取得しなければなりません。

  • 関数 Simulink.sdi.getSignal によって、指定した信号 ID に対応する Signal オブジェクトが返される。

  • 関数 getSignal によって、指定された Run オブジェクト内で指定された信号 ID をもつ Signal オブジェクトが返される。

  • 関数 getSignalByIndex によって、指定された Run オブジェクト内で指定されたインデックスにある Signal オブジェクトが返される。

プロパティ

すべて展開する

信号プロパティ

この プロパティ は読み取り専用です。

信号を識別する一意の数値。整数として返されます。シミュレーション データ インスペクターは一意の数値 ID を各実行と信号に割り当てます。

この プロパティ は読み取り専用です。

信号を含む実行の実行識別子。整数として返されます。シミュレーション データ インスペクターは一意の数値 ID を各実行と信号に割り当てます。

信号の名前。文字ベクトルまたは string として指定します。Signal オブジェクトにシミュレーションからログ記録されたデータが含まれる場合、その名前はモデル内の信号に対して指定した名前と一致します。モデルで名前が指定されない場合、その信号名は、その信号を作成したブロックへのブロック パスになります。

例: 'fuel'

信号タイプ。次の値のいずれかとして指定します。

  • 'Signals' — 信号ログ データ。

  • 'Outports' — 出力ログ データ。

  • 'States' — 状態ログ データ。

  • 'Data Store Memory' — データ ストア メモリ ログ データ。

  • 'Parametrs' — ログ記録されたパラメーター データ。

  • 'Stateflow' — Stateflow® データ。

  • 'Simscape' — Simscape™ データ。

  • 'Assessments'Simulink® Test™ 評価データ。

  • 'Profiling' — 実行プロファイリング データ。

シミュレーション データのログ記録によって作成されたのではないデータの Domain プロパティは空です。

信号の説明。文字ベクトルまたは string として指定します。Description プロパティを使用して、信号に注釈を付けるか、Name 外の信号成分を特定できます。Simscape データをシミュレーション データ インスペクターに記録すると、ノードごとに Description プロパティが自動的に入力されます。

この プロパティ は読み取り専用です。

ディスクに保存される信号データの単位。文字ベクトルまたは string として指定します。モデルのシミュレーションによって生成された信号については、Signal オブジェクトの保存された単位はモデルで指定された単位を使用します、単位をもたない信号に対して表示単位を指定する場合、同じ単位を使用して保存された単位が設定されます。異なる単位を使用する別の信号と一緒に信号を解析するには、信号の表示単位を変更します。シミュレーション データ インスペクターは変換を実行し、表示単位を使用してデータをプロットします。

信号の保存された単位を変換するには、関数 convertUnits を使用します。保存された単位の変換は元に戻すことをサポートしておらず、桁落ちが発生する可能性があります。

例: 'g/s'

シミュレーション データ インスペクターで信号データを表示するために使用される単位。文字ベクトルまたは string として指定します。信号の表示単位は、ディスクに保存されているデータを反映する保存済み単位とは異なる場合があります。信号の表示単位を変更して、シミュレーション データ インスペクターでデータを解析します。シミュレーション データ インスペクターでの単位の基本設定によって、ログ記録された信号データとインポートされた信号データの表示単位が変更される可能性があります。詳細については、信号の表示単位を参照してください。

例: 'm/s'

この プロパティ は読み取り専用です。

信号データのデータ型。文字ベクトルまたは string として返されます。

例: 'double'

この プロパティ は読み取り専用です。

信号データの複雑度。"real" または "complex" として返されます。

例: "real"

この プロパティ は読み取り専用です。

信号のサンプル時間。文字ベクトルまたはスカラーとして返されます。'Continuous' の値は、可変ステップ シミュレーションを示します。

例: 'Continuous'

例: '0.1'

この プロパティ は読み取り専用です。

信号を作成したモデルの名前。文字ベクトルとして返されます。モデルのシミュレーションにより作成されなかったデータが含まれる Signal オブジェクトの Model プロパティは空です。

例: 'sldemo_fuelsys'

この プロパティ は読み取り専用です。

信号を作成したブロックのブロック パス。文字配列として返されます。BlockPath プロパティはモデルの階層構造が含まれない相対パスです。モデルのシミュレーションにより作成されなかったデータが含まれる Signal オブジェクトの BlockPath プロパティは空です。

例: 'sldemo_fuelsys/Engine Gas Dynamics'

この プロパティ は読み取り専用です。

完全なモデルの階層構造を含む信号を作成したブロックの完全なブロック パス。文字ベクトルとして返されます。参照モデル内の信号の場合、FullBlockPath は絶対パスを含む cell 配列です。その他の信号の場合、FullBlockPathBlockPath と同じです。モデルのシミュレーションにより作成されなかったデータが含まれる Signal オブジェクトの FullBlockPath プロパティは空です。

この プロパティ は読み取り専用です。

信号を作成したブロックの名前。文字ベクトルとして返されます。モデルのシミュレーションにより作成されなかったデータが含まれる Signal オブジェクトの BlockName プロパティは空です。

例: 'Engine Gas Dynamics'

この プロパティ は読み取り専用です。

信号を作成するブロックの信号に接続されている出力端子のインデックス。モデルのシミュレーションにより作成されなかったデータが含まれる Signal オブジェクトの PortIndex プロパティは空です。

例: 1

この プロパティ は読み取り専用です。

信号の次元。整数または整数配列として返されます。

例: [1 2]

この プロパティ は読み取り専用です。

行列内の信号のインデックス。整数配列として返されます。

この プロパティ は読み取り専用です。

信号のサンプル数。整数として返されます。

信号の時間とデータ値。非バス信号またはバス信号のバス階層と一致する構造体の timeseries オブジェクトとして返されます。

この プロパティ は読み取り専用です。

信号を含む高位の構造体の名前。文字ベクトルとして返されます。RootSource プロパティにはインポートされた信号の値のみが含まれます。

例: 構造体 xout が含まれる Simulink.SimulationOutput オブジェクト simOut をインポートする場合、RootSource'simOut.get('xout')' です

この プロパティ は読み取り専用です。

信号時間データへのパス。文字ベクトルとして返されます。TimeSource プロパティにはインポートされた信号の値のみが含まれます。

例: 構造体 xout が含まれる Simulink.SimulationOutput オブジェクト simOut をインポートする場合、TimeSource'simOut.get('xout').time' です

この プロパティ は読み取り専用です。

信号サンプル値へのパス。文字配列として返されます。DataSource プロパティにはインポートされた信号の値のみが含まれます。

例: 構造体 xout が含まれる Simulink.SimulationOutput オブジェクト simOut をインポートする場合、DataSource'simOut.get('xout').signals(1).values' です

この プロパティ は読み取り専用です。

合成信号に含まれる信号。Simulink.sdi.Signal オブジェクトとして返されます。スカラー信号の Children プロパティは空です。

シミュレーション データ インスペクターで信号データを表示するために使用されるスケーリング。ゼロ以外の実数のスカラーとして指定します。Display Scaling は乗算器の役割を果たし、シミュレーション データ インスペクター内で個々の信号の外観をスケーリングできます。表示をスケーリングしても、信号のデータ値は変わりません。信号のスケーリング方法は、可視化タイプによって異なります。

可視化スケーリング
時間プロット個々の信号表示を y 方向にスケーリングします。
スパークライン個々の信号表示を y 方向にスケーリングします。
XY信号表示を y 方向と x 方向に個別にスケーリングします。
配列多次元信号表示の各要素を、同じ方法で y 方向にスケーリングします。
マップ信号表示を経度方向と緯度方向に個別にスケーリングします。これにより、他の単位を経度と緯度に変換できます。

シミュレーション データ インスペクターで信号データを表示するために使用されるオフセット。実数のスカラーとして指定します。Display Offset を使用すると、シミュレーション データ インスペクター内で個々の信号の外観をシフトできます。表示をオフセットしても、信号のデータ値は変わりません。信号のシフト方法は、可視化タイプによって異なります。

可視化スケーリング
時間プロット個々の信号表示を y 方向にシフトします。
スパークライン個々の信号表示を y 方向にシフトします。
XY信号表示を y 方向と x 方向に個別にシフトします。
配列多次元信号表示の各要素を、同じ方法で y 方向にシフトします。
マップ信号表示を経度方向と緯度方向に個別にシフトします。

可視化プロパティ

シミュレーション データ インスペクターで複素信号データの表示に使用される複素数形式。次のいずれかの値として指定します。Signal オブジェクトの ComplexFormat プロパティを変更し、オブジェクトに複素信号のデータが含まれる場合にシミュレーション データ インスペクターで信号データが表示される方法を変更できます。

  • "real-imaginary" — 信号をプロットすると、信号の実数部と虚数部が一緒に表示されます。信号の虚数部は、[ラインの色] の異なる階調でプロットされます。

  • "magnitude" — 信号をプロットすると、信号の振幅が表示されます。

  • "magnitude-phase" — 信号をプロットすると、信号の振幅と位相が一緒に表示されます。

  • "phase" — 信号をプロットすると、信号の位相が表示されます。位相は、[ラインの色] の異なる階調でプロットされます。

データ型: char | string

信号がプロットされるかどうか。logical 値として指定します。Checkedfalse に設定すると、すべてのサブプロットから信号がクリアされます。Checkedtrue に設定すると、アクティブなサブプロットで信号がプロットされます。

データ型: logical

プロット内の信号の色。01 の間の値をもつ 13 列の RGB ベクトルとして指定します。

例: [0 0.5 0.5]

データ型: double

シミュレーション データ インスペクターで信号をプロットする際に使用される信号線のスタイル。次のオプションのいずれかとして指定します。

  • '-' — 実線

  • '--' — 破線

  • ':' — 点線

  • '-.' — 一点鎖線

シミュレーション データ インスペクターで信号をプロットする際に使用される信号線の幅。1 以上 20 以下の整数として指定します。

データの可視化および比較の同期ステップで使用される内挿法。次のいずれかの値として指定します。

  • 'zoh' — ゼロ次ホールド内挿

  • 'linear' — 線形内挿

  • 'none' — 内挿なし

内挿オプションの詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

比較プロパティ

信号比較で使用する絶対許容誤差。正の値のスカラーとして指定します。

シミュレーション データ インスペクターは、OverrideGlobalTol プロパティが 1 または true に設定されている場合に、ベースライン信号の信号プロパティで指定された許容誤差を使用します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.1

データ型: double

信号比較で使用する相対許容誤差。正の値のスカラーとして指定します。相対許容誤差は非整数乗数として表されます。たとえば、0.1 は 10 パーセントの許容誤差を指定します。

シミュレーション データ インスペクターは、OverrideGlobalTol プロパティが 1 または true に設定されている場合に、ベースライン信号の信号プロパティで指定された許容誤差を使用します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.05

データ型: double

信号比較に使用される信号の時間の許容誤差。正の値のスカラーとして指定します。時間の許容誤差 (秒単位) を指定します。

シミュレーション データ インスペクターは、OverrideGlobalTol プロパティが 1 または true に設定されている場合に、ベースライン信号の信号プロパティで指定された許容誤差を使用します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.1

データ型: double

グローバル許容誤差値の代わりに比較で信号許容誤差を使用するかどうか。logical 値として指定します。OverrideGlobalTol プロパティを 1 または true に設定し、Signal オブジェクト プロパティで定義した許容誤差値を使用します。プロパティを 0 または false に設定してグローバル許容誤差値を使用します。

シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

データ型: logical

比較で信号の同期に使用されるメソッド。'union' または 'intersection' として指定します。同期オプションの詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

オブジェクト関数

convertUnits Simulink.sdi.Signal オブジェクトの単位を変換
export シミュレーション データ インスペクターの信号のデータをワークスペースまたはファイルにエクスポート
getAsTall Simulink.sdi.Signal オブジェクトから tall timetable を作成
plotOnSubPlot シミュレーション データ インスペクターのサブプロットで Simulink.sdi.Signal オブジェクトをプロット

すべて折りたたむ

シミュレーション データ インスペクターを使用して、実行した比較で使用する信号の許容誤差値をプログラムによって指定できます。この例では、航空機用縦方向飛行制御システムのモデルをシミュレーションして収集したデータを比較します。各シミュレーションは入力フィルターの時定数に異なる値を使用して、入出力信号をログに記録します。シミュレーション データ インスペクターと信号許容誤差を使用して結果を比較し、時定数の変更の影響を解析します。

まず、シミュレーション データを含むセッション ファイルを読み込みます。

Simulink.sdi.load('AircraftExample.mldatx');

セッション ファイルには 4 つの実行が含まれます。この例では、ファイル内の最初の 2 つの実行からデータを比較します。ファイルから読み込まれた最初の 2 つの実行について、Simulink.sdi.Run オブジェクトにアクセスします。

runIDs = Simulink.sdi.getAllRunIDs;
runIDTs1 = runIDs(end-3);
runIDTs2 = runIDs(end-2);

次に、許容誤差を指定しないで 2 つの実行を比較します。

noTolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);

関数 getResultByIndex を使用して q 信号と alpha 信号の比較結果にアクセスします。

qResult = getResultByIndex(noTolDiffResult,1);
alphaResult = getResultByIndex(noTolDiffResult,2);

各信号結果の Status をチェックし、比較結果が許容誤差の範囲内または範囲外にあるかどうかを判断します。

qResult.Status
ans = 
  ComparisonSignalStatus enumeration

    OutOfTolerance

alphaResult.Status
ans = 
  ComparisonSignalStatus enumeration

    OutOfTolerance

比較では、すべての許容誤差に 0 の値を使用するため、OutOfTolerance の結果は信号が同一でないことを意味します。

信号の許容誤差値を指定して、時定数の影響をさらに解析できます。比較対象の信号に対応する Simulink.sdi.Signal オブジェクトのプロパティを設定し、許容誤差を指定します。比較ではベースライン信号に対して指定された許容誤差が使用されます。この例では、時間の許容誤差と絶対許容誤差を指定します。

許容誤差を指定するには、最初にベースライン実行から Signal オブジェクトにアクセスします。

runTs1 = Simulink.sdi.getRun(runIDTs1);
qSig = getSignalsByName(runTs1,'q, rad/sec');
alphaSig = getSignalsByName(runTs1,'alpha, rad');

AbsTol プロパティと TimeTol プロパティを使用して、q 信号に対して 0.1 の絶対許容誤差と 0.6 の時間の許容誤差を指定します。

qSig.AbsTol = 0.1;
qSig.TimeTol = 0.6;

alpha 信号に対して、0.2 の絶対許容誤差と 0.8 の時間の許容誤差を指定します。

alphaSig.AbsTol = 0.2;
alphaSig.TimeTol = 0.8;

結果を再度比較します。比較の結果にアクセスし、各信号の Status プロパティをチェックします。

tolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
qResult2 = getResultByIndex(tolDiffResult,1);
alphaResult2 = getResultByIndex(tolDiffResult,2);

qResult2.Status
ans = 
  ComparisonSignalStatus enumeration

    WithinTolerance

alphaResult2.Status
ans = 
  ComparisonSignalStatus enumeration

    WithinTolerance

この例では、Simulink.sdi.Signal オブジェクトを取得し、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用してそのプロパティを変更する方法を示します。

シミュレーション データ インスペクターでのデータの作成

データを記録するモデルをシミュレーションすると、ログ データが含まれるようにシミュレーション データ インスペクターで実行が作成されます。データをインポートすることによりシミュレーション データ インスペクターで実行を作成することもできます。この例では slexAircraftExample モデルをシミュレーションして、そのデータを Dataset 形式でログに記録します。

simOut = sim('slexAircraftExample','SaveFormat','Dataset');

Simulink.sdi.Signal オブジェクトの取得

プログラミングによるシミュレーションではワークスペース変数 simOut にログ データが返されます。その変数でログ データにアクセスできます。ただし、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用するには、Simulink.sdi.Run オブジェクトと Simulink.sdi.Signal オブジェクトのログ データにアクセスしなければなりません。

最初に Simulink.sdi.getCurrentSimulationRun を使用し、slexAircraftExample モデルをシミュレーションしたときに作成された Run オブジェクトを取得します。

aircraftRun = Simulink.sdi.getCurrentSimulationRun('slexAircraftExample');

関数 getAllSignals を使用して、実行のすべての信号に対する Signal オブジェクトにアクセスできます。返された Signal オブジェクトの配列から、最初の信号を選択します。

signals = getAllSignals(aircraftRun);
sig = signals(1);

信号プロパティの変更

Simulink.sdi.Signal オブジェクトには、信号の比較と可視化用にオプションを指定するプロパティがあります。信号のライン スタイルと色を指定します。次に、Simulink.sdi.setSubPlotLayout を使用してシミュレーション データ インスペクターを構成し、信号のサブプロットを表示し、関数 plotOnSubPlot を使用して信号をプロットします。

sig.LineColor = [1 0.4 0.6];
sig.LineDashed = '-';

Simulink.sdi.setSubPlotLayout(1,1)
plotOnSubPlot(sig,1,1,true)

関数 Simulink.sdi.view を使用してシミュレーション データ インスペクターを開き、プロットされた信号を表示します。

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、同じ実行内の信号を比較できます。この例では、航空機用縦方向コントローラーの入力信号と出力信号を比較します。

最初に、データを含むセッションを読み込みます。

Simulink.sdi.load('AircraftExample.mldatx');

関数 Simulink.sdi.Run.getLatest を使用してデータ内の最新の実行にアクセスします。

aircraftRun = Simulink.sdi.Run.getLatest;

次に、関数 Simulink.sdi.getSignalsByName を使用して、コントローラーへの入力を表す Stick 信号と、出力を表す alpha, rad 信号にアクセスできます。

stick = getSignalsByName(aircraftRun,'Stick');
alpha = getSignalsByName(aircraftRun,'alpha, rad');

信号を比較する前に、比較に使用する許容誤差値を指定できます。比較のベースライン信号に指定された許容誤差値が使用されるため、Stick 信号に 0.1 の絶対許容誤差値を設定します。

stick.AbsTol = 0.1;

ここで、関数 Simulink.sdi.compareSignals を使用して信号を比較します。Stick 信号はベースラインで、alpha, rad 信号はベースラインと比較される信号です。

comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID);
match = comparisonResults.Status
match = 
  ComparisonSignalStatus enumeration

    OutOfTolerance

比較結果は許容誤差の範囲外です。関数 Simulink.sdi.view を使用して、シミュレーション データ インスペクターを開き、比較結果を表示および解析できます。

この例では、信号を記録して作成されたシミュレーション データ インスペクター実行の Simulink.sdi.Run オブジェクトにアクセスする方法を示します。Simulink.sdi.Run オブジェクトから、ログに記録された信号データとメタデータが含まれる Simulink.sdi.Signal オブジェクトを取得できます。Signal オブジェクトと関数 plotOnSubPlot を使用して、データをシミュレーション データ インスペクターにプロットできます。

シミュレーション実行の作成および Run オブジェクトへのアクセス

ex_vdp モデルは 2 つの信号を記録します。ログ データが含まれるシミュレーション実行を作成するには、モデルのシミュレーションを実行します。

sim('ex_vdp');

シミュレーション データ インスペクターは、シミュレーションで作成された各実行に一意の数値実行 ID を割り当てるか、データをインポートするか、セッションを開くことによって実行を追跡します。直前に実行したシミュレーションの実行オブジェクトにアクセスするには、関数 Simulink.sdi.getAllRunIDs を使用して、返されるベクトルで最後の実行 ID を取ります。

runIDs = Simulink.sdi.getAllRunIDs;
runID = runIDs(end);

実行の実行 ID を取得すると、関数 Simulink.sdi.getRun を使用して実行に対応する Simulink.sdi.Run オブジェクトを取得できます。Run オブジェクトを使用して、実行内の信号の数など、実行に関連付けられているメタデータをチェックできます。

vdpRun = Simulink.sdi.getRun(runID);

vdpRun.SignalCount
ans = int32
    2

Signal オブジェクトを使用したデータのプロット

関数 getSignalByIndex を使用して、Run オブジェクト vdpRun から信号にアクセスします。

signal1 = getSignalByIndex(vdpRun,1);
signal2 = getSignalByIndex(vdpRun,2);

関数 Simulink.sdi.setSubPlotLayout を使用して 2 行 1 列のレイアウトを指定します。

Simulink.sdi.setSubPlotLayout(2,1)

データをプロットする前に、既にプロットされている任意のデータを関数 Simulink.sdi.clearAllSubPlots を使用して消去します。

Simulink.sdi.clearAllSubPlots

サブプロットごとに 1 つの信号をプロットします。最初のサブプロットで信号をプロットするために、信号の checked プロパティを設定できます。最初のサブプロット以外のサブプロットで信号をプロットするには、関数 plotOnSubPlot を使用します。

signal1.Checked = true;
plotOnSubPlot(signal2,2,1,true);

プロットされたデータの表示

直前に作成したプロットを表示するには、関数 Simulink.sdi.view を使用してシミュレーション データ インスペクターを開きます。

バージョン履歴

R2012b で導入