Program Listing for File periodic_waveform.hpp
↰ Return to documentation for file (rcppsw/control/periodic_waveform.hpp
)
#pragma once
/*******************************************************************************
* Includes
******************************************************************************/
#include <cmath>
#include "rcppsw/control/base_waveform.hpp"
/*******************************************************************************
* Namespaces/Decls
******************************************************************************/
namespace rcppsw::control {
/*******************************************************************************
* Classes
******************************************************************************/
class sine_waveform final : public base_waveform {
public:
explicit sine_waveform(const struct config::waveform_config* const config)
: base_waveform(config) {}
double value(double time) override {
double t = frequency() * time;
double v = std::sin(2 * M_PI * t + phase().v());
return amplitude() * v + offset();
}
};
class square_waveform final : public base_waveform {
public:
explicit square_waveform(const struct config::waveform_config* const config)
: base_waveform(config) {}
double value(double time) override {
double t = frequency() * time;
return amplitude() *
std::copysign(1.0, std::sin(2 * M_PI * t + phase().v())) +
offset();
}
};
class sawtooth_waveform : public base_waveform {
public:
explicit sawtooth_waveform(const struct config::waveform_config* const config)
: base_waveform(config) {}
double value(double time) override {
double t = frequency() * time;
double v = 2.0 * (t - std::floor(t + 0.5) + phase().v());
return amplitude() * v + offset();
}
};
} /* namespace rcppsw::control */