gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:29 25 4
gpt4 key购买 nike

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

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。我的问题是:增加卡尔曼滤波器的迭代次数是否会使其收敛然后发散?或者它是代码特定的还是其他一些属性特定的。

最佳答案

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

关于algorithm - 增加迭代次数是否也会增加在卡尔曼滤波器中获得错误输出的机会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com