Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

python卡尔曼滤波

作者:Cold—blooded凉薄   发布日期:2026-03-19   浏览:28

import numpy as np

# 定义卡尔曼滤波器类
class KalmanFilter:
    def __init__(self, A, B, H, Q, R, P, x):
        """
        初始化卡尔曼滤波器参数
        :param A: 状态转移矩阵
        :param B: 控制输入矩阵
        :param H: 观测矩阵
        :param Q: 过程噪声协方差矩阵
        :param R: 观测噪声协方差矩阵
        :param P: 估计误差协方差矩阵
        :param x: 初始状态向量
        """
        self.A = A
        self.B = B
        self.H = H
        self.Q = Q
        self.R = R
        self.P = P
        self.x = x

    def predict(self, u=0):
        """
        预测步骤
        :param u: 控制输入向量,默认为0(无控制输入)
        :return: 预测的状态向量
        """
        # 预测状态
        self.x = np.dot(self.A, self.x) + np.dot(self.B, u)
        # 预测估计误差协方差
        self.P = np.dot(np.dot(self.A, self.P), self.A.T) + self.Q
        return self.x

    def update(self, z):
        """
        更新步骤
        :param z: 观测值
        :return: 更新后的状态向量
        """
        # 计算卡尔曼增益
        S = np.dot(self.H, np.dot(self.P, self.H.T)) + self.R
        K = np.dot(np.dot(self.P, self.H.T), np.linalg.inv(S))
        # 更新状态向量
        self.x = self.x + np.dot(K, (z - np.dot(self.H, self.x)))
        # 更新估计误差协方差
        I = np.eye(self.H.shape[1])
        self.P = np.dot(I - np.dot(K, self.H), self.P)
        return self.x

# 示例使用
if __name__ == "__main__":
    # 定义系统参数
    dt = 1.0  # 时间间隔
    A = np.array([[1, dt], [0, 1]])  # 状态转移矩阵
    B = np.array([0])  # 无控制输入
    H = np.array([1, 0]).reshape(1, 2)  # 观测矩阵
    Q = np.array([[1, 0], [0, 3]])  # 过程噪声协方差矩阵
    R = np.array([10]).reshape(1, 1)  # 观测噪声协方差矩阵
    P = np.array([[100, 0], [0, 100]])  # 初始估计误差协方差矩阵
    x = np.array([0, 20]).reshape(2, 1)  # 初始状态向量 [位置, 速度]

    # 创建卡尔曼滤波器对象
    kf = KalmanFilter(A, B, H, Q, R, P, x)

    # 模拟数据
    measurements = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 假设观测到的位置数据

    # 应用卡尔曼滤波
    for z in measurements:
        kf.predict()
        filtered_state = kf.update(z)
        print(f"Filtered state: {filtered_state.flatten()}")

解释说明:

  1. 初始化:定义了卡尔曼滤波器的各个参数,包括状态转移矩阵 A、控制输入矩阵 B、观测矩阵 H、过程噪声协方差矩阵 Q、观测噪声协方差矩阵 R、估计误差协方差矩阵 P 和初始状态向量 x
  2. 预测步骤:根据当前状态和控制输入预测下一个状态,并更新估计误差协方差矩阵。
  3. 更新步骤:根据观测值修正预测的状态,并更新估计误差协方差矩阵。
  4. 示例使用:创建了一个简单的卡尔曼滤波器实例,并对一组模拟的观测数据进行了滤波处理。

希望这段代码能帮助你理解如何实现卡尔曼滤波器。

上一篇:python gis

下一篇:python word转图片

大家都在看

python 二维码识别

python excel 库

python时间格式

pythoneval函数用法

列表切片操作python

python读取文件路径

staticmethod在python中有

python 保存json文件

python开发windows应用程序

python中len是什么意思

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站