Controlpp
Loading...
Searching...
No Matches
TimeSeries.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <ostream>
4#include <Eigen/Dense>
5
11namespace controlpp
12{
13
25 template<class T>
27 private:
28 Eigen::Vector<T, Eigen::Dynamic> times_;
29 Eigen::Vector<T, Eigen::Dynamic> values_;
30
31 public:
32
33 TimeSeries() = default;
34
43 TimeSeries(int size) : times_(size), values_(size){}
44
51 const Eigen::Vector<T, Eigen::Dynamic>& t,
52 const Eigen::Vector<T, Eigen::Dynamic>& v)
53 : times_(t)
54 , values_(v){}
55
62 Eigen::Vector<T, Eigen::Dynamic>&& t,
63 Eigen::Vector<T, Eigen::Dynamic>&& v)
64 : times_(std::move(t))
65 , values_(std::move(v)){}
66
68 const Eigen::Vector<T, Eigen::Dynamic>& t,
69 Eigen::Vector<T, Eigen::Dynamic>&& v)
70 : times_(t)
71 , values_(std::move(v)){}
72
74 Eigen::Vector<T, Eigen::Dynamic>&& t,
75 const Eigen::Vector<T, Eigen::Dynamic>& v)
76 : times_(std::move(t))
77 , values_(v){}
78
79 Eigen::Vector<T, Eigen::Dynamic>& times() {return this->times_;}
80 const Eigen::Vector<T, Eigen::Dynamic>& times() const {return this->times_;}
81
82 T& times(size_t i){return this->times_(i);}
83 const T& times(size_t i) const {return this->times_(i);}
84
85 Eigen::Vector<T, Eigen::Dynamic>& values() {return this->values_;}
86 const Eigen::Vector<T, Eigen::Dynamic>& values() const {return this->values_;}
87
88 T& values(size_t i){return this->values_(i);}
89 const T& values(size_t i) const {return this->values_(i);}
90
92 TimeSeries(const TimeSeries&) = default;
94 TimeSeries(TimeSeries&&) = default;
96 TimeSeries& operator=(const TimeSeries&) = default;
99
100 void resize(int n){
101 this->times_.resize(n);
102 this->values_.resize(n);
103 }
104
105 size_t size() const {return std::min(this->times_.size(), this->values_.size());}
106 };
107
114 template<class T>
115 void write_csv(std::ostream& stream, const TimeSeries<T>& timeseries){
116 stream << "Times (s), Values\n";
117 for(size_t i = 0; (i < timeseries.size()) && (i < timeseries.size()); ++i){
118 stream << timeseries.times(i) << ", " << timeseries.values(i) << "\n";
119 }
120 }
121
122 template<class T>
124 public:
125 Eigen::Vector<T, Eigen::Dynamic> times;
126 Eigen::Vector<std::complex<T>, Eigen::Dynamic> values;
127
128 ComplexTimeSeries() = default;
129
130 ComplexTimeSeries(int size) : times(size), values(size) {}
131
133 const Eigen::Vector<T, Eigen::Dynamic>& t,
134 const Eigen::Vector<std::complex<T>, Eigen::Dynamic>& v)
135 : times(t)
136 , values(v){}
137
139 Eigen::Vector<T, Eigen::Dynamic>&& t,
140 Eigen::Vector<std::complex<T>, Eigen::Dynamic>&& v)
141 : times(std::move(t))
142 , values(std::move(v)){}
143
145 const Eigen::Vector<T, Eigen::Dynamic>& t,
146 Eigen::Vector<std::complex<T>, Eigen::Dynamic>&& v)
147 : times(std::move(t))
148 , values(std::move(v)){}
149
151 Eigen::Vector<T, Eigen::Dynamic>&& t,
152 const Eigen::Vector<std::complex<T>, Eigen::Dynamic>& v)
153 : times(std::move(t))
154 , values(std::move(v)){}
155
164
165 void resize(int n){
166 times.resize(n);
167 values.resize(n);
168 }
169 };
170
171 template<class T>
172 std::ostream& operator<< (std::ostream& stream, const ComplexTimeSeries<T>& timeseries){
173 stream << "Times (s), Real, Imag, Abs, Arg\n";
174 for(int i = 0; (i < timeseries.times.size()) && (i < timeseries.values.size()); ++i){
175 const T t = timeseries.times(i);
176 const T real = std::real(timeseries.values(i));
177 const T imag = std::imag(timeseries.values(i));
178 const T abs = std::abs(timeseries.values(i));
179 const T arg = std::arg(timeseries.values(i));
180 stream << t << ", " << real << ", " << imag << ", " << abs << ", " << arg << "\n";
181 }
182 return stream;
183 }
184
185} // namespace controlpp
Definition TimeSeries.hpp:123
ComplexTimeSeries(ComplexTimeSeries &&)=default
Default move constructor.
ComplexTimeSeries(int size)
Definition TimeSeries.hpp:130
ComplexTimeSeries(const ComplexTimeSeries &)=default
Default copy constructor.
ComplexTimeSeries(const Eigen::Vector< T, Eigen::Dynamic > &t, Eigen::Vector< std::complex< T >, Eigen::Dynamic > &&v)
Definition TimeSeries.hpp:144
ComplexTimeSeries(Eigen::Vector< T, Eigen::Dynamic > &&t, Eigen::Vector< std::complex< T >, Eigen::Dynamic > &&v)
Definition TimeSeries.hpp:138
void resize(int n)
Definition TimeSeries.hpp:165
ComplexTimeSeries & operator=(ComplexTimeSeries &&)=default
Default move assignment.
Eigen::Vector< T, Eigen::Dynamic > times
Definition TimeSeries.hpp:125
ComplexTimeSeries(const Eigen::Vector< T, Eigen::Dynamic > &t, const Eigen::Vector< std::complex< T >, Eigen::Dynamic > &v)
Definition TimeSeries.hpp:132
ComplexTimeSeries(Eigen::Vector< T, Eigen::Dynamic > &&t, const Eigen::Vector< std::complex< T >, Eigen::Dynamic > &v)
Definition TimeSeries.hpp:150
ComplexTimeSeries & operator=(const ComplexTimeSeries &)=default
Default copy assignment.
Eigen::Vector< std::complex< T >, Eigen::Dynamic > values
Definition TimeSeries.hpp:126
Contiains time and values pairs.
Definition TimeSeries.hpp:26
TimeSeries(Eigen::Vector< T, Eigen::Dynamic > &&t, Eigen::Vector< T, Eigen::Dynamic > &&v)
Definition TimeSeries.hpp:61
Eigen::Vector< T, Eigen::Dynamic > & times()
Definition TimeSeries.hpp:79
T & times(size_t i)
Definition TimeSeries.hpp:82
TimeSeries & operator=(TimeSeries &&)=default
Default move assignment.
T & values(size_t i)
Definition TimeSeries.hpp:88
TimeSeries(const Eigen::Vector< T, Eigen::Dynamic > &t, const Eigen::Vector< T, Eigen::Dynamic > &v)
Definition TimeSeries.hpp:50
const Eigen::Vector< T, Eigen::Dynamic > & values() const
Definition TimeSeries.hpp:86
const T & times(size_t i) const
Definition TimeSeries.hpp:83
const T & values(size_t i) const
Definition TimeSeries.hpp:89
TimeSeries(Eigen::Vector< T, Eigen::Dynamic > &&t, const Eigen::Vector< T, Eigen::Dynamic > &v)
Definition TimeSeries.hpp:73
const Eigen::Vector< T, Eigen::Dynamic > & times() const
Definition TimeSeries.hpp:80
TimeSeries & operator=(const TimeSeries &)=default
Default copy assignment.
void resize(int n)
Definition TimeSeries.hpp:100
size_t size() const
Definition TimeSeries.hpp:105
TimeSeries(TimeSeries &&)=default
Default move constructor.
TimeSeries(int size)
Initialises an empty (= uninitialised) timeseries with a given allocation size (number of value-time ...
Definition TimeSeries.hpp:43
TimeSeries(const Eigen::Vector< T, Eigen::Dynamic > &t, Eigen::Vector< T, Eigen::Dynamic > &&v)
Definition TimeSeries.hpp:67
Eigen::Vector< T, Eigen::Dynamic > & values()
Definition TimeSeries.hpp:85
TimeSeries(const TimeSeries &)=default
Default copy constructor.
Eigen::Vector< T, Eigen::Dynamic > imag(const Bode< T > &bode)
Converts and returns the frequency vector in rad/s.
Definition Bode.hpp:506
Eigen::Vector< T, Eigen::Dynamic > real(const Bode< T > &bode)
Converts and returns the frequency vector in rad/s.
Definition Bode.hpp:491
The main namespace for the Control++ library.
Definition Bode.cpp:3
std::ostream & operator<<(std::ostream &stream, EBodeCsvReadError val)
Definition Bode.cpp:5
void write_csv(std::ostream &stream, const Bode< T > &bode)
Prints a bode plot to an output stream as a .csv file.
Definition Bode.hpp:1231