/// <summary> /// searching peaks using frames of 'framesize' width /// </summary> /// <param name="array"></param> /// <param name="framesize"></param> /// <param name="set_status"></param> /// <returns></returns> peak[] extract_peaks_using_frame(double[] array, int framesize, peak_status set_status) { peak[] peaks = null; int i, j, offset, max_i, min_i, min_i2; int n = array.Length; int peaks_n = (n + framesize - 1) / framesize; peaks = new peak[peaks_n]; for (i = 0; i < peaks_n; ++i) { offset = i * framesize; max_i = offset; for (j = 0; (j < framesize) && (j + offset < n); j++) { if (array[max_i] < array[offset + j]) { max_i = offset + j; } } // calculate front's length and amplitude // find previous local minimum for (min_i = max_i - 1; (min_i >= 0) && (array[min_i] <= array[min_i + 1]); min_i--) { } ; if (min_i < 0) { min_i = max_i; } // find next local minimum (for measuring after_fall_magnitude) for (min_i2 = max_i + 1; (min_i2 < array.Length - 1) && (array[min_i2] <= array[min_i2 - 1]); min_i2++) { } ; // we must pass the real minimum value to leave the cycle, so this little fixup is required --min_i2; peaks[i].front_amplitude = array[max_i] - array[min_i]; peaks[i].after_fall_magnitude = array[min_i2] - array[max_i]; peaks[i].front_length = max_i - min_i; peaks[i].peak_length = min_i2 - min_i; peaks[i].value = array[max_i]; peaks[i].position = max_i; peaks[i].status = set_status; } #if DEBUG // write peaks to file for analysis //System.Diagnostics.Debug.Fail("Write peaks to file for further analysis -- NOT IMPLEMENTED!"); #endif return(peaks); }
public peak(peak src) { this.position = src.position; this.status = src.status; this.front_amplitude = src.front_amplitude; this.front_length = src.front_length; this.peak_length = src.peak_length; this.value = src.value; this.after_fall_magnitude = src.after_fall_magnitude; }
private bool PeakHasPreceedingLocalMinimum(double[] array, peak aPeak) { for (int i = aPeak.position - 1; i > 0; --i) { if (array[i - 1] > array[i]) { return(true); } } return(false); }
peak[] repackage_peaks(peak[] peaks, peak_status status) { int i, j, n; n = peaks_count(peaks, status); peak[] result = new peak[n]; for (i = 0, j = 0; i < peaks.Length; i++) { if (peaks[i].status == status) { result[j++] = new peak(peaks[i]); } } return(result); }