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++
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 */
|