示例#1
0
        /// <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);
        }
示例#2
0
 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;
 }
示例#3
0
 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);
 }
示例#4
0
        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);
        }