Class FIR

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

    public class FIR
    extends SDFTransformer
    This actor implements a type polymorphic finite-impulse response filter with multirate capability. Since this filter operates on Tokens, it is polymorphic in the type of data it operates on.

    Note that the current implementation of this actor only reads its parameters during initialization, so the filter cannot be changed during execution.

    When the decimation (interpolation) parameters are different from unity, the filter behaves exactly as it were followed (preceded) by a DownSample (UpSample) actor. However, the implementation is much more efficient than it would be using UpSample or DownSample actors; a polyphase structure is used internally, avoiding unnecessary use of memory and unnecessary multiplication by zero. Arbitrary sample-rate conversions by rational factors can be accomplished this way.

    To design a filter for a multirate system, simply assume the sample rate is the product of the interpolation parameter and the input sample rate, or equivalently, the product of the decimation parameter and the output sample rate. In particular, considerable care must be taken to avoid aliasing. Specifically, if the input sample rate is f, then the filter stopband should begin before f/2. If the interpolation ratio is i, then f/2 is a fraction 1/2i of the sample rate at which you must design your filter.

    The decimationPhase parameter is somewhat subtle. It is exactly equivalent the phase parameter of the DownSample actor. Its interpretation is as follows; when decimating, samples are conceptually discarded (although a polyphase structure does not actually compute the discarded samples). If you are decimating by a factor of three, then you will select one of every three outputs, with three possible phases. When decimationPhase is zero (the default), the latest (most recent) samples are the ones selected. The decimationPhase must be strictly less than the decimation ratio.

    Note: in this description "sample rate" refers to the physical sampling rate of an A/D converter in the system. In other words, the number of data samples per second. This is not usually specified anywhere in an SDF system, and most definitely does NOT correspond to the SDF rate parameters of this actor. This actor automatically sets the rates of the input and output ports to the decimation and interpolation ratios, respectively.

    For more information about polyphase filters, see F. J. Harris, "Multirate FIR Filters for Interpolating and Desampling", in Handbook of Digital Signal Processing, Academic Press, 1987.

    Since:
    Ptolemy II 0.2
    Version:
    $Id$
    Author:
    Edward A. Lee, Bart Kienhuis, Steve Neuendorffer
    See Also:
    Token
    Pt.AcceptedRating:
    Yellow (neuendor)
    Pt.ProposedRating:
    Yellow (neuendor)
    • Field Detail

      • decimation

        public Parameter decimation
        The decimation ratio of the filter. This must contain an IntToken, and by default it has value one.
      • decimationPhase

        public Parameter decimationPhase
        The decimation phase of the filter. This must contain an IntToken, and by default it has value zero.
      • interpolation

        public Parameter interpolation
        The interpolation ratio of the filter. This must contain an IntToken, and by default it has value one.
      • taps

        public Parameter taps
        The taps of the filter. This has a type of ArrayToken. By default, it contains an array with a single integer one, meaning that the output of the filter is the same as the input.
      • _data

        protected Token[] _data
        The delay line.
      • _mostRecent

        protected int _mostRecent
        The index into the delay line of the most recent input.
      • _phaseLength

        protected int _phaseLength
        The phaseLength is ceiling(length/interpolation), where length is the number of taps.
      • _decimationValue

        protected int _decimationValue
        Decimation value.
      • _interpolationValue

        protected int _interpolationValue
        Interpolation value.
      • _decimationPhaseValue

        protected int _decimationPhaseValue
        DecimationPhase value.
      • _reinitializeNeeded

        protected boolean _reinitializeNeeded
        Indicator that at least one attribute has been changed since the last initialization.
      • _taps

        protected Token[] _taps
        Local cache of the tap values.
      • _zero

        protected Token _zero
        Local cache of the zero token.