#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::iterator begin, std::vector::iterator end) { } void delta_phase::after_copying_data(std::vector::iterator begin, std::vector::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