前面我们已经熟悉了Bayesian_filter::Bayes_filter_base和其子类的击继承关系,接下来我们开始学习该类的实现。

bayesFlt.hpp文件为其实现主体,首先是两个常规的头文件,一个是异常处理类型相关的,另一个是支持矩阵的头文件。

#include "bayesException.hpp"   // exception types
#include "matSupSub.hpp" // matrix support subsystem

接着,所有的声明和定义全部都在namespace Bayseian_filter内部。在Bayes++库中,一般将Bayesian_filter_matrix以别名的形式使用

namespace FM = Bayesian_filter_matrix;

接着定义了一个抽象预测模型,该预测模型用来参数化滤波器中的预测函数

class Predict_model_base : public Bayes_base
{
// Empty
};

高斯预测模型,x(k|k-1) = x(k-1|k-1)) + G(k)w(k),其中q(k)是状态噪声协方差,即w(k)的协方差,G(k)表示状态噪声耦合

class Gaussian_predict_model : virtual public Predict_model_base
{
public:
Gaussian_predict_model (std::size_t x_size, std::size_t q_size); FM::Vec q; // Noise variance (always dense, use coupling to represent sparseness)
FM::Matrix G; // Noise Coupling Numerical_rcond rclimit;
// Reciprocal condition number limit of linear components when factorised or inverted
};

  线性化预测模型,x(k|k-1) = f(x(k-1|k-1),Fx(x(k-1|k-1)表示函数fx相对于状态x的雅各比矩阵

class Linrz_predict_model : public Additive_predict_model
{
public:
Linrz_predict_model (std::size_t x_size, std::size_t q_size);
FM::Matrix Fx; // Model
};

  抽象量测模型,量测模型被用来参数化滤波器的量测函数

class Observe_model_base : public Bayes_base
{
// Empty
};

  Kalman状态滤波器,线性滤波器被表示成均值和协方差两个元素;概率性分布用状态向量x和协方差矩阵X表示。一般状态x的size假设为常量,

class Kalman_state_filter : public State_filter
{
public:
FM::SymMatrix X; // state covariance Kalman_state_filter (std::size_t x_size);
/* Initialise filter and set constant sizes
*/ /* Virtual functions for filter algorithm */ virtual void init () = ;
/* Initialise from current state and state covariance
Requires x(k|k), X(k|k)
*/
void init_kalman (const FM::Vec& x, const FM::SymMatrix& X);
/* Initialise from a state and state covariance
Parameters that reference the instance's x and X members are valid
*/
virtual void update () = ;
/* Update filters state and state covariance
Updates x(k|k), X(k|k)
*/ // Minimum allowable reciprocal condition number for PD Matrix factorisations
Numerical_rcond rclimit;
};

  线性化滤波器模型,其中滤波器预测步骤使用了Linrz_predict_model来获取一个雅各比矩阵Fx和添加的噪声

class Linrz_filter : virtual public Bayes_filter_base
{
public:
/* Virtual functions for filter algorithm */ virtual Float predict (Linrz_predict_model& f) = ;
/* Predict state using a Linrz model
Requires x(k|k), X(k|k) or internal equivilent
Returns: Reciprocal condition number of primary matrix used in predict computation (1. if none)
*/ virtual Float observe (Linrz_uncorrelated_observe_model& h, const FM::Vec& z) = ;
virtual Float observe (Linrz_correlated_observe_model& h, const FM::Vec& z) = ;
/* Observation z(k) and with (Un)correlated observation noise model
Requires x(k|k), X(k|k) or internal equivalent
Returns: Reciprocal condition number of primary matrix used in observe computation (1. if none)
*/
};

  EKF的量测的实现使用了量测模型的非线性部分和线性化量测模型的线性部分得到

class Extended_kalman_filter : public Linrz_kalman_filter
{
protected:
Extended_kalman_filter() : Kalman_state_filter() // define a default constructor
{}
public:
virtual Float observe (Linrz_uncorrelated_observe_model& h, const FM::Vec& z);
virtual Float observe (Linrz_correlated_observe_model& h, const FM::Vec& z);
/* Observation z(k) and with (Un)correlated observation noise model
Requires x(k|k), X(k|k) or internal equivalent
Returns: Reciprocal condition number of primary matrix used in observe computation (1. if none)
Default implementation simple computes innovation for observe_innovation
*/ virtual Float observe_innovation (Linrz_uncorrelated_observe_model& h, const FM::Vec& s) = ;
virtual Float observe_innovation (Linrz_correlated_observe_model& h, const FM::Vec& s) = ;
/* Observation innovation s(k) and with (Un)correlated observation noise model
Requires x(k|k), X(k|k) or internal equivalent
Returns: Reciprocal condition number of primary matrix used in observe computation (1. if none)
*/
};

  至此,我们将常用的几个模型基类进行了简单的说明。

Bayes++ Library入门学习之熟悉class-Bayesian_filter_base(2)的更多相关文章

  1. Bayes++ Library入门学习之熟悉class-Bayesian_filter_base(1)

    在对Bayes++库的名称空间有了一个大概的了解之后,我们开始学习该名称空间下的第一个子类Bayesian_filter::Bayes_filter_base. 该类与其子类的继承关系图如下图所示. ...

  2. Bayes++ Library入门学习之熟悉UKF相关类

    UKF-SLAM是一种比较流行SLAM方案.相比EKF-SLAM,UKF利用unscented transform代替了EKF的线性化趋近,因而具有更高的精度.Bayes++库中的unsFlt.hpp ...

  3. Bayes++ Library入门学习之熟悉namespace

    Bayes++是一个开源的C++类库.这些类表示并实现了用于离散系统的贝叶斯滤波的各种数值算法.该库中的类提供测试和一致的数值方法,并且用层次明确的结构表明了各种滤波算法和系统模型类型. 接下来,我们 ...

  4. Bayes++ Library入门学习之熟悉class-Importance_resampler

    接下来,需要介绍的是重要性重采样类Bayesian_filter::Improtance_resampler.该类实现了两种重采样方法[1][2],和其子类的继承关系图如下: 其中Standard_r ...

  5. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  6. SCARA——OpenGL入门学习一、二

    参考博客:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 简介 最近开始一个机械手臂的安装调试,平面关节型机器人又称SCA ...

  7. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  8. 转 iOS Core Animation 动画 入门学习(一)基础

    iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...

  9. Aho-Corasick算法、多模正则匹配、Snort入门学习

    希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...

随机推荐

  1. hdu 2604 Queuing (矩阵高速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  2. HTML5客户端数据存储机制Web Storage和Web SQL Database

    引言 html5本地存储可以选择两种方式,一种是本地存储,一种是sqlite. 比如开发html5的购物车功能,就可以考虑选择其中之一,进行本地存储与操作. 又或者保存用户登录信息,可以使用local ...

  3. html 移动端关于长按图片弹出保存问题

    在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...

  4. (转载)RecyclerView之ItemDecoration由浅入深

    RecyclerView之ItemDecoration由浅入深 作者 小武站台 关注 2016.09.19 18:20 字数 1155 阅读 10480评论 15喜欢 91赞赏 3 译文的GitHub ...

  5. sql 分割日期

    datename(Year,CreateTime)   ==2017 datename(Month,CreateTime)   7 1.获取星期(显示中文如:星期一) Select DateName( ...

  6. MyEclipse 启动之 java.lang.RuntimeException: No application id has been

    found. 今天公司刚买来一台服务器,配置安装 java 开发环境的时候,MyEclipse 无法启动,查看日志文件之后,具体错误信息 如下: [java] view plaincopyprint? ...

  7. 浅谈Android和IOS系统的差异

    总结:事件响应级别.GPU加速.进程前后台.代码运行速度.内存管理机制. 进程管理机制.内存管理机制.cpu效率.GPU加速.事件响应级别. 1.    渲染机制不同 IOS的UI渲染采用实时优先级, ...

  8. SpringCloud学习笔记(7)----Spring Cloud Netflix之负载均衡-Ribbon的深入理解

    1. 注解@LoadBalanced 作用:识别应用名称,并进行负载均衡. 2. 入口类:LoadBalancerAutoConfiguration 说明:类头上的注解可以知道Ribbon 实现的负载 ...

  9. 2017-2-10 bash基础脚本

    练习:写一脚本,实现如下功能: 1.让用户通过键盘输入一个用户名,如果用户不存在就退出: 2.如果其UID等于其GID,就说它是个"good guy" 3.否则,就说它是个“bad ...

  10. Session与Token认证机制 前后端分离下如何登录

     字号 1 Web登录涉及到知识点 1.1 HTTP无状态性 HTTP是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的 ...