如何解决异常高的集合卡尔曼滤波误差
因此,我一直试图在Python中实现Ensemble Kalman过滤器,但是最后我得到了异常高的RMSE,并且想知道我的更新步骤出了什么问题。 mes_sigs是转换后的集合成员。在这种情况下,N是1000,dim是2,h是2x2单位矩阵。
def update(mes):
self.z = mes
mes_sigs = np.empty((self.N,self.dim))
for i in range(self.N):
mes_sigs[i] = np.dot(self.t,self.sigmas[i])
x_mean = np.average(mes_sigs[:,0])
y_mean = np.average(mes_sigs[:,1])
mes_mean = np.array([[x_mean],[y_mean]])
# Calculate sample covariance
P_zz = 0.
for i in range(self.N):
P_zz += np.outer(self.sigmas[i] - self.x,mes_sigs[i] - mes_mean.T)
self.P = P_zz / (self.N - 1) + self.R
# Compute Kalman gain
A = mes_sigs - (np.dot(mes_mean,np.ones((1,self.N)))).T
C = np.dot(A.T,A) / (self.N - 1)
self.K = C * self.h.T * inv(self.h * C * self.h.T + self.R)
# Perturbation here
v_r = multivariate_normal(self.c_mean,self.R)
# Update all of the sigmas
for i in range(self.N):
self.sigmas[i] += np.dot(self.K,self.z - mes_sigs[i] + v_r)
self.x = np.average(self.sigmas)
self.P -= self.K * self.P * self.K.T
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。