首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【转】卡尔曼滤波器

在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下载:http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf 简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。 2.卡尔曼滤波器的介绍 (Introduction to the Kalman Filter) 为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。但是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。 在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。 假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。 好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。 假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。然后,你从温度计那里得到了k时刻的温度值,假设是25度,同时该值的偏差是4度。 由于我们用于估算k时刻的实际温度有两个温度值,分别是23度和25度。究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的covariance来判断。因为Kg^2=5^2/(5^2+4^2),所以Kg=0.78,我们可以估算出k时刻的实际温度值是:23+0.78*(25-23)=24.56度。可以看出,因为温度计的covariance比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。 现在我们已经得到k时刻的最优温度值了,下一步就是要进入k+1时刻,进行新的最优估算。到现在为止,好像还没看到什么自回归的东西出现。对了,在进入k+1时刻之前,我们还要算出k时刻那个最优值(24.56度)的偏差。算法如下:((1-Kg)*5^2)^0.5=2.35。这里的5就是上面的k时刻你预测的那个23度温度值的偏差,得出的2.35就是进入k+1时刻以后k时刻估算出的最优温度值的偏差(对应于上面的3)。 就是这样,卡尔曼滤波器就不断的把covariance递归,从而估算出最优的温度值。他运行的很快,而且它只保留了上一时刻的covariance。上面的Kg,就是卡尔曼增益(Kalman Gain)。他可以随不同的时刻而改变他自己的值,是不是很神奇! 下面就要言归正传,讨论真正工程系统上的卡尔曼。 3. 卡尔曼滤波器算法 (The Kalman Filter Algorithm) 在这一部分,我们就来描述源于Dr Kalman 的卡尔曼滤波器。下面的描述,会涉及一些基本的概念知识,包括概率(Probability),随即变量(Random Variable),高斯

05

51单片机试题及答案c语言版_只会c语言毕业设计能做什么

篇一:51单片机毕业设计题目2  1、基于51单片机温湿度检测的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值的调节。  5、电脑USB供电  6、采用C语言编程。  2、基于51单片机温湿度检测+数字钟的设计 设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值和数字钟时分秒的调节。  5、时分秒显示  6、电脑USB供电  7、采用C语言编程。  3、基于51单片机温湿度检测+电子万年历的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10+DS1302设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值和电子万年历时分秒星期年月日的调节。  5、年、月、日、时、分、秒、星期、温度、湿度显示  6、电脑USB供电  7、采用C语言编程。  4、基于51单片机温湿度检测+数字电压表的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10+ADC0832设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值的调节。  5、电压、温度、湿度显示。  6、电压范围直流0-5伏。(另有0-220伏)  7、电脑USB供电  8、采用C语言编程。  5、基于51单片机数字温度计的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+DS18B20设计。  2、温度:0-99摄氏度  3、3个发光二级管和蜂鸣器实现报警:高温报警、低温报警、正常共3种报警状态。  4、3个按键实现温度上下限报警值的调节。  5、湿度显示。  6、电脑USB供电  7、采用C语言编程。  6、基于51单片机数字温度计+数字钟的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+DS18B20设计。  2、温度:0-99摄氏度  3、3个发光二级管和蜂鸣器实现报警:高温报警、低温报警、正常共3种报警状态。  4、3个按键调整温度上下限值和数字钟时分秒值的调整。(按键有提示音)  5、湿度、时分秒显示。  6、电脑USB供电  7、采用C语言编程。  7、基于51单片机数字温度计+数字电压表的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+DS18B20+ADC0832设计。  2、温度:0-99摄氏度 电压范围:0-220伏直流电压  3、3个发光二级管和蜂鸣器实现报警:高温报警、低温报警、正常共3种报警状态。  4、3个按键实现温度上下限报警值的调节。  5、湿度、电压显示。  6、电脑USB供电  7、采用C语言编程。  8、基于51单片机超声波测距的设计  1、设计任务  1、采用51单片机+4位共阳数码管+ HC-SR04超声波模块。  2、测距范围2cm-450cm。  3、超出测量范围显示“-.–”;正常测量范围显示“x.xx”(单位:米)。 4、51单片机:STC89C52RC、AT89S52、AT89C51。  5、C语言编程。  6、电脑USB供电。  9、基于51单片机超声波测距的设计  1、设计任务  1、采用51单片机+LCD1602液晶+ HC-SR04超声波模块。  2、测距范围2cm-450cm。  3、超出测量范围显示“-.–M”;正常测量范围显示“x.xxM”(单位:米)。 4、51单片机:STC89C52RC、AT89S52、AT89C51。  5、C语言编程。  6、电脑USB供电。  10、基于51单片机超声波测距的设计  1、设计任务  1、采用51单片机+LCD12864液晶+ HC-SR04超声波模块。

01

Qt编写自定义控件5-柱状温度计

柱状温度计控件,可能是很多人练手控件之一,基本上都是垂直方向展示,底部一个水银柱,中间刻度尺,刻度尺可以在左侧右侧或者两侧都有,自适应分辨率改动,有时候为了美观效果,可能还会整个定时器来实现动画效果,开启动画效果的缺点就是CPU占用会比较高,前阵子有个好友(贾文涛-涛哥)向我推荐了一个opengl绘制的开源东西,QNanoPainter,东西是个好东西,我个人的理解是直接封装了opengl绘制的qpainter,可以使得绘制全部走GPU,这样就可以大大减轻CPU的负担,非常方便,我自己试了下,方法和绘制逻辑和qpainter有点不一样,暂时没有将所有控件改成QNanoPainter版本,以后看情况吧。

05

技术猿 | 自动化设备的常用故障诊断方法

常用的简易状态监测方法主要有听诊法、触测法和观察法等。 听诊法: 设备正常运转时,伴随发生的声响总是具有一定的音律和节奏。只要熟悉和掌握这些正常的音律和节奏,通过人的听觉功能就能对比出设备是否出现了重、杂、怪、乱的异常噪声,判断设备内部出现的松动、撞击、不平衡等隐患。用手锤敲打零件,听其是否发生破裂杂声,可判断有无裂纹产生。 电子听诊器是一种振动加速度传感器。它将设备振动状况转换成电信号并进行放大,工人用耳机监听运行设备的振动声响,以实现对声音的定性测量。通过测量同一测点、不同时期、相同转速、相同工况

04

Qt编写控件属性设计器5-属性中文

在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过研究发现,在QtObjectControllerPrivate类中负责对控件的属性名称进行遍历,然后发送到QtVariantPropertyManager进行统一的管理,那只要将这里的属性名称进行映射就行了,对应的英文到中文或者其他语言都可以,甚至枚举值的下拉框也可以在这里换成中文的。曾经想过用翻译的机制,后面发现路很漫长,而且最终还是需要映射转换,看过QtDesigner的源码,里边最终也是将翻译文件中的对应项转换成中文的。

00

Qt编写控件属性设计器6-动态属性

之前就提过,Qt的属性机制强大到爆,这次的动态属性功能就是要让他爆,很难想象只要一行代码即可widget->setProperty("value", value);没错就这么简单,调用弱属性机制,可以直接控制控件中的所有属性,设计这个机制的人绝对是天才,直接跪了。至于具体底层是怎么实现的,这个可以先不管,也没有太多精力再去研究Qt的源码了,那个源码非常庞大,研究源码的时候最快的办法是搜索直接定位对应文件。本设计器除了提供文本框输入值进行动态改变控件属性以外,还提供了了滑动条、随机模拟数据、串口采集数据、网络采集数据、数据库采集数据等多种方式获取数据源。

00

Qt编写自定义控件61-通用移动

通用移动类,目标就是为了实现放入任意的控件以后,支持鼠标拖动,在容器中或者父类中拖动,这个应用场景非常多,比如在地图上放置的设备,需要用户自行按下拖动到指定的合适的位置,然后保存设备的位置坐标到数据库,下次打开直接加载,在一些安防项目、电力项目、环境监测等上面大量运用,有时候设备对应了多种类型,以前做的办法是将这个移动的代码直接封装在对应设备的自定义控件中,有个巨大缺点就是如果再新增加一个控件,又需要重复的代码加到控件中才行,可否将这个功能独立出来,只要传入控件就行呢,当然可以,比如我写过很多自定义控件,现在需要控件放到某个容器中能自由拖动,只需要new出通用移动类来就行。

03
领券