Class LMSAdaptive

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

    public class LMSAdaptive
    extends FIR
    An adaptive filter using the Least-Mean Square (LMS) algorithm, also known as the stochastic gradient algorithm. The initial filter coefficients are given by the initialTaps parameter. The tap values can be observed on the tapValues output. The default initial taps initialTaps are {1, 0, 0, 0}. This actor supports decimation, but not interpolation.

    When used correctly, this LMS adaptive filter will adapt to try to minimize the mean-squared error of the signal at its error input. In order for this to be possible, the output of the filter should be compared (subtracted from) some reference signal to produce an error signal. That error signal should be fed back to the error input.

    The stepSize parameter determines the rate of adaptation. If its magnitude is too large, or if it has the wrong sign, then the adaptation algorithm will be unstable.

    The errorDelay parameter must equal the total number of delays in the path from the output of the filter back to the error input. This ensures correct alignment of the adaptation algorithm. The number of delays must be greater than zero.

    This actor is type polymorphic, supporting any data type that supports multiplication by a scalar (the stepSize) and addition.

    The algorithm is simple. Prior to each invocation of the parent class (an FIR filter), which computes the output given the input, this actor updates the coefficients according to the following formula,

     newTapValue = oldTapValue + error * stepSize * tapData
     
    where tapData is the contents of the delay line at the tap in question. This assumes that the decimation parameter is set to 1 (the default). If it has a value different from 1, the algorithm is slightly more involved. Similarly, this assumes that the errorDelay is 1.
    Since:
    Ptolemy II 1.0
    Version:
    $Id$
    Author:
    Edward A. Lee
    Pt.AcceptedRating:
    Red (eal)
    Pt.ProposedRating:
    Yellow (eal)
    • Field Detail

      • error

        public TypedIOPort error
        The error input port. The type of this port must match that of the input port.
      • errorDelay

        public Parameter errorDelay
        The number of samples of delay in the feedback loop that brings the error back. This has a type integer, and defaults to 1.
      • initialTaps

        public Parameter initialTaps
        The initial taps of the filter. This has a type of ArrayToken. By default, it contains the array {1.0, 0.0, 0.0, 0.0}, meaning that the output of the filter is initially the same as the input, and that the adaptive filter has four taps.
      • stepSize

        public Parameter stepSize
        The adaptation step size. This must have a type that can be multiplied by the input. It defaults to 0.01, a double.
      • tapValues

        public TypedIOPort tapValues
        The output of tap values. This has the same type as the initialTaps.
    • Method Detail

      • attributeChanged

        public void attributeChanged​(Attribute attribute)
                              throws IllegalActionException
        Override the base class to set the taps parameter if the initialTaps parameter is changed. that are used in execution on the next invocation of fire().
        Overrides:
        attributeChanged in class FIR
        Parameters:
        attribute - The attribute that changed.
        Throws:
        IllegalActionException - If the attribute contains an invalid value or if the super method throws it.
      • clone

        public java.lang.Object clone​(Workspace workspace)
                               throws java.lang.CloneNotSupportedException
        Clone the actor into the specified workspace. This calls the base class and then resets the type constraints.
        Overrides:
        clone in class FIR
        Parameters:
        workspace - The workspace for the new object.
        Returns:
        A new actor.
        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 the inputs, update the taps, and produce the outputs.
        Specified by:
        fire in interface Executable
        Overrides:
        fire in class FIR
        Throws:
        IllegalActionException - If parameter values are invalid, or if there is no director, or if runtime type conflicts occur.
      • prefire

        public boolean prefire()
                        throws IllegalActionException
        Return false if the error input does not have enough tokens to fire. Otherwise, return what the superclass returns.
        Specified by:
        prefire in interface Executable
        Overrides:
        prefire in class FIR
        Returns:
        False if the number of input tokens available is not at least equal to the decimation parameter.
        Throws:
        IllegalActionException - If the superclass throws it.