本文承接 白色巧克力亦唯心的博文卡尔曼滤波 -- 从推导到应用(二) 写一些修正和理解总结

刚刚步入机器人定位导航领域,内有感性理解,如有纰缪请指正,仅供交流。非常感谢白色巧克力亦唯心的总结与分享。精彩的博文,巨大的阅读量,对相关领域的蓬勃发展,将来可以说一句居功至伟。

卡尔曼滤波 -- 从推导到应用(一)公式推导细致入微。

卡尔曼滤波 -- 从推导到应用(二)例子承接(一),分析的很好,但有如下问题。

1、真实值并不是x,x是预测值。

真实值应该是:

xr=1/2*g*t.^2+Qn(int32(t/delta_t+1));%真实位置。其中数组Qn是每一个delta_t 的累计误差。每一次delta_t的噪声服从正态分布,均值为p,方差为q。

2、测量更新里测量的结果是真实值+测量噪声所以应该是:

z = xr +s+ r.*randn(1,N); % 测量时加入测量噪声。噪声R服从均值s,方差r的正态分布。

所以为了更真实地仿真滤波情景,代码修改后如下:

clc
clear all  ;
close all  ;%% 初始化参数
delta_t=0.1;   %采样时间
t=0:delta_t:10;
N = length(t); % 序列的长度
sz = [2,N];    % 信号需开辟的内存空间大小  2行*N列  2:为状态向量的维数n
g=10;          %加速度值
p = 0;         %期望u
q = 10;      %方差sigma
s = 2;        %期望
r = 5;        %方差sigma
Q =[q 0;0 0]; %假设建立的模型  噪声方差叠加在位移上 大小为n*n方阵 n=状态向量的维数
R = r;    % 位置测量方差估计,可以改变它来看不同效果  m*m      m=z(i)的维数
%%
A=[1 delta_t;0 1];  % n*n
B=[1/2*delta_t^2;delta_t];
H=[1,0];            % m*n  n=size(Q);  %n为一个1*2的向量  Q为方阵
m=size(R);  % 分配空间
P=zeros(n);           % 后验方差估计  n*n
P(1) = 3.6603;%%           构造系统误差数组Qn,下标n为每一时刻点的累计误差p+q*randn~Z(p,q)
Qn = zeros(1,N);
%%Statistics and Machine Learning Toolbox
Qn(1) = q*randn;
for i=2:1:NQn(i) = Qn(i-1) + q*randn;
end
%%x=1/2*g*t.^2;      %预测位置
xr=1/2*g*t.^2+Qn(int32(t/delta_t+1));%真实位置
%z = x + sqrt(10).*randn(1,N); % 测量时加入测量白噪声
z = xr +s+ r.*randn(1,N); % 测量时加入测量白噪声                                     %%xhat=zeros(sz);       % x的后验估计
xhatminus=zeros(sz);  % x的先验估计
Pminus=zeros(n);      % n*n
K=zeros(n(1),m(1));   % Kalman增益  n*m
I=eye(n);  %% 估计的初始值都为默认的0,即P=[0 0;0 0],xhat=0
for k = 9:N           %假设车子已经运动9个delta_T了,我们才开始估计  % 时间更新过程  xhatminus(:,k) = A*xhat(:,k-1)+B*g;  Pminus= A*P*A'+Q  % 测量更新过程  K = Pminus*H'*inv( H*Pminus*H'+R )  xhat(:,k) = xhatminus(:,k)+K*(z(k)-H*xhatminus(:,k));  P = (I-K*H)*Pminus
end
%%
figure(1)
plot(t,z);
hold on
plot(t,xhat(1,:),'r-')
plot(t,x(1,:),'k-');
hold on
plot(t,xr(1,:),'g-');
legend('含有噪声的测量', '后验估计', '独立预测值','真值');
xlabel('Iteration');

结果是这个样子的(每一次运行不一样,因为噪声是随机的):

我们说卡尔曼滤波的问题实际上是预测和测量我们更相信谁的问题。这样说很好理解,但这是一个静态的理解。

实际上卡尔曼滤波是一个动态的过程。

预测,有误差分布Q

测量,有误差分布R

真值 =预测-Q

真值 =测量-R

无论是预测还是测量,每一步都是

预测(测量-R)+Q

测量(预测-Q)

一定要理解:

每一波测量都在前一步的预测和测量的基础上,而不是孤立的测量。

每一步的预测是基于前一步的预测和测量,而不是孤立的预测。如matlab曲线中的独立预测值曲线。

每一步的测量测量的是真实值也就是测的是上一步的预测-Q,所以测量不是孤立的。所以我们看到后验曲线在测量曲线周围而不在孤立的预测值曲线周围。

下面回答一下文章的标题。

数学角度:(公式摘自白色巧克力亦唯心 卡尔曼滤波 -- 从推导到应用(一))

我们该相信谁?那么我们来求K吧。从贝叶斯估计的理念讲,权重,这一步就是表示这个权重,该相信谁多少。

怎么求K?求K使得估计值与真实值的最小均方差最小。

详细推导见 白色巧克力亦唯心 卡尔曼滤波 -- 从推导到应用(一)。

一开始要假定一个P的初值,相当于我们一开始先假定该相信谁多少。后面的每一步迭代实际上就是根据由两个噪声分布得到的数据去计算K。最终K,P,Pminus都收敛了(在本模型下,其它未知模型请自行验证,感悟)。

这个收敛的值就是我们应该相信谁的一个权重。下面结合上面的代码看一下输出值:

设置 P(1) =10 :

Pminus =

20     0
     0     0

K =

0.8000
         0

P =

4.0000         0
         0         0

Pminus =

14     0
     0     0

K =

0.7368
         0

P =

3.6842         0
         0         0

Pminus =

13.6842         0
         0         0

K =

0.7324
         0

P =

3.6620         0
         0         0

Pminus =

13.6620         0
         0         0

K =

0.7321
         0

P =

3.6604         0
         0         0

Pminus =

13.6604         0
         0         0

K =

0.7321
         0

P =

3.6603         0
         0         0

Pminus =

13.6603         0
         0         0

K =

0.7321
         0

P =

3.6603         0
         0         0

一开始就设置p(1) =3.6603:

Pminus =

13.6603         0
         0         0

K =

0.7321
         0

P =

3.6603         0
         0         0

Pminus =

13.6603         0
         0         0

K =

0.7321
         0

P =

3.6603         0
         0         0

从一开始就把收敛值带入那么从一开始就收敛。

小结:

按照我的理解(刚入职,工作原因暂未查询资料验证,仅供交流),如果预测的噪声分布Q和测量的噪声分布R确定,那么该相信谁更多,K从一开始就是客观存在的,是确定的。而预测更新和测量更新,其实是一个通过迭代去得到这个确定的K值的过程。 方法就是求K使得 每次迭代的  估计值与真实值的最小均方差最小 。

那么既然该相信谁更多实际上是确定的,那么如果测量过程中出现高斯分布边缘的小概率的大误差卡尔曼滤波能否有效降低这个大的误差?

答案应该是否定的。 我们最终将以同样的收敛的K的权重去相信两者,所以误差是与测量误差成线性关系的。

更相信谁与单个样本点无关,只与系统噪声和测量噪声的分布有关。

所以,卡尔曼滤波可以通过预测对测量进行优化,但是对于大的测量(如大的距离的匹配失准)是无能为力的。所以我们可以用卡尔曼滤波做优化,但是对于可能出现的大的误差或者说错误,需要想别的办法特殊处理。




												

卡尔曼滤波 预测与测量我们更应该相信谁?相关推荐

  1. 《多核与GPU编程:工具、方法及实践》----1.5 并行程序性能的预测与测量

    本节书摘来自华章出版社<多核与GPU编程:工具.方法及实践>一书中的第1章,第1.5节, 作 者 Multicore and GPU Programming: An Integrated ...

  2. 天气传感器的预测:晴天,准确度更高

    比如"天气传感器",温度和气压传感器就会出现在脑海中.鲜为人知的是,许多其他新的基于传感器的应用程序和方法可以利用.利用和分析数据,这些数据对各种行业的天气预报变得至关重要. 例如 ...

  3. 卡尔曼滤波预测matlab,卡尔曼滤波Matlab示例

    % 在二维空间,假设运动物体的一组运动数据,用卡尔曼滤波方法进行处理,两点起始法 % 实验室的博客 clear; % 1.1. 实际和测量的运动数据,线性运动 % rx = 0:0.1:10; %x方 ...

  4. 中国各城市首轮感染高峰期预测!(最新更新版)

  5. matlab做卡尔曼滤波预测,求Matlab卡尔曼滤波预测股票价格的程序

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%% ...

  6. 在游戏上第3部分完美的信息游戏

    Previous article 上一篇文章 The economics literature distinguishes the quality of a game's information (p ...

  7. KF算法学习(一):算法原理与推导

    学习过程中接触到了卡尔曼滤波,因为自己的数学渣属性,特地把自己的推导过程记录下来以加深理解,虽然有重复造轮子的嫌疑.. 推导公式过多,图方便自己用的office写的文档,后来发现打算上传到博客上时很无 ...

  8. 【广告技术】用张量分解预测广告库存,广告投放更可靠!

    [Wiztalk腾讯广告专场]系列分享来袭,第二期由中国科学技术大学计算机学院.特任教授张兰老师为大家深度介绍 <基于大规模数据张量分解的广告库存预估>. "下个月会有多少用户看 ...

  9. 哪些NPM仓库更易遭供应链攻击?研究员给出了预测指标

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

最新文章

  1. Windows中的tree命令不可用的解决办法
  2. 序列化和反序列化(转)
  3. word-breakword-wrap
  4. linux重启kvm服务命令,linux中kvm的安装及快照管理
  5. pandas之时间数据
  6. node中的数据持久化
  7. Html5添加audio音频播放器插件教程
  8. Outlook收件箱无法看到新邮件而OWA的收件箱可以
  9. 计算机怎么新建word文档,右键新建没有word文档怎么办?Win10新建word文档的方法...
  10. java宠物商店_Java实现宠物商店管理系统
  11. 警惕!关于5G的最新骗局!
  12. UTC、格林威治时间、本地时间
  13. 绕坐标轴以及任意轴的旋转矩阵的推导
  14. 机器学习实战—逻辑回归—信用卡欺诈检测
  15. 计算机快捷键大全常见的,电脑快捷键大全_计算机常用技巧
  16. Markdown+取数函数 让你的数据活起来
  17. 制造业的一般生产流程
  18. MTK样机抓取log
  19. 合并两个或者多个select结果集
  20. 用好WordPress不可不知的函数(转)

热门文章

  1. Spring事务传播特性实例解析(以及如何使用注解形式事务)
  2. 阿里物联网套件在laravel框架中的使用--第一弹
  3. Linux内核TSS的使用
  4. 运用广告监测系统,上海发布十二起违法广告典型案例-十目监测
  5. coffeescript使用的方式汇总
  6. Testin云测:从双11看淘宝京东暗战移动电商
  7. 非常好看的二次元导航源码
  8. 内网渗透-Linux权限维持
  9. The fifth day
  10. matlab里H是什么,matlab 中 hObject和handles区别