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.

87 lines
2.2 KiB
C++

/*
* SignalDecompose.cpp
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include "SYSCTRL/SignalDecompose.h"
namespace SYSCTRL
{
//CONSTRUCTOR
SignalDecompose::SignalDecompose():
m_time_sample(-1.0),
m_projection_active(),
m_projection_reactive(),
m_projection_filter_active(),
m_projection_filter_reactive(),
_execute(&SYSCTRL::SignalDecompose::_execute_undef)
//
{}//CONSTRUCTOR
void SignalDecompose::setup(float time_sample)
{
m_time_sample = time_sample;
m_projection_filter_active.setup(m_time_sample);
m_projection_filter_reactive.setup(m_time_sample);
//
}//
//
void SignalDecompose::configure(const SignalDecomposeConfiguration& config)
{
m_projection_filter_active.configure(config.projection_filter);
m_projection_filter_reactive.configure(config.projection_filter);
//
if((m_time_sample > FP_ZERO) && (config.projection_filter.time > m_time_sample))
{
_execute = &SYSCTRL::SignalDecompose::_execute_operational;
//
}//if
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecompose::reset()
{
m_projection_active = FP_ZERO;
m_projection_reactive = FP_ZERO;
m_projection_filter_active.reset();
m_projection_filter_reactive.reset();
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecompose::get_outputs(float& projection_active, float& projection_reactive)
{
projection_active = m_projection_active;
projection_reactive = m_projection_reactive;
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecompose::execute(float reference, float ort_cos, float ort_sin)
{
(this->*_execute)(reference, ort_cos, ort_sin);
//
}//
//
void SignalDecompose::_execute_undef(float reference, float ort_cos, float ort_sin)
{
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecompose::_execute_operational(float reference, float ort_cos, float ort_sin)
{
//
m_projection_active = m_projection_filter_active.execute(1.4142 * reference * ort_cos);
//
m_projection_reactive = m_projection_filter_reactive.execute(-(1.4142 * reference * ort_sin));
//
}//
//
} /* namespace SYSCTRL */