卡尔曼(kalman)详解

article/2025/10/5 22:15:23

Kalmanfliter

    • @[TOC](Kalmanfliter)
  • kalman详解
    • 贝叶斯准则(Bayes rule)
    • 全概率定理
    • 贝叶斯
    • 卡尔曼
    • matlab仿真

kalman详解



贝叶斯准则(Bayes rule)

全概率定理

两个随机变量 X 和 Y 的联合分布(joint distribution)如下:
p (x , y) = p (X = x , Y = y)(X=x,Y=y同时发生的概率)
如果 X和 Y 相互独立 (independent) , 有
p(x,y) =p(x)p(y)


假定已经知道 Y 的值是 y, 想知道基于以上事实条件 X 为 x 的概率。这样的概率表示为
p (x I y) = p (X = x I Y = y)
称为条件概率 (conditional probability)
如果p(y)>0 有p (x I y)=p(x , y) / p(y)
如果x y独立 则有p (x I y)=p( x )p( y ) / p(y)=p(x)
p(x) = LP(x I y)p(y) (离散情况)
p(x) = Jp(x I y)p(y)dy (连续情况)

贝叶斯

贝叶斯在通常的概率推测中起着主导作用。如果a是一个希望由b推测出来的数值,则概率p(a)被称为先验概率分布。b为数据,一般是传感器的测量值。P(a|b)称为a的后验分布,贝叶斯准则提供了一种由后验“逆概率”p(b|a)和先验概率p(a)来计算后验概率的方法。贝叶斯公式中的p(b)和a没有关系,通常可以测得,或者经常将写成归一化变量公式如下:

1.1置信度

置信度一般表示为bel()=p(|,)
上式中,x表示t时刻的x值或者一般表示机器人的状态,z表示t时刻的测量值,u是t时刻我们给机器人的控制,例如让它加速等等,因此置信度也就是在传感器测得z,并且执行u命令之后机器人实际状态是x的概率。

1.2贝叶斯滤波算法

贝叶斯滤波算法通常只有两步
第一步:
在这里插入图片描述
(最前面那个符号是积分,抱歉)
运用了全概率公式,算出的先验概率
第二步,用贝叶斯公式算出的后验概率:
在这里插入图片描述
式中归一化变量η用于将置信度进行归一化处理。

卡尔曼

X(k|k-1)=A X(k-1|k-1)+B U(k)
P(k|k-1)=A P(k-1|k-1) A’+Q
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1))
Kg(k)= P(k|k-1) / (H P(k|k-1) + R)
P(k|k)=(I-Kg(k) H)P(k|k-1)

以上五个式子是卡尔曼算法的核心,x是置信度的均值,p为置信度的方差,u是控制量,z是传感器的数据,以上四个量都是向量

matlab仿真

创建200个均值为二十五的随机数
X(0|0)=1 ,P(0|0)=10。卡尔曼滤波和平滑滤波进行对比

clear
clc;
N=300;
CON = 25;
%%%%%%%%%%%%%%%kalman filter%%%%%%%%%%%%%%%%%%%%%%
x = zeros(1,N);
%randn(1,N)
y = 2^0.5 * randn(1,N)*0.5 + CON;%加过程噪声的状态输出
x(1) = 1;
p = 10;
cov(randn(1,N))
Q = cov(randn(1,N));%过程噪声协方差
R = cov(randn(1,N));%观测噪声协方差
for k = 2 : N
x(k) = x(k - 1);%预估计k时刻状态变量的值
p = p + Q;%对应于预估值的协方差
kg = p / (p + R);%kalman gain
x(k) = x(k) + kg * (y(k) - x(k));
p = (1 - kg) * p;
end
%%%%%%%%%%%Smoothness Filter%%%%%%%%%%%%%%%%%%%%%%%%
Filter_Wid = 10;
smooth_res = zeros(1,N);
for i = Filter_Wid + 1 : N
tempsum = 0;
for j = i - Filter_Wid : i - 1
tempsum = tempsum + y(j);
end
smooth_res(i) = tempsum / Filter_Wid;
end
% figure(1);
% hist(y);
t=1:N;
figure(1);
expValue = zeros(1,N);
for i = 1: N
expValue(i) = CON;
end
subplot(2,2,1),plot(t,expValue);
subplot(2,2,2),plot(t,x);
subplot(2,2,3),plot(t,y);
subplot(2,2,4),plot(t,smooth_res);
axis([0 N 20 30])

在这里插入图片描述在这里插入图片描述

图一为理想值(25)
图二为卡尔曼输出的最优化结果
图三为高斯白噪音
图四为平滑滤波结果
侵删


http://chatgpt.dhexx.cn/article/Uwvo5yZn.shtml

相关文章

kalman简单例子——初始化参数对kalman性能的影响

此篇为第⑤篇,多目标跟踪系列文章: 基础demor入门①②;公式推导③④;深入分析初始化参数的影响⑤; ① Matlab Kalman滤波例子——小球跟踪解析 :matlab官方例子,单目标跟踪。匀速模型和匀加速模型 ②Matlab Kalman Filter based Multiple object Tracking 官方例子 多目…

卡尔曼(kalman)滤波器原理

引言:卡尔曼滤波器适用于线性高斯系统,若为非线性系统,可以使用扩展卡尔曼滤波器。 一、状态估算器 如下图,如果我们需要知道火箭发射时尾部内部的实际温度,这个温度与火箭的燃料输入有关。但是由于里面温度过高&…

Kalman详尽原理介绍合集

目录 前言 1.线性kalman(LKF) 1.1LKF原理简介 1.2 适用场合 2.扩展kalman(EKF) 2.1EKF原理简介 2.2 适用场合 2.3 使用注意事项 3.无迹kalman(UKF) 3.1UKF原理简介 3.2 UT变换 3.3 适用场合 4.粒子滤波PF 4.1 PF原理简介 4.2 适用场合 前…

对Kalman(卡尔曼)滤波器的理解

分类: 计算机视觉 转载过来的,觉得不错,原文 http://blog.csdn.net/lanbing510/article/details/8828109 1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅…

Kalman滤波通俗理解+实际应用

一、Kalman用于解决什么的问题? 卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。 人话&#xff1…

IDEA开发及运行第一个Android项目

IDEA自动下载SDK、Gradle,保证能访问网络。 原来eclipse能使用的sdk,配到idea报错,就换成自动下载最新的了。 之前没成功可能是我防火墙禁用了上网。 新建项目 提示安装SDK 等待下载完成 继续建项目 选择手机或平板及目标设备API版本 选择…

怎么导入别人的android项目

到期末了好多同学都问我怎么把别人的安卓项目导进自己电脑里面,今天我来统一解答一下,希望有所帮助。 1.删除项目中原有的自动构建的文件 去到要导入项目的目录下把 .idea .gradle与build 三个文件夹,*.iml,local.properties删除…

android 开源项目:

android 开源项目: https://github.com/white-cat/ThinkAndroid 转自:http://glblong.blog.51cto.com/3058613/1354953 Android开源:数据库ORM框架GreenDao学习心得及使用总结 2014-01-26 23:40:01 标签: sqllite Android 开源…

Android项目工程结构介绍

Android项目工程结构介绍 (1)gradle和.idea Android Studio自动生成的文件,打包的时候一般会删掉再进行打包 (2)app 项目的代码资源都在其中,也是我们工作的核心目录 build :编译生成文件。生…

Android项目如何真机运行?

很多初学者在刚开始写Android项目的时候,会使用Android Studio自带的模拟器去运行项目,但是自带模拟器一般占内存大(占2G都算少的);运行慢(运行一个项目要启动半天);卡顿等等&#x…

26、Android创建项目

利用 Android Studio,您可以轻松地为各种类型的设备(例如手机、平板电脑、电视和可穿戴设备)创建 Android 应用。本页介绍了如何启动新的 Android 应用项目或导入现有项目。 如果您未打开项目,Android Studio 会显示欢迎屏幕&…

创建的第一个Android项目

Package name:项目的包名,一定要具有唯一性! 静待。。。 创建模拟器 版本问题找不到具体信息,就选择这一个把。相似度比较高。紧跟着后边我也配置了安卓10(Q) 提示你的反病毒程序可能会影响你的构建性能。…

Android开源项目

阿里巴巴 项目名称功能描述freelineFreeline 是 Android 平台上的秒级编译方案,Instant Run 的替代品,也可以从 Freeline 官方主页来获取更多的信息。Freeline 由蚂蚁聚宝 Android 团队开发,它可以充分利用缓存文件,在几秒钟内迅…

Android项目框架搭建(一)

本篇先记录下当前项目中涉及的主要技术要点。也算是对所作项目的一次总结。如果这个过程能对你有些许的帮助,那可能就显得有意义点了。 一个完整的Android项目会涉及后台和前端。我们只关注于前端,也就是我们的app本身。 下面列出项目架构需要具备的技…

创建安卓项目工程

安卓项目工程 前言一创建工程的步骤newproject找到empty配置相关信息创建成功 二、项目相关的文件1.llayoyt文件这个文件位于app\src\res\layout它运行的结果是,这个APP如果在手机上运行的话,会是什么样的界面 前言 说清楚这么创建一个安卓工程 并且运行…

2.Android Studio创建安卓项目及项目结构

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 上一篇Android Studio搭建完成了,接下来我们就用Android Studio创建我们的安卓项目吧! 目录: 一、使用Android Studio 图形用户界面创建安卓工…

Android项目结构

Android项目结构 新建个空的安卓项目,打开,切换到project模式: 一、工程结构 1/ .gradle和.idea 这两个目录下都是AS自动生成的,无须关心,也不要手动编辑。 2/ app 项目中的代码、资源等几乎都在这里,…

Android项目工程目录简介

主工程目录: 一、.gradle 此文件夹是构建工具 Gradle 的配置文件夹,也会存储一些项目的构建缓存信息,在首次build项目时,会根据配置文件去下载这些文件,此文件夹是自动生成的文件夹,我们无需关心里面的内容…

Android创建项目

目录 创建Android项目 配置项目结构 创建安卓模拟器 模拟器运行 HelloWorld 应用 真机运行 HelloWorld 应用 创建Android项目 打开 Android studio 工具,选择Project,选择 New Project 由于现在是教程博客,所以我们随便选择 一个 空 Ac…

Android Studio创建安卓项目工程

Android Studio创建安卓项目工程 前言 因为想抽出时间复习考研因此提前接触安卓的一些开发,在实训的时候就可以不用再听讲学习,节省时间 随着前端混合开发和小程序技术的兴起,安卓开发的需求在日益减少。更多的学习是出于兴趣的缘故吧。 创…