【发布时间】:2016-03-18 09:31:20
【问题描述】:
我想估计一个变量x,而可观察变量y可以从传感器中获得。这两个变量具有近似线性关系,即y=k*x + b,但是k和b很难得到,所以我使用了两个卡尔曼滤波器,一个用于状态(x)估计,另一个用于参数(k,b ) 估计,它实际上结合了对偶卡尔曼滤波器。 Python中的通用方案和代码如下,
##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