主要内容

愿景。KalmanFilter

测量、状态和状态估计误差协方差的修正

描述

设计了用于跟踪的卡尔曼滤波对象。您可以使用它来预测物理对象的未来位置,以减少检测位置中的噪声,或帮助将多个物理对象与其相应的轨迹关联起来。可以为每个物理对象配置一个卡尔曼滤波对象,以实现多目标跟踪。要使用卡尔曼滤波,物体必须以恒定速度或恒定加速度运动。

创建

卡尔曼滤波算法包括两个步骤,预测和校正(也称为更新步骤)。第一步使用前面的状态来预测当前状态。第二步使用当前的测量,如物体位置,来修正状态。卡尔曼滤波器实现了离散时间、线性状态空间系统。

请注意

为了使配置卡尔曼滤波器更容易,您可以使用configureKalmanFilter对象来配置卡尔曼滤波器。它建立了一个过滤器,用于跟踪在笛卡尔坐标系中以恒定速度或恒定加速度移动的物理对象。所有方面的统计数据都是相同的。如果你需要配置一个不同假设的卡尔曼滤波器,不要使用这个函数,直接使用这个对象。

在状态空间系统中,状态转移模型,一个,以及测量模型,H,设如下:

变量 价值
一个 [1 1 0 0;0 1 0 0;0 0 1 1;0 0 0 1
H [1 0 0 0;0 0 1 0

描述

例子

kalmanFilter=愿景。KalmanFilter返回离散时间恒定速度系统的卡尔曼滤波器。

kalmanFilter=愿景。KalmanFilter (StateTransitionModelMeasurementModel另外配置控制模型,B

kalmanFilter=愿景。KalmanFilter (StateTransitionModelMeasurementModelControlModel名称,值配置Kalman Filter对象属性,指定为一个或多个名称,值对参数。未指定的属性具有默认值。

属性

全部展开

描述时间步骤之间状态转换的模型(一个),指定为——- - - - - -矩阵。在构造对象之后,不能更改此属性。这个属性与一个状态空间模型中的变量。

模型描述状态到度量转换(H),指定为N——- - - - - -矩阵。在构造对象之后,不能更改此属性。这个属性与H状态空间模型中的变量。

描述控制输入到状态转换的模型(B),指定为——- - - - - -l矩阵。在构造对象之后,不能更改此属性。这个属性与B状态空间模型中的变量。

状态(x),指定为标量或标量元向量。如果您指定状态作为标量,它可以扩展为元向量。这个属性与x状态空间模型中的变量。

状态估计误差协方差(P),指定为标量或标量——- - - - - -矩阵。如果您指定StateCovariance作为一个标量,它可以扩展为——- - - - - -对角矩阵。这个属性与P状态空间系统中的变量。

过程噪声协方差(),指定为标量或标量——- - - - - -矩阵。如果您指定ProcessNoise作为一个标量,它可以扩展为——- - - - - -对角矩阵。这个属性与状态空间模型中的变量。

测量噪声协方差(R),指定为标量或标量N——- - - - - -N矩阵。如果您指定MeasurementNoise作为一个标量,它可以扩展为N——- - - - - -N对角矩阵。这个属性与R状态空间模型中的变量。

对象的功能

使用预测正确的基于检测结果的函数。使用距离函数查找最佳匹配。

  • 当检测到跟踪的对象时,使用预测正确的函数与卡尔曼滤波对象和检测测量。按以下顺序调用函数:

    [...]=预测(kalmanFilter);[...]=正确的(kalmanFilter测量);

  • 当未检测到跟踪的对象时,调用预测函数,而不是正确的函数。当被跟踪对象丢失或被遮挡时,无法进行测量。按照以下逻辑设置函数:

    [...]=预测(kalmanFilter);如果测量存在[…]=正确的(kalmanFilter测量);结束

  • 如果被跟踪的对象在过去丢失后变得可用t-1连续时间步长,可以调用预测函数t次了。这个语法对处理异步视频特别有用。例如,

    对于I = 1:k[…) =预测(kalmanFilter);结束[…]=正确的(kalmanFilter,measurement)

正确的 测量、状态和状态估计误差协方差的修正
预测 预测的测量
距离 测量置信值

例子

全部折叠

跟踪物理对象在一个方向上移动的位置。

生成合成数据,模拟以恒定速度移动的物体的一维位置。

detectedLocations = num2cell(2*randn(1,40) + (1:40));

通过将一些元素设置为空来模拟缺失检测。

detectedLocations {1} = [];detectedLocations{idx} = [];结束

创建一个图形来显示检测的位置和使用卡尔曼滤波器进行跟踪的结果。

图;持有;ylabel (“位置”);ylim ([0, 50]);包含(“时间”);xlim([0,长度(detectedLocations)]);

当第一次检测到物理对象时,创建一个一维恒速卡尔曼滤波器。根据以前的状态预测对象的位置。如果在当前时间步长检测到对象,则使用其位置来纠正状态。

卡尔曼= [];idx = 1: length(detectedLocations) location = detectedLocations{idx};如果isempty(卡尔曼滤波)如果~isempty(location) stateModel = [1 1;0 1];measurementModel = [1 0];卡尔曼=愿景。KalmanFilter (stateModel,measurementModel,“ProcessNoise”1的军医,“MeasurementNoise”4);卡尔曼。状态=[location, 0];结束其他的trackedLocation =预测(卡尔曼滤波);如果~ isempty(位置)情节(idx、位置k +的);d =距离(卡尔曼、位置);标题(sprintf (“距离:% f ', d));trackedLocation =正确(卡尔曼、位置);其他的标题(缺失的检测);结束暂停(0.2);情节(idx trackedLocation,“罗”);结束结束传奇(检测到的位置的“预测/纠正位置”);

利用卡尔曼滤波去除被零均值高斯噪声污染的随机信号中的噪声。

合成一个值为1的随机信号,并被一个标准差为0.1的零均值高斯噪声所污染。

x = 1;len = 100;Z = x + 0.1 * randn(1,len);

使用卡尔曼滤波器去除信号中的噪声。状态期望是恒定的,测量与状态相同。

stateTransitionModel = 1;measurementModel = 1;obj =愿景。KalmanFilter(stateTransitionModel,measurementModel,“StateCovariance”,1,“ProcessNoise”1 e-5“MeasurementNoise”1依照);len z_corr = 0 (1);Idx = 1: len predict(obj);z_corr正确(idx) = (obj, z (idx));结束

阴谋的结果。

图,plot(x * ones(1,len)),“g -”);持有;阴谋(1:len, z,“b +”1: len z_corr,的r -);传奇(原始信号的噪声信号的“过滤信号”);

算法

全部展开

参考文献

韦尔奇,格雷格和加里·毕晓普,卡尔曼滤波器简介, TR 95 - 041。北卡罗来纳大学教堂山分校计算机科学系。

[2] Blackman, S。多目标跟踪与雷达应用。Artech House, Inc.,第93页,1986。

扩展功能

介绍了R2012b