主要内容

生成在线参数估计的代码MATLAB

本主题展示如何从在线估计MATLAB生成C/ c++代码®使用System对象™的代码。C/ c++代码是使用codegen(MATLAB编码器)命令从MATLAB编码器™.使用生成的代码将在线估计算法部署到嵌入式目标。

您还可以通过使用创建一个独立的应用程序来部署在线评估代码MATLAB编译器™MATLAB编译器软件支持在MATLAB函数中使用System对象,但不支持在MATLAB脚本中使用System对象。

对于仿真软件®基于工作流程,使用来自系统识别工具箱™的在线估计器块,例如递归最小二乘估计而且递归多项式模型估计器.您可以为使用的在线评估块生成C/ c++代码和结构化文本仿真软件编码器而且Simulink PLC Coder™

支持的在线评估命令

代码生成支持可用于以下在线评估系统对象:

代码生成支持仅适用于以下系统对象命令:

生成在线评估代码

生成用于在线评估的代码:

  1. 创建一个函数,将System对象声明为持久对象,并初始化该对象。将System对象定义为持久对象,以便在调用之间维护对象状态。

    函数[A,B,EstimatedOutput] = arxonline(输出,输入)将系统对象声明为持久持续的obj;如果isempty(obj) obj = recursiveARX([1 2 2],“EstimationMethod”“梯度”);结束[A,B,EstimatedOutput] = step(obj,output,input);结束

    该函数创建一个System对象,用于在线估计ARX订单模型[1 2 1],采用非归一化梯度算法,估计数据,输入而且输出.将此函数保存到MATLAB路径。或者,您也可以为这个函数指定完整的路径名。

    持久化System对象使用condition初始化如果isempty (obj)确保对象只在第一次调用函数时初始化一次。函数的后续调用只执行一步命令更新估计的参数。在初始化期间,您可以指定对象的不可调属性,例如EstimationMethod订单,数据类型

  2. 生成C/ c++代码和墨西哥文件codegen(MATLAB编码器)命令从MATLAB编码器

    codegenarxonlinearg游戏{1}

    的语法args {1}为函数指定一组示例参数。示例参数设置函数参数的维数和数据类型输出而且输入作为双精度标量。

  3. 使用生成的代码。

    • 使用生成的C/ c++代码将在线模型估计部署到嵌入式目标。

    • 使用生成的mexo文件在MATLAB中测试编译好的C/ c++代码。生成的mexi文件也可用于加速MATLAB中参数估计算法的仿真。

      加载估计数据。在本例中,使用静态数据集进行说明。

      负载iddata3输出= z3.y;Input = z3.u;

      通过调用生成的mex文件更新模型参数。

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

在生成的MATLAB代码中使用系统对象时的规则和限制

以下规则和限制适用于在编写适合代码生成的MATLAB代码时使用在线估计系统对象。

对象构造和初始化

  • 如果系统对象存储在持久变量中,则通过将对象句柄嵌入到如果语句的调用isempty ()

  • 类时,将系统对象构造函数的参数设置为编译时常量codegen命令。有关更多信息,请参见编码器。常数(MATLAB编码器)

  • 在代码生成中,不要将其他MATLAB类对象的System对象属性初始化为默认值。在构造函数中初始化这些属性。

输入和输出

  • 不要更改System对象输入的数据类型。

  • 不要将System对象作为示例输入参数传递给正在编译的函数codegen(MATLAB编码器)

  • 不要将System对象传递给声明为外部的函数(在解释模式中调用的函数)coder.extrinsic函数。自动成为外部函数的系统对象可以用作另一个外部函数的输入,但它们不生成代码。

细胞数组

  • 单元格数组不能包含系统对象。

系统对象的可调和不可调属性

  • 赋给不可调属性的值必须是常量,并且该属性最多只能有一次赋值(包括构造函数中的赋值)。

  • 您可以在构造时或在构造后使用点表示法设置在线估计系统对象的可调属性。

另请参阅

|||||||||||(MATLAB编码器)

相关的例子

更多关于

Baidu
map