测试卡尔曼滤波器(Kalman Filter)
真实的温度测试数据,通过加热棒加热一盆水测得的真实数据,X轴是时间秒,Y轴是温度:
1)滤波前
2)滤波后(p=10, q=0.0001, r=0.05, kGain=0;)
2)滤波后(p=10, q=0.00001, r=1, kGain=0;),Y轴放大10倍并取整
。
相关C语言代码:
#define LINE 1024 static float prevData=0;
static float p=10, q=0.0001, r=0.05, kGain=0; float kalmanFilter(float inData)
{ p = p+q;
kGain = p/(p+r); inData = prevData+(kGain*(inData-prevData));
p = (1-kGain)*p; prevData = inData; return inData;
} char *ReadData(FILE *fp, char *buf)
{
return fgets(buf, LINE, fp);
} int main()
{
FILE *fp, *fp2;
char *p, *buf;
size_t len = 0;
ssize_t read;
float inData[1000];
float outData[1000];
uint32_t i,cnt=0; fp = fopen("d2.txt", "r");
if (fp==NULL)
exit(1); buf = (char*)malloc(LINE*sizeof(char));
p=ReadData(fp, buf); while(p) {
inData[cnt]=atof(p);
cnt++;
p=ReadData(fp,buf);
} fclose(fp); for(i=0;i<cnt;i++)
outData[i]=kalmanFilter(inData[i]);
} fp2 = fopen("d3.txt", "w");
for(i=0;i<cnt;i++)
fprintf(fp2, "%f\n",outData[i]);
}
fclose(fp2); }
matlab代码:
d2 = load('d2.txt');
plot(d2); prevData=0.0;
p=10;
q=0.0001;
r=0.05;
kGain=0;
outData=[]; for i=1:length(d2)
p=p+q;
kGain=p/(p+r);
temp=d2(i);
temp=prevData+(kGain*(temp-prevData));
p=(1-kGain)*p;
prevData=temp;
outData(i)=temp;
end plot(outData);
说明:d2.txt存放的是输入的数据,每行一个。d3是输出的数据。
r参数调整滤波后的曲线与实测曲线的相近程度,r越小越接近。
q参数调滤波后的曲线平滑程度,q越小越平滑。
测试卡尔曼滤波器(Kalman Filter)的更多相关文章
- 卡尔曼滤波器 Kalman Filter (转载)
在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡 尔曼全名Rudolf Emil ...
- [转载]卡尔曼滤波器及其基于opencv的实现
卡尔曼滤波器及其基于opencv的实现 源地址:http://hi.baidu.com/superkiki1989/item/029f65013a128cd91ff0461b 这个是维基百科中的链接, ...
- 时间序列八: 以NASA之名: 卡尔曼滤波器
目录 以NASA之名: 卡尔曼滤波器 引言 荣耀骑士 卡尔曼滤波器* 参考文献: 以NASA之名: 卡尔曼滤波器 'That's one small step for man,one giant le ...
- kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和
= 参考/转自: 1 ---https://blog.csdn.net/u010720661/article/details/63253509 2----http://www.bzarg.com/p/ ...
- [Math]理解卡尔曼滤波器 (Understanding Kalman Filter) zz
1. 卡尔曼滤波器介绍 卡尔曼滤波器的介绍, 见 Wiki 这篇文章主要是翻译了 Understanding the Basis of the Kalman Filter Via a Simple a ...
- [Math]理解卡尔曼滤波器 (Understanding Kalman Filter)
1. 卡尔曼滤波器介绍 卡尔曼滤波器的介绍, 见 Wiki 这篇文章主要是翻译了 Understanding the Basis of the Kalman Filter Via a Simple a ...
- 卡尔曼滤波器【Kalman Filter For Dummies】
搬砖到此: A Quick Insight As I mentioned earlier, it's nearly impossible to grasp the full meaning o ...
- 对Kalman(卡尔曼)滤波器的理解
1.简单介绍(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼". 跟其它著名的理论(比如傅立叶变换.泰勒级数等等)一样.卡尔曼也是一个人的 ...
- 对Kalman(卡尔曼)滤波器的理解@@zz
1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他 ...
随机推荐
- [外挂8] 自动挂机 SetTimer函数
>_< : 这里用SetTimer函数自动运行![注意添加在里面的回掉函数函数] UINT SetTimer( HWND hWnd, // 指向窗口句柄 UINT nIDEvent, // ...
- Jenkins Git 中文乱码问题解决
解决方法: x:\Jenkins\jenkins.xml 新增蓝色粗体标记参数(-Dfile.encoding=utf-8),然后重启Jenkins服务,完毕! <arguments>-X ...
- 如何带领一个Android开发团队
1)重构,夜未眠 将框架从业务中剥离 如何提高开发效率 如何提高程序性能 单元测试 技术调研 代码版本管理 2)渠道包管理 自动打包工具 批量打渠道包的两种解决方案 定制渠道包的流程管理 3)稳定性, ...
- 提高tomcat的并发能力
1.Apache + Tomcat 结合起来用Apache负责静态页面,Tomcat负责动态页面,同时减少connectionTimeout的时间,以应对并发量大线程回收来不及的情况. 2.压力过大的 ...
- iOS JSPatch 热修复使用
概述 一说到热修复,可能很多人会觉得应该很复杂,很难用(我以前是这么觉得的...),实际使用起来蛮简单的,这里以一个小demo演示热修复是如何修复崩溃的,具体更深入的用法,可以看这个https://g ...
- C语言实现单链表-02版
我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...
- Why we need model on Django ?
step01: create a database name as (django_db) on mysql ... step02: configure your django to use the ...
- 修改Oracle并行度的方法
Oracle并行度默认为1,适当修改并行度对提高性能有很大帮助 1.查看并行度 select table_name,degree from user_tables; --并行度按照用户表分别设置 2. ...
- python元类
第一个实例: # coding=utf8 # 手动创建,返回一个类对象 MyShinyClass = type('MyShinyClass', () ,{}) print(MyShinyClass) ...
- Ninja Blocks物联网平台简介
Ninja Blocks是一个物联网控制平台,其平台架构包括硬件层.处理器层.软件层以及平台层,请看下图: 最底层是硬件层,包括传感器(Sensors)和驱动器(Actuators),例如温度传感器. ...