卡尔曼滤波算法C语言实现 (2)

风蛍月缓缓 分享 2020-06-22 下载文档

图3 改变p_last的测试结果

6 结论

本文通过对kalman filter algorithm的深入探讨,对kalman filter有了更深刻的认识,理解了核心的5条公式的物理意义,以及kalman filter的思想,并通过理解算法编程实践,验证了kalman filter在数据处理方面的优良性能。

并且通过实验结果分析了kalman filter algorithm的本质对每次估计产生的协方差递归结合当前测量值来估计系统当前的最佳状态。如要改善算法的性能就必须要尽可能的减小系统噪声和测量噪声,优化程序,减小估计的协方差。

参考文献

[1]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005,91~130.

[2]崔平远,黄晓瑞.基于联合卡尔曼滤波的多传感器信息融合算法及其应用[J].电机与控制学报,2001,9(5): 204-207.

[3]党宏社,韩崇昭,段战胜.基于多卡尔曼滤波器的自适应传感器融合[J].系统工程与电子技术,2004,5(26):311-313.

[4]文贡坚,王润生. 一种稳健的直线提取算法[J].软件学报,2001,11(11):1660-1665.

6

附录:源程序

#include \#include \#include \double frand()

{ return 2*((rand()/(double)RAND_MAX) - 0.5); //随机噪声} 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;

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<20;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=噪声 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(\显示真值

printf(\position: %6.3f [diff:%.3f]\\n\//显示测量值以及真值与测量值之间的误差

printf(\显示kalman估计值以及真值和卡尔曼估计值的误差

sumerror_kalman += fabs(z_real - x_now); //kalman估计值的累积误差 sumerror_measure += fabs(z_real-z_measure); //真值与测量值的累积误差 p_last = p_now; //更新covariance值 x_last = x_now; //更新系统状态值 }

7

}

printf(\总体测量误差 : %f\\n\输出测量累积误差 printf(\总体卡尔曼滤波误差: %f\\n\输出kalman累积误差

printf(\卡尔曼误差所占比例: %d%% \\n\


卡尔曼滤波算法C语言实现 (2).doc 将本文的Word文档下载到电脑

下一篇:大一班创意美术论文

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx