Сравните данные в двух запусках симуляции
сравнивает данные в запусках, которые соответствуют 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 = 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');
Задайте абсолютную погрешность 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 = ComparisonSignalStatus enumeration WithinTolerance
alphaResult2.Status
ans = ComparisonSignalStatus enumeration 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
. Инспектор Данных моделирования алгоритм сравнения выровняет эти сигналы для сравнения с помощью имени.
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
функция возвращает ID запуска для каждого созданного запуска.
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);
Прежде, чем запустить сравнение, задайте, как вы хотите, чтобы Инспектор Данных моделирования выровнял сигналы между запусками. Этот пример выравнивает сигналы их именем, затем их блоком path, и затем их идентификатором 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
runID1
— Базовая линия запускает идентификаторЧисловой идентификатор для базового запуска в сравнении в виде ID запуска, который соответствует запуску в Инспекторе Данных моделирования. Инспектор Данных моделирования присваивает идентификаторы запуска, когда запуски создаются. Можно получить ID запуска для запуска при помощи ID
свойство Simulink.sdi.Run
объект, Simulink.sdi.getAllRunIDs
функция, или Simulink.sdi.getRunIDByIndex
функция.
runID2
— Идентификатор для запущенного, чтобы выдержать сравнениеЧисловой идентификатор для запуска, чтобы выдержать сравнение в виде ID запуска, который соответствует запуску в Инспекторе Данных моделирования. Инспектор Данных моделирования присваивает идентификаторы запуска, когда запуски создаются. Можно получить ID запуска для запуска при помощи ID
свойство Simulink.sdi.Run
объект, Simulink.sdi.getAllRunIDs
функция, или Simulink.sdi.getRunIDByIndex
функция.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'abstol',x,'align',alignOpts
Align
— Опции выравнивания сигналаОпции выравнивания сигнала в виде разделенной запятой пары, состоящей из 'Align'
и массив строк или массив векторов символов.
Массив, задающий опции выравнивания, чтобы использовать для соединения сигналов от сравниваемых запусков. Инспектор Данных моделирования выравнивает сигналы сначала первым элементом в массиве, затем вторым элементом в массиве, и так далее. Для получения дополнительной информации смотрите Выравнивание Сигнала.
Значение | Выравнивается |
---|---|
Simulink.sdi.AlignType.BlockPath | Путь к исходному блоку для сигнала |
Simulink.sdi.AlignType.SID | Simulink® идентификатор Идентификаторы Simulink |
Simulink.sdi.AlignType.SignalName | Имя сигнала |
Simulink.sdi.AlignType.DataSource | Путь переменной в MATLAB® рабочая область |
Пример: [Simulink.sdi.AlignType.SignalName,Simulink.sdi.AlignType.SID]
задает выравнивание сигнала по наименованию и затем SID.
AbsTol
— Абсолютная погрешность для сравнения
(значение по умолчанию) | скалярГлобальная абсолютная погрешность с положительным знаком, используемая для всех сигналов в сравнении запуска в виде разделенной запятой пары, состоящей из 'AbsTol'
и скаляр. Для получения дополнительной информации о том, как допуски используются в сравнениях, см. Спецификацию Допуска.
Пример: 0.5
Типы данных: double
RelTol
— Относительная погрешность для сравнения
(значение по умолчанию) | скалярГлобальная относительная погрешность с положительным знаком, используемая для всех сигналов в сравнении запуска в виде разделенной запятой пары, состоящей из 'RelTol'
и скаляр. Относительная погрешность описывается как дробный множитель. Например, 0.1
задает 10-процентный допуск. Для получения дополнительной информации о том, как относительная погрешность применяется в Инспекторе Данных моделирования, см. Спецификацию Допуска.
Пример: 0.1
Типы данных: double
TimeTol
— Допуск времени к сравнению
(значение по умолчанию) | скалярГлобальный допуск времени с положительным знаком, используемый для всех сигналов в сравнении запуска в виде разделенной запятой пары, состоящей из 'TimeTol'
и скаляр. Задайте допуск времени в модулях секунд. Для получения дополнительной информации о допусках в Инспекторе Данных моделирования, см. Спецификацию Допуска.
Пример: 0.2
Типы данных: double
DataType
— Чувствительность сравнения к типам данных сигнала'MustMatch'
Задайте пару "имя-значение" 'DataType','MustMatch'
когда это необходимо, сравнение, чтобы быть чувствительным к неверным типам данных в сравненных сигналах. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает типы данных для выровненных сигналов прежде, чем синхронизировать и сравнить данные сигнала.
Simulink.sdi.compareRuns
функция не сравнивает типы данных выровненных сигналов, если вы не задаете эту пару "имя-значение". Алгоритм сравнения может сравнить сигналы с различными типами данных.
Когда типы данных сигнала не соответствуют, Status
свойство Simulink.sdi.DiffSignalResult
объект для результата установлен в DataTypeMismatch
.
Когда вы указываете, что типы данных должны совпадать и сконфигурировать сравнение, чтобы остановиться на первом несоответствии, неверный тип данных останавливает сравнение. Остановленное сравнение не может вычислить результаты для всех сигналов.
Time
— Чувствительность сравнения, чтобы сигнализировать о временных векторах'MustMatch'
Задайте пару "имя-значение" 'Time','MustMatch'
когда это необходимо, сравнение, чтобы быть чувствительным к несоответствиям во временных векторах сравненных сигналов. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает временные векторы выровненных сигналов прежде, чем синхронизировать и сравнить данные сигнала.
Сравнения не чувствительны к различиям во временных векторах сигнала, если вы не задаете эту пару "имя-значение". Для сравнений, которые не чувствительны к различиям во временных векторах, алгоритм сравнения синхронизирует сигналы до сравнения. Для получения дополнительной информации о том, как синхронизация работает, смотрите, Как Инспектор Данных моделирования Сравнивает Данные.
Когда временные векторы для сигналов не соответствуют, Status
свойство Simulink.sdi.DiffSignalResult
объект для результата установлен в TimeMismatch
.
Когда вы указываете, что временные векторы должны совпадать и сконфигурировать сравнение, чтобы остановиться на первом несоответствии, несоответствие временного вектора останавливает сравнение. Остановленное сравнение не может вычислить результаты для всех сигналов.
StartStop
— Чувствительность сравнения к запуску сигнала и временам остановки'MustMatch'
Задайте пару "имя-значение" 'StartStop','MustMatch'
когда это необходимо, сравнение, чтобы быть чувствительным к несоответствиям в запуске сигнала и временах остановки. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает запуск и времена остановки для выровненных сигналов прежде, чем синхронизировать и сравнить данные сигнала.
Когда времена запуска и времена остановки не соответствуют, Status
свойство Simulink.sdi.DiffSignalResult
объект для результата установлен в StartStopMismatch
.
Когда вы указываете, что запускаются, и времена остановки должны совпадать и сконфигурировать сравнение, чтобы остановиться на первом несоответствии, несоответствие запуска или времени остановки останавливает сравнение. Остановленное сравнение не может вычислить результаты для всех сигналов.
StopOnFirstMismatch
— Останавливается ли сравнение на первом обнаруженном несоответствии'Metadata'
| 'Any'
Останавливается ли сравнение, не сравнивая остающиеся сигналы на первом обнаруженном несоответствии в виде разделенной запятой пары, состоящей из 'StopOnFirstMismatch'
и 'Metadata'
или 'Any'
. Остановленное сравнение не может вычислить результаты для всех сигналов и может возвратить несовпадающий результат более быстро.
Metadata
— Несоответствие в метаданных для выровненных сигналов заставляет сравнение останавливаться. Сравнения метаданных происходят прежде, чем сравнить данные сигнала.
Инспектор Данных моделирования всегда выравнивает сигналы и сравнивает модули сигнала. Когда вы конфигурируете сравнение, чтобы остановиться на первом несоответствии, невыровненный сигнал или модули, которым не соответствуют, всегда заставляют сравнение останавливаться. Можно указать, что дополнительные пары "имя-значение", чтобы сконфигурировать сравнение с проверкой и остановкой на первом несоответствии для дополнительных метаданных, таких как данные сигнала вводят, запускаются и времена остановки и временные векторы.
Any
— Несоответствие в метаданных или данных сигнала для выровненных сигналов заставляет сравнение останавливаться.
ExpandChannels
— Вычислить ли результаты сравнения для каждого канала в многомерных сигналахtrue
или 1
(значение по умолчанию) | false
или 0
Вычислить ли результаты сравнения для каждого канала в многомерных сигналах в виде разделенной запятой пары, состоящей из 'ExpandChannels'
и логический true
(1 ) или
false
(0 ).
true
или 1
— Сравнение расширяет многомерные сигналы, представленные как один сигнал нескалярными демонстрационными значениями к набору сигналов со скалярными демонстрационными значениями, и вычисляет результат сравнения для каждого из этих сигналов.
Представление многомерного сигнала в Инспекторе Данных моделирования как один сигнал с нескалярными демонстрационными значениями не изменяется.
false
или 0
— Сравнение не вычисляет результаты для многомерных сигналов, представленных как один сигнал нескалярными демонстрационными значениями.
diffResult
— Результаты сравненияSimulink.sdi.DiffRunResult
Результаты сравнения, возвращенные как Simulink.sdi.DiffRunResult
объект.
Инспектор Данных моделирования не поддерживает сравнение:
Сигналы типов данных int64
или uint64
.
Сигналы переменного размера.
Simulink.sdi.compareSignals
| Simulink.sdi.getRunIDByIndex
| Simulink.sdi.getRunCount
| Simulink.sdi.DiffRunResult
| getResultByIndex
| Simulink.sdi.DiffSignalResult
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.