Je veux estimer une variable x, et la variable observable y peut être obtenue à partir de capteurs. Ces deux variables ont une relation approximativement linéaire, ie, y = k * x + b, mais k et b sont difficiles à obtenir, donc j'utilise deux filtres de kalman, un pour l'estimation d'état (x), un autre pour le paramètre (k, b) estimation, qui combine réellement le filtre kalman double. Le schéma général et le code en Python est comme suit,estimation d'état par Dual Kalman Filter
##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])
les résultats sont également suivis:
setting of initial state much away from true value
Il semble que l'état prédit varie avec la valeur réelle, mais il y a toujours un grand écart entre la valeur prédite et la valeur vraie.
Je pense que le filtre dual kalman ne suit pas vraiment les vraies valeurs de x, quel est le problème? Toute personne qui offre des conseils sera très appréciée.
quelqu'un peut-il aider? – Qiang1991