threed_odometry
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
threed_odometry::IIR< _Order, _DataDimension > Class Template Reference

Implements an Infinite Impulse Response filter with order _Order specified as template parameters and _DataDimension is the Dimension of the data to filter (1-D, 2-D, 3-D, etc..) More...

#include <IIR.hpp>

Public Member Functions

 IIR (const Eigen::Matrix< double, _Order+1, 1 > &b, const Eigen::Matrix< double, _Order+1, 1 > &a)
 Constructor. More...
 
Eigen::Matrix< double, _DataDimension, 1 > perform (const Eigen::Matrix< double, _DataDimension, 1 > &data)
 
Eigen::Matrix< double, _DataDimension, 1 > perform (const Eigen::Matrix< double, _DataDimension, 1 > &data, Eigen::Matrix< double, _DataDimension, _DataDimension > &dataCov, const bool covariance=true)
 

Protected Member Functions

Eigen::Matrix< double, _DataDimension, 1 > iirFilter (const Eigen::Matrix< double, _Order+1, 1 > &b, const Eigen::Matrix< double, _Order+1, 1 > &a, const Eigen::Matrix< double, _DataDimension, _Order+1 > &x, Eigen::Matrix< double, _DataDimension, _Order+1 > &y)
 IIR filter. More...
 
Eigen::Matrix< double, _DataDimension, _DataDimension > iirFilterCov (const Eigen::Matrix< double, _DataDimension,(_Order+1)*_DataDimension > &bMatrix, const Eigen::Matrix< double, _DataDimension,(_Order+1)*_DataDimension > &aMatrix, const Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > &xCov, Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > &yCov)
 IIR filter Cov. More...
 

Protected Attributes

Eigen::Matrix< double, _Order+1, 1 > bCoeff
 
Eigen::Matrix< double, _Order+1, 1 > aCoeff
 
Eigen::Matrix< double, _DataDimension, _Order+1 > originalData
 
Eigen::Matrix< double, _DataDimension, _Order+1 > filteredData
 
Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > originalDataCov
 
Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > filteredDataCov
 
Eigen::Matrix< double, _DataDimension,(_Order+1)*_DataDimension > bMatrix
 
Eigen::Matrix< double, _DataDimension,(_Order+1)*_DataDimension > aMatrix
 
Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > crossCov
 

Detailed Description

template<unsigned int _Order, unsigned int _DataDimension>
class threed_odometry::IIR< _Order, _DataDimension >

Implements an Infinite Impulse Response filter with order _Order specified as template parameters and _DataDimension is the Dimension of the data to filter (1-D, 2-D, 3-D, etc..)

Constructor & Destructor Documentation

template<unsigned int _Order, unsigned int _DataDimension>
threed_odometry::IIR< _Order, _DataDimension >::IIR ( const Eigen::Matrix< double, _Order+1, 1 > &  b,
const Eigen::Matrix< double, _Order+1, 1 > &  a 
)
inline

Constructor.

Parameters
[in]bthe feedforward filter coefficients
[in]athe feedback filter coefficients

Form the matrix A and B of the coefficients (Only used for the uncertainty propagation)

1 x _Order+1 row

The element for the a[0] is a zero matrix, because this is the value it is calculated by the IIR filter

Member Function Documentation

template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, 1> threed_odometry::IIR< _Order, _DataDimension >::iirFilter ( const Eigen::Matrix< double, _Order+1, 1 > &  b,
const Eigen::Matrix< double, _Order+1, 1 > &  a,
const Eigen::Matrix< double, _DataDimension, _Order+1 > &  x,
Eigen::Matrix< double, _DataDimension, _Order+1 > &  y 
)
inlineprotected

IIR filter.

Infinite Impulse Response (IIR) Filter for an Eigen Vector

Author
Javier Hidalgo Carrio.
Parameters
[in]norderinteger number with the filter order
[in]barray of feedforward filter coefficients
[in]aarray of feedback filter coefficients
[in]xarray of inputs
[in,out]yarray of outputs
Returns
double with the result y[n]

Perform the filter

template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, _DataDimension> threed_odometry::IIR< _Order, _DataDimension >::iirFilterCov ( const Eigen::Matrix< double, _DataDimension,(_Order+1)*_DataDimension > &  bMatrix,
const Eigen::Matrix< double, _DataDimension,(_Order+1)*_DataDimension > &  aMatrix,
const Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > &  xCov,
Eigen::Matrix< double,(_Order+1)*_DataDimension,(_Order+1)*_DataDimension > &  yCov 
)
inlineprotected

IIR filter Cov.

Infinite Impulse Response (IIR) Filter for the Cov Matrix of the data

Author
Javier Hidalgo Carrio.
Parameters
[in]norderinteger number with the filter order
[in]barray of feedforward filter coefficients
[in]aarray of feedback filter coefficients
[in]xarray of inputs
[in,out]yarray of outputs
Returns
double with the result y[n]
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, 1> threed_odometry::IIR< _Order, _DataDimension >::perform ( const Eigen::Matrix< double, _DataDimension, 1 > &  data)
inline

Peform the filter calling the protected method of the class

Parameters
[in]datavector of dimension _DataDimension of the new sample.
Returns
filtered data
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, 1> threed_odometry::IIR< _Order, _DataDimension >::perform ( const Eigen::Matrix< double, _DataDimension, 1 > &  data,
Eigen::Matrix< double, _DataDimension, _DataDimension > &  dataCov,
const bool  covariance = true 
)
inline

Peform the filter calling the protected method of the class

Parameters
[in]datavector of dimension _DataDimension of the new sample.
Returns
filtered data

Copy the new data samples to the array for filtering

Perform the IIR filter with the designed coefficients

Compute the uncertainty propagation if set to true

Check if NaN values in the matrix

Copy the cov matrix for the data samples

Move back one block for the next filter iteration

Move back one column for the next filter iteration

Member Data Documentation

template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _Order+1, 1> threed_odometry::IIR< _Order, _DataDimension >::aCoeff
protected
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, (_Order+1)*_DataDimension> threed_odometry::IIR< _Order, _DataDimension >::aMatrix
protected
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _Order+1, 1> threed_odometry::IIR< _Order, _DataDimension >::bCoeff
protected

Coefficients of a polinomia of order _Order IIR filter Coefficients

template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, (_Order+1)*_DataDimension> threed_odometry::IIR< _Order, _DataDimension >::bMatrix
protected
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, (_Order+1)*_DataDimension, (_Order+1)*_DataDimension> threed_odometry::IIR< _Order, _DataDimension >::crossCov
protected
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, _Order+1> threed_odometry::IIR< _Order, _DataDimension >::filteredData
protected
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, (_Order+1)*_DataDimension, (_Order+1)*_DataDimension> threed_odometry::IIR< _Order, _DataDimension >::filteredDataCov
protected
template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, _DataDimension, _Order+1> threed_odometry::IIR< _Order, _DataDimension >::originalData
protected

Data values for original and filtered measurements

template<unsigned int _Order, unsigned int _DataDimension>
Eigen::Matrix<double, (_Order+1)*_DataDimension, (_Order+1)*_DataDimension> threed_odometry::IIR< _Order, _DataDimension >::originalDataCov
protected

Variables for the uncertainty propagation through an IIR filter (is your original data has uncertainty)


The documentation for this class was generated from the following file: