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'

信号の説明。文字ベクトルまたは 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 プロパティは空です。

可視化プロパティ

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

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

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

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

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

データ型: char | string

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

データ型: logical

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

例: [0 0.5 0.5]

データ型: double

シミュレーション データ インスペクターで信号の表示に使用される信号線のスタイル。次のいずれかの値として指定します。

  • '-' — 実線

  • '--' — 破線

  • ':' — 点線

  • '-.' — 一点鎖線

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

  • '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 Simulink.sdi.Signal オブジェクトをワークスペースまたはファイルにエクスポート
getAsTall Simulink.sdi.Signal オブジェクトから tall timetable を作成
plotOnSubPlot シミュレーション データ インスペクターのサブプロットで Simulink.sdi.Signal オブジェクトをプロット

すべて折りたたむ

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、比較で使用するための信号の許容誤差値を指定できます。この例では slexAircraftExample モデルとシミュレーション データ インスペクターを使用し、制御入力の後にローパス フィルターの時定数を変更することによる影響を評価します。

モデルの設定

モデルを読み込んで、関心のある信号をログ記録用にマークします。この例では、q 信号と alpha 信号のデータを記録します。

load_system('slexAircraftExample')

Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

シミュレーションの実行

異なるローパス フィルターの時定数でシミュレーションを実行し、比較する結果を生成します。slexAircraftExample モデルは、そのモデルに関連付けられている変数をモデル ワークスペースに格納します。時定数値を変更するには、モデル ワークスペースにアクセスして関数 assignin を使用します。

out1 = sim('slexAircraftExample');

modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

out2 = sim('slexAircraftExample');

シミュレーション結果へのアクセスと比較

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、シミュレーション結果にアクセスします。各シミュレーションによって、一意の実行 ID をもつ実行がシミュレーション データ インスペクターに作成されます。実行 ID を使用して、シミュレーション結果を比較します。

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

関数 Simulink.sdi.compareRuns を使用して、シミュレーションで得たデータを比較します。次に、信号結果の Status プロパティを検査し、信号が既定の許容誤差 0 の範囲内にあるかどうかを確認します。

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

sig1Result1 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

信号の許容誤差を使用して実行を比較

既定では、信号はすべての許容誤差値に 0 を使用するため、信号が同一でない場合は、比較によって許容誤差外の結果が返されます。時定数の変更の影響をさらに解析するために、信号の許容誤差値を指定します。比較する実行内の Simulink.sdi.Signal オブジェクトのプロパティを使用して、プログラムによる比較の許容誤差を指定できます。比較ではベースラインの Signal オブジェクトに対して指定された許容誤差が使用されます。この例では、時間の許容誤差と絶対許容誤差の組み合わせを指定します。

許容誤差を指定するには、まず比較する必要がある実行内の各信号に対応する Simulink.sdi.Signal オブジェクトにアクセスします。

run1 = Simulink.sdi.getRun(runIDTs1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,2);

sig1 = Simulink.sdi.getSignal(sigID1);
sig2 = Simulink.sdi.getSignal(sigID2);

Name プロパティをチェックして、各 Signal オブジェクトを特定します。

sig1.Name
ans = 
'q, rad/sec'
sig2.Name
ans = 
'alpha, rad'

ベースラインの実行で q 信号オブジェクトの AbsTol プロパティと TimeTol プロパティを使用する q 信号に対して、0.1 の絶対許容誤差と 0.6 の時間の許容誤差を指定します。

sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

ベースラインの実行で alpha 信号オブジェクトの AbsTol プロパティと TimeTol プロパティを使用する alpha 信号に対して、0.2 の絶対許容誤差と 0.8 の時間の許容誤差を指定します。

sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

実行を再度比較し、結果にアクセスします。

diffRun2 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
sig1Result2 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

比較結果が指定された許容誤差の範囲内にあるかどうかを判断するには、各信号の Status プロパティをチェックします。

sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
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 を使用してシミュレーション データ インスペクターを開き、プロットされた信号を表示します。

この例では、slexAircraftExample モデルを使用して、制御システムの入力信号と出力信号の比較方法を示します。

モデルの設定とシミュレーション

slexAircraftExample モデルはデータを記録しません。モデルを読み込み、入力信号と出力信号をログ記録するようマークします。

load_system('slexAircraftExample')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

モデルをシミュレートします。ログ信号のデータはシミュレーション データ インスペクターとワークスペースに記録されます。

out = sim('slexAircraftExample');

シミュレーション データへのアクセス

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、データにアクセスします。関数 Simulink.sdi.Run.getLatest は、シミュレーション データ インスペクター リポジトリ内で最後に作成された実行を返します。関数 getSignalIDByIndex を使用して、ログ信号の信号 ID にアクセスします。

aircraftRun = Simulink.sdi.Run.getLatest;

signalID1 = getSignalIDByIndex(aircraftRun,1);
signalID2 = getSignalIDByIndex(aircraftRun,2);

許容誤差値の指定

比較に使用する許容誤差値を、記録された Simulink.sdi.Signal オブジェクトのプロパティとして指定できます。関数 Simulink.sdi.getSignal を使用し、信号 ID を使用して Signal オブジェクトにアクセスします。

signal1 = Simulink.sdi.getSignal(signalID1);
signal1.AbsTol = 0.1;

信号の比較

関数 Simulink.sdi.compareSignals を使用して、入力信号と出力信号を比較します。この例では、関数 isValidSignalID を使用して、両方の信号 ID が関数 Simulink.sdi.compareSignals の呼び出し前に依然として有効であることを検証します。信号がシミュレーション データ インスペクターから削除されると、信号 ID は無効になります。比較後、Simulink.sdi.DiffSignalResult オブジェクトのステータスをチェックします。

if (isValidSignalID(aircraftRun,signalID1) && isValidSignalID(aircraftRun,signalID2))
    sigDiff = Simulink.sdi.compareSignals(signalID1,signalID2);

    match = sigDiff.Status
end
match = 
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 オブジェクト fuelRun から信号にアクセスします。

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

関数 Simulink.sdi.setSubPlotLayout を使用して 3 行 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 で導入