You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "adaptive_algorithm.h"
float CalculateMean(float value) { value /= 1000.0f; if(mean_count < MEAN_SIZE){ mean_sum += value; ++mean_count; } else{ mean = mean_sum/MEAN_SIZE; mean_count = 0; mean_sum = 0;
} return (mean * 1000.0f); }
float CalculateRootMeanSquare(float value) { value /= 1000.0f; if(rms_count < RMS_SIZE){ rms_sum += value * value; ++rms_count; } else{ rms = sqrt(rms_sum/RMS_SIZE); rms_count = 0; rms_sum = 0;
} return (rms * 1000.0f); }
float CalculateCoefficientOfVariation(float value) { value /= 1000.0f; if(cv_count < CV_SIZE){ sd += (value - mean) * (value - mean); ++cv_count; } else{ sd = sqrt(sd / (CV_SIZE-1)); cv = (sd / mean) * 100; cv_count = 0; sd = 0;
} return cv; }
void InitPeakDetect(float value,bool emi_first) { if(!init_flag){ current_max = value; current_min = value; is_detecting_emi = emi_first; init_flag = true; } }
SignalPoint PeakDetect(float value,int index,float gradient,bool *is_peak) { if(value > current_max){ max_point = index; current_max = value; } if(value < current_min){ min_point = index; current_min = value; }
if(is_detecting_emi && value < (current_max - gradient) ){
is_detecting_emi = false;
current_min = current_max; min_point = max_point; *is_peak = true; peak.value = current_max; peak.index = max_point; return peak; } else if((!is_detecting_emi) && value > (current_min + gradient)) {
is_detecting_emi = true;
current_max = current_min; max_point = min_point; *is_peak = false; peak.value = current_min; peak.index = min_point; return peak; }
peak.index = -1; return peak; }
|