追寻梦想的路

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  37 随笔 :: 0 文章 :: 1 评论 :: 39238 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

关键词:卡尔曼滤波 线性最优估计 迭代 预测值 估计值 协方差矩阵 状态转移方程 观测方程 最小均方估计 预测+矫正

 

   经典的卡尔曼滤波是一个迭代的线性的最优状态估计器。利用最小均方误差原理,可以保证状态值的估计是最优的。它只需要知道上次的状态估计值和当前的测量值,就可以预测到当前的最优估计值,适用于实际系统,共需5个方程既可以得到完成一次迭代。卡尔曼滤波器在singnal processing navigation control etc 应用广泛。

step1 :时间更新(预测predict)

 

  1. 根据状态转移方程得到k时刻的预测值(先验估计值):  X"(k) = AX(k-1|k-1) + Bu(k); 
  2. 预测值(先验估计值)的协方差:P(k|k-1) = AP(k-1|k-1)AT+Q;

step2 :状态更新(校正correct)

  1. 计算误差增益Kalman gain;Kk = P(k|k-1)HT[R+HP(k|k-1)HT]-1,  其中[R+HP(k|k-1)HT]表示新息的协方差,Kalman gain越大,表示预测值对估计值的影响越小,即更相信测量值;
  2. 计算最优估计(后验估计):X(k|k) = X(k-1|k-1) + Kk[Z(k)-HX(k|k-1)],其中Z(k)表示测量值,由观测方程Z(k)=HX(k)可得,这就是我们要到最优估计输出;
  3. 更新最有估计误差矩阵(后验估计协方差):P(k|k) = [I-KkH]P(k|k-1)

 

下面是Kalman filter 仿真程序 using matlab

复制代码
clear all
close all
clc
A=1;
H=1;
x(1)=0;%初始状态
p(1)=1;%后验协方差估计
w1=randn(1,10000);%加速度计白噪声
t=[0.01:0.01:100];
z=sin(10*t)+w1;%加速度计测量值
R=20;%测量协方差矩阵
Q=1;%过程状态协方差矩阵
for k=1:9999 %卡尔曼滤波器滤波过程
    p_(k)=A*p(k)*A'+Q;
    K(k)=p_(k)*H'*inv(H*p_(k)*H'+R);
    x(k+1)=A*x(k)+K(k)*(z(k)-H*A*x(k));
    p(k+1)=(1-K(k)*H)*p_(k);
end

figure(1),clf
plot(t,z,'b')
grid on
axis([3,5,-6,6])
title('仿真加速度计的输出')
xlabel('时间(秒)'),ylabel('仿真加速度计输出(度)')

figure(2),clf
plot(t,x,'b',t,sin(10*t),'r')
grid on
axis([3,5,-6,6])
title('加速度计估计')
legend('加速度计估计值','加速度计真值')
xlabel('时间(秒)'),ylabel('加速度计输出(度)')
复制代码

测量值如下(含有测量造成v(k))

 

滤波效果如下,图中蓝色曲线为估计值

 

参考资料:

[1]https://en.wikipedia.org/wiki/Kalman_filter#Predict

[2]http://blog.csdn.net/xiahouzuoxin/article/details/39582483

posted on   追寻梦想的路  阅读(1065)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示