生成在线状态估计代码MATLAB
您可以从MATLAB生成C/ c++代码®使用extendedKalmanFilter
,unscentedKalmanFilter
而且particleFilter
对象用于在线状态估计。C/ c++代码是使用codegen
(MATLAB编码器)命令从MATLAB编码器™软件使用生成的代码将在线估计算法部署到嵌入式目标。您还可以通过使用创建一个独立的应用程序来部署在线评估代码MATLAB编译器™软件
生成用于在线状态估计的C/ c++代码:
创建一个函数,将筛选器对象声明为持久的,并初始化该对象。将对象定义为持久对象,以便在调用之间维护对象状态。
函数[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
).在此之后,您只能指定可调属性。有关更多信息,请参见可调和不可调对象属性.在状态转换和测量函数中,必须只使用代码生成支持的命令。有关这些命令的列表,请参见C/ c++代码生成支持的函数和对象(MATLAB编码器).包括编译指令
% # codegen
在这些函数中表示您打算为该函数生成代码。添加此指令将指导MATLAB代码分析器帮助您诊断和修复在代码生成过程中可能导致错误的违规行为。例如,键入vdpStateFcn.m
在命令行。生成C/ c++代码和墨西哥文件
codegen
(MATLAB编码器)命令从MATLAB编码器软件codegenukfcodegenarg游戏{1}
的语法
args {1}
指定函数的参数示例。参数设置函数参数的维数和数据类型输出
作为一个双精度标量。请注意
如果您希望筛选器具有单精度浮点变量,则必须在对象构造期间将状态的初始值指定为单精度。
obj = unscentedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,single([2;0]))
然后使用以下语法生成代码。
codegenukfcodegenarg游戏{{单(1)}
使用生成的代码。
使用生成的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编码器文档。
可调和不可调对象属性
属性类型 | 扩展卡尔曼滤波对象 | 无味卡尔曼滤波对象 | 粒子过滤对象 |
---|---|---|---|
可以在对象构造期间或之后使用点表示法多次指定的可调属性 | 状态 ,StateCovariance ,ProcessNoise ,MeasurementNoise |
状态 ,StateCovariance ,ProcessNoise ,MeasurementNoise ,α ,β ,卡巴 |
粒子 而且权重 |
方法之前只能指定一次的不可调属性,可以在对象构造期间指定,也可以在使用点符号之后指定预测 或正确的 命令 |
StateTransitionFcn ,MeasurementFcn ,StateTransitionJacobianFcn ,MeasurementJacobianFcn |
StateTransitionFcn 而且MeasurementFcn |
StateTransitionFcn ,MeasurementLikelihoodFcn ,StateEstimationMethod ,StateOrientation ,ResamplingPolicy 而且ResamplingMethod |
在对象构造期间必须指定的不可调属性 | HasAdditiveProcessNoise 而且HasAdditiveMeasurementNoise |
HasAdditiveProcessNoise 而且HasAdditiveMeasurementNoise |
另请参阅
extendedKalmanFilter
|particleFilter
|unscentedKalmanFilter