卡尔曼滤波

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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值