主要内容

dsp。KalmanFilter

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

dsp。KalmanFilter将在将来的版本中删除。请使用传感器融合和跟踪工具箱™中的卡尔曼滤波器功能。

描述

dsp。KalmanFilter系统对象™是一个用于递归地获得线性最优滤波的解决方案的估计器。这种估计是在没有精确了解底层动态系统的情况下做出的。卡尔曼滤波器实现了以下带有状态的线性离散时间过程,x,在kth时间步长: x k 一个 x k 1 + B u k 1 + w k 1 (状态方程)。这个测量,z,表示为: z k H x k + v k (测量方程)。

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

  • 预测:过程参数x(状态)和P(状态误差协方差)是使用之前的状态来估计的。

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

要过滤输入的每个通道:

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

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

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

卡尔曼= dsp。KalmanFilter返回卡尔曼滤波系统对象,卡尔曼,参数为默认值。

例子

卡尔曼= dsp。KalmanFilter (STMatrixMMatrixPNCovarianceMNCovarianceCIMatrix返回一个卡尔曼滤波系统对象,卡尔曼。的StateTransitionMatrix属性设置为STMatrix,MeasurementMatrix属性设置为MMatrix,ProcessNoiseCovariance属性设置为PNCovariance,MeasurementNoiseCovariance属性设置为MNCovariance,以及ControlInputMatrix属性设置为CIMatrix

卡尔曼= dsp。KalmanFilter (名称,值返回一个卡尔曼滤波系统对象,卡尔曼,并将每个属性设置为指定的值。将每个属性名用单引号括起来。未指定的属性有默认值。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

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

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

指定一个在把前一个时间步的状态和当前时间步的状态联系起来的状态方程中。一个是一个方阵,每个维数都等于状态数。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

指定B在将控制输入与状态联系起来的状态方程中。B是一个列向量,其行数等于状态数。

依赖关系

属性时才激活此属性ControlInputPort属性值为真正的

数据类型:||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

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

使用标量逻辑值指定是否存在控制输入。默认值为真正的

使用

描述

例子

(热情xMSE_EstzPredxPredMSE_Pred=卡尔曼(zu对测量值进行迭代卡尔曼滤波算法z控制输入u。中的列z而且u被视为独立并行过滤器的输入,其修正(或更新)步骤可以被DisableCorrection财产。返回的值是估计的测量值热情,估计状态x,估计状态的MSEMSE_Est,预测测量值zPred,预测状态xPred,预测状态的MSEMSE_Pred

输入参数

全部展开

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

测量输入的行数与数据的行数之比MeasurementMatrix属性的列数与控件输入的行数之比ControlInputMatrix财产。

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

数据类型:|

控件输入,指定为矢量或矩阵。

控件的行数与列数之比ControlInputMatrix属性的行数必须等于测量输入的行数与对象的行数之比MeasurementMatrix财产。

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

数据类型:|

输出参数

全部展开

估计的测量值,以矢量或矩阵形式返回。

数据类型:|

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

数据类型:|

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

数据类型:|

预测的测量值,以矢量或矩阵的形式返回。

数据类型:|

预测状态,以向量或矩阵的形式返回。

数据类型:|

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

数据类型:|

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

请注意:如果您正在使用R2016a或更早的版本,请使用等效的步骤语法替换对对象的每个调用。例如,obj (x)就变成了步骤(obj, x)

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

numSamples = 4000;R = 0.02;src = dsp.SignalSource;src。信号= [ones(numSamples/4,1);-3*ones(numSamples/4,1);...4 * 1 (numSamples / 4,1);-0.5 * 1 (numSamples / 4,1)];tScope = timescope(“NumInputPorts”3,...“TimeSpanSource”“属性”“时间间隔”numSamples,...“TimeUnits”“秒”“YLimits”, 5 [5],...“ShowLegend”,真正的);创建时间范围卡尔曼= dsp。KalmanFilter (“ProcessNoiseCovariance”, 0.0001,...“MeasurementNoiseCovariance”R...“InitialStateEstimate”5,...“InitialErrorCovarianceEstimate”,1,...“ControlInputPort”、假);创建卡尔曼滤波器

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

(~isDone(src)) trueVal = src();noisyVal = trueVal +√(R)*randn;estVal = kalman(noisyVal);tScope (noisyVal trueVal estVal);结束

算法

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

参考文献

格雷格·韦尔奇和加里·毕夏普,卡尔曼滤波器简介,技术报告tr95041。北卡罗来纳大学教堂山分校:北卡罗来纳州教堂山。, 1995年。

扩展功能

版本历史

在R2013b中引入

全部展开

另请参阅

Baidu
map