欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

卡尔曼滤波

程序员文章站 2022-07-12 09:37:30
...
import random
import matplotlib.pyplot as plt
x_last = 0;
p_last = 0.05; // 初始值不能为0,值大小无所谓,会随着迭代次数增加,值的变化和初始值无关。
Q = 0.01; //预测误差,越大表示信任测量值,结果会更加随测量值的波动而波动。 越小表示信任预测模型,波动会更小。
          //这个值一般设置小一点,否则感觉意义不大。

R = 0.6; //测量误差

kg = 0.0;
x_mid = 0.0;
x_now = 0.0;
p_mid = 0.0; //p为系统的反馈值,每次迭代都会修正p值。
p_now = 0.0;
z_real = 1;
z_measure = 0.0;

x_last = z_real + (random.random()-0.5)*1;
x_mid = x_last;

for i in range(500):
    x_mid = x_last;

    p_mid = p_last + Q;  
    kg = p_mid / (p_mid + R);
    z_measure = z_real + (random.random()-0.5)*1;
    x_now = x_mid + kg*(z_measure - x_mid);
    p_now = (1 - kg)*p_mid;

    p_last = p_now;
    x_last = x_now;

    plt.plot(i, kg, 'ro', markersize = 1)
    plt.plot(i, p_mid, 'go', markersize = 1)
    plt.plot(i, z_measure, 'bo', markersize = 1)
    plt.plot(i, x_now, 'ro', markersize = 1)
    
plt.show()