Main Content

Simulink.sdi.compareSignals

2 つの Simulink.sdi.Signal オブジェクトでデータを比較する

説明

diff = Simulink.sdi.compareSignals(sigID1,sigID2) は信号 ID の sigID1sigID2 に対応する信号を比較し、その結果を Simulink.sdi.DiffSignalResult オブジェクトに返します。比較結果を計算する方法の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

diff = Simulink.sdi.compareSignals(sigID1,sigID2,Name=Value) は、1 つ以上の名前と値の引数で指定されたオプションを使用して、信号 ID の sigID1sigID2 に対応する信号を比較します。 (R2023a 以降)

すべて折りたたむ

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

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

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.compareSignals を使用して異なるシミュレーション実行の信号を比較する方法について説明します。比較する対象の信号が 1 つのみの場合、信号比較を使用すると比較データをもつ Simulink.sdi.diffSignalResult オブジェクトが直接返されます。

シミュレーション データの生成

slexAircraftExample モデルを使用してシミュレーション実行を生成します。実行間で入力フィルターの時定数を変更します。

% Load example model
load_system('slexAircraftExample')

% Mark the alpha, rad signal for streaming
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

% Simulate system
out_1 = sim('slexAircraftExample');

% Change input filter time constant
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',0.2)

% Simulate again
out_2 = sim('slexAircraftExample');

信号比較のための信号 ID を取得

実行 ID を使用して実行オブジェクトを作成したら、getSignalIDByIndex を使用して Simulink.sdi.compareSignals に渡す信号 ID を取得します。

% Get run data
runIDs = Simulink.sdi.getAllRunIDs;

runID1 = runIDs(end-1);
runID2 = runIDs(end);

run1 = Simulink.sdi.getRun(runID1);
run2 = Simulink.sdi.getRun(runID2);

sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run2,1);

信号の比較

信号を比較し、シミュレーション データ インスペクターを開いて結果を表示します。

diffResult = Simulink.sdi.compareSignals(sigID1,sigID2);

Simulink.sdi.view

入力引数

すべて折りたたむ

ベースライン信号の信号 ID。整数として指定します。シミュレーション データ インスペクターは実行が作成されると各信号に信号 ID を割り当てます。次のいずれかの関数を使用して信号の信号 ID を取得します。

比較する信号の信号 ID。整数として指定します。シミュレーション データ インスペクターは実行が作成されると各信号に信号 ID を割り当てます。次のいずれかの関数を使用して信号の信号 ID を取得します。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: diff = Simulink.sdi.compareSignals(sigID1,sigID2,DataType="MustMatch")

信号のデータ型に対する比較の感度。"MustMatch" として指定します。比較される信号の数値データ型の不一致について、比較が影響を受けるようにするには、DataType="MustMatch" を指定します。

信号のデータ型が一致しない場合、結果に対する Simulink.sdi.DiffSignalResult オブジェクトの Status プロパティは DataTypeMismatch に設定されます。

関数 Simulink.sdi.compareSignals は、信号データを同期して比較する前にデータ型を比較します。この名前と値の引数を指定しない場合、比較によるデータ型のチェックで string と数値データの比較の検出のみが行われます。string と数値データの比較では、結果は計算されず、結果のステータスは DataTypeMismatch になります。異なる数値データ型をもつ信号については、比較で結果が計算されます。

最初の不一致で停止するように比較を構成すると、データ型の不一致によって比較は停止します。

信号の時間ベクトルに対する比較の感度。"MustMatch" として指定します。比較される信号の時間ベクトルの不一致について、比較が影響を受けるようにするには、Time="MustMatch" を指定します。この名前と値の引数を指定すると、信号データを同期して比較する前に、アルゴリズムによって時間ベクトルの比較が行われます。

時間ベクトルが一致しない場合、結果に対する Simulink.sdi.DiffSignalResult オブジェクトの Status プロパティは TimeMismatch に設定されます。

この名前と値の引数を指定しない限り、比較では信号時間ベクトルの差異に影響を受けません。時間ベクトルの差異に影響を受けない比較では、比較の前に比較アルゴリズムによって信号の同期が行われます。同期の動作の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

時間ベクトルが一致しなければならないよう指定し、また最初の不一致で停止するように比較を構成すると、時間ベクトルの不一致によって比較は停止します。

信号の開始時間と終了時間に対する比較の感度。"MustMatch" として指定します。信号の開始時間と終了時間の不一致について、比較が影響を受けるようにするには、StartStop="MustMatch" を指定します。この名前と値の引数を指定すると、信号データを同期して比較する前に、アルゴリズムによって開始時間と終了時間の比較が行われます。

開始時間と終了時間が一致しない場合、結果に対する Simulink.sdi.DiffSignalResult オブジェクトの Status プロパティは StartStopMismatch に設定されます。

開始時間と終了時間が一致しなければならないよう指定し、また最初の不一致で停止するように比較を構成すると、開始時間と終了時間の不一致によって比較は停止します。

最初に検出された不一致で比較が停止するかどうか。"Metadata" または "Any" として指定します。停止した比較では、多次元信号の比較時にすべてのチャネルについて必ずしも結果が計算されない可能性があり、不一致となった結果をより迅速に返す可能性があります。

  • "Metadata" — メタデータの不一致によって比較が停止します。メタデータの比較は信号データの比較の前に行われます。

    シミュレーション データ インスペクターでは、常に信号単位を比較します。最初の不一致で停止するよう比較を構成すると、単位の不一致で常に比較が停止します。追加の名前と値の引数を指定して、信号のデータ型、開始時間と終了時間、および時間ベクトルなどの追加のメタデータをチェックし、その最初の不一致で停止するよう、比較を構成できます。

  • "Any" — メタデータまたは信号データの不一致によって比較が停止します。

多次元信号の各チャネルの比較結果を計算するかどうか。logical true (1) または false (0) として指定します。

  • true または 1 - 非スカラーのサンプル値をもつ単一の信号として表される多次元信号をスカラーのサンプル値をもつ一連の信号に展開し、各信号の比較結果を計算します。

    多次元信号が非スカラーのサンプル値をもつ単一の信号として表されるシミュレーション データ インスペクターでの表現は変わりません。

  • false または 0 — 非スカラーのサンプル値をもつ単一の信号として表される多次元信号の比較結果を計算しません。

出力引数

すべて折りたたむ

信号の比較結果。Simulink.sdi.DiffSignalResult オブジェクトとして返されます。複素信号の比較結果は 2 つの DiffSignalResult オブジェクトの配列として返されます。1 つの DiffSignalResult オブジェクトには実数データが含まれ、もう 1 つのオブジェクトには虚数データが含まれます。DiffSignalResult オブジェクトの Name プロパティをチェックし、実数データと虚数データのどちらが含まれているのかを判別します。

制限

シミュレーション データ インスペクターは以下の比較をサポートしていません。

  • R2020a より前: データ型 int64 または uint64 の信号。

  • 可変サイズの信号。

信号の比較や実行の比較を複数実行する場合、最新の DiffSignalResult オブジェクトのみが表示可能なプロパティをもちます。

バージョン履歴

R2011b で導入