В этой теме показано, как сгенерировать код C/C + + из онлайн-оценки MATLAB® код, который использует системную object™. Код C/C + + генерируется с помощью codegen
(MATLAB Coder) из 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™.
Поддержка генерации кода доступна для этих онлайновых Системных объектов оценки:
Поддержка генерации кода доступна только для следующих команд системный объект:
Чтобы сгенерировать код для онлайн-оценки:
Создайте функцию, чтобы объявить системный объект постоянным и инициализировать объект. Системный объект определяется как постоянный для поддержания состояний объекта между вызовами.
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) из 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 Coder).
Не инициализируйте свойства системных объектов с другими объектами класса MATLAB как значения по умолчанию при генерации кода. Инициализируйте эти свойства в конструкторе.
Входы и выходы
Не изменяйте тип данных входов системного объекта.
Не передайте системный объект в качестве примера входного параметра функции, компилируемой с codegen
(MATLAB Coder).
Не передайте Системный объект функциям, объявленным как внешние (функции, вызываемые в интерпретированном режиме), используя coder.extrinsic
функция. Системные объекты, возвращенные из внешних функций и возможности Системные объекты, которые автоматически становятся внешними, могут использоваться в качестве входов в другую внешнюю функцию, но они не генерируют код.
Массивы ячеек
Массивы ячеек не могут содержать системные объекты.
Настраиваемые и нетронутые свойства системных объектов
Значение, присвоенное свойству nontunable, должно быть константой, и может быть самое большее одно назначение этому свойству (включая назначение в конструкторе).
Можно задать настраиваемые свойства онлайн- Системных объектов оценки в конструкцию время или при помощи записи через точку после этого.
isLocked
| recursiveAR
| recursiveARMA
| recursiveARMAX
| recursiveARX
| recursiveBJ
| recursiveLS
| recursiveOE
| release
| reset
| step
| codegen
(MATLAB CODER)