【问题标题】:state estimation by Dual Kalman Filter双卡尔曼滤波器的状态估计
【发布时间】:2016-03-18 09:31:20
【问题描述】:

我想估计一个变量x,而可观察变量y可以从传感器中获得。这两个变量具有近似线性关系,即y=k*x + b,但是k和b很难得到,所以我使用了两个卡尔曼滤波器,一个用于状态(x)估计,另一个用于参数(k,b ) 估计,它实际上结合了对偶卡尔曼滤波器。 Python中的通用方案和代码如下,

the general scheme

##Python code
#initialize state estimator
kf = KalmanFilter(dim_x=1,dim_z=1)
kf.x = numpy.array([x0])              # initial state
kf.F = numpy.array([1.])              # state transition matrix
kf.Q = 1000                           # state noise variance,
kf.R = 1                              # measurement noise variance

#initialize parameter estimator
dkf = KalmanFilter(dim_x=2,dim_z=1)
dkf.x = numpy.array([[-0.01,-0.1]]).T # initial state 
dkf.F = numpy.array([[1,0],
                    [0,1]])           # state transition matrix
dkf.Q = numpy.array([[1,0],
                    [0,1]])
dkf.R = 100                           # measurement noise variance

measurements = []
resultsDKF = []                                         #dual kalman filter state estimation result
ERRDKF = []                                               #estimation error

for i in xrange(N):   # N samples
    #### parameter estimator
    dkf.H = numpy.array([[kf.x,1]])   # measurement function
    y = Y[i]
    dkf.update(y,dkf.R,dkf.H)        
    dkf.predict()

    #### state estimator
    kf.H = numpy.array([dkf.x[0]])
    z = Y[i]-dkf.x[1] # Y[i]-b
    kf.update(z,kf.R,kf.H)    
    kf.predict()

    #### save data
    measurements.append(Y[i])
    resultsDKF.append (kf.x)
    ERRDKF.append(measurements[-1]-resultsDKF[-1])

结果也随之而来:

setting of initial state much away from true value

看起来预测状态会随着真实值的变化而变化,但预测值和真实值之间还是有很大差距的。

我认为双卡尔曼滤波器并不能真正跟踪 x 的真实值,有什么问题?任何提供建议的人将不胜感激。

【问题讨论】:

    标签: python kalman-filter


    【解决方案1】:

    卡尔曼滤波器的部分功能在于它可以发展和传播状态中误差之间的相关性。通过将问题分成两个过滤器,您可以阻止任何一个过滤器找出它不知道的错误,因为它没有建模。在您描述的特定情况下,其中:

    y=k*x + b
    

    如果 k 和 b 都未知,您应该使单个卡尔曼滤波器的 x、k 和 b 状态。随着时间对不同 x 的足够观察(即来自不同 x 值的 y 测量值),滤波器可以观察 k 和 b,因为协方差矩阵中携带的 x、k 和 b 状态的相关性。将“x”过滤器与“k”和“b”过滤器分开,它可以永远保持偏移,就像你的结果一样。

    【讨论】:

    • 非常感谢您的建议。但是如果我使单个卡尔曼滤波器的 x、k 和 b 状态,当 k 和 x 应该相乘然后加上 b 得到 y 时,我应该如何以标准 KF 形式编写测量函数?另一个问题是,双卡尔曼滤波器是为解决状态和参数估计问题而创建的,并在许多应用中取得了成功,在这些应用中似乎永远不会出现误差偏移。你能详细解释一下吗?谢谢。
    • @Qiang1991 - 重读这个我不同意我自己的回答。常数 b 是可分离的——但乘积 x*k 在每个观察中。我认为它们不能在单卡尔曼滤波器或双卡尔曼滤波器中分离。
    • 如您所说,由于未建模的错误,双卡尔曼滤波器被排除在外。那么如果我在两个过滤器之间添加一个交叉项来表示它们的相互误差,你怎么看,例如,在计算 df.R 时将 dkf.R 考虑在内。您对这种方法有什么建议吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多