import matplotlib.pyplot as plt
class KalmanBase:
def __init__(self, W=0, V=0, A=1, H=1, P=1, B=0, U=0, Q=0, R=0, K=float('nan'), Z=float('nan'), X=float('nan')):
self.A = A # 状态转移矩阵
self.w = W # 高斯噪声
self.v = V # 高斯噪声
self.H = H # 观测矩阵
self.P = P # 误差协方差矩阵
self.B = B # 控制输入模型
self.u = U # 外部输入为0 控制向量
self.Q = Q # 状态噪声协方差矩阵
self.R = R # 观测噪声协方差矩阵
self.K = K # 卡尔曼增益 无需初始化
self.z = Z # 这里无需初始化,每次使用kf_update之前需要输入观察值z
self.x = X # 观测值
@property
def P_(self):
""" Error covariance prediction """
return self.A * self.P * self.A + self.Q
@property
def x_(self):
""" state prediction """
return self.A * self.x + self.B * self.u
def _init_z(self, z):
# z = Hz
self.z = self.H * z
def _update_K(self):
# K = P_ * H' / inv(H * P_* H' + R)
self.K = self.P_ * self.H / (self.H * self.P_ * self.H + self.R)
def _update_x(self):
# x = x_ + K(z - Hx_)
self.x = self.x_ + self.K * (self.z - self.H * self.x_)
def _update_P(self):
# P = (I - KH)P_
self.P = (1 - self.K * self.H) * self.P_
def kalman_update(self, x):
self.x = x
self._update_K()
self._update_x()
self._update_P()
class KalmanFilter(KalmanBase):
def __init__(self, W=0, V=0, A=1, H=1, P=1, B=0, U=0, Q=0, R=0):
super(KalmanFilter, self).__init__(A, W, V, H, P, B, U, Q, R)
self.x_set = []
# other parameter write below
def update(self, x):
self.kalman_update(x)
self.x_set.append(self.x)
def predict(self):
return self.x_set
def plot(self):
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set(title='Result', ylabel='Value', xlabel='id')
ax1.plot(range(len(self.x_set)), self.x_set, color='green')
plt.show()
一阶卡尔曼滤波python实现——已封装
需积分: 36 136 浏览量
2022-07-19
08:59:00
上传
评论 1
收藏 965B RAR 举报
墨默默鸭
- 粉丝: 1
- 资源: 1
最新资源
- 徐州市区shp边界文件
- 简易数字频率计设计(原理图、PCB、源码、分析报告)
- 20225207038罗丽文财管专2201班.rar
- Golang:通过Gin框架+Redis+责任链,实现一个简单的钉钉机器人,进行消息处理 ps:多应用版
- 基于cnn和AlexNet的铝材缺陷检测内含数据集和demo原型2种方法
- 2023年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- go 语言 实现的 使用modbus 协议 通过DTU tcp 链接 采集数据
- SHELL脚本(全是干货)
- Windows屏幕录屏软件
- 2022年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0