33 template<
class T,
int NStates>
37 const int expected_size = simulation_time/Ts;
41 T time =
static_cast<T
>(0);
43 for(; i < expected_size; time += Ts, (void)++i){
44 const T value = filter(
static_cast<T
>(1));
45 timeseries.
times(i) = time;
46 timeseries.
values(i) = value;
65 template<
class T,
int NumOrder,
int DenOrder>
68 const Eigen::Vector<T, NumOrder> z =
zeros(tf).array().abs();
69 const Eigen::Vector<T, DenOrder> p =
poles(tf).array().abs();
72 T max_z = std::numeric_limits<T>::lowest();
73 T min_z = std::numeric_limits<T>::max();
75 for(
int i = 0; i < z.size(); ++i){
76 if(z(i) !=
static_cast<T
>(0)){
77 min_z = (z(i) < min_z) ? z(i) : min_z;
78 max_z = (z(i) > max_z) ? z(i) : max_z;
84 T max_p = std::numeric_limits<T>::lowest();
85 T min_p = std::numeric_limits<T>::max();
87 for(
int i = 0; i < p.size(); ++i){
88 if(p(i) !=
static_cast<T
>(0)){
89 min_p = (p(i) < min_p) ? p(i) : min_p;
90 max_p = (p(i) > max_p) ? p(i) : max_p;
96 T fastest_frequency = alternative;
97 T slowest_frequency = alternative;
98 if(valid_p && valid_z){
99 slowest_frequency = (min_p < min_z) ? min_p : min_z;
100 fastest_frequency = (max_p > max_z) ? max_p : max_z;
101 }
else if(valid_p && !valid_z){
102 slowest_frequency = min_p;
103 fastest_frequency = max_p;
104 }
else if(!valid_p && valid_z){
105 slowest_frequency = min_z;
106 fastest_frequency = max_z;
110 return std::tuple<T, T>(slowest_frequency, fastest_frequency);
113 template<
class T,
int NumOrder,
int DenOrder>
117 return step(dss, sample_time, simulation_time);
120 template<
class T,
int NumOrder,
int DenOrder>
123 const T sample_time =
static_cast<T
>(0.05) / fastest_freq;
124 const T simulation_time =
static_cast<T
>(20) / slowest_freq;
125 return step(tf, sample_time, simulation_time);
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
Controller from a discrete state space.
Definition DiscreteFilter.hpp:19
Contiains time and values pairs.
Definition TimeSeries.hpp:26
Eigen::Vector< T, Eigen::Dynamic > & times()
Definition TimeSeries.hpp:79
Eigen::Vector< T, Eigen::Dynamic > & values()
Definition TimeSeries.hpp:85
The main namespace for the Control++ library.
Definition Bode.cpp:3
Eigen::Vector< std::complex< T >, DenOrder > poles(const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf)
Definition ContinuousTransferFunction.hpp:244
Eigen::Vector< std::complex< T >, NumOrder > zeros(const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf)
Definition ContinuousTransferFunction.hpp:238
TimeSeries< T > step(const DiscreteStateSpace< T, NStates, 1, 1 > &dss, double Ts, double simulation_time)
calculates the step response of a system
Definition analysis.hpp:34
DiscreteStateSpace< ValueType, states, 1, 1 > discretise_zoh(const ContinuousStateSpace< ValueType, states, 1, 1 > &sys, ValueType sample_time)
transform s-domain into z-domain using zero-order-hold
Definition transformations.hpp:65
std::tuple< T, T > slowest_fastest_frequencies(const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, T alternative=static_cast< T >(1))
Calculates the slowest (lowest) and fastest (highest) frequencies of a continuous transfer function.
Definition analysis.hpp:66
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