· 用户注册 · 设为首页 · 加入收藏 · 联系站长 · · ·
 | 网站首页  | 新闻  | 文章  | 教案  | 课件  | 试卷  | 素材  | 图片  | 中考  | 高考  | 新高考  | 电子书  | 备课中心  | 留言  | 
您现在的位置:主页 > 电子书 > 正文 今天是:
讨论一个卡尔曼滤波入门问题           ★★★
讨论一个卡尔曼滤波入门问题
作者:网络整理 点击数:169 更新时间:2019-09-27 16:38:45

kalman滤波入门_kalman滤波原理_kalman滤波入门

【Linux预售开启】正点原子Linux开发板I.MX 6U/6ULL预售正式开启kalman滤波入门,1500页教程,150多讲视频,免费开源,酷炫UI

前几天在网上看到了一个卡尔曼的介绍,自己虽然有数字信号处理的基础,但是毕竟底子比较薄弱,还没有完全弄明白详细的机理,但是大概的过程是明白了。

基本就是用上一次的最优估计值作为真实值进行数据迭代,然后不断地把数据误差缩小。

这里贴上代码kalman滤波入门,和百度文库的很像,我只是修改了迭代次数。

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

double frand()

{ return 2*((rand()/(double)RAND_MAX) - 0.5); //随机噪声

}

kalman滤波入门_kalman滤波原理_kalman滤波入门

void main()

{float x_last=0;

float p_last=0.02;

float Q=0.018;

float R=0.542;

float kg;

float x_mid;

float x_now;

float p_mid;

float p_now;

kalman滤波原理_kalman滤波入门_kalman滤波入门

float z_real=0.56;//0.56

float z_measure;

float sumerror_kalman=0;

float sumerror_measure=0;

int i;

x_last=z_real+frand()*0.03;

x_mid=x_last;

for(i=0;i<400;i++)

{x_mid=x_last; //x_last=x(k-1|k-1),x_mid=x(k|k-1)

p_mid=p_last+Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声

kalman滤波入门_kalman滤波原理_kalman滤波入门

kg=p_mid/(p_mid+R); //kg为kalman filter,R为噪声

z_measure=z_real+frand()*0.03;//测量值

x_now=x_mid+kg*(z_measure-x_mid);//估计出的最优值

p_now=(1-kg)*p_mid;//最优值对应的covariance

printf("Real position: %6.3f \n",z_real); //显示真值

printf("Mesaured position: %6.3f [diff:%.3f]\n",z_measure,fabs(z_real-z_measure)); //显示测量值以及真值与测量值之间的误差

printf("Kalman position: %6.3f [diff:%.3f]\n",x_now,fabs(z_real - x_now)); //显示kalman估计值以及真值和卡尔曼估计值的误差

sumerror_kalman += fabs(z_real - x_now); //kalman估计值的累积误差

sumerror_measure += fabs(z_real-z_measure); //真值与测量值的累积误差

p_last = p_now; //更新covariance值

kalman滤波原理_kalman滤波入门_kalman滤波入门

x_last = x_now; //更新系统状态值

}

printf("总体测量误差 : %f\n",sumerror_measure); //输出测量累积误差

printf("总体卡尔曼滤波误差: %f\n",sumerror_kalman); //输出kalman累积误差

printf("卡尔曼误差所占比例: %d%% \n",100-(int)((sumerror_kalman/sumerror_measure)*100));

}

运行出来的结果是,比20次的迭代数据误差波动要小一些,但并不是小很多。这是400次的迭代结果。rand是伪随机函数,过两天我把用STM32随机数发生器做的测试代码发上来,顺便测试一下效率。不过PC机跑了一下,感觉不怎么好。

现在一个问题是,真实值我是不知道的军事网址导航,那么刚开始的输入我应该怎么写呢?是0还是随便的一个数据,希望能和大家一起讨论一下!谢谢!

我来回答

Delta-sigma数据转换器

点击加入正点原子千人学习交流QQ群>>>>>>>>>>>>>>>>>>>>>

责任编辑:admin
  • 上一篇:【资料】卡尔曼滤波入门教程分享

  • 下一篇:没有了
  • 【字体: 】【加入收藏】【关闭窗口
    相 关 文 章
    2015中考语文浏览训练题
    解析2013年北京海淀区中
    备战2013中考语文古诗文
    中考语文重点难点之句子
    备战2015中考作文技能之
    备战2015中考语文必背文
    2013年北京中考语文测验
    2012年哈市中考语文评卷
    2018初中语文浏览题之聂
    pcstitch pro十字绣软件10
    如何写好题为“打动”的
    2018初中语文浏览题之看
    2015年义乌中考作文范文
    中考语文文言文温习之诵
    适用材料:中考语文需把
    中学语文在线