test_sdk/math/gtl_math_osc_meas.cpp

84 lines
2.7 KiB
C++
Raw Permalink Normal View History

#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<qreal>::iterator& begin, const std::vector<qreal>::iterator& end)
{
return mathFunctions::min(begin, end);
}
qreal osc_meas::max(const std::vector<qreal>::iterator& begin, const std::vector<qreal>::iterator& end)
{
return mathFunctions::max(begin, end);
}
qreal osc_meas::offset(const std::vector<qreal>::iterator& begin, const std::vector<qreal>::iterator& end)
{
return mathFunctions::mean(begin, end);
}
qreal osc_meas::peak(const std::vector<qreal>::iterator& begin, const std::vector<qreal>::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<qreal>::iterator& begin, const std::vector<qreal>::iterator& end)
{
return mathFunctions::max(begin, end) - mathFunctions::min(begin, end);
}
qreal osc_meas::rms(const std::vector<qreal>::iterator& begin, const std::vector<qreal>::iterator& end)
{
return mathFunctions::rms(begin, end);
}
qreal osc_meas::freq(const std::vector<qreal>::iterator& begin, const std::vector<qreal>::iterator& end, qreal f_sample)
{
qreal dc = mathFunctions::mean(begin, end);
std::vector<int> 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<qreal>::iterator& begin, const std::vector<qreal>::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<qreal>::iterator& begin, const std::vector<qreal>::iterator& end)
{
return mathFunctions::kurt(begin, end);
}
}
}