前面我们已经熟悉了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. spark学习及环境配置

    http://dblab.xmu.edu.cn/blog/spark/ 厦大数据库实验室博客 总结.分享.收获 实验室主页 首页 大数据 数据库 数据挖掘 其他 子雨大数据之Spark入门教程  林子 ...

  2. 51nod-1253: Kundu and Tree

    [传送门:51nod-1253] 简要题意: 给出一棵n个点的树,树上的边要么为黑,要么为红 求出所有的三元组(a,b,c)的数量,满足a到b,b到c,c到a三条路径上分别有至少一条红边 题解: 显然 ...

  3. transient修饰符的作用

    transient修饰符的作用: entity实体类: package com.baidu.entity; import com.fasterxml.jackson.annotation.JsonIg ...

  4. PostgreSQL 事务管理的MVCC

    PostgreSQL的并发控制机制同时实现了多版本控制MVCC协议和两阶段封锁协议.实际采用哪种协议取决于所执行的语句类型. DML语句的并发控制将使用MVCC协议: DDL语句的并发控制基于标准的两 ...

  5. Ubuntu 14.04下从源码安装qt4.x

    转自:http://www.cnblogs.com/crazywangzx/p/3505293.html 1.到官网http://qt-project.org/downloads或者ftp://ftp ...

  6. C语言-100加减求和

    ----------------------------度娘的思路------------------------------------------------------ Action() { / ...

  7. Js jquery常用的身份证号码 邮箱电话等验证

    刷了很多博客,https://www.cnblogs.com/hao-1234-1234/p/6636843.html 只有这个比较靠谱.

  8. 数字游戏(string的sort的应用)

    题目描述 牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的 ...

  9. HDU-5009 Paint Pearls 动态规划 双向链表

    题目链接:https://cn.vjudge.net/problem/HDU-5009 题意 给一串序列,可以任意分割多次序列,每次分割的代价是被分割区间中的数字种数. 求分割区间的最小代价.n< ...

  10. CF451E Devu and Flowers (组合数学+容斥)

    题目大意:给你$n$个箱子,每个箱子里有$a_{i}$个花,你最多取$s$个花,求所有取花的方案,$n<=20$,$s<=1e14$,$a_{i}<=1e12$ 容斥入门题目 把取花 ...