Class FIR
- java.lang.Object
-
- 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)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
-
-
Field Summary
Fields Modifier and Type Field Description protected Token[]_dataThe delay line.protected int_decimationPhaseValueDecimationPhase value.protected int_decimationValueDecimation value.protected int_interpolationValueInterpolation value.protected int_mostRecentThe index into the delay line of the most recent input.protected int_phaseLengthThe phaseLength is ceiling(length/interpolation), where length is the number of taps.protected boolean_reinitializeNeededIndicator that at least one attribute has been changed since the last initialization.protected Token[]_tapsLocal cache of the tap values.protected Token_zeroLocal cache of the zero token.ParameterdecimationThe decimation ratio of the filter.ParameterdecimationPhaseThe decimation phase of the filter.ParameterinterpolationThe interpolation ratio of the filter.ParametertapsThe taps of the filter.-
Fields inherited from class ptolemy.domains.sdf.lib.SDFTransformer
input, input_tokenConsumptionRate, output, output_tokenInitProduction, output_tokenProductionRate
-
Fields inherited from class ptolemy.actor.TypedAtomicActor
_typesValid
-
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
-
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _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
Constructors Constructor Description FIR(CompositeEntity container, java.lang.String name)Construct an actor with the given container and name.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.util.Set<Inequality>_customTypeConstraints()Set the output to be ≥ the monotonic function of the input port type.protected void_initializeTaps()Initialize the taps.protected void_reinitialize()Reinitialize local variables in response to changes in attributes.voidattributeChanged(Attribute attribute)Set a flag that causes recalculation of various local variables that are used in execution on the next invocation of fire().java.lang.Objectclone(Workspace workspace)Clone the actor into the specified workspace.voidfire()Consume the inputs and produce the outputs of the FIR filter.voidinitialize()Perform domain-specific initialization by calling the initialize(Actor) method of the director.booleanprefire()Return false if the input does not have enough tokens to fire.-
Methods inherited from class ptolemy.actor.TypedAtomicActor
_containedTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
-
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, 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
_addPort, _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, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, decorators, 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, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, 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.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
-
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, stop, stopFire, terminate
-
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable, wrapup
-
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
-
-
-
-
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.
-
-
Constructor Detail
-
FIR
public FIR(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
-
attributeChanged
public void attributeChanged(Attribute attribute) throws IllegalActionException
Set a flag that causes recalculation of various local variables that are used in execution on the next invocation of fire().- Overrides:
attributeChangedin classNamedObj- 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:
clonein classTypedAtomicActor- 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 IllegalActionExceptionConsume the inputs and produce the outputs of the FIR filter.- Specified by:
firein interfaceExecutable- Overrides:
firein classAtomicActor<TypedIOPort>- Throws:
IllegalActionException- If parameter values are invalid, or if there is no director, or if runtime type conflicts occur.
-
initialize
public void initialize() throws IllegalActionExceptionPerform domain-specific initialization by calling the initialize(Actor) method of the director. The director may reject the actor by throwing an exception if the actor is incompatible with the domain. Set a flag that reinitializes the data buffer at the first firing.- Specified by:
initializein interfaceInitializable- Overrides:
initializein classAtomicActor<TypedIOPort>- Throws:
IllegalActionException- If the superclass throws it.
-
prefire
public boolean prefire() throws IllegalActionExceptionReturn false if the input does not have enough tokens to fire. Otherwise, return what the superclass returns.- Specified by:
prefirein interfaceExecutable- Overrides:
prefirein classSDFTransformer- 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.
-
_customTypeConstraints
protected java.util.Set<Inequality> _customTypeConstraints()
Set the output to be ≥ the monotonic function of the input port type.- Overrides:
_customTypeConstraintsin classTypedAtomicActor- Returns:
- A set of type constraints
-
_initializeTaps
protected void _initializeTaps() throws IllegalActionExceptionInitialize the taps.- Throws:
IllegalActionException- If we can't get the token from the parameter taps.
-
_reinitialize
protected void _reinitialize() throws IllegalActionExceptionReinitialize local variables in response to changes in attributes.- Throws:
IllegalActionException- If there is a problem reinitializing.
-
-