简单卡尔曼滤波
2015-08-23 19:45
183 查看
double filter(double in) { static int co; co++; static double dat0; //现在的数据 static double dat1; //前一次的数据 static double dat2; //前两次的数据 static double dat3; //前三次的数据 if(co>4) { co=999; //滤波实现部分=========================== double prd0; //本次预测值 double prd1; //上次预测值 double result; //本次测量结果 double de; static double p_dx; //上一次最优偏差 double gz; //高斯噪声 double kg; //协方差 prd1=dat1-dat2+dat1; //计算上次预测值 de=dat0-prd1; //算出上次预测偏差 prd0=dat0-dat1+dat0; //计算本次预测值 gz=sqrt(p_dx*p_dx+de*de+0.00000001); kg=gz*gz/(gz*gz+de*de+0.00000001); result=prd0+kg*(in-prd0); p_dx=sqrt((1.0-kg)*gz*gz); //======================================= dat3=dat2; dat2=dat1; dat1=dat0; dat0=result; //printf("%f %f %f %f\n",dat0,dat1,dat2,dat3); return result; } else { if(co==1) dat3=in; else if(co==2) dat2=in; else if(co==3) dat1=in; else if(co==4) dat0=in; //printf("%f %f %f %f\n",dat0,dat1,dat2,dat3); return in; } }
相关文章推荐
- 张国祥老师在宁波麒麟贸易集团公司讲授三级流程设计方法
- 摘记
- HDU 1041
- Oracle数据库基础之字符串函数
- iOS项目开发实战——学会使用TableView列表控件(二)
- HDU_2795 Billboard(线段树)
- Java内存问题的一些见解
- 自学QT之QListIterator迭代器的示例
- 如何快速掌握一门新技术/语言/框架…
- css选择器
- 【Spring】初始化Spring IoC容器(非Web应用),并获取Bean
- session的方法
- Linux学习笔记――Linux基础命令总结
- 为什么你应该尝试“全栈”
- 杭电acm 1072 Nightmare
- DNA Sequence - POJ 2778(AC自动机+矩阵乘法)
- block使用小结、在arc中使用block、如何防止循环引用
- HttpGet/HttpPost/HttpClient介绍
- 黑马程序员_关于API1.5新特性之枚举
- 数据结构基础 后序遍历和中序遍历还原二叉树