Сгенерируйте код для онлайновой оценки параметра MATLAB

Эта тема показывает, как сгенерировать код C/C++ от онлайновой оценки код MATLAB®, который использует Систему object™. Код C/C++ сгенерирован с помощью codegen команда от MATLAB Coder™. Используйте сгенерированный код, чтобы развернуть онлайновые алгоритмы оценки в целевой процессор.

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

Для основанных на Simulink® рабочих процессов используйте онлайновые блоки средства оценки из System Identification Toolbox™, такие как Recursive Least Squares Estimator и Recursive Polynomial Model Estimator. Можно сгенерировать код C/C++ и Структурированный текст для онлайновых блоков оценки с помощью Simulink Coder и Simulink PLC Coder™.

Поддерживаемые онлайновые команды оценки

Поддержка генерации кода доступна для этих онлайновых Системных объектов оценки:

Поддержка генерации кода доступна только для следующих команд Системного объекта:

Сгенерируйте код для онлайновой оценки

Сгенерировать код для онлайновой оценки:

  1. Создайте функцию, чтобы объявить ваш Системный объект как персистентный, и инициализировать объект. Вы задаете Системный объект как персистентный, чтобы обеспечить объектные состояния между вызовами.

    function [A,B,EstimatedOutput] = arxonline(output,input)
    % Declare System object as persistent
    persistent obj;
    if isempty(obj)
        obj = recursiveARX([1 2 2],'EstimationMethod','Gradient');
    end
    [A,B,EstimatedOutput] = step(obj,output,input);
    end

    Функция создает Системный объект для онлайновой оценки модели ARX порядка [1 2 1], с помощью ненормированного алгоритма градиента, и данных об оценке, input и output. Сохраните эту функцию на пути MATLAB. В качестве альтернативы можно задать имя полного пути для этой функции.

    Персистентный Системный объект инициализируется с условием if isempty(obj) гарантировать, что объект инициализируется только однажды, когда функция вызвана в первый раз. Последующие вызовы функции только выполняют step команда, чтобы обновить предполагаемые параметры. Во время инициализации вы задаете ненастраиваемые свойства объекта, такие как EstimationMethod, Orders, и DataType.

  2. Сгенерируйте код C/C++ и файлы MEX с помощью codegen команда от MATLAB Coder.

    codegen arxonline -args {1,1}

    Синтаксис -args {1,1} задает набор аргументов в качестве примера к вашей функции. Аргументы в качестве примера устанавливают размерности и типы данных аргументов функции outputи input как скаляры с двойной точностью.

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

    • Используйте сгенерированный код C/C++, чтобы развернуть онлайновую оценку модели целевым процессором.

    • Используйте сгенерированный файл MEX в тестировании скомпилированного кода C/C++ в MATLAB. Сгенерированный файл MEX также полезен для ускорения симуляций алгоритмов оценки параметра в MATLAB.

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

      load iddata3
      output = z3.y;
      input = z3.u;

      Обновите параметры модели путем вызова сгенерированного файла MEX.

      for i = 1:numel(input)
          [A,B,EstimatedOutput] = arxonline_mex(output(i),input(i));
      end

Правила и ограничения при использовании системных объектов в сгенерированном коде MATLAB

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

Объектная конструкция и инициализация

  • Если Системные объекты хранятся в персистентных переменных, инициализируют объекты однажды путем встраивания указателей на объект в if оператор с вызовом isempty( ).

  • Установите аргументы на конструкторов Системного объекта как константы времени компиляции при использовании codegen команда. Для получения дополнительной информации смотрите coder.Constant.

  • Не инициализируйте свойства Системных объектов с другими объектами класса MATLAB как значения по умолчанию в генерации кода. Инициализируйте эти свойства в конструкторе.

Вводы и выводы

  • Не изменяйте тип данных входных параметров Системного объекта.

  • Не передавайте Системный объект как входной параметр в качестве примера к функции, скомпилированной с codegen.

  • Не передавайте Системный объект функциям, объявленным как значение внешних параметров (функции, вызванные в интерпретированном режиме) использование coder.extrinsic функция. Системные объекты, возвращенные во внешние функции и Системные объекты осциллографа, которые автоматически становятся значением внешних параметров, могут использоваться в качестве входных параметров к другой внешней функции, но они не генерируют код.

Массивы ячеек

  • Массивы ячеек не могут содержать Системные объекты.

Настраиваемые и ненастраиваемые свойства системных объектов

  • Значение, присвоенное ненастраиваемому свойству, должно быть константой, и может быть самое большее одно присвоение на то свойство (включая присвоение в конструкторе).

  • Можно установить настраиваемые свойства онлайновых Системных объектов оценки во время создания или при помощи записи через точку после этого.

Смотрите также

| | | | | | | | | | |

Связанные примеры

Больше о