8 std::vector<std::vector<double>>
9 FindPeaks(
const std::vector<double>& input,
const double totalThreshold)
12 const unsigned int lag = 5;
14 const double threshold = 2.5;
16 const double influence = 0.25;
18 if (input.size() <= lag + 2)
19 return std::vector<std::vector<double>>();
22 std::vector<std::vector<double>> peaks;
23 std::vector<double> filteredY(input.size());
24 std::vector<double> avgFilter(input.size());
25 std::vector<double> stdFilter(input.size());
26 std::vector<double> subVecStart(input.begin(), input.begin() + lag);
27 const double mean =
Mean(subVecStart);
28 avgFilter[lag] = mean;
31 for (
size_t i = lag + 1, n = input.size(); i < n; ++i) {
34 const auto& inp = input[i];
35 if (
std::abs(inp - avgFilter[i - 1]) > threshold * stdFilter[i - 1] && inp > totalThreshold) {
38 if (inp > avgFilter[i - 1] && inp > input[i - 1] && inp > input[i + 1]) {
39 peaks.push_back({ double(i), input[i] });
47 filteredY[i] = influence * inp + (1 - influence) * filteredY[i - 1];
52 const std::vector<double> subVec(filteredY.begin() + (i - lag), filteredY.begin() + i);
53 const double mean =
Mean(subVec);
65 return mIPval / (4 * cos(theta));
72 std::vector<double> returnVec;
73 for (
const auto m : mIPvals)
82 return VEMval / (10 * cos(theta) + (1.2 + 2*1.8) * sin(theta));
89 std::vector<double> returnVec;
90 for (
const auto m : mIPvals)
double StandardDeviation(const std::vector< double > &v, const double mean)
double VEMtoVEMpersqm(const double VEMval, const double theta)
double abs(const SVector< n, T > &v)
double MIPtoMIPpersqm(const double mIPval, const double theta)
double Mean(const std::vector< double > &v)
std::vector< std::vector< double > > FindPeaks(const std::vector< double > &input, const double totalThreshold)