卡尔曼滤波器更新的估计值能否应用上下限约束?
在实际生活中,我有一个状态只能具有非负值。但是,当我应用卡尔曼滤波器时,该状态被更新为具有负值。我如何在卡尔曼滤波器中应用此限制约束?
请回复。
谢谢。
卡尔曼滤波器更新的估计值能否应用上下限约束?
在实际生活中,我有一个状态只能具有非负值。但是,当我应用卡尔曼滤波器时,该状态被更新为具有负值。我如何在卡尔曼滤波器中应用此限制约束?
请回复。
谢谢。
min(xmax, max(xmin, x_plus))
,其中x_plus
是更新步骤后的状态估计。虽然这听起来像是一种很糟糕的方法,会失去所有卡尔曼滤波器的好属性等等,但实际上它是有理论依据的。有关详细信息,请参见D. Simon(2010年),“带状态约束的卡尔曼滤波:线性和非线性算法调查”,IET。 西蒙讨论了一般线性不等式约束的情况,这更加复杂,但在简单的包围框案例中,“状态投影方法”可归结为上述操作。一些常见的将状态变量限制在EKF(抱歉,没有KF)中的方法如下:
如果x
是状态,并将其扩展为有界状态x'
。
为了强制一个像 x > a
这样的约束,我们定义一个新的状态 x' = exp(x) + a
。
这将永远不会小于a,因为当 x -> -inf
时,exp(x) -> 0
。对于负约束也是如此,其中 x < -a
=> x' = - exp(x) - a
如果您想在一个状态上设置低/高限制,例如 a < x < b
:
可以使用 Sigmoid 函数来实现,最流行的(根据我的经验)是 x' = tanh(x)
,它将 x 限制在 (-1, 1) 范围内。现在,将其推广到 a < x < b
很简单,我们需要将其缩放到适当的大小并偏移它,如 x' = tanh(x)*(b-a)/2 + (a+b)/2
。因此,当 tanh(x) = -1
时,我们得到 a
,当 tanh(x) = 1
时,我们得到 b
,成功实现所需的约束。
通常这涵盖了大部分边界,其相应的导数是可接受的。希望能对您有所帮助!
一种方法是创建人工测量值。在这种情况下,如果估计值低于零,就要处理一个“测量”来将其拉回来。因此,如果估计值为-x,则使用测量噪声值为x^2的“x”的人工测量值。一个明显的缺点是畸变状态变量的协方差估计。
第二种方法是将状态向量和协方差矩阵转换到不存在约束条件的空间中。例如,滤波器可以在对数空间中运算。滤波器可以产生正值或负值,但是通过变换x' = e^x将其转换回常规空间时,所有值都是正数。这样就避免了生成负估计值,但是当然协方差矩阵现在是对数空间中的二阶统计描述,可能不是真实统计的准确表示。为了将滤波器转移到其他空间,必须转换所有的模型矩阵,包括转移矩阵、测量雅各比矩阵以及过程和测量噪声矩阵。