首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >增加迭代次数是否也会增加在卡尔曼滤波器中获得错误输出的机会?

增加迭代次数是否也会增加在卡尔曼滤波器中获得错误输出的机会?
EN

Stack Overflow用户
提问于 2018-06-03 04:00:12
回答 1查看 43关注 0票数 2

我在网上找到了这个非常简单的卡尔曼滤波器代码

代码语言:javascript
复制
double frand() {
    return 2*((rand()/(double)RAND_MAX) - 0.5);
}

int main() {

    //initial values for the kalman filter
    float x_est_last = 0;
    float P_last = 0;
    //the noise in the system
    float Q = 0.022;
    float R = 0.617;

    float K;
    float P;
    float P_temp;
    float x_temp_est;
    float x_est;
    float z_measured; //the 'noisy' value we measured
    float z_real = 0.5; //the ideal value we wish to measure

    srand(0);

    //initialize with a measurement
    x_est_last = z_real + frand()*0.09;

    float sum_error_kalman = 0;
    float sum_error_measure = 0;

    for (int i=0;i<30;i++) {
        //do a prediction
        x_temp_est = x_est_last;
        P_temp = P_last + Q;
        //calculate the Kalman gain
        K = P_temp * (1.0/(P_temp + R));
        //measure
        z_measured = z_real + frand()*0.09; //the real measurement plus noise
        //correct
        x_est = x_temp_est + K * (z_measured - x_temp_est); 
        P = (1- K) * P_temp;
        //we have our new system

        printf("Ideal    position: %6.3f \n",z_real);
        printf("Mesaured position: %6.3f [diff:%.3f]\n",z_measured,fabs(z_real-z_measured));
        printf("Kalman   position: %6.3f [diff:%.3f]\n",x_est,fabs(z_real - x_est));

        sum_error_kalman += fabs(z_real - x_est);
        sum_error_measure += fabs(z_real-z_measured);

        //update our last's
        P_last = P;
        x_est_last = x_est;
    }

    printf("Total error if using raw measured:  %f\n",sum_error_measure);
    printf("Total error if using kalman filter: %f\n",sum_error_kalman);
    printf("Reduction in error: %d%% \n",100-(int)((sum_error_kalman/sum_error_measure)*100));


    return 0;
}

对于像我这样的新手来说,这是一个很容易理解的代码。现在,我将循环计数器的步长从1改为3,得到的误差从1.7减少到0.4。我的问题是:增加卡尔曼滤波器的迭代次数是否会使其先收敛,然后发散?或者它是特定于代码的还是特定于某些其他属性的。

EN

回答 1

Stack Overflow用户

发布于 2018-06-03 06:30:08

以前,我使用SSE,随着迭代次数的增加,它会导致更多的错误。然而,现在,我只是从原始数据中减去最终的结果值,它显示了正确的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50660687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档