72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
|
#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
|