# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 25 20:45:24 2018
@author: Administrator
"""
#只能自己泰勒展开了
import math
import numpy
import pylab
#这里是假设A=1,H=1的情况
def ftx(x): # xk的一阶导数
f=1/2+25*(1-x*2)/((1+x^2)^2)
return f
def fty(x): # yk的一阶倒数
f=x/10
return f
def fx(x,k): # 预测公式 无噪声
f=0.5*x+25*x/(1+x^2)
return f
def fy(y): # 观测公式 无噪声
f=(x^2)/20
return f
# intial parameters
n_iter = 50
sz = (n_iter,) # size of array 步长
x = -0.37727 # truth value (typo in example at top of p. 13 calls this z)
z = numpy.zeros(sz)
# 测量值 observations (normal about x, sigma=0.1)
Q = numpy.random.normal(0,10,size=sz) # process variance #产生过程噪声
R = numpy.random.normal(0,1,size=sz) # estimate of measurement variance, change to see effect
#产生的观测噪声
# allocate space for arrays
xhat=numpy.zeros(sz) # a posteri estimate of x X的后验估计(最优值)
P=numpy.zeros(sz) # a posteri error estimate X的最优质的误差估计 Pt
xhatminus=numpy.zeros(sz) # a priori estimate of x X的先验估计(状态值)
Pminus=numpy.zeros(sz) # a priori error estimate X的先验估计Pt-
K=numpy.zeros(sz) # gain or blending factor 卡尔曼滤波增益
# intial guesses
xhat[0] = 0.0
P[0] = 1.0
for k in range(1,n_iter):
# time update
xhatminus[k] = ftx(xhat[k-1])*xhat[k-1]+8*math.cos(1.2(k-1)) #X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
Pminus[k] = ftx(xhat[k-1])*P[k-1]*ftx(xhat[k-1])*+Q[k] #P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1
# measurement update
K[k] = Pminus[k]*(fty(xhat[k-1])/(fty(xhat[k-1])* Pminus[k]*(fty(xhat[k-1])+R[k] ) #Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R(k)],H=1
版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。