exponenta event banner

Simulink.sdi.compareRuns

Сравнение данных в двух прогонах моделирования

Описание

пример

diffResult = Simulink.sdi.compareRuns(runID1,runID2) сравнивает данные в прогонах, которые соответствуют runID1 и runID2 и возвращает результат в Simulink.sdi.DiffRunResult объект diffResult. При сравнении используется алгоритм сравнения инспектора данных моделирования. Дополнительные сведения об алгоритме см. в разделе Как инспектор данных моделирования сравнивает данные.

пример

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

Примеры

свернуть все

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

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

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');

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

Сначала загрузите файл сеанса, содержащий данные моделирования.

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 объект может предоставлять конкретную информацию о несоответствиях сигналов.

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

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. Алгоритм сравнения Simulation 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';

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

Simulink.sdi.compareRuns функция сравнивает данные, содержащиеся в Simulink.sdi.Run объекты. Используйте Simulink.sdi.createRun для создания прогонов в инспекторе данных моделирования. 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 потому что сигналы, созданные в рабочей области, имеют разное время остановки.

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

Сначала загрузите данные моделирования из файла сеанса, содержащего данные для этого примера.

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

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

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

Перед выполнением сравнения определите способ выравнивания сигналов между прогонами с помощью инспектора данных моделирования. В этом примере сигналы выравниваются по имени, пути блока и идентификатору 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 

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

свернуть все

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

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

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

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

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

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

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

СтоимостьВыравнивание по
Simulink.sdi.AlignType.BlockPathПуть к блоку источника сигнала
Simulink.sdi.AlignType.SIDИдентификаторы 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-процентный допуск. Дополнительные сведения о применении относительного допуска в инспекторе расчетных данных см. в разделе Спецификация допуска.

Пример: 0.1

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

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

Пример: 0.2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Ограничения

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

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

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

Представлен в R2011b