Эта тема показывает, как сгенерировать код C/C++ от онлайновой оценки код MATLAB®, который использует Систему object™. Код C/C++ сгенерирован с помощью команды codegen
от MATLAB Coder™. Используйте сгенерированный код, чтобы развернуть онлайновые алгоритмы оценки на целевом процессоре.
Можно также развернуть онлайновый код оценки путем создавания автономного приложения с помощью MATLAB Compiler™. Программное обеспечение MATLAB Compiler поддерживает Системные объекты для использования в функциях MATLAB, но не делает объектов системы поддержки для использования в скриптах MATLAB.
Для основанных на Simulink® рабочих процессов используйте онлайновые блоки средства оценки от System Identification Toolbox™, такие как Рекурсивная Оценочная функция методом наименьших квадратов и Рекурсивное Полиномиальное Образцовое Средство оценки. Можно сгенерировать код C/C++ и Структурированный текст для онлайновых блоков оценки с помощью Simulink Coder и Simulink PLC Coder™.
Поддержка генерации кода доступна для этих онлайновых Системных объектов оценки:
Поддержка генерации кода доступна только для следующих команд Системного объекта:
Сгенерировать код для онлайновой оценки:
Создайте функцию, чтобы объявить ваш Системный объект как персистентный, и инициализировать объект. Вы задаете Системный объект как персистентный, чтобы поддержать объектные состояния между вызовами.
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
.
Сгенерируйте код C/C++ и файлы MEX с помощью команды codegen
от MATLAB Coder.
codegen arxonline -args {1,1}
Синтаксис -args {1,1}
задает набор аргументов в качестве примера к вашей функции. Аргументы в качестве примера устанавливают размерности и типы данных аргументов функции output
и input
как скаляры с двойной точностью.
Используйте сгенерированный код.
Используйте сгенерированный код 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, подходящего для генерации кода.
Объектная конструкция и инициализация
Если Системные объекты хранятся в персистентных переменных, инициализируют объекты однажды путем встраивания указателей на объект в оператор if
с вызовом isempty( )
.
Установите аргументы на конструкторов Системного объекта как константы времени компиляции при использовании команды codegen
. Для получения дополнительной информации смотрите coder.Constant
.
Не инициализируйте свойства Системных объектов с другими объектами класса MATLAB как значения по умолчанию в генерации кода. Инициализируйте эти свойства в конструкторе.
Вводы и выводы
Не изменяйте тип данных входных параметров Системного объекта.
Не передавайте Системный объект как входной параметр в качестве примера к функции, скомпилированной с codegen
.
Не передавайте Системный объект функциям, объявленным как внешний (функции, вызванные в интерпретированном режиме) использование функции coder.extrinsic
. Системные объекты, возвращенные во внешние функции и Системные объекты осциллографа, которые автоматически становятся внешними, могут использоваться в качестве входных параметров к другой внешней функции, но они не генерируют код.
Массивы ячеек
Массивы ячеек не могут содержать Системные объекты.
Настраиваемые и ненастраиваемые свойства системных объектов
Значение, присвоенное ненастраиваемому свойству, должно быть константой, и может быть самое большее одно присвоение на то свойство (включая присвоение в конструкторе).
Можно установить настраиваемые свойства онлайновых Системных объектов оценки во время создания или при помощи записи через точку после этого.
codegen
| isLocked
| recursiveAR
| recursiveARMA
| recursiveARMAX
| recursiveARX
| recursiveBJ
| recursiveLS
| recursiveOE
| release
| reset
| step