卡尔曼滤波(2):一个简单的例子

2023-05-16

为了说明离散性卡尔曼滤波器的用法,我将用一个最简单的例子来进行说明。

假设我们现在对一个房间内的温度进行测试,房间内温度初值为25°c,每过一个时间周期,温度x都将在上一个周期温度的基础上变动

于是我们可以建立状态差分方程

再假设我们手上有一个误差比较大的温度计(如果误差不大也不需要卡尔曼滤波了),通过温度计,我们可以得到测量值z,我们建立观测方程


每当经过一个时间周期,我们用上一周期得到的后验估计量来估计下一周期的先验估计量,可以得到时间更新方程


由该先验估计量估计先验协方差


由估计协方差我们可以计算大名鼎鼎的卡尔曼增益


由卡尔曼增益我们继续计算x在k时刻的后验估计量


计算后验协方差


重复以上五个步骤

以下是matlab程序仿真

function main
N=120;
CON=25;
Xexpect=CON*ones(1,N);
X=zeros(1,N);
Xkf=zeros(1,N);
Z=zeros(1,N);
P=zeros(1,N);

%赋初值
X(1)=25.1;
P(1)=0.01;
Z(1)=24.9;
Xkf(1)=Z(1);

%噪声
Q=0.01;
R=0.25;
W=sqrt(Q)*randn(1,N);   %方差决定噪声大小
V=sqrt(R)*randn(1,N);   %方差决定噪声大小

%系统矩阵
F=1;
G=1;
H=1;
I=eye(1);   %本系统状态为一维


%模拟房间温度及测量过程,并滤波
for k=2:N
    %第一步,随时间推移,房间真实温度波动变化
    %k时刻的真实温度,温度计是不知道的,但是它又是真实存在的,因此我们要过滤杂波,尽量收敛到真实温度
    X(k)=F*X(k-1)+G*W(k-1);
    
    %第二步,随着时间推移,获取实时数据
    %温度计对k时刻房间温度的测量,Kalman滤波是站在温度计角度进行的。
    %他不知道此刻真实温度,只能站在本次测量值和上一次估计值来做处理。其目的是最大限度降低测量噪声R的影响。尽可能的逼近X(k);
    Z(k)=H*X(k)+V(k);
    
    %第三步,卡尔曼滤波。
    %有了k时刻的观测和k-1时刻的状态就可以滤波了。
    X_pre=F*Xkf(k-1);      %状态预测
    P_pre=F*P(k-1)*F'+Q;    %协方差预测
    Kg=P_pre*inv(H*P_pre*H'+R); %计算卡尔曼增益
    e=Z(k)-H*X_pre;     %新息
    Xkf(k)=X_pre+Kg*e;  %状态更新
    P(k)=(I-Kg*H)*P_pre;    %协方差更新
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%计算误差
Err_Messure=zeros(1,N); %测量值与真实值之间的偏差
Err_Kalman=zeros(1,N);  %估计值与真实值之间的偏差
for k=1:N
    Err_Messure=abs(Z(k)-X(k));
    Err_Kalman=abs(Xkf(k)-X(k));
end



t=1:N;
figure; %画图显示
%依次输出理论值,叠加过程噪声的真实值
%温度计测量值,卡尔曼估计值
plot(t,Xexpect,'-b',t,X,'-r',t,Z,'-ko',t,Xkf,'-g*');
%plot(t,X,'-r',t,Xkf,'-g*');
legend('期望值','真实值','观测值','卡尔曼滤波值');
%legend('真实值','卡尔曼滤波值');
xlabel('采样时间/s');
ylabel('温度值/c');

%误差分析图
figure %画图显示
plot(t,Err_Messure,'-b',t,Err_Kalman,'-k*');
legend('测量偏差','卡尔曼滤波偏差');
xlabel('采样时间/s');
ylabel('温度值/c');


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡尔曼滤波(2):一个简单的例子 的相关文章

  • JavaScript设计模式:四、发布订阅模式

    JavaScript设计模式 xff1a 四 发布订阅模式 文章目录 JavaScript设计模式 xff1a 四 发布订阅模式一 概述1 观察者模式2 发布订阅模式3 观察者模式是不是发布订阅模式 一 概述 观察者模式 xff1a 观察者
  • FreeRTOS教程——二值信号量(四)

    二值信号量 信号量简介 目的 xff1a 共享资源访问 与任务同步 信号量类型 xff1a 二值信号量 计数型信号量 互斥信号量 递归互斥信号量 本质上是一种只包含一个项数的队列 二值信号量 0 和 1 xff0c 一种内核机制 内核同步
  • Bug:Warning: [antd: ***] overlay is deprecated. Please use menu instead.以及解决方案

    Ant Design Pro umi4Bug记录 xff1a Bug xff1a Warning antd overlay is deprecated Please use menu instead 解决方案 xff1a yarn add
  • 前端初学者的Ant Design Pro V6总结(上)

    前端初学者的Ant Design Pro V6总结 xff08 上 xff09 一 UI组件开发流程 61 gt 通用 xff08 异步 xff09 函数useEmotionCss 定义CSSuseModel获取全局状态useCallbac
  • 关于C语言在VS2017上开头格式

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • Java中Long和long的区别

    Java中Long和long的区别 Java的数据类型分为两种 xff1a 1 基本类型 xff1a byte 8 short 16 int 32 long 64 float 32 double 64 char 16 boolean 1 2
  • Windows 10 下如何彻底关闭 Hyper-V 服务

    CMD运行bcdedit set hypervisorlaunchtype off 恢复使用 xff1a bcdedit set hypervisorlaunchtype auto
  • 从百度运维实践谈“基于机器学习的智能运维”

    清华大学计算机系副教授裴丹于运维自动化专场发表了题为 基于机器学习的智能运维 的演讲 xff0c 上篇参看 科研角度谈 如何实现基于机器学习的智能运维 文章 xff0c 此为下篇 从百度运维实践谈基于机器学习的智能运维 以下为演讲实录 xf
  • python通过udp传输图片

    首先要了解UDP的工作模式 对于服务器 xff0c 首先绑定IP和端口 xff0c 本机测试的时候可以使用127 0 0 1是本机的专有IP xff0c 端口号 大于1024的是自定义的 xff0c 所以用大于1024的端口号 xff0c
  • D435i跑通ORB-SLAM2

    这篇文章主要记录我的实现过程 根据官方安装文档 xff0c 并参考以下两篇博客 xff0c 可以比较顺利的实现 xff1a Realsense D435i 在ubuntu上安装SDK与ROS Wrapper 运行ORB SLAM2 RTAB
  • 通俗理解滑模变结构控制(1)

    这里写自定义目录标题 1 什么是滑模变结构控制2 滑模变结构的一些基本知识3 滑模控制器设计4 滑模控制器例子 1 什么是滑模变结构控制 在开始介绍滑模变结构控制之前 xff0c 最好先学习一些线性控制的基础 xff0c 知道什么是李亚普诺
  • 终端滑模(Terminal滑模)理解

    一 什么是终端滑模 在前面所介绍的滑模控制中 xff0c 我们是选取了一个线性的滑模面s xff0c 使系统达到滑模面后 xff0c 误差逐渐收敛到0 xff0c 收敛的速度可以通过调节滑模面的参数来实现 后来人们为了使滑模控制有更好的性能
  • PX4环境git submodule update --init --recursive失败的解决办法

    最近开始搭建PX4环境 xff0c 搭建是需要从github下载工程 xff0c 然后使用语句git submodule update init recursive更新工程子模块 xff0c 但往往由于网络原因这一步需要很久 xff0c 甚
  • 变结构滑模控制抖振处理(1)------动态滑模法

    1 什么是动态滑模 从前面一些关于滑模的介绍 xff0c 我们知道 xff0c 在设计滑模控制器时 xff0c 避不开的问题就是抖振 至于抖振的产生 xff0c 很大程度上是由于一般滑模控制器的控制律u是一个不连续的函数 xff0c u中往
  • 四旋翼双环PID控制

    在我上篇博客 四旋翼无人机Matlab建模 中 xff0c 我建立了四旋翼的模型 xff0c 并在simulink中搭建了仿真 xff0c 但并没有设计控制器 本章便针对四旋翼设计最常见的串级PID控制器 xff0c 本篇文章主要从两个部分
  • PX4代码解析(1)

    前言 做pixhawk飞控有一段时间了 xff0c 但在学习过程中遇到许多困难 xff0c 目前网上找不到比较完整的PX4学习笔记 xff0c 我打算结合自己理解 xff0c 写写自己对PX4源码的理解 xff0c 不一定对 xff0c 只
  • PX4代码解析(2)

    前言 在大致了解PX4代码架构后 xff0c 我们需要了解PX4的通信机制 在PX4代码架构中 xff0c 每通信总线主要分为两个部分 xff0c 一是内部通信总线uORB 即PX4内部进程通信采用的协议 xff0c 例如PX4内部姿态控制
  • px4代码解析(3)

    前言 在使用PX4飞控时 xff0c 我们难免要对其进行二次开发 xff0c 例如修改控制算法 xff0c 添加新的传感器 xff0c 这时需要在代码中定义属于自己的消息 本节主要分享一下如何在PX4代码中添加自己的消息 一 消息添加与配置
  • 七月在线NLP千元课程笔记

    xfeff xfeff NLP七月在线 照着PDF的内容解释 第一课 NLP基础知识 Python基础知识7分钟 正则表达式验证工具 https regexr com v1 基本字符 匹配除了换行符外所有字符 d匹配所有数字 能找到所有数字
  • PX4代码解析(4)

    一 引言 PX4程序是基于实时操作系统 xff08 Real time operating system RTOS xff09 的上层应用程序 xff0c PX4飞控程序的很多重要模块都是在Nuttx操作系统的调度下运行的 因此 xff0c

随机推荐

  • PX4代码解析(5)

    一 前言 我所讨论的PX4代码是基于v1 11版本 xff0c 该版本与之前的版本有不少不同 xff0c 其中一个比较大的区别在于新版本大部分用到了C 43 43 中模板 xff0c 使得代码没有以前那么容易理解 xff0c 因此我在后面介
  • gcc与Makefile

    一 gcc命令 在linux开发编程过程中 xff0c 需要对完成的代码进行编译运行 xff0c 这时我们便需要用到gcc命令 xff0c 下面我介绍gcc的安装与使用 1 安装 在ubuntu系统下终端中输入下面的命令 sudo apt
  • 大疆嵌入式工程师面试

    昨天刚刚经历了大疆嵌入式第一轮面试 xff0c 面试官是个大佬 xff0c 感觉很不错 xff0c 但大疆面试问的很深 xff0c 自己有些答得不是很好 xff0c 记录一下 一面 xff08 8 16号 xff0c 35min左右 xff
  • PX4代码解析(6)

    一 前言 上一节介绍了PX4姿态估计调用函数的流程 xff0c 这一节分享一下我对PX4姿态解算的解读 首先 xff0c 要理解PX4姿态解算的程序 xff0c 要先从传感器的特性入手 xff0c 这里主要介绍的传感器有加速度计 xff0c
  • 嵌入式学习(2)-FreeRTOS--任务调度器开启过程分析

    FreeRTOS 开启任务调度器过程分析 vTaskStartScheduler xff1b 代码分析其中一些汇编的寄存器操作还不是特别清楚 xff0c 还需要进一步去学习 vTaskStartScheduler xff1b 代码分析 sp
  • 嵌入式学习(3)-FreeRTOS的创建任务过程

    创建任务过程理解 xTaskCreate xff08 xff09 分析prvInitialiseNewTask xff08 xff09 函数分析vListInitialiseItem xff08 xff09 函数分析prvAddNewTas
  • 浅记XACRO And Gazebo仿真建模

    目录 浅记XACRO And Gazebo仿真建模一 XACRO1 常量定义 2 宏定义 3 文件包含 二 ROS CONTROLros control是什么 xff1f 1 添加 惯性参数和碰撞属性 2 添加 gazebo标签 3 添加
  • OS——进程与线程

    文章目录 进程与线程进程进程的特点进程的模型进程的创建进程的终止进程的状态进程的切换进程的实现进程的合作 线程为什么有线程 xff1f 线程的使用经典的线程模型POSIX线程用户级线程内核级线程混合实现调度程序激活机制进程与线程的比较 进程
  • 720P、1080P、4K之间有什么区别和联系?

    720P 1080P 4K之间有什么区别和联系 xff1f 2018 02 26 11 27视频 视频分辨率 在高清网络摄像机中 xff0c 我们通常叫成百万 两百万像素摄像机 xff0c 经常会听到720P 1080P 4K xff0c
  • 了解python代码的执行顺序和对if __name__ == '__main__'理解

    进度一 xff1a 前几天 xff0c 我学习python时 xff0c 编写简单的代码 xff0c 一般是这样的 xff1a pi py PI 61 3 14 print 34 this is out 34 def main print
  • 跨域 php处理代码

    放到public index php中 header 39 Content Type text html charset 61 utf 8 39 header 39 Access Control Allow Origin 39 代表允许任何
  • 全日制和非全日制;定向和非定向区别联系

    全日制和非全日制 xff08 在职 xff09 是相对的 定向和非定向是相对的 xff0c 委托培养是定向的一种 一般情况下 xff1a 全日制绝大部分都是非定向的 xff0c 非全日制 xff08 在职 xff09 绝大部分都是定向的 定
  • 马云推出的“天猫精灵”到底有多牛? 细思极恐怖

    这个时代的变化有多莫测 xff1f 开网店 改变银行的马云 xff0c 搞起了机器人 xff01 搞搜索 做地图的百度 xff0c 完成了无人驾驶 xff01 马云又打响一枪 马云大动作不断 三个重磅后 xff0c 今天又打了对手一个措手不
  • Ardupilot -- APM源码笔记四(重制)~ 线程机制

    认识Ardupilot线程 在了解过Ardupilot的链接库之后 xff0c 是时候来认识一下Ardupilot是怎么处理线程了 xff0c 对于从arduino继承过来的setup xff08 xff09 loop xff08 xff0
  • 最简单的python 人脸检测

    本篇文章是最基本的人脸检测 xff0c 没有复杂的算法 xff0c 只是简单的运用了这三个库opencv xff0c numpy xff0c pillow 一 开发环境搭建 我们使用Python自带的IDLE进行编程 xff0c 我使用的电
  • FreeRtos 任务优先级和中断优先级

    首先打出这个标题是为了便于搜索 在这里赘述一下 这两者没有关系 只需要明白的是中断优先级高于任务的优先级 在单片机运行的过程中 中断来了就执行中断服务程序 在free rtos中 任务优先级设置的数值越大 任务的优先级越高 Unix任务优先
  • 嵌入式工程师的经典面试题目

    嵌入式工程师的经典面试题目 预处理器 xff08 Preprocessor xff09 1 用预处理指令 define 声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS P
  • rabbitmq版本升级

    目录 一 背景 二 部署新的mq 三 元数据备份和还原 四 消息数据备份和还原 五 注意 一 背景 因原来rabbitmq版本存在漏洞需升级至最新版本 原来是使用软件包部署 xff0c 升级我采用使用docker compose部署 xff
  • __attribute__

    前言 本文介绍 attribute 的使用方法 attribute 介绍 要了解Linux Kernel代码的分段信息 xff0c 需要了解一下gcc的 attribute 的编绎属性 xff0c attribute 主要用于改变所声明或定
  • 卡尔曼滤波(2):一个简单的例子

    为了说明离散性卡尔曼滤波器的用法 xff0c 我将用一个最简单的例子来进行说明 假设我们现在对一个房间内的温度进行测试 xff0c 房间内温度初值为25 c xff0c 每过一个时间周期 xff0c 温度x都将在上一个周期温度的基础上变动