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.1 KiB
C++

5 months ago
/*
* SignalDecomposeFI.cpp
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include "SYSCTRL/SignalDecomposeFI.h"
namespace SYSCTRL
{
//CONSTRUCTOR
SignalDecomposeFI::SignalDecomposeFI():
SYSCTRL::SignalDecompose(),
m_projection_filter_active(),
m_projection_filter_reactive(),
_execute(&SYSCTRL::SignalDecomposeFI::_execute_undef)
{}//CONSTRUCTOR
void SignalDecomposeFI::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 SignalDecomposeFI::configure(const SignalDecomposeFIConfiguration& 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::SignalDecomposeFI::_execute_operational;
//
}//if
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecomposeFI::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 SignalDecomposeFI::get_outputs(float& projection_active, float& projection_reactive)
{
projection_active = m_projection_active;
projection_reactive = m_projection_reactive;
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecomposeFI::execute(float reference, float ort_cos, float ort_sin)
{
(this->*_execute)(reference, ort_cos, ort_sin);
//
}//
//
void SignalDecomposeFI::_execute_undef(float reference, float ort_cos, float ort_sin)
{
//
}//
//
#pragma CODE_SECTION("ramfuncs");
void SignalDecomposeFI::_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 */