Class ArrayPeakSearch

  • All Implemented Interfaces:
    java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

    public class ArrayPeakSearch
    extends TypedAtomicActor

    This actor outputs the indices and values of peaks in an input array.

    The dip and squelch parameters control the sensitivity to noise. These are given either as absolute numbers or as relative numbers. If they are absolute numbers, then a peak is detected if a rise above dip is detected before the peak and a dip below dip is detected after the peak. If they are given as relative numbers, then a peak is detected when a rise by a factor dip above the most recently seen minimum (if there has been one) is seen before the peak, and if a dip by a factor dip relative to the peak is seen after the peak. Relative numbers can be either linear (a fraction) or in decibels. This is determined by the value of the scale parameter. For example, if dip is given as 2.0 and scale has value "relative linear", then a dip must drop to half of a local peak value to be considered a dip.

    If squelch is given as 10.0 and scale has value "relative linear", then any peaks that lie below 1/10 of the global peak are ignored. Note that dip is relative to the most recently seen peak or valley, and squelch is relative to the global peak in the array, when relative values are used. If scale has value "relative amplitude decibels", then a value of 6.0 is equivalent to the linear value 2.0. If scale has value "relative power decibels", then a value of 3.0 is equivalent to the linear value 2.0. In either decibel scale, 0.0 is equivalent to 0.0 linear. Other parameters control how the search is conducted.

    This actor is based on Matlab code developed by John Signorotti of Southwest Research Institute.

    Since:
    Ptolemy II 4.0
    Version:
    $Id$
    Author:
    Edward A. Lee
    Pt.AcceptedRating:
    Red (cxh)
    Pt.ProposedRating:
    Yellow (eal)
    • Field Detail

      • dip

        public Parameter dip
        The amount that the signal must drop below a local maximum before a peak is detected. This is a double that can be interpreted as an absolute threshold or relative to the local peak, and if relative, on a linear or decibel scale, depending on the scale parameter. It defaults to 0.0.
      • endIndex

        public PortParameter endIndex
        The end point of the search. If this number is larger than the length of the input array, then the search is to the end of the array. This is an integer that defaults to MaxInt.
      • input

        public TypedIOPort input
        The input port. This is required to be an array of doubles
      • maximumNumberOfPeaks

        public Parameter maximumNumberOfPeaks
        The maximum number of peaks to report. This is an integer that defaults to MaxInt.
      • peakIndices

        public TypedIOPort peakIndices
        The output port for the indices of the peaks. The type is {int} (array of int).
      • peakValues

        public TypedIOPort peakValues
        The output port for the values of the peaks. The type is the same as the input port.
      • scale

        public StringParameter scale
        An indicator of whether dip and squelch should be interpreted as absolute or relative, and if relative, then on a linear scale, in amplitude decibels, or power decibels. If decibels are used, then the corresponding linear threshold is 10^(threshold/N), where N is 20 (for amplitude decibels) or 10 (for power decibels). This parameter is a string with possible values "absolute", "relative linear", "relative amplitude decibels" or "relative power decibels". The default value is "absolute".
      • squelch

        public Parameter squelch
        The value below which the input is ignored by the algorithm. This is a double that can be interpreted as an absolute number or a relative number, and if relative, on a linear or decibel scale, depending on the scale parameter. For the relative case, the number is relative to the global peak. It defaults to -10.0.
      • startIndex

        public PortParameter startIndex
        The starting point of the search. If this number is larger than the value of endIndex, the search is conducted backwards (and the results presented in reverse order). If this number is larger than the length of the input array, then the search is started at the end of the input array. This is an integer that defaults to 0.
    • Method Detail

      • fire

        public void fire()
                  throws IllegalActionException
        Consume at most one array from the input port and produce two arrays containing the indices and values of the identified peaks. If there is no token on the input, then no output is produced. If the input is an empty array, then the same empty array token is produced on both outputs.
        Specified by:
        fire in interface Executable
        Overrides:
        fire in class AtomicActor<TypedIOPort>
        Throws:
        IllegalActionException - If there is no director, or if sorting is not supported for the input array.