Polyphase FIR interpolator
FIRInterpolator object upsamples an input
by the integer upsampling factor, L, followed by
an FIR anti-imaging filter. The filter coefficients are scaled by
the interpolation factor. A polyphase interpolation structure implements
the filter. The resulting discrete-time signal has a sampling rate L times
the original sampling rate.
To upsample an input:
Starting in R2016b, instead of using the
to perform the operation defined by the System
object™, you can
call the object with arguments, as if it were a function. For example,
= step(obj,x) and
y = obj(x) perform
firinterp = dsp.FIRInterpolator returns
an FIR interpolator,
firinterp, which upsamples an
input signal by a factor of 3 and applies an FIR filter to interpolate
firinterp = dsp.FIRInterpolator(' returns an FIR interpolator,
with each property set to the specified value.
firinterp = dsp.FIRInterpolator(INTERP,
NUM,' returns an FIR interpolation object,
InterpolationFactor property set to
Numerator property set to
and other properties set to the specified values.
Specify the integer factor, L, by which to increase the sampling rate of the input signal. The polyphase implementation uses L polyphase subfilters to compute convolutions at the lower sample rate. The FIR interpolator delays and interleaves these lower-rate convolutions to obtain the higher-rate output. The property value defaults to 3.
FIR filter coefficient source
Specify the source of the numerator coefficients as one of
FIR filter coefficients
Specify the numerator coefficients of the FIR anti-imaging filter as the coefficients of a polynomial in z–1. Indexing from zero, the filter coefficients are:
To act as an effective anti-imaging filter, the coefficients must correspond to a lowpass filter with a normalized cutoff frequency no greater than the reciprocal of the InterpolationFactor. The filter coefficients are scaled by the value of the
|fvtool||Open filter visualization tool|
|phasez||Unwrapped phase response|
|reset||Reset FIR interpolator filter states|
|step||Upsample and interpolate input|
Note: This example runs only in R2016b or later. If you are using an earlier release, replace each call to the function with the equivalent
step syntax. For example, myObject(x) becomes step(myObject,x).
This example shows how to double the sampling rate of an audio signal from 22.05 kHz to 44.1 kHz, and play the audio.
afr = dsp.AudioFileReader('OutputDataType',... 'single'); adw = audioDeviceWriter(44100); firinterp = dsp.FIRInterpolator(2, ... firpm(30, [0 0.45 0.55 1], [1 1 0 0])); while ~isDone(afr) frame = afr(); y = firinterp(frame); adw(y); end pause(1); release(afr); release(adw);
This object implements the algorithm, inputs, and outputs described on the FIR Interpolation block reference page. The object properties correspond to the block parameters, except:
FIRInterpolator object does not
have a property that corresponds to the Input processing parameter
of the FIR Interpolation block.
The Rate options block parameter
is not supported by the
Usage notes and limitations:
See System Objects in MATLAB Code Generation (MATLAB Coder).