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