Controlpp
Loading...
Searching...
No Matches
Bode.hpp File Reference
#include <numbers>
#include <cassert>
#include <concepts>
#include <complex>
#include <algorithm>
#include <variant>
#include <Eigen/Dense>
#include <csvd/csvd.hpp>
#include <controlpp/ContinuousTransferFunction.hpp>
#include <controlpp/TimeSeries.hpp>
#include <controlpp/algorithm.hpp>
#include <controlpp/conversion.hpp>

Go to the source code of this file.

Classes

class  controlpp::Bode< T >
 Frequency response data. More...
 

Namespaces

namespace  controlpp
 The main namespace for the Control++ library.
 

Enumerations

enum class  controlpp::EBodeCsvReadError { controlpp::CouldNotFindFrequencyVector , controlpp::CouldNotFindAmplitudeVectors }
 Error cases for reading/parsing bode data from CSV formated data. More...
 
enum class  controlpp::EFrequencyInterpretation { controlpp::AutoHz , controlpp::AutoRad , controlpp::ForceHz , controlpp::ForceRad }
 Enum that determines how frequency data will be interpreted when reading CSV data. More...
 
enum class  controlpp::EMagnitudeInterpretation { controlpp::Auto , controlpp::ForceAbs , controlpp::ForceDB }
 Enum that determines how frequency data will be interpreted when reading CSV data. More...
 
enum class  controlpp::EPhaseInterpretation { controlpp::AutoRad , controlpp::AutoDeg , controlpp::ForceRad , controlpp::ForceDeg }
 Enum that determines how phase data will be interpreted when reading CSV data. More...
 

Functions

template<class T >
Bode< T > controlpp::prewarp_tustin (const Bode< T > &bode, const T &Ts)
 Prewarps the frequency axis of a bode plot for tustin discretisation.
 
template<class T >
Bode< T > controlpp::unwarp_tustin (const Bode< T > &bode, const T &Ts)
 Unwarps the frequency axis of a bode plot for tustin discretisation.
 
template<class T >
const Eigen::Vector< T, Eigen::Dynamic > & controlpp::frequencies (const Bode< T > &bode)
 Converts and returns the frequency vector in rad.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::frequencies_hz (const Bode< T > &bode)
 Converts and returns the frequency vector in Hz.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::real (const Bode< T > &bode)
 Converts and returns the frequency vector in rad/s.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::imag (const Bode< T > &bode)
 Converts and returns the frequency vector in rad/s.
 
template<class T >
const Eigen::Vector< T, Eigen::Dynamic > & controlpp::values (const Bode< T > &bode)
 Returns the complex values of the bode data.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::magnitudes (const Bode< T > &bode)
 Creates a vector containing the absolute magnitudes.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::magnitudes_dB (const Bode< T > &bode)
 Creates a vector of magnitudes in dB.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::phases (const Bode< T > &bode)
 Creates a vector of phases in rad.
 
template<class T >
Eigen::Vector< T, Eigen::Dynamic > controlpp::phases_deg (const Bode< T > &bode)
 Creates a vector of phases in degree.
 
template<class T >
TimeSeries< T > controlpp::impulse (const Bode< T > &bode, const T &time_step, const T &simulation_time)
 Calculates the impulse-response of frequency data.
 
template<class T >
TimeSeries< T > controlpp::impulse (const Bode< T > &bode)
 Calculates the time-series of a frequency response.
 
template<class T >
void controlpp::integrate (TimeSeries< T > &out, const TimeSeries< T > &in, const T &v0=T(0))
 Integrates the time series and writes it to out.
 
template<class T >
TimeSeries< T > controlpp::integrate (const TimeSeries< T > &in, const T &v0=T(0))
 Integrates the time series and writes it to out.
 
template<class T >
TimeSeries< T > controlpp::step (const Bode< T > &bode)
 Calculates the step response time-value pairs from frequency-value data.
 
template<class T >
TimeSeries< T > controlpp::step (const Bode< T > &bode, const T &time_step, const T &simulation_time)
 Calculates the step response time-value pairs from frequency-value data.
 
template<class T >
Bode< T > controlpp::operator+ (const Bode< T > &l, const Bode< T > &r)
 Adds two bode plots together.
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator+ (const Bode< T > &l, const T2 &r)
 Adds a bode plot and a scalar value together.
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator+ (const T2 &l, const Bode< T > &r)
 Adds a scalar value and a bode plot together.
 
template<class T >
Bode< T > controlpp::operator+ (const Bode< T > &b)
 Negates the bode plot values.
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator+ (const Bode< T > &l, const ContinuousTransferFunction< T, NumOrder, DenOrder > &r)
 Adds a bode plot and a continuous transfer function together.
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator+ (const ContinuousTransferFunction< T, NumOrder, DenOrder > &l, const Bode< T > &r)
 Adds a continuous transfer function and a bode plot together.
 
template<class T >
Bode< T > controlpp::operator- (const Bode< T > &l, const Bode< T > &r)
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator- (const Bode< T > &l, const T2 &r)
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator- (const T2 &l, const Bode< T > &r)
 
template<class T >
Bode< T > controlpp::operator- (const Bode< T > &b)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator- (const Bode< T > &l, const ContinuousTransferFunction< T, NumOrder, DenOrder > &r)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator- (const ContinuousTransferFunction< T, NumOrder, DenOrder > &l, const Bode< T > &r)
 
template<class T >
Bode< T > controlpp::operator* (const Bode< T > &l, const Bode< T > &r)
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator* (const Bode< T > &l, const T2 &r)
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator* (const T2 &l, const Bode< T > &r)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator* (const Bode< T > &l, const ContinuousTransferFunction< T, NumOrder, DenOrder > &r)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator* (const ContinuousTransferFunction< T, NumOrder, DenOrder > &l, const Bode< T > &r)
 
template<class T >
Bode< T > controlpp::operator/ (const Bode< T > &l, const Bode< T > &r)
 TODO: make it also work for bode that have different frequency vectors.
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator/ (const Bode< T > &l, const T2 &r)
 
template<class T , std::convertible_to< T > T2>
Bode< T > controlpp::operator/ (const T2 &l, const Bode< T > &r)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator/ (const Bode< T > &l, const ContinuousTransferFunction< T, NumOrder, DenOrder > &r)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::operator/ (const ContinuousTransferFunction< T, NumOrder, DenOrder > &l, const Bode< T > &r)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::bode (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, const Eigen::Vector< T, Eigen::Dynamic > &freqs)
 Calculates the bode response for a pre defined frequency (rad/s) vector.
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::bode (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, Eigen::Vector< T, Eigen::Dynamic > &&freqs)
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::bode_hz (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, const Eigen::Vector< T, Eigen::Dynamic > &freqs_Hz)
 Calculates the bode response for a pre defined frequency (Hz) vector.
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::bode_hz (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, Eigen::Vector< T, Eigen::Dynamic > &&freqs_Hz)
 
template<class T , int NumOrder, int DenOrder, std::convertible_to< T > T1, std::convertible_to< T > T2>
Bode< T > controlpp::bode_hz (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, const T1 &slowest_freq_Hz, const T2 &fastest_freq_Hz, const int samples_per_decade=100)
 Calculates the bode response of a transfer function.
 
template<class T , int NumOrder, int DenOrder, std::convertible_to< T > T1, std::convertible_to< T > T2>
Bode< T > controlpp::bode (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, const T1 &slowest_freq_rad, const T2 &fastest_freq_rad, const int samples_per_decade=100)
 Calculates the bode response of a transfer function.
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::bode_hz (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, const int samples_per_decade=100)
 Calculates the bode response of a transfer function.
 
template<class T , int NumOrder, int DenOrder>
Bode< T > controlpp::bode (const ContinuousTransferFunction< T, NumOrder, DenOrder > &tf, const int samples_per_decade=100)
 Calculates the bode response of a transfer function.
 
template<class T >
void controlpp::write_csv (std::ostream &stream, const Bode< T > &bode)
 Prints a bode plot to an output stream as a .csv file.
 
std::ostream & controlpp::operator<< (std::ostream &stream, EBodeCsvReadError val)
 
tl::expected< Bode< double >, std::variant< EBodeCsvReadError, csvd::ReadError > > controlpp::read_bode_from_csv (std::istream &stream, const csvd::Settings &csv_settings=csvd::Settings(), EFrequencyInterpretation freq_interp=EFrequencyInterpretation::AutoHz, EMagnitudeInterpretation mag_interp=EMagnitudeInterpretation::Auto, EPhaseInterpretation phase_interp=EPhaseInterpretation::AutoDeg)
 Loads bode data from csv data.