1、理论部分

上一篇介绍了线性卡尔曼滤波器,当系统为线性高斯模型时,滤波器能给出最优的估计,但是实际系统总是存在不同程度的非线性,如平方、三角关系、开方等。对于非线性系统,可以采用的一种方法是通过线性化方法将非线性系统转换为近似的线性系统,即为EKF,核心思想是:围绕滤波值将非线性函数展开成泰勒级数并略去二阶及以上项,得到一个近似的线性化模型,然后应用卡尔曼滤波完成状态估计。

系统方程

各个变量意义同上一节,其中f和h代表状态和观测的非线性函数。

在扩展卡尔曼滤波中,状态的预测以及观测值的预测由非线性函数计算得出,线性卡尔曼滤波中的状态转移矩阵A阵和观测矩阵H阵由f和h函数的雅克比矩阵代替,假设状态有n维,则求法如下:

有了上面矩阵的计算方法,EKF滤波过程同线性卡尔曼滤波相同,公式如下

2、实践部分

根据图中情景,选取横向位置、速度,纵向位置、速度为状态量,列出下面非线性状态方程及观测方程

根据状态方程和观测方程,计算雅克比矩阵如下

  1. close all;
  2. clear all;
  3. %% 真实轨迹模拟
  4. kx = .01; ky = .05; % 阻尼系数
  5. g = 9.8; % 重力
  6. t = 15; % 仿真时间
  7. Ts = 0.1; % 采样周期
  8. len = fix(t/Ts); % 仿真步数
  9. dax = 3; day = 3; % 系统噪声
  10. X = zeros(len,4);
  11. X(1,:) = [0, 50, 500, 0]; % 状态模拟的初值
  12. for k=2:len
  13. x = X(k-1,1); vx = X(k-1,2); y = X(k-1,3); vy = X(k-1,4);
  14. x = x + vx*Ts;
  15. vx = vx + (-kx*vx^2+dax*randn(1,1))*Ts;
  16. y = y + vy*Ts;
  17. vy = vy + (ky*vy^2-g+day*randn(1))*Ts;
  18. X(k,:) = [x, vx, y, vy];
  19. end
  20. %% 构造量测量
  21. dr = 8; dafa = 0.1; % 量测噪声
  22. for k=1:len
  23. r = sqrt(X(k,1)^2+X(k,3)^2) + dr*randn(1,1);
  24. a = atan(X(k,1)/X(k,3))*57.3 + dafa*randn(1,1);
  25. Z(k,:) = [r, a];
  26. end
  27. %% ekf 滤波
  28. Qk = diag([0; dax/10; 0; day/10])^2;
  29. Rk = diag([dr; dafa])^2;
  30. Pk = 10*eye(4);
  31. Pkk_1 = 10*eye(4);
  32. x_hat = [0,40,400,0]';
  33. X_est = zeros(len,4);
  34. x_forecast = zeros(4,1);
  35. z = zeros(4,1);
  36. for k=1:len
  37. % 1 状态预测
  38. x1 = x_hat(1) + x_hat(2)*Ts;
  39. vx1 = x_hat(2) + (-kx*x_hat(2)^2)*Ts;
  40. y1 = x_hat(3) + x_hat(4)*Ts;
  41. vy1 = x_hat(4) + (ky*x_hat(4)^2-g)*Ts;
  42. x_forecast = [x1; vx1; y1; vy1]; %预测值
  43. % 2 观测预测
  44. r = sqrt(x1*x1+y1*y1);
  45. alpha = atan(x1/y1)*57.3;
  46. y_yuce = [r,alpha]';
  47. % 状态矩阵
  48. vx = x_forecast(2); vy = x_forecast(4);
  49. F = zeros(4,4);
  50. F(1,1) = 1; F(1,2) = Ts;
  51. F(2,2) = 1-2*kx*vx*Ts;
  52. F(3,3) = 1; F(3,4) = Ts;
  53. F(4,4) = 1+2*ky*vy*Ts;
  54. Pkk_1 = F*Pk*F'+Qk;
  55. % 观测矩阵
  56. x = x_forecast(1); y = x_forecast(3);
  57. H = zeros(2,4);
  58. r = sqrt(x^2+y^2); xy2 = 1+(x/y)^2;
  59. H(1,1) = x/r; H(1,3) = y/r;
  60. H(2,1) = (1/y)/xy2; H(2,3) = (-x/y^2)/xy2;
  61. Kk = Pkk_1*H'*(H*Pkk_1*H'+Rk)^-1; %计算增益
  62. x_hat = x_forecast+Kk*(Z(k,:)'-y_yuce); %校正
  63. Pk = (eye(4)-Kk*H)*Pkk_1;
  64. X_est(k,:) = x_hat;
  65. end
  66. %%
  67. figure, hold on, grid on;
  68. plot(X(:,1),X(:,3),'-b');
  69. plot(Z(:,1).*sin(Z(:,2)*pi/180), Z(:,1).*cos(Z(:,2)*pi/180));
  70. plot(X_est(:,1),X_est(:,3), 'r');
  71. xlabel('X');
  72. ylabel('Y');
  73. title('EKF simulation');
  74. legend('real', 'measurement', 'ekf estimated');
  75. axis([-5,230,290,530]);

仿真结果

https://blog.csdn.net/u012936940/article/details/77249245

卡尔曼滤波原理(二):扩展卡尔曼相关推荐

  1. 卡尔曼滤波原理二:扩展卡尔曼

    1.理论部分 上一篇介绍了线性卡尔曼滤波器,当系统为线性高斯模型时,滤波器能给出最优的估计,但是实际系统总是存在不同程度的非线性,如平方.三角关系.开方等.对于非线性系统,可以采用的一种方法是通过线性 ...

  2. 卡尔曼滤波原理详解(二)

    卡尔曼滤波原理详解(二) 前言 卡尔曼增益推导 总结 前言 本文是对卡尔曼滤波学习的记录,主要参照了DR_CAN老师的视频进行学习.视频专栏链接:DR_CAN卡尔曼滤波视频专栏.虽然网上有很多卡尔曼滤 ...

  3. 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)

    文章目录 0.引言及友情链接 1.场景预设 2.扩展卡尔曼滤波器 3.仿真及效果 0.引言及友情链接 \qquad卡尔曼滤波器(Kalman Filter, KF)是传感器融合(Sensor Fusi ...

  4. 说不尽的卡尔曼 | 详解扩展卡尔曼滤波器

    作者 | 火山 编辑 | 空中机器人前沿 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标跟踪]技术交流群 后台回复[卡尔曼滤波] ...

  5. 自动驾驶算法-滤波器系列(一)——详解卡尔曼滤波原理

    详解卡尔曼滤波原理 什么是卡尔曼滤波? 我们能用卡尔曼滤波做什么? 卡尔曼滤波是如何看到你的问题的 使用矩阵来描述问题 外部控制量 外部干扰 用测量量来修正估计值 融合高斯分布 将所有公式整合起来 总 ...

  6. 卡尔曼滤波器、扩展卡尔曼滤波器、无向卡尔曼滤波器的详细推导

    这段时间做轴承故障诊断和预测的时候,需要一个针对已经获取了特征向量的工具来对轴承故障状态进行估计和预测.卡尔曼滤波器可以实现对过去.当前和未来目标位置的估计,所以想通过卡尔曼滤波器的设计思路找到一些灵 ...

  7. 卡尔曼滤波原理及实现

    卡尔曼滤波原理及实现 前一段时间,做项目研究了一下卡尔曼滤波,并且在项目当中实现了一个物体跟踪的功能,所以,借着新鲜劲儿,本次博客对卡尔曼滤波进行一次整理. 卡尔曼滤波是什么 卡尔曼滤波能做什么 卡尔 ...

  8. 卡尔曼滤波原理详解(一)

    卡尔曼滤波原理详解(一) 前言 数据融合的思想 例子引入 卡尔曼增益推导 前言 本文是对卡尔曼滤波学习的记录,主要参照了DR_CAN老师的视频进行学习.视频专栏链接:DR_CAN卡尔曼滤波视频专栏.虽 ...

  9. 卡尔曼滤波原理及c++实现

    卡尔曼滤波原理及c++实现 滤波原理 卡尔曼滤波是一种最优估计算法. 用处:1)利用可测量值估算无法测量的量.2)对有测量噪声的物理量进行估计.常用于制导和导航.计算机视觉等. 状态估计器 卡尔曼滤波 ...

最新文章

  1. 【IM】关于支持向量机分类的理解
  2. Centos7安装防火墙firewall
  3. 蓝桥杯历届试题 国王的烦恼(并查集逆序加边+坑)
  4. MM夏天化妆不掉妆的技巧
  5. SSH(Secure Shell) 介绍一
  6. 成功驱动5150用HT68F30
  7. ubuntu tomcat上传目录权限_等了 3 年,Ubuntu Studio 终于有权限上传更新包
  8. 基于 Tracing 数据的拓扑关系生成原理
  9. 王国权辞任中国电信股份有限公司执行副总裁
  10. python打造个性化ai_人工智能GIS技术篇——打造GeoAI个性化应用,你需要人工智能GIS流程工具...
  11. 两个iOS应用之间的跳转
  12. ICPC China Nanchang National Invitational -- D. Match Stick Game(dp)
  13. 数据包接收系列 — 上半部实现(网卡驱动)
  14. python 快速排名发包_2019年SEO快速排名发包技术及原理 - 立金哥
  15. 网安学习-应急响应1
  16. Mac桌面动态壁纸Dynamic Wallpaper for Mac
  17. 琢磨事琢磨人琢磨钱,成大事也!
  18. C/C++程序的内存开辟
  19. 贝尔曼算法队列优化(SPFA)
  20. 蓝牙认证,蓝牙BQB认证,蓝牙BQB测试内容,蓝牙BQB认证多少钱?蓝牙BQB认证流程

热门文章

  1. DreamFactory 第9章 性能注意事项
  2. 容器编排技术 -- Kubernetes 为 Namespace 配置CPU和内存配额
  3. MYSQL性能查看(命中率,慢查询)
  4. Docker上部署MySQLCluster(基于mysql/mysql-cluster镜像)
  5. Pipe——高性能IO(二)
  6. shell变量$$,$!,$?,$*,$0,$1,$#,$@的含义解释
  7. 【C语言】输入5个整数并按输入顺序逆序输出
  8. C#开发笔记之15-如何用C#获取某月最大天数?
  9. web表单设计:点石成金_如何设计安全的Web表单:验证,清理和控制
  10. web开发方法_确保进入Web开发的最快方法