dsp.KalmanFilter

卡尔曼滤波估计系统的测量和状态

描述

dsp.KalmanFilter系统对象™是用于递归地获得线性最优滤波的溶液的估计器。这估计是没有基础的动态系统的精确的知识使。卡尔曼滤波器实现下列线性离散时间过程与状态,X,在ķ时间步: X ķ = 一个 X ķ - 1 + ü ķ - 1 + w ^ ķ - 1 (状态方程)。这种测量方法,ž,给出如下: ž ķ = H X ķ + v ķ (测量方程)。

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

  • 预测:利用前一状态估计工艺参数x(状态)和P(状态误差协方差)。

  • 更正:状态和误差协方差正在使用的电流测量校正。

以过滤输入的每个信道:

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

  2. 调用带参数的对象,就好像它是一个功能。

要了解更多有关系统对象的方式工作,请参阅什么是系统对象?(MATLAB)。

创建

描述

卡尔曼= dsp.KalmanFilter返回卡尔曼滤波器系统对象,卡尔曼,与该参数的默认值。

卡尔曼= dsp.KalmanFilter (STMatrixMMatrixPNCovarianceMNCovarianceCiMatrix公司返回一个卡尔曼滤波器系统对象,卡尔曼。该StateTransitionMatrix属性设置为STMatrix中,MeasurementMatrix属性设置为MMatrix中,ProcessNoiseCovariance属性设置为PNCovariance中,MeasurementNoiseCovariance属性设置为MNCovarianceControlInputMatrix属性设置为CiMatrix公司

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

属性

全部展开

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

如果属性可调,你可以在任何时候改变它的值。

有关更改属性值的更多信息,请参阅使用系统对象的系统设计在MATLAB(MATLAB)。

指定一个在于在在当前时间步前一时间步的状态涉及的状态的状态方程。一个是方阵,每个尺寸等于状态的数目。

数据类型:||INT8|int16|int32|int64|UINT8|uint16|UINT32|UINT64

指定在涉及控制输入到状态的状态方程。是与行数的列向量等于状态的数目。

依赖

此属性只有当被激活ControlInputPort属性值真正

数据类型:||INT8|int16|int32|int64|UINT8|uint16|UINT32|UINT64

指定H在涉及状态的测量的测量方程。H是一个行向量,其列数等于测量值的个数。

数据类型:||INT8|int16|int32|int64|UINT8|uint16|UINT32|UINT64

指定Q作为一个方阵,每个维数都等于状态数。Q为高斯白噪声的协方差,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

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

指定如果控制输入的情况下,使用标量逻辑值。默认值是真正

用法

描述

[热情xEstMSE_EstzPredxPredMSE_Pred)=卡尔曼(žü进行过测量迭代卡尔曼滤波器算法ž和控制输入ü。在列žü将其视为独立并行过滤器的输入,其校正(或更新)步骤可由DisableCorrection属性。返回的值是估计的测量热情,估计状态xEst,估计状态的MSEMSE_Est,预测测量zPred,预测状态xPred和预测的状态的MSEMSE_Pred

输入参数

全部展开

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

测量输入的行数的到的行数的比率MeasurementMatrix属性的列数与控件输入的行数之比ControlInputMatrix属性。

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

数据类型:|

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

控制输入​​的行数的到的列数的比率ControlInputMatrix属性必须是等于测量输入的行数的到的行数的比率MeasurementMatrix属性。

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

数据类型:|

输出参数

全部展开

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

数据类型:|

估计的状态,返回为矢量或矩阵。

数据类型:|

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

数据类型:|

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

数据类型:|

预测状态,返回作为载体或基质。

数据类型:|

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

数据类型:|

对象函数

使用对象函数,指定系统对象作为第一个输入参数。例如,为了释放一个名为System对象的系统资源OBJ,使用以下语法:

释放(OBJ)

全部展开

一步 系统对象算法
释放 释放资源,并允许更改系统对象属性值和输入特性
重置 重设系统对象

例子

全部收缩

注意:如果您使用R2016a或更早版本,取代每次调用具有同等步语法的对象。例如,物镜(X)变为步骤(OBJ,X)。

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

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 = dsp.TimeScope('NumInputPorts'3,'时间跨度',NUMSAMPLES,...“TimeUnits”“秒”'YLimits',[ -  5 5],...'ShowLegend',真正);创建时间范围卡尔曼= dsp.KalmanFilter('ProcessNoiseCovariance',0.0001,...'MeasurementNoiseCovariance'R...'InitialStateEstimate'5,...“InitialErrorCovarianceEstimate”,1...'ControlInputPort',假);%创建卡尔曼滤波

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

(~isDone(src)) trueVal = src();噪声= trueVal + sqrt(R)*randn;estVal =卡尔曼(noisyVal);tScope(noisyVal,trueVal,estVal);结束

注意:如果您使用R2016a或更早版本,取代每次调用具有同等步语法的对象。例如,物镜(X)变为步骤(OBJ,X)。

创建信号、卡尔曼滤波器和时间范围系统对象。

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 = dsp.TimeScope('NumInputPorts'3,'时间跨度',NUMSAMPLES,...“TimeUnits”“秒”'YLimits',[ -  5 5],...“标题”['真(信道1),噪声的(信道2)和'...“估计(信道3)值”),...'ShowLegend',真正的);卡尔曼= dsp.KalmanFilter('ProcessNoiseCovariance',0.0001,...'MeasurementNoiseCovariance'R...'InitialStateEstimate'5,...“InitialErrorCovarianceEstimate”,1...'ControlInputPort',假);CTR = 0;

在信号中加入噪音。数据流,并绘制过滤后的信号。

(~isDone(src)) trueVal = src();噪声= trueVal + sqrt(R)*randn;estVal =卡尔曼(noisyVal);tScope (trueVal noisyVal estVal);%禁用第二滤波器,用于中间的校正步骤%三分之一的模拟如果CTR ==地板(NUMSAMPLES / 3)kalman.DisableCorrection = TRUE;结束如果CTR ==地板(2 * NUMSAMPLES / 3)= kalman.DisableCorrection假;结束CTR = CTR + 1;结束

注意:如果您使用R2016a或更早版本,取代每次调用具有同等步语法的对象。例如,物镜(X)变为步骤(OBJ,X)。

创建其中列所要跟踪的两个标量值的信号。同时创建了卡尔曼滤波和时间作用域。

NUMSAMPLES = 4000;R = 0.02;SRC = dsp.SignalSource;SIG1 = [酮(NUMSAMPLES / 4,1);-3 *酮(NUMSAMPLES / 4,1);...4 *酮(NUMSAMPLES / 4,1);-0.5 *酮(NUMSAMPLES / 4,1)];SIG2 = [-2 *酮(NUMSAMPLES / 4,1);4 *酮(NUMSAMPLES / 4,1);...-3 *酮(NUMSAMPLES / 4,1);1.5 *酮(NUMSAMPLES / 4,1)];src.Signal = [SIG1,SIG2];tScope1 = dsp.TimeScope('NumInputPorts',3,'时间跨度'numSamples,...“TimeUnits”“秒”'YLimits',[ -  5 5],...“标题”['真(信道1),噪声的(信道2)和'...“估计(信道3)值”),...'ShowLegend',真正的);tScope2 =克隆(tScope1);卡尔曼= dsp.KalmanFilter('ProcessNoiseCovariance',0.0001,...'MeasurementNoiseCovariance',R,...'InitialStateEstimate'3,...“InitialErrorCovarianceEstimate”1,...'ControlInputPort',假);

在信号中加入噪音。数据流,并绘制过滤后的信号。

(~isDone(src)) trueVal = src();噪声= trueVal + sqrt(R)*randn(1,2);estVal =卡尔曼(noisyVal);%的时间范围第一通道的叠加结果tScope1(trueVal(:,1),noisyVal(:,1),estVal(:,1));%绘制第二通道在时间范围上的结果tScope2(trueVal(:,2),noisyVal(:,2),estVal(:,2));结束

注意:如果您使用R2016a或更早版本,取代每次调用具有同等步语法的对象。例如,物镜(X)变为步骤(OBJ,X)。

使用一个单元作为步骤的控制输入端以跟踪斜坡信号。创建要跟踪的斜坡信号,控制输入,时间范围和卡尔曼滤波。

NUMSAMPLES = 200;R = 100;SRC = dsp.SignalSource;src.Signal =(1:NUMSAMPLES)';对照= dsp.SignalSource;control.Signal =酮(NUMSAMPLES,1);tScope = dsp.TimeScope('NumInputPorts',3,'时间跨度'numSamples,...“TimeUnits”“秒”'YLimits',[ -  5 205],...“标题”['噪声(信道1),真(信道2)和'...“估计(信道3)值”),...'ShowLegend',真正的);卡尔曼= dsp.KalmanFilter('ProcessNoiseCovariance',0.0001,...'MeasurementNoiseCovariance',R,...'InitialStateEstimate'1,...“InitialErrorCovarianceEstimate”,1);

在信号中加入噪音。过滤器使用卡尔曼滤波的信号。查看使用的时间范围的输出。

(~isDone(src)) trueVal = src();CTRL =对照();噪声= trueVal + sqrt(R)*randn;estVal =卡尔曼(noisyVal,CTRL);tScope(noisyVal,trueVal,estVal);结束

算法

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

参考文献

[1]格雷格韦尔奇和Gary毕晓普介绍卡尔曼滤波器,技术报告tr95041。北卡罗来纳大学教堂山分校:北卡罗来纳州教堂山分校。,1995年。

扩展功能

也可以看看

介绍了在R2013b