kalman-filter python实现?

上代码

import numpy as np

class KalmanFilter(object):
    def __init__(self, F = None, B = None, H = None, Q = None, R = None, P = None, x0 = None):

        if(F is None or H is None):
            raise ValueError("Set proper system dynamics.")

        self.n = F.shape[1]
        self.m = H.shape[1]

        self.F = F
        self.H = H
        self.B = 0 if B is None else B
        self.Q = np.eye(self.n) if Q is None else Q
        self.R = np.eye(self.n) if R is None else R
        self.P = np.eye(self.n) if P is None else P
        self.x = np.zeros((self.n, 1)) if x0 is None else x0

    def predict(self, u = 0):
        self.x = np.dot(self.F, self.x) + np.dot(self.B, u)
        self.P = np.dot(np.dot(self.F, self.P), self.F.T) + self.Q
        return self.x

    def update(self, z):
        y = z - np.dot(self.H, self.x)
        S = self.R + np.dot(self.H, np.dot(self.P, self.H.T))
        K = np.dot(np.dot(self.P, self.H.T), np.linalg.inv(S))
        self.x = self.x + np.dot(K, y)
        I = np.eye(self.n)
        self.P = np.dot(np.dot(I - np.dot(K, self.H), self.P), 
        	(I - np.dot(K, self.H)).T) + np.dot(np.dot(K, self.R), K.T)

def example():
	dt = 1.0/60
	F = np.array([[1, dt, 0], [0, 1, dt], [0, 0, 1]])
	H = np.array([1, 0, 0]).reshape(1, 3)
	Q = np.array([[0.05, 0.05, 0.0], [0.05, 0.05, 0.0], [0.0, 0.0, 0.0]])
	R = np.array([0.5]).reshape(1, 1)

	x = np.linspace(-10, 10, 100)
	measurements = - (x**2 + 2*x - 2)  + np.random.normal(0, 2, 100)

	kf = KalmanFilter(F = F, H = H, Q = Q, R = R)
	predictions = []

	for z in measurements:
		predictions.append(np.dot(H,  kf.predict())[0])
		kf.update(z)

	import matplotlib.pyplot as plt
	plt.plot(range(len(measurements)), measurements, label = 'Measurements')
	plt.plot(range(len(predictions)), np.array(predictions), label = 'Kalman Filter Prediction')
	plt.legend()
	plt.show()

if __name__ == '__main__':
    example()

说明

github上的。

参考

https://github.com/zziz/kalman-filter

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 21:58:14       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 21:58:14       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 21:58:14       87 阅读
  4. Python语言-面向对象

    2024-05-13 21:58:14       96 阅读

热门阅读

  1. 哈希表第9/9题--四数之和

    2024-05-13 21:58:14       39 阅读
  2. Swiper轮播图

    2024-05-13 21:58:14       39 阅读
  3. Windows C++ 弹框显示图片或者播放视频

    2024-05-13 21:58:14       25 阅读
  4. OpenCV特征匹配总结

    2024-05-13 21:58:14       39 阅读
  5. 信息系统架构_3.信息系统架构的一般原理

    2024-05-13 21:58:14       31 阅读
  6. vue3速览

    2024-05-13 21:58:14       34 阅读
  7. 完美实现vue3异步加载组件

    2024-05-13 21:58:14       39 阅读
  8. ts 详细-学习

    2024-05-13 21:58:14       32 阅读