Simulink.sdi.compareRuns

Сравните данные в двух запусках симуляции

Описание

пример

diffResult = Simulink.sdi.compareRuns(runID1,runID2) сравнивает данные в запусках, которые соответствуют runID1 и runID2 и возвращает результат в Simulink.sdi.DiffRunResult diffResult объекта. Для сравнения используется алгоритм сравнения Данные Моделирования Inspector. Для получения дополнительной информации об алгоритме см. Раздел «Как Данные моделирования Inspector сравнивает Данные».

пример

diffResult = Simulink.sdi.compareRuns(runID1,runID2,Name,Value) сравнивает запуски симуляции, которые соответствуют runID1 и runID2 использование опций, заданных одним или несколькими Name,Value аргументы в виде пар. Дополнительные сведения о том, как опции могут повлиять на сравнение, см. в разделе Как Данных моделирования Inspector сравнивает данные.

Примеры

свернуть все

Можно задать значения глобальных допусков, которые будут использоваться при сравнении двух запусков симуляции. Значения глобального допуска применяются ко всем сигналам в запуск. В этом примере показано, как задать значения глобальных допусков для сравнения запусков и как анализировать и сохранить результаты сравнения.

Во-первых, загрузите файл сеанса, содержащий данные для сравнения. Файл сеанса содержит данные для четырех симуляций продольного контроллера самолета. В этом примере сравниваются данные из двух запусков, которые используют различные временные константы входного фильтра.

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

Для доступа к данным запуска для сравнения используйте Simulink.sdi.getAllRunIDs функция для получения идентификаторов запуска, которые соответствуют последним двум запускам симуляции.

runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

Используйте Simulink.sdi.compareRuns функция для сравнения запусков. Задайте глобальную относительную погрешность значение 0.2 и глобальное значение допуска по времени 0.5.

runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);

Проверьте Summary свойство возвращенного Simulink.sdi.DiffRunResult объект, чтобы увидеть, были ли сигналы в пределах значений допуска или вне допуска.

runResult.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 3
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

Все три результата сравнения сигналов попали в заданный глобальный допуск.

Результаты сравнения можно сохранить в файле MLDATX с помощью saveResult функция.

saveResult(runResult,'InputFilterComparison');

Можно программно задать значения допуска сигнала для использования в сравнениях, выполненных с помощью Данных моделирования Inspector. В этом примере вы сравниваете данные, собранные путем симуляции модели продольной системы управления рейсом самолета. Каждая симуляция использует разное значение для временной константы входного фильтра и регистрирует входные и выходные сигналы. Вы анализируете эффект изменения постоянной времени путем сравнения результатов с помощью Данные Моделирования Inspector и допусков сигнала.

Во-первых, загрузите файл сеанса, который содержит данные моделирования.

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

Файл сеанса содержит четыре запусков. В этом примере вы сравниваете данные первых двух запусков в файле. Доступ к Simulink.sdi.Run объекты для первых двух запусков, загруженные из файла.

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

Теперь сравните эти два запусков, не задавая никаких допусков.

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

Используйте getResultByIndex функция для доступа к результатам сравнения для q и alpha сигналы.

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

Проверьте Status из каждого результата сигнала, чтобы увидеть, попадает ли результат сравнения в наш вне допуска.

qResult.Status
ans = 
OutOfTolerance
alphaResult.Status
ans = 
OutOfTolerance

В сравнении использовалось значение 0 для всех допусков, поэтому OutOfTolerance результат означает, что сигналы не идентичны.

Можно дополнительно проанализировать эффект постоянной времени, задав значения допуска для сигналов. Задайте допуски путем установки свойств для Simulink.sdi.Signal объекты, которые соответствуют сравниваемым сигналам. В сравнениях используются допуски, заданные для базовых сигналов. Этот пример задает временным допуском и абсолютной погрешностью.

Чтобы задать допуск, сначала получите доступ к Signal объекты из запуска опорной структуры.

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

Задайте абсолютную погрешность 0.1 и временной допуск 0.6 для q сигнал с использованием AbsTol и TimeTol свойства.

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

Задайте абсолютную погрешность 0.2 и временной допуск 0.8 для alpha сигнал.

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 = 
WithinTolerance
alphaResult2.Status
ans = 
WithinTolerance

Можно использовать Simulink.sdi.compareRuns функция для сравнения сигнальных данных и метаданных, включая тип данных и начало и времена остановки. Одно сравнение может проверить несоответствие в одной или нескольких частях метаданных. Когда вы проверяете на несоответствие в метаданных сигнала, Summary свойство Simulink.sdi.DiffRunResult объект может отличаться от базового сравнения, потому что Status свойство для Simulink.sdi.DiffSignalResult объект может указывать на несоответствие метаданных. Можно сконфигурировать сравнения с помощью Simulink.sdi.compareRuns функция для импортированных данных и данных, записанных из симуляции.

Этот пример конфигурирует сравнение запусков, созданных из данных рабочей области, тремя способами, чтобы показать, как Summary от DiffSignalResult объект может предоставить определенную информацию о несоответствии сигналов.

Создание данных рабочей области

The Simulink.sdi.compareRuns функция сравнивает данные временных рядов. Создайте данные для синусоиды, которая будет использоваться в качестве базового сигнала, используя timeseries формат. Отдайте timeseries имя Wave Data.

time = 0:0.1:20;
sig1vals = sin(2*pi/5*time);
sig1_ts = timeseries(sig1vals,time);
sig1_ts.Name = 'Wave Data';

Создайте вторую синусоиду, чтобы сравнить с базовым сигналом. Используйте немного другой временной вектор и ослабьте сигнал, чтобы эти два сигнала не были идентичными. Приведите данные сигнала к single тип данных. Также назовите это timeseries Wave Data объекта. Алгоритм сравнения Данных моделирования Inspector выравнивает эти сигналы для сравнения с использованием имени.

time2 = 0:0.1:22;
sig2vals = single(0.98*sin(2*pi/5*time2));
sig2_ts = timeseries(sig2vals,time2);
sig2_ts.Name = 'Wave Data';

Создайте и сравните Запуски в Данные моделирования Inspector

The Simulink.sdi.compareRuns функция сравнивает данные, содержащиеся в Simulink.sdi.Run объекты. Используйте Simulink.sdi.createRun функция для создания запусков в Данные моделирования Inspector для данных. The Simulink.sdi.createRun функция возвращает идентификатор запуска для каждого созданного запуска.

runID1 = Simulink.sdi.createRun('Baseline Run','vars',sig1_ts);
runID2 = Simulink.sdi.createRun('Compare to Run','vars',sig2_ts);

Можно использовать Simulink.sdi.compareRuns функция для сравнения запусков. Алгоритм сравнения преобразует данные сигнала в double тип данных и синхронизирует данные сигнала перед вычислением сигнала различия.

basic_DRR = Simulink.sdi.compareRuns(runID1,runID2);

Проверьте Summary свойство возвращенного Simulink.sdi.DiffRunResult объект, чтобы увидеть результат сравнения.

basic_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 1
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

Различие между сигналами вне допуска.

Сравнение запусков и проверка соответствия типа данных

В зависимости от ваших системных требований, можно хотеть, чтобы типы данных для сигналов, которые вы сравниваете, совпадали. Можно использовать Simulink.sdi.compareRuns функция, чтобы сконфигурировать алгоритм сравнения, чтобы проверить и сообщить о несоответствии типов данных.

dataType_DRR = Simulink.sdi.compareRuns(runID1,runID2,'DataType','MustMatch');
dataType_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 1
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

Результат сравнения сигналов теперь DataTypeMismatch потому что данные для базового сигнала double тип данных, в то время как данные для сигнала по сравнению с базовой линией single тип данных.

Сравнение Запусков и проверки на начало и Время остановки соответствия

Можно использовать Simulink.sdi.compareRuns функция, чтобы сконфигурировать алгоритм сравнения, чтобы проверить, имеют ли выровненные сигналы одинаковые начало и времена остановки.

startStop_DRR = Simulink.sdi.compareRuns(runID1,runID2,'StartStop','MustMatch');
startStop_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 1
          Unsupported: 0

Результат сравнения сигналов теперь StartStopMismatch потому что сигналы, созданные в рабочей области, имеют разные времена остановки.

При сравнении запусков с помощью Данных моделирования Inspector можно задать критерии выравнивания, которые определяют, как сигналы соединяются друг с другом для сравнения. Этот пример сравнивает данные из симуляций модели системы продольного управления самолета. В симуляциях использовался вход квадратной волны. В первой симуляции использовалась временная константа входного фильтра 0.1s и во второй симуляции использовалась временная константа входного фильтра 0.5s.

Во-первых, загрузите данные моделирования из файла сеанса, который содержит данные для этого примера.

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

Файл сеанса содержит данные для четырех симуляций. В этом примере сравниваются данные первых двух запусков. Доступ к идентификаторам выполнения для первых двух запусков, загруженных из файла сеанса.

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

Перед началом сравнения задайте, как Данные моделирования Inspector должен выровнять сигналы между запусками. Этот пример выравнивает сигналы по их имени, затем по пути блока, а затем по идентификатору Simulink.

alignMethods = [Simulink.sdi.AlignType.SignalName
               Simulink.sdi.AlignType.BlockPath
               Simulink.sdi.AlignType.SID];

Сравните данные моделирования в два запусков с помощью заданных критериев выравнивания. Сравнение использует небольшой временной допуск, чтобы учесть эффект различий в размере шага, используемом решателем на переходе квадратного входа волны.

diffResults = Simulink.sdi.compareRuns(runIDTs1,runIDTs2,'align',alignMethods,...
    'timetol',0.005);

Можно использовать getResultByIndex функция для доступа к результатам сравнения для выровненных сигналов в запуски, которую вы сравнивали. Можно использовать Count свойство Simulink.sdi.DiffRunResult объект для настройки for цикл, чтобы проверить Status свойство для каждого Simulink.sdi.DiffSignalResult объект.

numComparisons = diffResults.count;

for k = 1:numComparisons
    resultAtIdx = getResultByIndex(diffResults,k);
    
    sigID1 = resultAtIdx.signalID1;
    sigID2 = resultAtIdx.signalID2;
    
    sig1 = Simulink.sdi.getSignal(sigID1);
    sig2 = Simulink.sdi.getSignal(sigID2);
    
    displayStr = 'Signals %s and %s: %s \n';
    fprintf(displayStr,sig1.Name,sig2.Name,resultAtIdx.Status);
end
Signals q, rad/sec and q, rad/sec: OutOfTolerance 
Signals alpha, rad and alpha, rad: OutOfTolerance 
Signals Stick and Stick: WithinTolerance 

Входные параметры

свернуть все

Числовой идентификатор для запуска базовой линии в сравнении, заданный как идентификатор запуска, который соответствует запуску в Данные моделирования Inspector. Инспектор Данных моделирования присваивает идентификаторы запуска при создании запусков. Вы можете получить идентификатор запуска для запуска, используя ID свойство Simulink.sdi.Run объект, Simulink.sdi.getAllRunIDs функции, или Simulink.sdi.getRunIDByIndex функция.

Числовой идентификатор сравниваемого запуска, заданный как идентификатор запуска, который соответствует запуску в Данные моделирования Inspector. Инспектор Данных моделирования присваивает идентификаторы запуска при создании запусков. Вы можете получить идентификатор запуска для запуска, используя ID свойство Simulink.sdi.Run объект, Simulink.sdi.getAllRunIDs функции, или Simulink.sdi.getRunIDByIndex функция.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'abstol',x,'align',alignOpts

Опции выравнивания сигнала, заданные как разделенная разделенными запятой парами, состоящая из 'Align' и строковые массивы или массив векторов символов.

Массив, задающий опции выравнивания для использования для сопряжения сигналов от сравниваемых запусков. Данные моделирования Inspector выравнивают сигналы сначала первым элементом в массиве, затем вторым элементом в массиве и так далее. Для получения дополнительной информации смотрите Выравнивание.

ЗначениеВыравнивает по
Simulink.sdi.AlignType.BlockPathПуть к исходному блоку для сигнала
Simulink.sdi.AlignType.SIDSimulink® Идентификаторы Simulink
Simulink.sdi.AlignType.SignalNameИмя сигнала
Simulink.sdi.AlignType.DataSourceПуть переменной в MATLAB® рабочая область

Пример: [Simulink.sdi.AlignType.SignalName,Simulink.sdi.AlignType.SID] задает выравнивание сигнала по имени, а затем по SID.

Положительная глобальная абсолютная погрешность, используемый для всех сигналов в сравнении запусков, заданный как разделенная разделенными запятой парами, состоящая из 'AbsTol' и скаляром. Для получения дополнительной информации о том, как допуски используются при сравнении, см. «Спецификация допусков».

Пример: 0.5

Типы данных: double

Положительная глобальная относительная погрешность, используемый для всех сигналов в сравнении запусков, заданный как разделенная разделенными запятой парами, состоящая из 'RelTol' и скаляром. Относительная погрешность выражается как дробный множитель. Для примера, 0.1 задает 10-процентный допуск. Дополнительные сведения о том, как относительная погрешность применяется в Данные моделирования Inspector, см. в разделе Спецификации допуска.

Пример: 0.1

Типы данных: double

Положительный глобальный временной допуск, используемый для всех сигналов в сравнении запуска, заданный как разделенная разделенными запятой парами, состоящая из 'TimeTol' и скаляром. Задайте допуск по времени в единицах секунд. Дополнительные сведения о допусках в Данные моделирования Inspector см. в разделе Спецификации допусков.

Пример: 0.2

Типы данных: double

Задайте пару "имя-значение" 'DataType','MustMatch' когда вы хотите, чтобы сравнение было чувствительным к несоответствиям типов данных в сравниваемых сигналах. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает типы данных для выровненных сигналов перед синхронизацией и сравнением данных сигнала.

Simulink.sdi.compareRuns функция не сравнивает типы данных выровненных сигналов, если вы не задаете эту пару "имя-значение". Алгоритм сравнения может сравнивать сигналы с различными типами данных.

Когда типы данных сигнала не совпадают, Status свойство Simulink.sdi.DiffSignalResult объекту для результата задано значение DataTypeMismatch.

Когда вы задаете, что типы данных должны совпадать и конфигурировать сравнение, чтобы остановить первое несоответствие, несоответствие типов данных останавливает сравнение. Остановленное сравнение может не вычислить результаты для всех сигналов.

Задайте пару "имя-значение" 'Time','MustMatch' когда вы хотите, чтобы сравнение было чувствительным к несоответствиям во временных векторах сравниваемых сигналов. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает временные векторы выровненных сигналов перед синхронизацией и сравнением данных о сигнале.

Сравнения не чувствительны к различиям во временных векторах сигнала, если вы не задаете эту пару "имя-значение". Для сравнений, которые не чувствительны к различиям во временных векторах, алгоритм сравнения синхронизирует сигналы до сравнения. Для получения дополнительной информации о том, как работает синхронизация, смотрите Как Данные моделирования Inspector сравнивают Данные.

Когда временные векторы для сигналов не совпадают, Status свойство Simulink.sdi.DiffSignalResult объекту для результата задано значение TimeMismatch.

Когда вы задаете, что временные векторы должны совпадать и конфигурировать сравнение, чтобы остановить первое несоответствие, несоответствие временных векторов останавливает сравнение. Остановленное сравнение может не вычислить результаты для всех сигналов.

Задайте пару "имя-значение" 'StartStop','MustMatch' когда вы хотите, чтобы сравнение было чувствительным к несоответствиям во времени начала и остановки сигнала. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает начало и времена остановки для выровненных сигналов перед синхронизацией и сравнением данных сигнала.

Когда время начала и времена остановки не совпадают, Status свойство Simulink.sdi.DiffSignalResult объекту для результата задано значение StartStopMismatch.

Когда вы задаете, что время запуска и остановки должно совпадать и конфигурировать сравнение, чтобы остановить первое несоответствие, несоответствие времени начала или остановки останавливает сравнение. Остановленное сравнение может не вычислить результаты для всех сигналов.

Останавливается ли сравнение, не сравнивая оставшиеся сигналы при первом обнаруженном несоответствии, заданном как разделенная разделенными запятой парами, состоящая из 'StopOnFirstMismatch' и 'Metadata' или 'Any'. Остановленное сравнение может не вычислить результаты для всех сигналов и может вернуть несоответствующий результат быстрее.

  • Metadata - Несоответствие метаданных для выровненных сигналов приводит к остановке сравнения. Сравнение метаданных происходит перед сравнением данных о сигнале.

    Данные моделирования Inspector всегда выравнивают сигналы и сравнивает модули сигнала. Когда вы конфигурируете сравнение, чтобы остановить первое несоответствие, несоответствующий сигнал или несоответствующие модули всегда заставляют сравнение останавливаться. Можно задать дополнительные пары имя-значение, чтобы сконфигурировать сравнение, чтобы проверить и остановить первое несоответствие для дополнительных метаданных, таких как тип данных сигнала, время запуска и остановки и временные векторы.

  • Any - Несоответствие в метаданных или данных о сигнале для выровненных сигналов заставляет сравнение останавливаться.

Выходные аргументы

свернуть все

Результаты сравнения, возвращенные как Simulink.sdi.DiffRunResult объект.

Ограничения

Инспектор Данных моделирования не поддерживает сравнение:

  • Сигналы типов данных int64 или uint64.

  • Сигналы переменного размера.

Введенный в R2011b