From dc150c2c0d17f84498b9d29acb7745a703b22acd Mon Sep 17 00:00:00 2001 From: Amar Mahmutbegovic Date: Sun, 22 Sep 2024 17:02:53 +0200 Subject: [PATCH] clean signal_generator example --- Chapter11/signal_generator/main.cpp | 106 ++++++++++++++++++---------- 1 file changed, 67 insertions(+), 39 deletions(-) diff --git a/Chapter11/signal_generator/main.cpp b/Chapter11/signal_generator/main.cpp index 212d2e2..0f2ed1f 100644 --- a/Chapter11/signal_generator/main.cpp +++ b/Chapter11/signal_generator/main.cpp @@ -1,83 +1,106 @@ #include #include -#include - #include -template struct signal : public std::array { +template +struct signal : public std::array +{ constexpr signal() {} - constexpr signal(float begin, float end) { + constexpr signal(float begin, float end) + { float step = (end - begin) / (N - 1); - for (std::size_t i = 0; i < N; i++) { + for (std::size_t i = 0; i < N; i++) + { this->at(i) = begin + i * step; } } - constexpr signal(const std::array &x, auto fun) { - for (std::size_t i = 0; i < N; i++) { + constexpr signal(const std::array &x, auto fun) + { + for (std::size_t i = 0; i < N; i++) + { this->at(i) = fun(x.at(i)); } } - constexpr signal(const signal &sig, auto fun) { - for (std::size_t i = 0; i < N; i++) { + constexpr signal(const signal &sig, auto fun) + { + for (std::size_t i = 0; i < N; i++) + { this->at(i) = fun(sig.at(i)); } } - constexpr signal operator+(const T &t) const { - return signal(*this, [&](T elem) { return elem + t; }); + constexpr signal operator+(const T &t) const + { + return signal(*this, [&](T elem) + { return elem + t; }); }; - constexpr signal operator-(const T &t) const { - return signal(*this, [&](T elem) { return elem - t; }); + constexpr signal operator-(const T &t) const + { + return signal(*this, [&](T elem) + { return elem - t; }); }; - constexpr signal operator*(const T &t) const { - return signal(*this, [&](T elem) { return elem * t; }); + constexpr signal operator*(const T &t) const + { + return signal(*this, [&](T elem) + { return elem * t; }); }; - constexpr signal operator/(const T &t) const { - return signal(*this, [&](T elem) { return elem / t; }); + constexpr signal operator/(const T &t) const + { + return signal(*this, [&](T elem) + { return elem / t; }); }; - constexpr signal operator+(const signal &sig) const { + constexpr signal operator+(const signal &sig) const + { signal ret; - for (std::size_t i = 0; i < N; i++) { + for (std::size_t i = 0; i < N; i++) + { ret.at(i) = this->at(i) + sig.at(i); } return ret; }; - constexpr signal operator-(const signal &sig) const { + constexpr signal operator-(const signal &sig) const + { signal ret; - for (std::size_t i = 0; i < N; i++) { + for (std::size_t i = 0; i < N; i++) + { ret.at(i) = this->at(i) - sig.at(i); } return ret; }; - friend constexpr signal operator+(const T& t, const signal& sig) { - return sig + t; + friend constexpr signal operator+(const T &t, const signal &sig) + { + return sig + t; } - friend constexpr signal operator*(const T& t, const signal& sig) { - return sig * t; + friend constexpr signal operator*(const T &t, const signal &sig) + { + return sig * t; } - friend constexpr signal operator/(const T& t, const signal& sig) { - signal ret; - for (std::size_t i = 0; i < N; i++) { - ret.at(i) = t / sig.at(i); - } - return ret; + friend constexpr signal operator/(const T &t, const signal &sig) + { + signal ret; + for (std::size_t i = 0; i < N; i++) + { + ret.at(i) = t / sig.at(i); + } + return ret; } }; -int main() { +int main() +{ constexpr float A = 1.18090254918130e-3; constexpr float B = 2.16884014794388e-4; @@ -88,17 +111,22 @@ int main() { constexpr signal resistance(1e3, 10e3); - constexpr auto temperature_k = 1 / (A + - B * signal(resistance, [](float x) {return std::log(x);}) + - C * signal(resistance, [](float x) {return std::pow(std::log(x), 2);}) + - D * signal(resistance, [](float x) {return std::pow(std::log(x), 3);})); + constexpr auto temperature_k = 1 / (A + + B * signal(resistance, [](float x) + { return std::log(x); }) + + C * signal(resistance, [](float x) + { return std::pow(std::log(x), 2); }) + + D * signal(resistance, [](float x) + { return std::pow(std::log(x), 3); })); constexpr auto temperature_celsius = temperature_k - 273.15f; std::ofstream file("out.csv"); - for(int i = 0; i < c_lut_points; i++) { - file << resistance[i] << ", " << temperature_celsius[i] << "\n"; + file << "Resistance[Ohm], Temperature[Celsius]\n"; + for (int i = 0; i < c_lut_points; i++) + { + file << resistance[i] << ", " << temperature_celsius[i] << "\n"; } return 0; -} +} \ No newline at end of file