Time-varying digital filters are typically implemented with block processing, in which an input
signal is subdivided into short blocks (also called frames) for filtering. Each frame is
processed by a constant-coefficient digital filter. However, the constants change from one frame to the
next, thereby creating the effect of a time-varying filter.
The choice of frame length involves a trade-off between the rate at which the filter coefficients
must change and the amount of time required for the filter's transient response. Higher-order filters require
more time to reach steady state, and the frame length should be no shorter than the length of the
filter's impulse response.
Digital filters may be broadly classified as either finite impulse response (FIR) or
infinite impulse response (IIR). The latter type is preferred for most implementations
(especially for real-time filtering) because IIR filters have many fewer coefficients than comparable FIR filters.
However, IIR filters have the disadvantage of potential stability problems, especially when finite-precision
calculations are used.
The digital filter coefficients usually are calculated independently for each frame. That is, it is generally not
possible to calculate only two sets of filter coefficients and then interpolate in between. For example, suppose
a digital filter is required to have a cutoff frequency that varies anywhere from 100 Hz to 5,000 Hz. Ideally one
would be able to calculate a set of filter coefficients for the 100 Hz filter and another set for the 5,000 Hz filter,
and then use linear interpolation to determine the coefficients for any intermediate frequency, i.e., 650 Hz.
Unfortunately the interpolation technique does not work. For off-line or batch-type processing, filter coefficients
can be computed for each frame. For real-time implementation, the filter coefficients must be pre-computed and
stored in a lookup table for fast retrieval.
Download and run the LabVIEW VI filter_coeffs.vi.
This VI illustrates why it is generally not possible to interpolate filter coefficients
between blocks. Try this: increase the "low cutoff frequency" slider and observe the values of the coefficients. Some
coefficients vary monotonically (such as a[1]), but others such as a[2] decrease and then increase again. Still
others such as the "b" coefficients remain at a constant level and then begin increasing. You can also try different
filter types (highpass, bandpass, bandstop) and filter orders.
"A multimedia educational resource for signal processing students and faculty."