18 template<
class T,
int NStates_,
int NInputs_=1,
int NOutputs_=1>
22 Eigen::Vector<T, NStates_> states_ = Eigen::Vector<T, NStates_>::Zero();
58 Eigen::Vector<T, NOutputs_>
input(
const Eigen::Vector<T, NInputs_>& u){
59 const auto [x, y] = this->dss_.
eval(this->states_, u);
64 const Eigen::Vector<T, NStates_>&
states()
const {
68 Eigen::Vector<T, NStates_>&
states() {
73 return this->states_(i);
77 return this->states_(i);
84 template<std::convertible_to<T> U>
85 requires(NInputs_ == 1 && NOutputs_ > 1)
86 Eigen::Vector<T, NOutputs_>
input(
const U& u){
87 const auto [x, y] = this->dss_.
eval(this->states_, u);
96 template<std::convertible_to<T> U>
97 requires(NInputs_ == 1 && NOutputs_ == 1)
99 const auto [x, y] = this->dss_.
eval(this->states_,
static_cast<T
>(u));
104 template<std::convertible_to<T> U>
105 requires(NInputs_ == 1 && NOutputs_ == 1)
106 T
operator() (
const U& u){
107 return this->
input(
static_cast<T
>(u));
114 this->states_.setZero();
134 stream << dssf.
dss() <<
"\n";
135 stream <<
"states: " << dssf.states_.transpose() <<
"\n";
145 template<
class T,
int NumOrder,
int DenOrder>
149 Eigen::Vector<T, NumOrder> uk_ = Eigen::Vector<T, NumOrder>::Zero();
150 Eigen::Vector<T, DenOrder> yk_ = Eigen::Vector<T, DenOrder>::Zero();
164 const Eigen::Vector<T, NumOrder+1> uk;
166 uk.tail(NumOrder) = this->uk_;
168 const auto y = this->dtf_.
eval(uk, this->yk_);
170 std::copy_backward(this->uk_.data(), this->uk_.data()+this->uk_.size(), this->uk_.data()+1);
173 std::copy_backward(this->yk_.data(), this->yk_.data()+this->yk_.size(), this->yk_.data()+1);
Definition ContinuousStateSpace.hpp:10
Continuous transfer functions in the s lapace plain.
Definition ContinuousTransferFunction.hpp:28
Matrix (A, B, C, D) representation of a linear time invariant system.
Definition DiscreteStateSpace.hpp:41
std::tuple< Eigen::Vector< ValueType, internal_states >, Eigen::Vector< ValueType, outputs > > eval(const Eigen::Vector< ValueType, internal_states > &x, const Eigen::Vector< ValueType, inputs > &u) const
calculates the next states and calculates the output from the previous states and new inputs
Definition DiscreteStateSpace.hpp:81
Continuous transfer functions in the s lapace plain.
Definition DiscreteTransferFunction.hpp:23
constexpr T eval(const Eigen::Vector< T, NumOrder+1 > &input_series, const Eigen::Vector< T, DenOrder > &output_series)
Definition DiscreteTransferFunction.hpp:75
Controller from a discrete state space.
Definition DiscreteFilter.hpp:19
void clear()
sets the interanal state vector to zero
Definition DiscreteFilter.hpp:113
Eigen::Vector< T, NOutputs_ > input(const U &u)
input a new value to advance the internal state and calculate the new output
Definition DiscreteFilter.hpp:86
Eigen::Vector< T, NOutputs_ > input(const Eigen::Vector< T, NInputs_ > &u)
Definition DiscreteFilter.hpp:58
DssFilter(const ContinuousStateSpace< T, NStates_, NInputs_, NOutputs_ > &css, double Ts, EDiscretisation method=EDiscretisation::tustin)
Definition DiscreteFilter.hpp:43
T input(const U &u)
input a new value to advance the internal state and calculate the new output
Definition DiscreteFilter.hpp:98
static constexpr int n_outputs
Definition DiscreteFilter.hpp:29
static constexpr int n_states
Definition DiscreteFilter.hpp:27
const DiscreteStateSpace< T, NStates_, NInputs_, NOutputs_ > & dss() const
returns the contained state space object
Definition DiscreteFilter.hpp:121
const Eigen::Vector< T, NStates_ > & states() const
Definition DiscreteFilter.hpp:64
DssFilter(const ContinuousTransferFunction< T, N, NStates_ > &ctf, double Ts, EDiscretisation method=EDiscretisation::tustin)
Definition DiscreteFilter.hpp:51
const T & states(int i) const
Definition DiscreteFilter.hpp:72
Eigen::Vector< T, NStates_ > & states()
Definition DiscreteFilter.hpp:68
DssFilter(const DiscreteTransferFunction< T, N, NStates_ > &dtf)
Definition DiscreteFilter.hpp:40
DssFilter(const DiscreteStateSpace< T, NStates_, NInputs_, NOutputs_ > &dss)
construct a discrete filter from a state space
Definition DiscreteFilter.hpp:36
friend std::ostream & operator<<(std::ostream &stream, const DssFilter &dssf)
Definition DiscreteFilter.hpp:133
static constexpr int n_inputs
Definition DiscreteFilter.hpp:28
DiscreteStateSpace< T, NStates_, NInputs_, NOutputs_ > & dss()
returns the contained state space object
Definition DiscreteFilter.hpp:129
T & states(int i)
Definition DiscreteFilter.hpp:76
Controller from a discrete transfer function.
Definition DiscreteFilter.hpp:146
void clear()
sets the interanal state vector to zero
Definition DiscreteFilter.hpp:181
T input(const T &u)
Definition DiscreteFilter.hpp:163
const DiscreteTransferFunction< T, NumOrder, DenOrder > & dft() const
Definition DiscreteFilter.hpp:186
DiscreteTransferFunction< T, NumOrder, DenOrder > & dft()
Definition DiscreteFilter.hpp:190
DtfFilter(const DiscreteTransferFunction< T, NumOrder, DenOrder > &dtf)
construct a discrete filter from a Transfer Function
Definition DiscreteFilter.hpp:159
The main namespace for the Control++ library.
Definition Bode.cpp:3
DiscreteStateSpace< T, NStates, 1, 1 > discretise(const ContinuousStateSpace< T, NStates, 1, 1 > &sys, const T &sample_time, EDiscretisation method)
Definition transformations.hpp:143
EDiscretisation
Definition transformations.hpp:22
ContinuousStateSpace< T, DenOrder, 1, 1 > to_state_space(const ContinuousTransferFunction< T, NumOrder, DenOrder > &ctf)
constructs a continuous state space function from a continuous transfer function
Definition ContinuousStateSpace.hpp:91