Проверьте числовую эквивалентность между двумя режимами выполнения модели

Следующий пример описывает конфигурирование, выполнение и сравнение результатов rtwdemo_cgv модели в нормальном и программного обеспечения в цикле (SIL) режимы симуляции.

Сконфигурируйте модель

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

  1. Откройте rtwdemo_cgv модель.

    cgvModel = 'rtwdemo_cgv';
    load_system(cgvModel);
  2. Сохраните модель в рабочую директорию.

    save_system(cgvModel, fullfile(pwd, cgvModel));
    close_system(cgvModel); % avoid original model shadowing saved model 

  3. Используйте cgv.Config создать cgv.Config объект. Задайте параметры, которые проверяют и изменяют значения параметра конфигурации и сохраняют модель для режима SIL топ-модели выполнения.

    cgvCfg = cgv.Config('rtwdemo_cgv', 'connectivity', 'sil', 'SaveModel', 'on');

  4. Используйте configModel метод, чтобы рассмотреть вашу настройку модели и изменить настройки, чтобы сконфигурировать вашу модель для SIL. Когда 'connectivity' установлен в 'sil', системный конечный файл автоматически установлен в 'ert.tlc'. Если вы задали пару параметра/значения, ('SaveModel', 'on') когда вы создали cgvCfg объект, cgv.Config.configModel метод сохраняет модель.

    Примечание

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

    cgvCfg.configModel(); % Evaluate, change, and save your model for SIL

  5. Отобразите отчет изменений что cgv.Config.configModel делает к модели.

    cgvCfg.displayReport(); % In this example, this reports no changes

Выполните модель

Используйте API CGV, чтобы выполнить модель в двух режимах. Эти два режима в этом примере являются симуляцией режима normal mode и режимом SIL. В каждом выполнении модели объект CGV для каждого режима получает выходные данные и пишет данные в файл.

  1. Если вы уже не сделали так, выполните шаги, описанные в, Конфигурируют Модель.

  2. Создайте cgv.CGV объект, который задает rtwdemo_cgv модель в симуляции режима normal mode.

    cgvSim = cgv.CGV(cgvModel, 'connectivity', 'sim');
    

    Примечание

    Когда топ-модель установлена в нормальный режим симуляции, наборы API CGV модели, на которые ссылаются, в режиме PIL к режиму Accelerator.

  3. Предоставьте входной файл cgvSim объект.

    cgvSim.addInputData(1, [cgvModel '_data']);

  4. Перед выполнением модели задайте файлы MATLAB, чтобы выполниться или MAT-файлы, чтобы загрузить. Этот шаг является дополнительным.

    cgvSim.addPostLoadFiles({[cgvModel '_init.m']});
  5. Задайте местоположение, где объект пишет все выходные данные и файлы метаданных для выполнения. Этот шаг является дополнительным.

    cgvSim.setOutputDir('cgv_output');

  6. Выполните модель.

    result1 = cgvSim.run();

  7. Сопоставьте выходные данные с входными данными.

    outputDataSim = cgvSim.getOutputData(1);

  8. Для следующего режима выполнения, SIL, повторных шагов 2-7.

    cgvSil = cgv.CGV( cgvModel, 'Connectivity', 'sil');
    cgvSil.addInputData(1, [cgvModel '_data']);
    cgvSil.addPostLoadFiles({[cgvModel '_init.m']});
    cgvSil.setOutputDir('cgv_output');
    result2 = cgvSil.run();

Сравните все выходные сигналы

После подготовки и запущения теста, сравните выходные параметры путем выполнения следующего:

  1. Если вы уже не сделали так, конфигурируете и тестируете модель, как описано в Конфигурируют Модель и Выполняют Модель.

  2. Протестируйте это результат выполнения модели:

    if ~result1 || ~result2
        error('Execution of model failed.');
    end

  3. Используйте getOutputData метод, чтобы получить выходные данные от cgv.CGV object s.

    simData = cgvSim.getOutputData(1);
    silData = cgvSil.getOutputData(1);

  4. Отобразите список сигналов по наименованию с помощью getSavedSignals метод.

    cgvSim.getSavedSignals(simData);
    

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

    signalList = {'simData.getElement(4).Values.Data'};

  6. Используйте createToleranceFile метод, чтобы создать файл, в этом примере, 'localtol', корреляция информации о допуске с именами выходного сигнала.

    toleranceList = {{'absolute', 0.5}};
    cgv.CGV.createToleranceFile('localtol', signalList, toleranceList);

  7. Сравните сигналы выходных данных. По умолчанию, compare метод смотрит на все сигналы, которые имеют общее название между обоими выполнением. Если файл допуска присутствует, cgv.CGV.compare использует связанный допуск к определенному сигналу во время сравнения; в противном случае допуск является нулем. В этом примере, 'Plot' параметр устанавливается на 'mismatch'. Поэтому только несовпадающие сигналы производят график.

    [matchNames, ~, mismatchNames, ~] = ...
        cgv.CGV.compare(simData, silData, 'Plot', 'mismatch', ...
        'Tolerancefile', 'localtol');
    fprintf( '%d Signals match, %d Signals mismatch\n', ...
        length(matchNames), length(mismatchNames));
    disp('Mismatched Signal Names:');
    disp(mismatchNames);
    В командной строке MATLAB вы видите:
    14 Signals match, 1 Signals mismatch
    Mismatched Signal Names:
        'simData.getElement(4).Values.Data'

    График следует из несоответствия сигнала.

    Более низкий график отображает числовое различие между результатами.

Сравните отдельные выходные сигналы

После подготовки и запущения теста, сравните выходные параметры отдельных сигналов путем выполнения следующего:

  1. Если вы уже не сделали так, конфигурируете и тестируете модель, как описано в Конфигурируют Модель и Выполняют Модель.

  2. Используйте getOutputData метод, чтобы получить выходные данные от cgv.CGV объекты.

    simData = cgvSim.getOutputData(1);
    silData = cgvSil.getOutputData(1);

  3. Используйте getSavedSignals метод, чтобы отобразить выходные данные сигнализирует об именах. Создайте список определенных имен сигнала в массиве ячеек из символьных векторов. Список сигнала может содержать много сигналов.

    cgv.CGV.getSavedSignals(simData);
    
    signalList = {'simData.getElement(3).Values.hi1.mid0.lo1.Data', ...
    'simData.getElement(3).Values.hi1.mid0.lo2.Data', ...
    'simData.getElement(2).Values.Data(:,3)'};
    

  4. Используйте заданные сигналы, как введено для compare метод, чтобы сравнить сигналы от отдельных запусков.

    [matchNames, ~, mismatchNames, ~] = ...
        cgv.CGV.compare(simData, silData, 'Plot', 'mismatch', ...
        'signals', signalList);
    fprintf( '%d Signals match, %d Signals mismatch\n', ...
        length(matchNames), length(mismatchNames));
    if ~isempty(mismatchNames)
        disp( 'Mismatched Signal Names:');
        disp(mismatchNames);
    end
    В командной строке MATLAB результат:
    3 Signals match, 0 Signals mismatch

Постройте выходные сигналы

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

  1. Если вы уже не сделали так, конфигурируете и тестируете модель, как описано в Конфигурируют Модель и Выполняют Модель.

  2. Используйте getOutputData метод, чтобы получить выходные данные от cgv.CGV объекты.

    simData = cgvSim.getOutputData(1);

  3. Используйте getSavedSignals метод, чтобы отобразить выходные данные сигнализирует об именах. Создайте список определенных имен сигнала в массиве ячеек из символьных векторов. Список сигнала может содержать много сигналов.

    cgv.CGV.getSavedSignals(simData);
    signalList = {'simData.getElement(2).Values.Data(:,1)'};

  4. Используйте заданный список сигнала, как введено для plot метод, чтобы сравнить сигналы от отдельных запусков.

    [signalNames, signalFigures] = cgv.CGV.plot(simData, ...
         'Signals', signalList);
    

Похожие темы