当前位置: 首页 > article >正文

卡尔曼滤波效果(python应用)

在这里插入图片描述

卡尔曼三大公式:
1.卡尔曼增益k(卡尔曼核心公式) = (上一次估计误差)/(上一次估计误差 + 本次测量误差)
2.本次估计值 = 上一次的估计值 + 系数k(gain) * (当前测量值(Zk) - 上一次的估计值hat(x)k-1)
3.新的估计误差 = (1 - k) * 上一次估计误差

python模拟:

import random

Zk = [103,99,97,104,102,105,95,96,97,103,104,100,101,103,96,99,98,102]  #模拟真实测量的数据
Emea = 5.0         #测量误差,同一工具进行测量这个值不会变
Eesti = 3.0        #估计误差,根据经验给定
K = 0.0            #卡尔曼增益  K ∈ [0,1]
Hat_X = 103.0       #估计值,随意给定

if __name__ == "__main__":
    # for i in range(100):
    #     Zk.append(random.randint(95, 105))  #向Zk添加100个数据(数据范围100±5)
    for i in range(1,18,1):        #从1开始计算
        K = Eesti/(Emea + Eesti)   #更新卡尔曼增益
        Hat_X = Hat_X + K * (Zk[i] - Hat_X)  #更新估计值
        Eesti = (1.0 - K) * Eesti            #更新估计误差
        print(f"第{i}次 ","实际测量数据:{:.3f}".format(Zk[i])," 增益:{:.3f}".format(K)," 估计值:{:.3f}".format(Hat_X))

结果:

1次  实际测量数据:99.000  增益:0.375  估计值:101.5002次  实际测量数据:97.000  增益:0.273  估计值:100.2733次  实际测量数据:104.000  增益:0.214  估计值:101.0714次  实际测量数据:102.000  增益:0.176  估计值:101.2355次  实际测量数据:105.000  增益:0.150  估计值:101.8006次  实际测量数据:95.000  增益:0.130  估计值:100.9137次  实际测量数据:96.000  增益:0.115  估计值:100.3468次  实际测量数据:97.000  增益:0.103  估计值:100.0009次  实际测量数据:103.000  增益:0.094  估计值:100.28110次  实际测量数据:104.000  增益:0.086  估计值:100.60011次  实际测量数据:100.000  增益:0.079  估计值:100.55312次  实际测量数据:101.000  增益:0.073  估计值:100.58513次  实际测量数据:103.000  增益:0.068  估计值:100.75014次  实际测量数据:96.000  增益:0.064  估计值:100.44715次  实际测量数据:99.000  增益:0.060  估计值:100.36016次  实际测量数据:98.000  增益:0.057  估计值:100.22617次  实际测量数据:102.000  增益:0.054  估计值:100.321

使用excel表格进行分析:

import os
import random
from os.path import dirname
import xlwt

Zk = [] #模拟真实测量值
Emeam = 5.0 #测量误差
Eesti = 5.0 #估计误差
K = 0.0 #卡尔曼增益
Hatx = 0.0 #估计值

def Find_Path_Excel(name):
    path = os.path.join(dirname(__file__), name)
    return path

if __name__ == '__main__':
    book = xlwt.Workbook(Find_Path_Excel('test.xlsx'))  # 创建Workbook,相当于创建Excel
    ws = book.add_sheet('Sheet1')
    for i in range(100):
        Zk.append(random.randint(90, 100)) #数据范围95±5
    ws.write(0, 0, '实际测量值')
    ws.write(0, 1, '估计值')
    ws.write(0, 2, '卡尔曼增益')
    ws.write(0, 3, '估计误差')
    for i in range(0,100,1):
        K = Eesti/(Eesti + Emeam)
        Hatx = Hatx + K * (Zk[i] - Hatx)
        Eesti = (1 - K) * Eesti
        # 向表中添加数据
        ws.write(i+1, 0, ("{:.2f}".format(Zk[i])))
        ws.write(i+1, 1, ("{:.2f}".format(Hatx)))
        ws.write(i+1, 2, ("{:.2f}".format(K)))
        ws.write(i+1, 3, ("{:.2f}".format(Eesti)))
    book.save('test9.xlsx')

写入的是文本信息,需要转换为数字
请添加图片描述
在这里插入图片描述
在这里插入图片描述
确认,就修改好了,插入折线图(快速选取一列ctrl+shift+↓)。
在这里插入图片描述


http://www.kler.cn/a/445356.html

相关文章:

  • C++ 面向对象编程:友元、
  • 【C++】C++中的std::cerr详解
  • MySQL数据库——门诊管理系统数据库数据表
  • LeetCode刷题day29——动态规划(完全背包)
  • OpenCV相机标定与3D重建(23)用于在图像上绘制世界坐标系的三条轴函数drawFrameAxes()的使用
  • python飞机大战游戏.py
  • 半导体制造技术导论(第二版)萧宏 第十二章 化学机械研磨工艺
  • 负载均衡-lvs
  • TDengine 新功能 通过 UID 删除不可见表
  • Midjourney参数大全
  • 【ETCD】当客户端从follower节点发起写请求时候,ETCD集群是如何处理此次的写请求呢?
  • 如何从 ASP.NET Core IIS上传大文件一些配置
  • [python SQLAlchemy数据库操作入门]-02.交易数据实体类建立
  • Kioptix Level 2靶场练习保姆级---春不晚
  • git企业开发的相关理论(一)
  • 深入解析MySQL Explain关键字:字段意义及调优策略
  • EasyExcel 导出文件
  • html中实用标签dl dt dd(有些小众的标签 但是很好用)
  • Expected end or semicolon (after name and no valid version specifier)
  • 非结构化数据分析与应用(Unstructured data analysis and applications)(pt3)图像数据分析1
  • NVR管理平台EasyNVR接入的安防监控摄像机如何计算音频码流?
  • 【python算法题目】统计一个文本中所有大写字母出现的次数
  • MySQL JOIN算法实现和选择
  • Go web 开发框架 Iris
  • 行政管理痛点解决方案:OA系统助力企业提效减负
  • MSOX4154G 混合信号示波器