微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

异常高的集合卡尔曼滤波误差

如何解决异常高的集合卡尔曼滤波误差

因此,我一直试图在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 举报,一经查实,本站将立刻删除。