You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.3 KiB
C++

/*
* DRCDecomposer.h
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include <math.h>
#include <stdint.h>
#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_ */