22 template<
class T,
int NumOrder,
int DenOrder>
43 template<
int NumOrder2,
int DenOrder2>
44 requires(((NumOrder2 < NumOrder) || (DenOrder2 < DenOrder)) && (NumOrder2 <= NumOrder) && (DenOrder2 <= DenOrder))
48 template<
int NumOrder2,
int DenOrder2>
49 requires(((NumOrder2 < NumOrder) || (DenOrder2 < DenOrder)) && (NumOrder2 <= NumOrder) && (DenOrder2 <= DenOrder))
51 this->tf_ = other.transfer_function();
75 constexpr T
eval(
const Eigen::Vector<T, NumOrder+1>& input_series,
const Eigen::Vector<T, DenOrder>& output_series){
76 const T B = this->
num().vector().dot(input_series);
77 const T A = this->
den().vector().tail(DenOrder).dot(output_series);
78 const T y = (B - A) / this->
den(0);
92 constexpr Eigen::Vector<T, N>
eval(
const Eigen::Vector<T, N> input_series)
const {
93 Eigen::Vector<T, N> output_series;
94 output_series.setZero();
95 for(
int i = 0; i < N; ++i){
96 const int num_start = std::max(0, i - NumOrder);
97 const int num_end = i + 1;
98 const int den_start = std::max(0, i - DenOrder);
99 const int den_end = i;
101 const T B = this->
num().vector().segment(num_start, num_end - num_start).dot(input_series.segment(num_start, num_end - num_start));
102 const T A = this->
den().vector().segment(den_start + 1, den_end - den_start).dot(output_series.segment(den_start, den_end - den_start));
103 output_series(i) = (B - A) / this->
den(0);
105 return output_series;
114 constexpr T&
num(
int i) {
return this->tf_.
num(i);}
115 constexpr const T&
num(
int i)
const {
return this->tf_.
num(i);}
120 constexpr T&
den(
int i) {
return this->tf_.
den(i);}
121 constexpr const T&
den(
int i)
const {
return this->tf_.
den(i);}
126 return std::string(
"");
128 std::string s (
"z^(-");
129 s += std::to_string(i);
141 template<
class T,
int NumOrder1,
int DenOrder1,
int NumOrder2,
int DenOrder2>
146 template<
class Tpoly, std::convertible_to<Tpoly> Tscalar,
int NumOrder,
int DenOrder>
151 template<
class Tpoly, std::convertible_to<Tpoly> Tscalar,
int NumOrder,
int DenOrder>
159 template<
class T,
int NumOrder1,
int DenOrder1,
int NumOrder2,
int DenOrder2>
164 template<
class T, std::convertible_to<T> Tscalar,
int NumOrder,
int DenOrder>
169 template<
class T, std::convertible_to<T> Tscalar,
int NumOrder,
int DenOrder>
177 template<
class T,
int NumOrder1,
int DenOrder1,
int NumOrder2,
int DenOrder2>
182 template<
class T, std::convertible_to<T> Tscalar,
int NumOrder,
int DenOrder>
187 template<
class T, std::convertible_to<T> Tscalar,
int NumOrder,
int DenOrder>
195 template<
class T,
int NumOrder1,
int DenOrder1,
int NumOrder2,
int DenOrder2>
200 template<
class T, std::convertible_to<T> Tscalar,
int NumOrder,
int DenOrder>
205 template<
class T, std::convertible_to<T> Tscalar,
int NumOrder,
int DenOrder>
217 template<
class T=
double>
218 static inline const DiscreteTransferFunction<T, 1, 0> z_1({T(0), T(1)}, {T(1)});
Continuous transfer functions in the s lapace plain.
Definition DiscreteTransferFunction.hpp:23
constexpr const T & den(int i) const
Definition DiscreteTransferFunction.hpp:121
T value_type
Definition DiscreteTransferFunction.hpp:25
constexpr Eigen::Vector< T, N > eval(const Eigen::Vector< T, N > input_series) const
Evaluates the transfer function for a given input series.
Definition DiscreteTransferFunction.hpp:92
constexpr DiscreteTransferFunction(const value_type(&num)[NumOrder+1], const value_type(&den)[DenOrder+1])
Definition DiscreteTransferFunction.hpp:69
constexpr den_type & den()
Definition DiscreteTransferFunction.hpp:117
constexpr const T & num(int i) const
Definition DiscreteTransferFunction.hpp:115
constexpr num_type & num()
Definition DiscreteTransferFunction.hpp:111
constexpr DiscreteTransferFunction(const TransferFunction< T, NumOrder, DenOrder > &transfer_function)
Definition DiscreteTransferFunction.hpp:60
constexpr DiscreteTransferFunction()=default
constexpr DiscreteTransferFunction & operator=(const DiscreteTransferFunction &)=default
constexpr T & den(int i)
Definition DiscreteTransferFunction.hpp:120
constexpr DiscreteTransferFunction(const DiscreteTransferFunction &)=default
typename transfer_function_type::num_type num_type
Definition DiscreteTransferFunction.hpp:27
constexpr T eval(const Eigen::Vector< T, NumOrder+1 > &input_series, const Eigen::Vector< T, DenOrder > &output_series)
Definition DiscreteTransferFunction.hpp:75
constexpr const num_type & num() const
Definition DiscreteTransferFunction.hpp:112
constexpr const transfer_function_type & transfer_function() const
Definition DiscreteTransferFunction.hpp:109
constexpr DiscreteTransferFunction(const num_vector_type &num, const den_vector_type &den)
Definition DiscreteTransferFunction.hpp:63
constexpr T & num(int i)
Definition DiscreteTransferFunction.hpp:114
constexpr const den_type & den() const
Definition DiscreteTransferFunction.hpp:118
friend std::ostream & operator<<(std::ostream &stream, const DiscreteTransferFunction &dtf)
Definition DiscreteTransferFunction.hpp:123
typename transfer_function_type::num_vector_type num_vector_type
Definition DiscreteTransferFunction.hpp:29
constexpr DiscreteTransferFunction(const Polynom< T, NumOrder > &num, const Polynom< T, DenOrder > &den)
Definition DiscreteTransferFunction.hpp:55
typename transfer_function_type::den_vector_type den_vector_type
Definition DiscreteTransferFunction.hpp:30
typename transfer_function_type::den_type den_type
Definition DiscreteTransferFunction.hpp:28
constexpr transfer_function_type & transfer_function()
Definition DiscreteTransferFunction.hpp:108
Describes a mathematical polynomial.
Definition Polynom.hpp:39
Definition TransferFunction.hpp:11
Polynom< T, NumOrder > num_type
Definition TransferFunction.hpp:14
typename num_type::vector_type num_vector_type
Definition TransferFunction.hpp:16
typename den_type::vector_type den_vector_type
Definition TransferFunction.hpp:17
constexpr Polynom< T, DenOrder > & den()
returns a reference to the denominator
Definition TransferFunction.hpp:83
void print(std::ostream &stream, std::string_view var="x") const
Definition TransferFunction.hpp:204
Polynom< T, DenOrder > den_type
Definition TransferFunction.hpp:15
constexpr Polynom< T, NumOrder > & num()
returns a reference to the numerator
Definition TransferFunction.hpp:57
Bode< T > operator+(const Bode< T > &l, const Bode< T > &r)
Adds two bode plots together.
Definition Bode.hpp:846
The main namespace for the Control++ library.
Definition Bode.cpp:3
Bode< T > operator-(const Bode< T > &l, const Bode< T > &r)
Definition Bode.hpp:936
Bode< T > operator*(const Bode< T > &l, const Bode< T > &r)
Definition Bode.hpp:979
Bode< T > operator/(const Bode< T > &l, const Bode< T > &r)
TODO: make it also work for bode that have different frequency vectors.
Definition Bode.hpp:1026