84 lines
2.7 KiB
C++
84 lines
2.7 KiB
C++
#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);
|
|
}
|
|
}
|
|
}
|