kalman滤波三:时序数据预测(一维kalman滤波)

文章目录

    • 原理
      • kalman滤波一:基础理论
      • kalman滤波二:二维目标跟踪
    • 一维kalman滤波
      • 状态变量
      • 测量值
      • 状态转移矩阵
    • 示例代码:
    • 运行结果:
    • 真实场景示例

以下是一个测距的应用,在图像上计算目标离参考点的距离,测距的方法存在一些偶然性,例如目标检测模型在某一帧里面没有检测到物体,或者目标检测的框在目标物周围跳动,这些因素在实际的数值上就会表现出很多毛刺尖峰,但是目标物的移动都是平滑的不会跳变,在此场景下采用kalman滤波可以使距离值变得更加平滑。

原理

kalman滤波一:基础理论

kalman滤波二:二维目标跟踪

一维kalman滤波

测量的值是一个目标物离参考点的距离,在kalman滤波中状态变量考虑位置和速度两个变量。具体如下:

状态变量

x = [ d , d ˙ ] T x = [d, \dot{d}]^T x=[d,d˙]T
d : 目标物离参考点的距离 d:目标物离参考点的距离 d:目标物离参考点的距离
d ˙ : 目标相对参考点的速度 \dot{d}: 目标相对参考点的速度 d˙:目标相对参考点的速度

测量值

z = [ d ] z = [d] z=[d]

状态转移矩阵

F = [ 1 Δ t 0 1 ] \mathbf{F}= \begin{bmatrix} 1 & \Delta{t} \\ 0 & 1 \end{bmatrix} F=[10Δt1]

示例代码:


import os
import numpy as np
import matplotlib.pyplot as pltdef generate_mock_data(n_points=100, start=0, noise_level=5):"""Generate mock distance data with a linear trend and some noise.Args:n_points : int - number of data points to generate.start : float - starting value of the distance.noise_level : float - standard deviation of the Gaussian noise.Returns:np.array - array of mock distance data."""true_values = start + np.linspace(0, 10, n_points)noisy_values = true_values + np.random.normal(0, noise_level, n_points)return noisy_valuesdef demo_of_kalman():# Generate mock datadistance_list = generate_mock_data(n_points=100, start=10, noise_level=5)# Initialize Kalman Filterkf = KalmanFilter()predict_list = []# Run Kalman Filter on the mock datafor distance in distance_list:kf.update(np.array([[distance]]))predict = kf.predict()predict_list.append(predict[0][0])# Plotting the resultsframe_id = np.arange(len(distance_list))frame_id = frame_id * 4  # Assuming data is collected at a rate of 4 Hzplt.figure(figsize=(10, 6))plt.plot(frame_id, distance_list, label="Measured Distance")plt.plot(frame_id, predict_list, label="Kalman Filter Prediction", linestyle='--')plt.xlabel("Frame ID")plt.ylabel("Distance")plt.title("Kalman Filter Demo")plt.legend()plt.grid(True)plt.show()class KalmanFilter:def __init__(self):self.dt = 1.0 / 25.0 * 4.0self.F = np.array([[1, self.dt], [0, 1]])  # State transition matrixself.H = np.array([[1, 0]])  # Observation matrixself.Q = np.array([[1, 0], [0, 0.1]])  # Process noise covarianceself.R = np.array([[25]])self.P = np.array([[1, 0], [0, 1]])  # State estimate covarianceself.x = np.array([[0], [0]])def predict(self):self.x = self.F.dot(self.x)  # x(k) = F * x(k-1)self.P = self.F.dot(self.P).dot(self.F.T) + self.Qreturn self.xdef update(self, z):K = self.P.dot(self.H.T).dot(np.linalg.inv(self.H.dot(self.P).dot(self.H.T) + self.R))self.x = self.x + K.dot(z - self.H.dot(self.x))S = np.eye(2) - K.dot(self.H)self.P = S.dot(self.P).dot(S.T) + K.dot(self.R).dot(K.T)if __name__ == "__main__":demo_of_kalman()

运行结果:

在这里插入图片描述

真实场景示例

以下是真实场景中使用kalman滤波的距离,可以看到一维kalman滤波不仅很好的滤除了尖峰毛刺还有部分缺失数据,而且能很好的跟上真实数据的变化。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543052.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何删除链表的中间节点和a/b处的节点?

文章目录 删除中间节点删除 a/b 处的节点 示例定义链表节点结构删除中间节点删除 a/b 处的节点 注意事项 Python 实现案例创建链表删除中间节点删除 a/b 处的节点测试代码示例代码完整版测试输出 在链表中删除中间节点或者特定位置(如 a/b 处)的节点涉及…

学习干货HVV必学远控工具及Webshell流量合集分析(建议收藏+附面试题)

0x01 前言 本篇文章为各位师傅总结了一些当下流行的Webshell远程工具及其中的流量分析,方便在平时监测、hvv、攻防演练中进行及时发现、阻拦回溯等、在某些比赛上可能也会有类似的流量分析题目,根据工具的一些流量特征进行说明,其中会附带一…

如何融合文本信息提高时序预训练模型?

今天小编给大家介绍两篇联合文本和时序数据进行预训练的文章。 UniTime: A Language-Empowered Unified Model for Cross-Domain Time Series Forecasting 文献地址:https://arxiv.org/pdf/2310.09751.pdf 代码地址:https://github.com/liuxu77/UniTim…

国产 AI 大模型成果展示,囊括 12 大金融应用场景!

前言 随着人工智能技术的飞速发展,国产AI大模型在医疗健康领域的应用日益广泛,正在逐步改变传统的医疗服务模式,提升医疗服务的质量和效率。以下是对国产AI大模型在医疗领域应用的典型案例盘点,覆盖了十大医疗应用场景。 01 智…

治愈系视频素材哪里找?非常优秀的治愈系素材分享

在快节奏的现代生活中,寻找心灵的慰藉成为了一个日益重要的话题。治愈系视频以其温暖人心的内容和独特的魅力,为观众提供了一种减压和放松的方式。要制作出触动人心的治愈系视频,首先需要挑选合适的视频素材。以下是几个优质的治愈系视频素材…

使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库

【任务】 登陆Linux服务器,以MySQL分布式存储方式安装并部署如图所示的三群组、四机构、 七节点的星形组网拓扑区块链系统。其中,三群组名称分别为group1、group2和group3, 四个机构名称为agencyA、agencyB、agencyC、agencyD。p2p_port、cha…

粗绿激光模组使用优势有哪些

在当今高科技飞速发展的时代,激光技术以其精准、高效、稳定的特性,在众多领域中展现出了非凡的应用价值。其中,粗绿激光模组作为激光技术的重要分支,凭借其独特优势,在众多行业中脱颖而出,成为推动产业升级…

格密码(一)

什么是格? 可以简单地把“格”想象成一个用多个点组成的网格,这个网格可以存在于二维、三维甚至更高维的空间中。每个格点都是由一组基向量(比如二维空间中的两个基向量)通过整数倍的线性组合得到的。 二维格的例子:…

大坝可视化监控:实时安全保障

利用图扑可视化技术实时监控大坝结构和运行状态,及时识别潜在风险,提升管理效率,确保大坝安全稳定运行和资源的高效利用。

实时数据的处理一致性

实时数据一致性的定义以及面临的挑战‍‍‍‍‍ 数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中,一致性包括但不限于数据的准确性、完整性、时效性和顺序性。 下图是典型的实时/流式数据处理的流程: 1、…

基于单片机多点无线温度监控系统设计

本设计STC89C52RC单片机作为主控芯片,能够远程监控多个位置的温度变化。使用一个主机来接收和监控三个从机收集到的温度信息,利用DS18B20温度传感器采集温度信息,采用GL24S无线通讯模块将数据传输给主机进行接收,信息显示在主机连…

SM2无证书及隐式证书公钥机制签名和加密过程详解(一)

前面介绍SM2无证书及隐式证书公钥机制下用户公私密钥对的Python实现(具体参看SM2隐式证书用户公私钥生成python代码实现_sm2 python 密钥生成-CSDN博客),可以看到需由用户和KGC(可信密钥生成中心)共同参与才能计算得到…

钢表面缺陷识别

钢表面缺陷识别是指通过计算机视觉技术对钢材表面缺陷进行检测和分类的过程。这一技术在钢铁制造行业具有重要的工业价值,旨在提高产品质量、降低生产损失以及提升生产效率。钢表面缺陷可能包括裂纹、凹坑、气泡等,这些瑕疵会影响产品的性能和安全性&…

Transformer动画讲解

**Transformer工作原理**** **一、**** ******GPT的核心是Transformer******** *GPT* : **GPT(Generative Pre-trained Transformer)**** ****是一种基于单向Transformer解码器的预训练语言模型,它通过在大规模语料库上的无监督…

数字人会被封杀?不!看国家政策打破谣言

数字人会被封? 数字人发展没有前景? 数字人直播何去何从? 是不是大家入局数字人,都在纠结数字人使用和前景的问题?首先,大家放心,数字人广泛使用已经是大势所趋。下面给大家分享最新政策&…

多模态大模型应用开发技术学习

前篇提到多模态模型应用是未来的应用方向,本篇就聊聊技术学习方面的内容。 应用场景 多模态大模型技术的应用场景非常广泛,涵盖了从日常生活到专业领域的各个方面。以下是一些主要的应用场景: 办公自动化:多模态大模型可以用于…

Java线程的创建与使用

线程的概念 线程是‌操作系统能够进行运算调度的最小单位,是进程中的实际运作单位‌。一个进程可以包含多个线程,每个线程是进程中一个单一顺序的控制流,并行执行不同的任务。 线程生命周期 线程的状态是指线程在执行过程中的不同阶段。以…

数位dp(算法篇)

算法篇之数位dp 数位dp 概念: 数位dp是一种计数用的dp,一般是要统计一个区级[l,r]内满足一些条件的数的个数所谓数位dp,就是对数位进行dp,也就是个位、十位等相对于普通的暴力枚举,数位dp快就快在它的记忆化&#x…

打印机问题故障处理_十大打印机故障大全及处理方法

日常办公和生活中,打印机是不可或缺的重要设备。然而,在添加共享或使用共享打印机过程中,经常会遇各种问题。有遇到无法添加打印机、访问共享打印机报错,打印机无法打印等问题,然后这几种错误分别的原因不同&#xff0…

博睿谷IT认证-订阅试学习

在这个信息爆炸的时代,拥有一张IT认证证书,就像拿到了职场晋升的通行证。博睿谷,作为IT认证培训的佼佼者,帮你轻松拿下华为、Oracle等热门认证。下面,让我们一起看看博睿谷如何助你一臂之力。 学习时间,你说…