ptolemy.backtrack.automatic.ptolemy.actor.lib
Class ArrayPeakSearch

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.backtrack.automatic.ptolemy.actor.lib.ArrayPeakSearch
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Rollbackable, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public class ArrayPeakSearch
extends TypedAtomicActor
implements Rollbackable

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: ArrayPeakSearch.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Edward A. Lee
See Also:
Serialized Form
Accepted Rating:
Red (cxh)
Proposed Rating:
Yellow (eal)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private static int _ABSOLUTE
           
private static int _RELATIVE_DB
           
private static int _RELATIVE_DB_POWER
           
private static int _RELATIVE_LINEAR
           
protected  Checkpoint $CHECKPOINT
           
protected  CheckpointRecord $RECORD$$CHECKPOINT
           
private  FieldRecord[] $RECORDS
           
 Parameter dip
          The amount that the signal must drop below a local maximum before a peak is detected.
 PortParameter endIndex
          The end point of the search.
 TypedIOPort input
          The input port.
 Parameter maximumNumberOfPeaks
          The maximum number of peaks to report.
 TypedIOPort peakIndices
          The output port for the indices of the peaks.
 TypedIOPort peakValues
          The output port for the values of the peaks.
 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.
 Parameter squelch
          The value below which the input is ignored by the algorithm.
 PortParameter startIndex
          The starting point of the search.
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
 
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
 
Constructor Summary
ArrayPeakSearch(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
 void $COMMIT(long timestamp)
          Commit changes up to the given timestamp, but not including changes made at timestamp and afterward.
 Checkpoint $GET$CHECKPOINT()
          Get the checkpoint object that monitors this rollbackable object.
 void $RESTORE(long timestamp, boolean trim)
          Restore a previous state to all the private fields of this rollbackable object.
 java.lang.Object $SET$CHECKPOINT(Checkpoint checkpoint)
          Set the checkpoint object of this rollbackable object.
 java.lang.Object clone(Workspace workspace)
          Override the base class to set type constraints.
 void fire()
          Consume at most one array from the input port and produce two arrays containing the indices and values of the identified peaks.
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, initialize, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeChanged, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, initialize, preinitialize, removeInitializable, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

$CHECKPOINT

protected transient Checkpoint $CHECKPOINT

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.


_ABSOLUTE

private static final int _ABSOLUTE
See Also:
Constant Field Values

_RELATIVE_DB

private static final int _RELATIVE_DB
See Also:
Constant Field Values

_RELATIVE_DB_POWER

private static final int _RELATIVE_DB_POWER
See Also:
Constant Field Values

_RELATIVE_LINEAR

private static final int _RELATIVE_LINEAR
See Also:
Constant Field Values

$RECORD$$CHECKPOINT

protected transient CheckpointRecord $RECORD$$CHECKPOINT

$RECORDS

private transient FieldRecord[] $RECORDS
Constructor Detail

ArrayPeakSearch

public ArrayPeakSearch(CompositeEntity container,
                       java.lang.String name)
                throws NameDuplicationException,
                       IllegalActionException
Construct an actor with the given container and name.

Parameters:
container - The container.
name - The name of this actor.
Throws:
IllegalActionException - If the actor cannot be contained by the proposed container.
NameDuplicationException - If the container already has an actor with this name.
Method Detail

clone

public java.lang.Object clone(Workspace workspace)
                       throws java.lang.CloneNotSupportedException
Override the base class to set type constraints.

Overrides:
clone in class AtomicActor
Parameters:
workspace - The workspace for the new object.
Returns:
A new instance of ArrayPeakSearch.
Throws:
java.lang.CloneNotSupportedException - If a derived class contains an attribute that cannot be cloned.
See Also:
NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)

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
Throws:
IllegalActionException - If there is no director, or if sorting is not supported for the input array.

$COMMIT

public void $COMMIT(long timestamp)
Description copied from interface: Rollbackable
Commit changes up to the given timestamp, but not including changes made at timestamp and afterward.

Specified by:
$COMMIT in interface Rollbackable
Parameters:
timestamp - The timestamp.

$RESTORE

public void $RESTORE(long timestamp,
                     boolean trim)
Description copied from interface: Rollbackable
Restore a previous state to all the private fields of this rollbackable object.

Specified by:
$RESTORE in interface Rollbackable
Parameters:
timestamp - The timestamp taken at the time when the previous state was recorded.
trim - Whether to delete the records used for the rollback.
See Also:
Checkpoint.rollback(long, boolean)

$GET$CHECKPOINT

public final Checkpoint $GET$CHECKPOINT()
Description copied from interface: Rollbackable
Get the checkpoint object that monitors this rollbackable object.

Specified by:
$GET$CHECKPOINT in interface Rollbackable
Returns:
The checkpoint object.

$SET$CHECKPOINT

public final java.lang.Object $SET$CHECKPOINT(Checkpoint checkpoint)
Description copied from interface: Rollbackable
Set the checkpoint object of this rollbackable object. A merge operation is performed on the current checkpoint object and the new checkpoint object, so that the two checkpoint objects monitor the same set of objects when this function returns.

Specified by:
$SET$CHECKPOINT in interface Rollbackable
Parameters:
checkpoint - The new checkpoint object.
Returns:
This rollbackable object itself.
See Also:
Checkpoint.setCheckpoint(Checkpoint)