Lodestar
An integrated real-time control package in C++
TransferFunction.hpp
1 //
2 // Created by Hamza El-Kebir on 4/18/21.
3 //
4 
5 #ifndef LODESTAR_TRANSFERFUNCTION_HPP
6 #define LODESTAR_TRANSFERFUNCTION_HPP
7 
8 #include "SystemStateless.hpp"
9 #include "StateSpace.hpp"
10 #include "DiscreteStateSpace.hpp"
11 #include "Lodestar/analysis/BilinearTransformation.hpp"
12 #include "Lodestar/LodestarErrors.hpp"
13 
14 #include <Eigen/Dense>
15 
16 #ifdef LS_USE_GINAC
17 
18 #include <ginac/ginac.h>
19 
20 #undef Mutable
21 
22 #endif
23 
24 namespace ls {
25  namespace systems {
27  public:
31  TransferFunction() : num_(Eigen::MatrixXd::Ones(1, 1)),
32  den_(Eigen::MatrixXd::Ones(1, 1))
33  {}
34 
40  TransferFunction(const TransferFunction &other);
41 
52  TransferFunction(const Eigen::MatrixXd &num,
53  const Eigen::MatrixXd &den) : num_(num), den_(den)
54  {}
55 
61  Eigen::MatrixXd getNum() const;
62 
68  void setNum(const Eigen::MatrixXd &num);
69 
75  long getNumDegree() const;
76 
82  Eigen::MatrixXd getDen() const;
83 
89  void setDen(const Eigen::MatrixXd &den);
90 
96  long getDenDegree() const;
97 
101  void normalizeInPlace();
102 
109 
115  StateSpace<> toStateSpace() const;
116 
128  StateSpace<> toDiscreteStateSpace(double dt) const;
129 
141  StateSpace<> toDiscreteStateSpace(double dt, double alpha) const;
142 
143 #ifdef LS_USE_GINAC
144 
152  TransferFunction(const GiNaC::ex &tf, const GiNaC::ex &symbol);
153 
162  GiNaC::ex getNumExpression(const GiNaC::ex &symbol) const;
163 
172  GiNaC::ex getDenExpression(const GiNaC::ex &symbol) const;
173 
180  GiNaC::ex getExpression(const GiNaC::ex &symbol) const;
181 
189  void
190  copyFromExpression(const GiNaC::ex &tf, const GiNaC::ex &symbol);
191 
192 #endif
193 
194  private:
195  Eigen::MatrixXd num_,
196  den_;
197  };
198  }
199 }
200 
201 #endif //LODESTAR_TRANSFERFUNCTION_HPP
ls::systems::TransferFunction::getDenExpression
GiNaC::ex getDenExpression(const GiNaC::ex &symbol) const
Generates a symbolic expression of the denominator polynomial.
Definition: TransferFunction.cpp:199
ls::systems::TransferFunction::toDiscreteStateSpace
StateSpace toDiscreteStateSpace(double dt) const
Converts transfer function to discrete-time state space object.
Definition: TransferFunction.cpp:121
ls::systems::TransferFunction::setDen
void setDen(const Eigen::MatrixXd &den)
Set denominator coefficients.
Definition: TransferFunction.cpp:162
ls::systems::TransferFunction::TransferFunction
TransferFunction()
Default constructor.
Definition: TransferFunction.hpp:31
ls
Main Lodestar code.
Definition: BilinearTransformation.hpp:12
ls::systems::TransferFunction::getNum
Eigen::MatrixXd getNum() const
Gets numerator coefficients.
Definition: TransferFunction.cpp:137
ls::systems::StateSpace
Definition: StateSpace.hpp:15
ls::systems::TransferFunction::copyFromExpression
void copyFromExpression(const GiNaC::ex &tf, const GiNaC::ex &symbol)
Copies transfer function coefficients from the given symbolic expression.
Definition: TransferFunction.cpp:219
ls::systems::TransferFunction::setNum
void setNum(const Eigen::MatrixXd &num)
Sets numerator coefficients.
Definition: TransferFunction.cpp:142
ls::systems::SystemStateless
Definition: SystemStateless.hpp:9
ls::systems::TransferFunction::getExpression
GiNaC::ex getExpression(const GiNaC::ex &symbol) const
Generates a symbolic expression of the transfer function.
Definition: TransferFunction.cpp:213
ls::systems::TransferFunction::getNumExpression
GiNaC::ex getNumExpression(const GiNaC::ex &symbol) const
Generates a symbolic expression of the numerator polynomial.
Definition: TransferFunction.cpp:185
ls::systems::TransferFunction::TransferFunction
TransferFunction(const Eigen::MatrixXd &num, const Eigen::MatrixXd &den)
Constructs a transfer function from a vector of numerator and denominator coefficients.
Definition: TransferFunction.hpp:52
ls::systems::TransferFunction::getDen
Eigen::MatrixXd getDen() const
Gets denominator coefficients.
Definition: TransferFunction.cpp:157
ls::systems::TransferFunction::getNumDegree
long getNumDegree() const
Definition: TransferFunction.cpp:147
ls::systems::TransferFunction
Definition: TransferFunction.hpp:26
ls::systems::TransferFunction::normalized
TransferFunction normalized() const
Creates normalized transfer function.
Definition: TransferFunction.cpp:46
ls::systems::TransferFunction::getDenDegree
long getDenDegree() const
Definition: TransferFunction.cpp:167
ls::systems::TransferFunction::toStateSpace
StateSpace toStateSpace() const
Converts transfer function to state space object.
Definition: TransferFunction.cpp:55
ls::systems::TransferFunction::normalizeInPlace
void normalizeInPlace()
Normalizes transfer function in place.
Definition: TransferFunction.cpp:14