Bayes++ Library入门学习之熟悉class-Bayesian_filter_base(2)
前面我们已经熟悉了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)的更多相关文章
- Bayes++ Library入门学习之熟悉class-Bayesian_filter_base(1)
在对Bayes++库的名称空间有了一个大概的了解之后,我们开始学习该名称空间下的第一个子类Bayesian_filter::Bayes_filter_base. 该类与其子类的继承关系图如下图所示. ...
- Bayes++ Library入门学习之熟悉UKF相关类
UKF-SLAM是一种比较流行SLAM方案.相比EKF-SLAM,UKF利用unscented transform代替了EKF的线性化趋近,因而具有更高的精度.Bayes++库中的unsFlt.hpp ...
- Bayes++ Library入门学习之熟悉namespace
Bayes++是一个开源的C++类库.这些类表示并实现了用于离散系统的贝叶斯滤波的各种数值算法.该库中的类提供测试和一致的数值方法,并且用层次明确的结构表明了各种滤波算法和系统模型类型. 接下来,我们 ...
- Bayes++ Library入门学习之熟悉class-Importance_resampler
接下来,需要介绍的是重要性重采样类Bayesian_filter::Improtance_resampler.该类实现了两种重采样方法[1][2],和其子类的继承关系图如下: 其中Standard_r ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- SCARA——OpenGL入门学习一、二
参考博客:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 简介 最近开始一个机械手臂的安装调试,平面关节型机器人又称SCA ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
- 转 iOS Core Animation 动画 入门学习(一)基础
iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...
- Aho-Corasick算法、多模正则匹配、Snort入门学习
希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...
随机推荐
- LA 6437 Power Plant (prim最小生成树)
还是裸的最小生成树 #include<bits/stdc++.h> using namespace std; int T,N,M,P,K,a,b,c; int dist[1020],m[1 ...
- CreateProcess
#include <Windows.h> //WINBASEAPI //BOOL //WINAPI //CreateProcessW( //_In_opt_ LPCWSTR lpAppli ...
- awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)
Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...
- C#~异步编程再续~你必须要知道的ThreadPool里的throw
问题依旧存在 之前写过相关文章异步编程的文章,本文主要还是一点补充,之前在IIS经常发w3wp进程无做挂了的情况,但一直没能找到真正的原因,而查找相关资料,找了一些相关的文章,如await和async ...
- 手工清理win7系统C盘的技巧
在我们日常使用电脑的过程中,随着使用的时候越久,大家就会发现电脑的运行速度变的越慢了,大家都知道很多系统东西一般都会安装在C盘,系统在运行的时候就会不断的产生垃圾文件以及其他我们根本用不到的文件,这样 ...
- sublime text3前端常用插件
安装Package Control 在安装插件之前,需要让sublime安装Package Control.打开Sublime Text的控制台,快捷键ctrl + ~,在控制台中输入以下代码. im ...
- lsof 命令简介
losf 命令可以列出某个进程打开的所有文件信息.打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域So ...
- 函数式编程-只用"表达式",不用"语句"()
把函数当作普通的运算符使用. 2. 只用"表达式",不用"语句"() "表达式"(expression)是一个单纯的运算过程,总是有返回值: ...
- SpringBoot学习笔记(13)----使用Spring Session+redis实现一个简单的集群
session集群的解决方案: 1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomcat/ ...
- jQuery第三课 点击按钮 弹出层div效果
jQuery 事件方法 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件. 触发实例: $("button#demo").click() 上面的例子将触发 id= ...