主要内容

生成在线状态估计的代码马铃薯

您可以从MATLAB生成C / C ++代码®使用的代码ExtendedKalmanFilter.undentedkalmanfilter粒子滤片在线状态估计的对象。使用C / C ++代码使用Codegen.(MATLAB编码器)命令从Matlab Coder™软件。使用生成的代码将在线估计算法部署到嵌入目标。您还可以通过使用独立应用程序进行部署在线估计代码Matlab Compiler™软件。

要生成在线状态估计的C / C ++代码:

  1. 创建一个函数以将筛选物对象视为持久性,并初始化对象。您将对象定义为持久以维护呼叫之间的对象状态。

    功能[纠正x] = UKFCoDegen(输出)%declare对象作为持久性。执着的obj;如果isempty(obj)%初始化对象。obj = UnscentedkalmanFilter(@ vdpstatefcn,@ vdpmeasurementfcn,​​[2; 0]);obj.measurementnoise = 0.01;结尾%估计各国。纠正x =正确(OBJ,输出);预测(obj);结尾

    该函数创建一个具有两个状态和一个输出的VAN DER POL振荡器的在线状态估计的UNSCENTED的卡尔曼滤波器对象。您使用先前写入和保存的状态转换和测量功能,vdpstatefcn.m.vdpmeasurementfcn.m.,并指定两个状态的初始状态值[2; 0]。这里输出是测量的输出数据。拯救Ukfcodegen.m.Matlab路径上的功能。或者,您可以为此函数指定完整路径名。

    在里面Ukfcodegen.m.函数,持久对象是初始化的条件如果是谬误(obj)要确保仅在第一次调用函数时才初始化对象。后续调用该函数仅执行预测正确的命令以更新状态估计。在初始化期间,您可以指定对象的未填充属性,例如StateTransitionFCN.(指定的Ukfcodegen.m.作为vdpstatefcn.m.) 和MeasurementFCN.(指定的Ukfcodegen.m.作为vdpmeasurementfcn.m.)。之后,您只能指定可调谐属性。有关更多信息,请参阅可调谐和非全部对象属性

    在状态转换和测量功能中,您必须仅使用支持代码生成的命令。金宝app有关这些命令的列表,请参阅C / C ++代码生成支持的函数和对象金宝app(MATLAB编码器)。包括汇编指令%#codegen.在这些函数中,表示您打算为函数生成代码。添加此指令指示MATLAB代码分析仪帮助您诊断和修复将在代码生成中导致错误的违规。例如,类型vdpstatefcn.m.在命令行。

  2. 使用C / C ++代码和MEX文件使用Codegen.(MATLAB编码器)命令从Matlab编码器软件。

    Codegen.Ukfcodegen.-  args.{1}

    语法-args {1}指定函数的参数的示例。该参数设置函数参数的尺寸和数据类型输出作为双重精度标量。

    笔记

    如果希望具有单精度浮点变量的过滤器,则必须在对象构造期间将状态的初始值指定为单精度。

    obj = UnscentedkalmanFilter(@ vdpstatefcn,@ vdpmeasurementfcn,​​单个([2; 0]))

    然后要生成代码,请使用以下语法。

    Codegen.Ukfcodegen.-  args.{{单(1)}
  3. 使用生成的代码。

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

    • 使用生成的MEX文件用于在MATLAB中测试编译的C / C ++代码。生成的MEX文件也可用于加速MATLAB中的状态估计算法的模拟。

      加载估计数据。假设您的输出数据存储在测量_data.mat.文件。

      加载测量_data.mat.输出

      通过调用生成的MEX文件来估算状态。

      为了i = 1:numel(输出)xcorrited = ukfcodegen_mex(输出(i));结尾

    此示例生成用于编译MEX文件的C / C ++代码。要为其他目标生成代码,请参阅Codegen.(MATLAB编码器)在里面Matlab编码器文档。

可调谐和非全部对象属性

财产种类 扩展卡尔曼过滤器对象 Unscented Kalman筛选对象 粒子过滤器对象
可调谐属性,您可以在对象结构期间或使用点表示法以后指定多次的属性 状态StateCovariance.processnoise., 和测量管理 状态StateCovariance.processnoise.测量管理Αbet, 和kappa. 粒子重量
您可以仅在对象构造期间或之后使用点表示法,但在使用之前预测或者正确的命令 StateTransitionFCN.MeasurementFCN.StateTransitionJacobianfcn., 和测量jacobianfcn. StateTransitionFCN.MeasurementFCN. StateTransitionFCN.MeasurementLikelihoodfcn.最终于司法方法陈辞重新采样策划重新制动方法
您必须在对象构造期间指定的难度属性 HasaddittyProcessnoise.hasadditivemeasurementnoise. HasaddittyProcessnoise.hasadditivemeasurementnoise.

也可以看看

||

相关话题