#include "math/gtl_math_osc_meas.h" #include "math/gtl_math.h" namespace gtl { namespace math { osc_meas::osc_meas() { } qreal osc_meas::min(const std::vector::iterator& begin, const std::vector::iterator& end) { return mathFunctions::min(begin, end); } qreal osc_meas::max(const std::vector::iterator& begin, const std::vector::iterator& end) { return mathFunctions::max(begin, end); } qreal osc_meas::offset(const std::vector::iterator& begin, const std::vector::iterator& end) { return mathFunctions::mean(begin, end); } qreal osc_meas::peak(const std::vector::iterator& begin, const std::vector::iterator& end) { qreal amax = abs(mathFunctions::max(begin, end) - mathFunctions::mean(begin, end)); qreal amin = abs(mathFunctions::min(begin, end) - mathFunctions::mean(begin, end)); return amax > amin ? amax : amin; } qreal osc_meas::peak_to_peak(const std::vector::iterator& begin, const std::vector::iterator& end) { return mathFunctions::max(begin, end) - mathFunctions::min(begin, end); } qreal osc_meas::rms(const std::vector::iterator& begin, const std::vector::iterator& end) { return mathFunctions::rms(begin, end); } qreal osc_meas::freq(const std::vector::iterator& begin, const std::vector::iterator& end, qreal f_sample) { qreal dc = mathFunctions::mean(begin, end); std::vector fronts; for(auto it = begin; it != (end - 1); ++it) if(*it <= dc && *(it+1) > dc) fronts.push_back(std::distance(begin, it)); qreal value = 0.; if(fronts.size()>1) { for(auto it = fronts.begin(); it != (fronts.end() - 1); ++it) value += *(it+1) - *it; value /= fronts.size() - 1; value = f_sample/value; } return value; } qreal osc_meas::period(const std::vector::iterator& begin, const std::vector::iterator& end, qreal f_sample) { qreal value = 0; qreal frequency = osc_meas::freq(begin, end, f_sample); if(frequency) value = 1./frequency; return value; } qreal osc_meas::kurt(const std::vector::iterator& begin, const std::vector::iterator& end) { return mathFunctions::kurt(begin, end); } } }