测试卡尔曼滤波器(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) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他 ...
随机推荐
- 3.SRS文档
1.功能需求 本程序的使用者为局域网用户.程序实现的主要功能是局域网的常见格式的文件的传 输.其用例图如图1.本程序可通过可视化操作界面实现一对多的文件传输. 1.1模块分析 为实现局域网文件传输, ...
- 作业七:团队项目——Alpha版本冲刺阶段-06
昨天进展:代码编写. 今天安排:代码编写.
- 利用模拟退火提高Kmeans的聚类精度
http://www.cnblogs.com/LBSer/p/4605904.html Kmeans算法是一种非监督聚类算法,由于原理简单而在业界被广泛使用,一般在实践中遇到聚类问题往往会优先使用Km ...
- yafphp框架
学习资料 Yaf(Yet Another Framework)用户手册http://www.laruence.com/manual/index.html laruence/yafhttps://git ...
- XCode自动打ipa包脚本 命令
XCode 新建文件 选择other Shell script 放入下面命令行. #工程绝对路径 #cd $ project_path=$(pwd) #build文件夹路径 build_path=$ ...
- XML入门级的简单学习
xml案例<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Ge ...
- pl/sql死锁oracle
http://jingyan.baidu.com/album/3ea51489eb65b152e61bba8b.html?picindex=2
- Leetcode 190 Reverse Bits 位运算
反转二进制 class Solution { public: uint32_t reverseBits(uint32_t n) { uint32_t ans = ; ; i<; ++i,n &g ...
- 正则表达式提取url中的参数,返回json字符串
var urlstr = "www.baidu.com?a=1&b=xx&c"; var s = urlstr.split("?"); var ...
- DotNet中人民币符号的输出
DotNet中人民币符号“¥”的输出<html> <head>DotNet中人民币符号的输出</head> <body> <p>¥100元& ...