卡尔曼滤波算法的代码验证

news/2025/1/12 8:42:12/

卡尔曼滤波算法它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态,实践中得到广泛应用,场景包括控制系统参数估计,移动预测等等,在深度学习中也常常用来配合神经网络输出做后处理,应用于目标跟踪等场景, 自动化专业在讲现代控制理论的时候会讲。

测试代码在:

GitHub - 13824125580/kalmanfilter-cpp: A basic Kalman Filter implementation in C++ using the Eigen library.https://github.com/13824125580/kalmanfilter-cpp.git

代码下载后,编译运行步骤如下。

1.安装eigen3

eigen3是一套高效的线性代数运行库,安装命令如下:

sudo apt-get install libeigen3-dev

具体用法可以参考下面这篇博客

ubuntu18.04安装eigen算法库_papaofdoudou的博客-CSDN博客_ubuntu18安装eigen

2.编译源码

源码下载后的目录结构如下图所示:

用例使用cmake编译,创建编译目录build,进入build目录,执行 cmake ../生成编译文件

之后执行make 编译,编译后,生成可执行测试程序kalman-test文件

测试

执行kalman-test用例,输出如下:

测试输出中的x_hat则是对下图中的测量值的经过卡尔曼滤波算法之后的输出值。

matlab kalman滤波实现

N=200;
w(1)=0;
w=randn(1,N)  % White Gaussian Noise of Predictionx(1)=25;
a=1;  % prediction parameter
for k=2:N;x(k)=a*x(k-1)+w(k-1);
endV=randn(1,N); % White Gaussian Noise of Measurement
q1=std(V);
Rvv=q1.^2; % covariance of Measurement
q2=std(x);
Rxx=q2.^2;
q3=std(w);
Rww=q3.^2; % covariance of prediction
c=0.2;   % measurement parameter
Y=c*x+V;p(1)=10;  % initial prediction result
s(1)=26;  % initial optimal result
for t=2:N;p1(t)=a.^2*p(t-1)+Rww;  % covariance of t-1b(t)=c*p1(t)/(c.^2*p1(t)+Rvv); % kalman gains(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1)); % optimal resultp(t)=p1(t)-c*b(t)*p1(t); % covariance of t
endt=1:N;
plot(t,s,'r',t,Y,'g',t,x,'b',t,w,'m');

用OCTAVE验证:


参考资料:

卡尔曼滤波器|Little Stone - Huan Li's Blog

结束


http://www.ppmy.cn/news/242090.html

相关文章

卡尔曼滤波02

这节课主要内容就是介绍连续随机系统的离散化、连续时间KF和噪声相关的卡尔曼滤波,更多的是一个公式推导,这里就不过多介绍,仅给一个最终结果。 1 连续随机系统的离散化与连续时间KF 1.1 连续时间方程系统离散化 连续时间方程 离散化后的…

卡尔曼滤波1

卡尔曼滤波——做传感器想用的算法 只是不知道单片机是否跑得动……以下内容摘自维基百科 卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器), 它能够从一系列的不完全包含噪声的测量(英文:measurement)中,估计动态系统的状态。 目录 [隐藏] 1 应用实例 2 命名 3 …

滤波算法_标准卡尔曼滤波(SKF, Standard Kalman filter)_②详细数学推导

标准卡尔曼滤波详细数学推导 1、状态空间方程2、模型估计与测量估计的数据融合(Data fusion)3、卡尔曼增益 K k {K_k} Kk​的推导(Kalman gain)4、先验估计协方差 P k − {\bf{P}}_k^- Pk−​的求解与后验估计协方差 P k {\bf{P}…

IMU9轴卡尔曼滤波

转载自:https://www.embbnux.com/2015/01/30/9_dof_imu_with_kalman_filter_on_avr/ 在该博主的AVR上有个自平衡车的介绍,有兴趣可以看看。 一、卡尔曼算法理解 其实如果不去考虑kalman算法是怎么来的,我们只需要知道有下面几个式子就可以…

LevOJ P1029 滑雪

题目描述 小明喜欢滑雪,为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。小明想知道在一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例…

卡尔曼滤波简约版

卡尔曼滤波简约版 在上一篇博文中翻译了国外博主对于卡尔曼滤波解释的文章, 并在其中做了一些备注. 从阅读难度上来看是简单了, 但是内容看起来就很繁琐, 不利于快速查阅. 因此, 我又将卡尔曼滤波中重要的公式重新整理做了简约版. 如果你对卡尔曼滤波算法是一个小白, 刚接触, …

【算法系列】卡尔曼滤波算法

系列文章目录 【算法系列】卡尔曼滤波算法 【算法系列】非线性最小二乘求解-直接求解法 【算法系列】非线性最小二乘求解-梯度下降法 【算法系列】非线性最小二乘-高斯牛顿法 【算法系列】非线性最小二乘-列文伯格马夸尔和狗腿算法 文章目录 系列文章 文章目录 前言 …

卡尔曼滤波系列——(四)无损卡尔曼滤波

1 简介 无损卡尔曼滤波又称无迹卡尔曼滤波(Unscented Kalman Filter,UKF),是无损变换(Unscented Transform,UT)与标准卡尔曼滤波体系的结合,通过UT变换使非线性系统方程适用于线性假…