前面我们已经熟悉了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. 如何使用scss/sass

    SCSS 与 Sass 异同:http://sass.bootcss.com/docs/scss-for-sass-users/: 欢迎加入前端交流群来py: 转载请标明出处! 废话不多说,直接进入正 ...

  2. CentOS7系统安装完MySQL后启动MySQL提示无服务

    重新安装MariaDB数据库即可解决,MySQL所有命令可通用 MariaDB MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,开发这个分支的原因之一是:甲骨文公司收购了My ...

  3. gist.github.com

    hosts添加:192.30.253.118 gist.github.com

  4. 正则表达式匹配 C++实现 java实现 leetcode系列(十一)

    给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串  ...

  5. SSIS获取Oracle数据库数据

    获取Oracle数据库步骤如下: 1.目标服务器获取连接Oracle数据库权限2.安装Oracle客户端,名称为win32_11gR2_client 安装管理员版本的.3.将配置文件tnsnames. ...

  6. SharePoint 使用Expression Web 设计网站

    创建好网站以后可就可以开始发布了 possible causes : 1.The web server may not hava the FrontPage Server Extensions ins ...

  7. activity(工作流)初步学习记录

    1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期 ...

  8. STM8S103之中断优先级设置

    STM8S的中断由中断控制器(ITC)控制.STM8所有IO都支持中断,分为PA~PE 5个组,每组IO对应一个中断服务函数(也就是每组IO只有一个向量).STM8没有专门的中断状态寄存器,所以只能通 ...

  9. BZOJ2161: 布娃娃 整体二分

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...

  10. 【BZOJ4444】国旗计划 - 决策单调性

    Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边 ...