Class Autocorrelation

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

    public class Autocorrelation
    extends SDFTransformer
    This actor calculates the autocorrelation of a sequence of input tokens. It is polymorphic, supporting any input data type that supports multiplication, addition, and division by an integer. However, since integer division will lose the fractional portion of the result, type resolution will resolve the input type to double or double matrix if the input port is connected to an integer or integer matrix source, respectively.

    Both biased and unbiased autocorrelation estimates are supported. If the parameter biased is true, then the autocorrelation estimate is

              N-1-k
            1  ---
     r(k) = -  \    x(n)x(n+k)
            N  /
               ---
               n=0
     
    for k = 0, ... , p, where N is the number of inputs to average (numberOfInputs), p is the number of lags to estimate (numberOfLags), and x* is the conjugate of the input (if it is complex). This estimate is biased because the outermost lags have fewer than N terms in the summation, and yet the summation is still normalized by N.

    If the parameter biased is false (the default), then the estimate is

                N-1-k
             1   ---
     r(k) = ---  \    x(n)x(n+k)
            N-k  /
                 ---
                 n=0
     
    In this case, the estimate is unbiased. However, note that the unbiased estimate does not guarantee a positive definite sequence, so a power spectral estimate based on this autocorrelation estimate may have negative components.

    The output will be an array of tokens whose type is at least that of the input. If the parameter symmetricOutput is true, then the output will be symmetric and have length equal to twice the number of lags requested plus one. Otherwise, the output will have length equal to twice the number of lags requested, which will be almost symmetric (insert the last sample into the first position to get the symmetric output that you would get with the symmetricOutput being true).

    Since:
    Ptolemy II 1.0
    Version:
    $Id$
    Author:
    Edward A. Lee and Yuhong Xiong
    Pt.AcceptedRating:
    Yellow (neuendor)
    Pt.ProposedRating:
    Green (eal)
    • Field Detail

      • biased

        public Parameter biased
        If true, the estimate will be biased. This is a boolean with default value false.
      • numberOfInputs

        public Parameter numberOfInputs
        Number of input samples to average. This is an integer with default value 256.
      • numberOfLags

        public Parameter numberOfLags
        Number of autocorrelation lags to output. This is an integer with default value 64.
      • symmetricOutput

        public Parameter symmetricOutput
        If true, then the output from each firing will have 2*numberOfLags + 1 samples (an odd number) whose values are symmetric about the midpoint. If false, then the output from each firing will have 2*numberOfLags samples (an even number) by omitting one of the endpoints (the last one). This is a boolean with default value false.
    • Method Detail

      • attributeChanged

        public void attributeChanged​(Attribute attribute)
                              throws IllegalActionException
        Check to see that the numberOfInputs parameter is positive, and that the numberOfLags parameter is positive. Based on the new values, recompute the size of the output array.
        Overrides:
        attributeChanged in class NamedObj
        Parameters:
        attribute - The attribute that has changed.
        Throws:
        IllegalActionException - If the parameters are out of range.
      • fire

        public void fire()
                  throws IllegalActionException
        Consume tokens from the input and produce a token on the output that contains an array token that represents an autocorrelation estimate of the consumed tokens. The estimate is consistent with the parameters of the object, as described in the class comment.
        Specified by:
        fire in interface Executable
        Overrides:
        fire in class AtomicActor<TypedIOPort>
        Throws:
        IllegalActionException - If there is no director.