
FIR |
ptolemy.domains.sdf.lib.FIR |
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.
Author(s): Edward A. Lee, Bart Kienhuis, Steve Neuendorffer
Version:$Id: FIR.java,v 1.92 2006/05/17 13:53:18 cxh Exp $
Pt.Proposed Rating:Yellow (neuendor)
Pt.Accepted Rating:Yellow (neuendor)
decimation
The decimation ratio of the filter. This must contain an
IntToken, and by default it has value one.
decimationPhase
The decimation phase of the filter. This must contain an
IntToken, and by default it has value zero.
interpolation
The interpolation ratio of the filter. This must contain an
IntToken, and by default it has value one.
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.