test_sdk/math/gtl_math_delta_phase.cpp

72 lines
1.9 KiB
C++
Raw Permalink Normal View History

#include "gtl_math_delta_phase.h"
namespace gtl {
namespace math {
delta_phase::delta_phase(gtl::analog_data *ref, gtl::analog_data *data)
: last_front(data)
, _ref(new last_front(ref))
, _freq(new gtl::math::freq(ref))
{
}
delta_phase::~delta_phase()
{
delete _ref;
delete _freq;
}
void delta_phase::set_time(qreal value)
{
_freq->set_time(value);
set_freq(_freq->value());
_ref->set_freq(_freq->value());
}
void delta_phase::before_copying_data(std::vector<qreal>::iterator begin, std::vector<qreal>::iterator end)
{
}
void delta_phase::after_copying_data(std::vector<qreal>::iterator begin, std::vector<qreal>::iterator end)
{
}
void delta_phase::data_changed()
{
last_front::data_changed();
qreal freq_coef = _freq->value()/_ref->freq();
if(freq_coef > 1.2 || freq_coef <= 1)
{
set_freq(_freq->value());
_ref->set_freq(_freq->value());
return;
}
if(front() > 0 && _ref->front() > 0)
{
qreal phase = (front() - _ref->front())*_freq->value()/_ad->get_rate();
if(phase > 1.)
return;
phase = phase*360.;
if(phase < 0)
phase += 360.;
// if(phase >= 180.)
// phase = 360. - phase;
_values.push_back(phase);
while(_values.size() > _avg_cnt)
_values.pop_front();
_value = std::accumulate(_values.begin(), _values.end(), 0.0)/_values.size();
emit value_changed();
}
}
} // namespace math
} // namespace gtl