主要内容

生成在线状态估计代码MATLAB

您可以从MATLAB生成C/ c++代码®使用extendedKalmanFilterunscentedKalmanFilter而且particleFilter对象用于在线状态估计。C/ c++代码是使用codegen(MATLAB编码器)命令从MATLAB编码器™软件使用生成的代码将在线估计算法部署到嵌入式目标。您还可以通过使用创建一个独立的应用程序来部署在线评估代码MATLAB编译器™软件

生成用于在线状态估计的C/ c++代码:

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

    函数[CorrectedX] = ukfcodegen(output)将对象声明为持久化。持续的obj;如果isempty (obj)初始化对象。obj = unscentedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0]);obj。测量噪声= 0.01;结束估计状态。CorrectedX = correct(obj,output);预测(obj);结束

    该函数创建了一个无气味卡尔曼滤波器对象,用于对具有两个状态和一个输出的范德波尔振荡器进行在线状态估计。您使用之前编写和保存的状态转换和测量函数,vdpStateFcn.m而且vdpMeasurementFcn.m,并指定两个状态的初始状态值为(2, 0).在这里输出是测量的输出数据。保存ukfcodegen.m函数的MATLAB路径。或者,您也可以为这个函数指定完整的路径名。

    ukfcodegen.m函数时,持久化对象使用condition初始化如果isempty (obj)确保对象只在第一次调用函数时初始化一次。函数的后续调用仅执行预测而且正确的命令更新状态估计。在初始化期间,您可以指定对象的不可调属性,例如StateTransitionFcn(指定ukfcodegen.m作为vdpStateFcn.m),MeasurementFcn(指定ukfcodegen.m作为vdpMeasurementFcn.m).在此之后,您只能指定可调属性。有关更多信息,请参见可调和不可调对象属性

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

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

    codegenukfcodegenarg游戏{1}

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

    请注意

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

    obj = unscentedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,single([2;0]))

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

    codegenukfcodegenarg游戏{{单(1)}
  3. 使用生成的代码。

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

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

      加载估计数据。假设输出数据存储在measured_data.mat文件。

      负载measured_data.mat输出

      通过调用生成的mex文件来估计状态。

      i = 1:numel(output) XCorrected = ukfcodegen_mex(output(i));结束

    这个例子生成用于编译mex文件的C/ c++代码。要为其他目标生成代码,请参见codegen(MATLAB编码器)MATLAB编码器文档。

可调和不可调对象属性

属性类型 扩展卡尔曼滤波对象 无味卡尔曼滤波对象 粒子过滤对象
可以在对象构造期间或之后使用点表示法多次指定的可调属性 状态StateCovarianceProcessNoise,MeasurementNoise 状态StateCovarianceProcessNoiseMeasurementNoiseαβ,卡巴 粒子而且权重
方法之前只能指定一次的不可调属性,可以在对象构造期间指定,也可以在使用点符号之后指定预测正确的命令 StateTransitionFcnMeasurementFcnStateTransitionJacobianFcn,MeasurementJacobianFcn StateTransitionFcn而且MeasurementFcn StateTransitionFcnMeasurementLikelihoodFcnStateEstimationMethodStateOrientationResamplingPolicy而且ResamplingMethod
在对象构造期间必须指定的不可调属性 HasAdditiveProcessNoise而且HasAdditiveMeasurementNoise HasAdditiveProcessNoise而且HasAdditiveMeasurementNoise

另请参阅

||

相关的话题