主要内容

dsp.kalmanfilter.

(待删除)使用卡尔曼滤波器估计系统测量值和状态

dsp.kalmanfilter.将在将来的释放中删除。使用传感器融合和跟踪工具箱™中的卡尔曼过滤功能。

描述

dsp.kalmanfilter.系统对象™是用于递归地获得线性最佳滤波的解决方案的估计器。在没有精确知识的潜在动态系统的情况下进行了此估计。卡尔曼滤波器实现了具有状态的以下线性离散时间过程,X,在K.th时间步骤: X K. = 一种 X K. 1 + B. K. 1 + W. K. 1 (状态方程)。这个测量,Z.,列示如下: Z. K. = H X K. + V. K. (测量方程)。

卡尔曼滤波器算法递归地计算以下两个步骤:

  • 预测:过程参数x(状态)和P(状态误差协方差)使用前一状态进行估计。

  • 校正:使用当前测量校正状态和错误协方差。

要过滤输入的每个通道:

  1. 创建dsp.kalmanfilter.对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

要了解有关系统对象如何工作的更多信息,请参阅什么是系统对象?

创造

描述

卡尔曼=dsp.kalman滤波器返回卡尔曼筛选系统对象,卡尔曼,参数的默认值。

例子

卡尔曼=dsp.kalman滤波器(STMatrixmmatrix.pncovariance.MNCovarianceCimatrix.返回一个卡尔曼滤波系统对象,卡尔曼.这stateveransitionmatrix.属性设置为STMatrix, 这测量矩阵属性设置为mmatrix., 这过程噪声方差属性设置为pncovariance., 这测量生态方差属性设置为MNCovariance,以及控制输入矩阵属性设置为Cimatrix.

卡尔曼=dsp.kalman滤波器(名称,价值返回卡尔曼过滤系统对象,卡尔曼,每个属性都设置为指定值。用单引号括起每个属性名称。未指定的属性具有默认值。

性质

全部展开

除非另有说明,否则属性为不能,这意味着您不能在调用对象后更改其值。对象在调用时锁定,并且释放函数将解锁它们。

如果一个属性是可调,您可以随时更改其值。

有关更改特性值的详细信息,请参见MATLAB使用系统对象的系统设计

具体说明一种在状态等式中,将先前的时间步骤中的状态涉及当前时间步骤的状态。一种是一个方形矩阵,每个维度等于状态的数量。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

具体说明B.在将控制输入与状态相关的状态等式中。B.是一个列向量,其中多行等于状态的数量。

依赖关系

此属性仅激活控制输入端口属性值为符合事实的

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

具体说明H在将状态与测量相关的测量方程中。H是一个列数等于度量数的行向量。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

具体说明问:作为一个方阵,每个维度等于状态数。问:是白高斯过程噪声的协方差,W.,在状态方程中。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

具体说明R.作为一个方阵,每个维度等于状态数。R.是白高斯过程噪声的协方差,V.,在测量方程中。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

将模型状态的初始估计指定为长度等于状态数的列向量。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

指定状态误差协方差的初始估计,作为每个维度等于状态数量的方矩阵。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

指定为标量逻辑值,禁用系统对象过滤器在卡尔曼滤波器算法中的预测步骤之后执行校正步骤。

使用标量逻辑值指定是否存在控件输入。默认值为符合事实的

用法

描述

例子

[热情希斯特MSE_EstzPredXpred.MSE_Pred]=卡尔曼(Z.通过测量执行迭代卡尔曼滤波器算法Z.和控制输入.列中的列Z.被视为单独并行滤波器的输入,其校正(或更新)步骤可由DisableCorrection财产。返回的值是估计测量值热情,估计的国家希斯特,估计状态的均方误差MSE_Est,预测测量zPred,预测状态Xpred.,以及预测状态的均方误差MSE_Pred

输入参数

全部展开

测量输入,指定为向量或矩阵。

测量输入的行数与行数的数量测量矩阵属性的行数与控件的列数之比控制输入矩阵财产。

测量信号可以是可变尺寸输入。锁定对象后,您可以更改每个输入通道的大小,但通道数不能更改。

数据类型:仅有一个的|双重的

控制输入,指定为向量或矩阵。

控制输入​​的行数的数量与列数的比率控制输入矩阵属性必须等于度量输入的行数与度量输入的行数之比测量矩阵财产。

控制信号可以是可变大小的输入。锁定对象后,可以更改每个输入通道的大小,但通道数不能更改。

数据类型:仅有一个的|双重的

输出参数

全部展开

估计的测量值,作为向量或矩阵返回。

数据类型:仅有一个的|双重的

估计状态,作为向量或矩阵返回。

数据类型:仅有一个的|双重的

估计状态的均方误差,作为标量或列向量返回。如果输入是行向量,则估计状态的MSE是标量。

数据类型:仅有一个的|双重的

预测的测量值,作为向量或矩阵返回。

数据类型:仅有一个的|双重的

预测状态,作为向量或矩阵返回。

数据类型:仅有一个的|双重的

作为标量或列向量返回的预测状态的均方误差。如果输入是行向量,则估计状态的MSE是一个标量。

数据类型:仅有一个的|双重的

对象功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj.,使用下面的语法:

释放(obj)

全部展开

系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特性
重置 使内部状态复位系统对象

例子

全部收缩

笔记:如果您使用的是R2016A或早期版本,请使用等效步骤语法替换对对象的每个调用。例如,obj(x)变成步骤(obj,x)

为不断变化的标量输入、卡尔曼过滤器和范围(用于绘图)创建System对象。

numSamples=4000;R=0.02;src=dsp.SignalSource;src.Signal=[个(numSamples/4,1);-3*个(numSamples/4,1);...4*个(numSamples/4,1);-0.5*个(numSamples/4,1)];tScope=时间范围('numinputports'3,...'timespansource'“财产”“时间跨度”,numSamples,...“时间单位”'秒''ylimits',[-5 5],...'陈旧',对);%创建时间范围卡尔曼= dsp.kalmanfilter('processnoisecovariance',0.0001,...'MeasurementNoisecovariance'R...'initalstateestimate'5,...'初始错误协方差估计'1....“控制输入端口”,假);%创建卡尔曼过滤器

将噪声添加到标量,并将结果传递给卡尔曼滤波器。流式传输数据,并绘制过滤后的信号。

尽管(~isDone(src))trueVal=src();noisyVal=trueVal+sqrt(R)*randn;estVal=kalman(noisyVal);tScope(noisyVal,trueVal,estVal);结尾

算法

此对象实现上描述的算法、输入和输出卡尔曼滤波器块引用页面。对象属性对应于块参数。

兼容性考虑

全部展开

从R2021b开始警告

参考文献

[1] Greg Welch和Gary Bishop,卡尔曼滤波器简介,技术报告TR95 041。北卡罗来纳大学教堂山分校:北卡罗来纳州教堂山分校。, 1995年。

扩展能力

也可以看看

阻碍

在R2013b中引入