/* * DRCDecomposer.h * * Author: Aleksey Gerasimenko * gerasimenko.aleksey.n@gmail.com */ #include #include #include "SYSCTRL/BaseComponent.h" #include "SYSCTRL/HeadersFLTSYSLIB.h" #ifndef SYSCTRL_DRCDECOMPOSER_H_ #define SYSCTRL_DRCDECOMPOSER_H_ namespace SYSCTRL { struct DRCDecomposerStructure { float direct; float quadrature; void reset() { direct = FP_ZERO; quadrature = FP_ZERO; } DRCDecomposerStructure(): direct(FP_ZERO), quadrature(FP_ZERO) {} };//DRCDecomposerStructure struct DRCDecomposerConfiguration { FLTSYSLIB::FilterConfiguration filter; //FLTSYSLIB::FilterSecondConfiguration filter; DRCDecomposerConfiguration(): filter() {} };//DRCDecomposerConfiguration class DRCDecomposer { private: float m_time_sample; private: FLTSYSLIB::Filter m_filter_direct; FLTSYSLIB::Filter m_filter_quadrature; //FLTSYSLIB::FilterSecond m_filter_direct; //FLTSYSLIB::FilterSecond m_filter_quadrature; private: float _aux_reg; public: float direct; float quadrature; public: DRCDecomposer(); void setup(float time_sample); void configure(const DRCDecomposerConfiguration& config); public: void reset(); void get_outputs(float& d, float& q); public: void execute(float in_a, float in_b, float in_c, float ort_direct_a, float ort_direct_b, float ort_direct_c, float ort_orthogonal_a, float ort_orthogonal_b, float ort_orthogonal_c); private: void (DRCDecomposer::*_execute)(float in_a, float in_b, float in_c, float ort_direct_a, float ort_direct_b, float ort_direct_c, float ort_orthogonal_a, float ort_orthogonal_b, float ort_orthogonal_c); void _execute_undef(float in_a, float in_b, float in_c, float ort_direct_a, float ort_direct_b, float ort_direct_c, float ort_orthogonal_a, float ort_orthogonal_b, float ort_orthogonal_c); void _execute_operational(float in_a, float in_b, float in_c, float ort_direct_a, float ort_direct_b, float ort_direct_c, float ort_orthogonal_a, float ort_orthogonal_b, float ort_orthogonal_c); }; } /* namespace SYSCTRL */ #endif /* SYSCTRL_DRCDECOMPOSER_H_ */