卡尔曼滤波算法

最近在做数据分析,用到了卡尔曼滤波,对里面的公式有些不理解,学习之后,现在做个总结,卡尔曼滤波本质就是用观测值和测量值进行数据估计,用上一次的最优值来估计本次的最优值,是线性滤波系统。
五大公式:
在这里插入图片描述
针对五大公式的理解,参考了https://blog.csdn.net/tiandijun/article/details/72469471
但是这篇文章举得例子不是很好,里面用到的是matlab编写的代码。现在列出python的代码;

#import module
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

N=200
w=np.random.randn(1,N)
# w[0][0] = 0
print (w)
a=1;
x = [0] * N
x[0]=25
real = [0] * N
real[0]=25
# w为过程噪声, x为估计值
for k in range(1,N):  #循环时i等于1到N-1
    # print (k)
    x[k] = a*x[k-1] + w[0][k-1]
    real[k]=a*real[k-1]
V=np.random.randn(1,N) #V为观察噪声
q1=np.std(V[0],ddof=1)
Rvv=np.dot(q1,q1);
q2=np.std(x,ddof=1)
Rxx=np.dot(q2,q2);
q3=np.std(w[0],ddof=1)
Rww=np.dot(q3,q3);
#Y为测量值
c=0.8;
Y = [0] * N
for i in range(0,N):
    Y[i]=c*x[0]+V[0][i]*2;
p = [0] * N#Pk'
p1 = [0] * N#Pk
s = [0] * N#最优值
b = [0] * N#增益K
p[0] =0;
s[0] =0;
for t in range(1,N):
    p1[t]=np.dot(a,a)*p[t-1]+Rww;     #p1为方程中p'
    b[t]=c*p1[t]/(np.dot(c,c)*p1[t]+Rvv);    
    s[t]=a*s[t-1]+b[t]*(Y[t]-a*c*s[t-1]);    
    p[t]=p1[t]-c*b[t]*p1[t];

tt = [0] * N
for i in range(0,N):   
    tt[i] = i+1;
plt.plot(tt, real, 'k', tt,s,'r',tt,Y,'g',tt,x,'b');
plt.xlabel('time')
plt.ylabel('temperature')
plt.title('temperature change chart')
label = ["real", "optimized", "measure", "watch"]
plt.legend(label, loc = 0, ncol = 2)
plt.show()

为了更好的理解卡尔曼滤波算法,我在视频上看到另外一个讲解,https://www.iqiyi.com/w_19rsofi8ct.html
里面例子非常好,是用的汽车运动位移和速度,这个具有一般性。matlab代码如下

T=(1:100);
Z=(1:100);
noise=randn(1,100);
Z=Z +noise;

X=[0;0];
P=[1 0; 0 1];
F=[1 1; 0 1];
Q=[0.0001 0 ; 0 0.0001];
H=[1 0];
R=1;
figure;
hold on;
for i = 1:100
	X_=F*X;
	P_=F*P*F'+Q;
	K=P_*H'/(H*P_*H'+R);
	X=X_+K*(Z(i)-H*X_);
	P=(eye(2)-K*H)*P_;
	plot(T(i), X(1),‘r’, T(i), X(2),‘g’)
end
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

giantmfc123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值