dsp.KalmanFilter

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

描述

dsp.KalmanFilterSystem object™是一个估计器,用于递归地获得线性最优滤波的解决方案。这种估计是在不了解潜在动态系统的情况下做出的。卡尔曼滤波器实现以下线性离散时间过程的状态,x,在k时间步: 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. 调用带参数的对象,就好像它是一个功能。

有关系统对象如何工作的更多信息,请参见什么是系统对象?(MATLAB)。

创建

描述

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

例子

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

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

属性

全部展开

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

如果一个属性可调,您可以在任何时候更改其值。

有关更改属性值的更多信息,请参阅系统设计在MATLAB使用系统对象(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

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

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

用法

描述

例子

(热情,xEst,MSE_Est,zPred,xPred,MSE_Pred) =卡尔曼(z,u)对测量值进行迭代卡尔曼滤波算法z和控制输入u。列在zu作为输入来分离并行滤波器,其校正(或更新)步骤可以被DisableCorrection财产。返回的值是估计的测量热情状态估计,xEst,估计状态的MSEMSE_Est,预测测量zPred预测,国家xPred和预测的状态的MSEMSE_Pred

输入参数

全部展开

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

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

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

数据类型:|

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

控件输入的行数与控件的列数的比率ControlInputMatrix属性必须是等于测量输入的行数的到的行数的比率MeasurementMatrix财产。

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

数据类型:|

输出参数

全部展开

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

数据类型:|

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

数据类型:|

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

数据类型:|

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

数据类型:|

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

数据类型:|

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

数据类型:|

对象的功能

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

释放(OBJ)

全部展开

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

例子

全部折叠

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

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

numSamples = 4000;R = 0.02;src = dsp.SignalSource;src.Signal = [酮(NUMSAMPLES / 4,1);  -  3吨*酮(NUMSAMPLES / 4,1);...4 * 1 (numSamples / 4,1);-0.5 * 1 (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()噪声val = trueVal + sqrt(R)*randn;estVal =卡尔曼(noisyVal);tScope (noisyVal trueVal estVal);结束

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

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

numSamples = 4000;R = 0.02;src = dsp.SignalSource;src。-3*ones(numSamples/4,1); -3*ones(numSamples/4,1);...4 * 1 (numSamples / 4,1); -0.5 * 1 (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()噪声val = trueVal + sqrt(R)*randn;estVal =卡尔曼(noisyVal);tScope (trueVal noisyVal estVal);%为中间禁用第二过滤器的校正步骤%三分之一的模拟如果ctr == floor(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 * 1 (numSamples / 4,1);-0.5 * 1 (numSamples / 4,1)];SIG2 = [-2 *酮(NUMSAMPLES / 4,1);4 *酮(NUMSAMPLES / 4,1);...3 * 1 (numSamples / 4,1);1.5 * 1 (numSamples / 4,1)];src。sig1, sig2];tScope1 = dsp.TimeScope (“NumInputPorts”,3,'时间跨度'numSamples,...“TimeUnits”,“秒”,“YLimits”,[ -  5 5],...“标题”['True(频道1),noise(频道2)和',...“估计(信道3)值”),...“ShowLegend”,真正的);tScope2 =克隆(tScope1);卡尔曼= dsp.KalmanFilter ('ProcessNoiseCovariance',0.0001,...“MeasurementNoiseCovariance”,R,...“InitialStateEstimate”3,...“InitialErrorCovarianceEstimate”1,...'ControlInputPort',假);

给信号添加噪声。数据流,并绘制滤波信号。

(~isDone(src)) trueVal = src()噪声val = 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],...“标题”[' noise (channel 1), True(channel 2)和',...“估计(信道3)值”),...“ShowLegend”,真正的);卡尔曼= dsp.KalmanFilter ('ProcessNoiseCovariance',0.0001,...“MeasurementNoiseCovariance”,R,...“InitialStateEstimate”1,...“InitialErrorCovarianceEstimate”,1);

给信号添加噪声。过滤器使用卡尔曼滤波的信号。查看使用的时间范围的输出。

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

算法

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

参考文献

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

扩展功能

另请参阅

介绍了在R2013b