Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

dsp.IIRHalfbandInterpolator System object

Interpolate by a factor of two using polyphase IIR

Description

dsp.IIRHalfbandInterpolator performs efficient polyphase interpolation of the input signal by a factor of two. To design the halfband filter, you can specify the object to use an elliptic design or a quasi-linear phase design. The object uses these design methods to compute the filter coefficients. To filter the inputs, the object uses a polyphase structure. The allpass filters in the polyphase structure are in a minimum multiplier form.

Elliptic design introduces nonlinear phase and creates the filter using fewer coefficients than quasi linear design. Quasi-linear phase design overcomes phase nonlinearity at the cost of additional coefficients.

Alternatively, instead of designing the halfband filter using a design method, you can specify the filter coefficients directly. When you choose this option, the allpass filters in the two branches of the polyphase implementation can be in a minimum multiplier form or in a wave digital form.

You can also use dsp.IIRHalfbandInterpolator object to implement the synthesis portion of a two-band filter bank to synthesize a signal from lowpass and highpass subbands. This object supports ARM® Cortex® code generation.

To upsample and interpolate your data:

  1. Define and set up your halfband interpolator. See Construction.

  2. Call step to filter the input signal according to the properties of dsp.IIRHalfbandInterpolator. The input signal can be a real- or complex-valued column vector or matrix. If the input signal is a matrix, each column of the matrix is treated as an independent channel.

Note

Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.

Construction

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator returns an IIR halfband interpolation filter, IIRHalfbandInterp, with the default settings. Calling step with the default property settings upsamples and interpolates the input data using a halfband frequency of 11025 Hz, a transition width of 4100 Hz, and a stopband attenuation of 80 dB.

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(Name,Value) sets each property Name to the specified Value. Unspecified properties have default values.

Properties

expand all

Filter design parameters, specified as a character vector. When you set Specification to one of the filter design options, you can specify the filter design parameters using the corresponding FilterOrder, StopbandAttenuation, and TransitionWidth properties. Also, you can specify the design method using DesignMethod. When you set Specification to 'Coefficients', you can specify the coefficients directly.

Order of the IIR halfband filter, specified as a positive scalar integer. If you set DesignMethod to 'Elliptic', then FilterOrder must be an odd integer greater than one. If you set DesignMethod to 'Quasi-linear phase', then FilterOrder must be a multiple of four. This property applies when you set Specification to 'Filter order and stopband attenuation' or 'Filter order and transition width'.

Minimum attenuation needed in the stopband of the IIR halfband filter, specified as a positive real scalar. Units are in dB. This property applies only when you set Specification to 'Filter order and stopband attenuation' or 'Transition width and stopband attenuation'.

Transition width of the IIR halfband filter, specified as a positive real scalar. Units are in Hz. The value of the transition width must be less than half the input sample rate. This property applies only when you set Specification to 'Transition width and stopband attenuation' or 'Filter order and transition width'.

Design method for the IIR halfband filter, specified as 'Elliptic' or 'Quasi-linear phase'. When the property is set to 'Quasi-linear phase', the first branch of the polyphase structure is a pure delay, which results in an approximately linear phase response. This property applies only when you set Specification to any accepted value except 'Coefficients'.

Input sample rate, specified as a positive real scalar. Units are in Hz. This property applies only when you set Specification to any accepted value except 'Coefficients'.

Option to use object as synthesis filter bank, specified as a logical value. If this property is false, dsp.IIRHalfbandInterpolator acts as an interpolator. If this property is true, then dsp.IIRHalfbandInterpolator acts as a synthesis filter bank and step accepts two inputs: the lowpass and highpass subbands. This property applies only when you set Specification to any accepted value except 'Coefficients'.

Internal allpass filter implementation structure, specified as 'Minimum multiplier' or 'Wave Digital Filter'. This property applies only when you set 'Specification' to 'Coefficients'. Each structure uses a different coefficients set, independently stored in the corresponding object property.

This property is not tunable.

Allpass polynomial filter coefficients of the first branch, specified as an N-by-1 or N-by-2 matrix. N is the number of first-order or second-order allpass sections. This property applies only when you set Specification to 'Coefficients' and Structure to 'Minimum multiplier'.

This property is tunable.

Allpass polynomial filter coefficients of the second branch, specified as an N-by-1 or N-by-2 matrix. N is the number of first-order or second-order allpass sections. This property applies only when you set Specification to 'Coefficients' and Structure to 'Minimum multiplier'.

This property is tunable.

Allpass filter coefficients of the first branch in Wave Digital Filter form, specified as an N-by-1 or N-by-2 matrix. N is the number of first-order or second-order allpass sections. This property applies only when you set Specification to 'Coefficients' and Structure to 'Wave Digital Filter'. All elements must have an absolute value less than or equal to 1.

This property is not tunable.

Allpass filter coefficients of the second branch in Wave Digital Filter form, specified as an N-by-1 or N-by-2 matrix. N is the number of first-order or second-order allpass sections. This property applies only when you set Specification to 'Coefficients' and Structure to 'Wave Digital Filter'. All elements must have an absolute value less than or equal to 1.

This property is not tunable.

Flag to make the first allpass branch a delay, specified as a logical scalar. This property applies only when you set Specification to 'Coefficients'. When this property is true, the first branch is treated as a pure delay and the properties AllpassCoefficients1 and WDFCoefficients1 do not apply.

This property is not tunable.

Length of the first branch delay, specified as a finite positive scalar. This property is applicable only when you set 'Specification' to 'Coefficients' and HasPureDelayBranch to 1. The value of this property specifies the number of samples by which you can delay the input to the first branch.

This property is not tunable.

Option to treat the last section of the second branch as first order, specified as a logical scalar. This property applies only when you set Specification to 'Coefficients'. When this property is 1 and the coefficients of the second branch are in an N-by-2 matrix, the object ignores the second element of the last row of the matrix. The last section of the second branch then becomes a first-order section. When this property is set to 0, the last section of the second branch is a second-order section. When the coefficients of the second branch are in an N-by-1 matrix, this property is ignored.

This property is not tunable.

Methods

resetReset internal states of IIR halfband interpolator
stepFilter input with IIR halfband interpolator

For additional methods, see Analysis Methods for Filter System Objects.

For a complete list of analysis methods supported for the dsp.IIRHalfbandInterpolator object, enter dsp.IIRHalfbandInterpolator.helpFilterAnalysis at the MATLAB® command prompt.

Common to All System Objects
clone

Create System object with same property values

getNumInputs

Expected number of inputs to a System object

getNumOutputs

Expected number of outputs of a System object

isLocked

Check locked states of a System object (logical)

release

Allow System object property value changes

Examples

expand all

Create a minimum order lowpass IIR half-band interpolation filter for data sampled at 44.1 kHz. The filter has a transition width of 4.1 kHz, and a stopband attenuation of 80 dB.

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(...
                        'DesignMethod', 'Quasi-linear phase');

Obtain filter coefficients

c = coeffs(IIRHalfbandInterp);

Plot the Magnitude and Phase response

fvtool(IIRHalfbandInterp,'Analysis','freq')

Use a halfband analysis filter bank and interpolation filter to extract the low frequency subband from a speech signal.

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).

Set up the audio file reader, the analysis filter bank, the audio device writer, and the interpolation filter. The sampling rate of the audio data is 22050 Hz. The halfband filter has an order of 21 and a transition width of 2 kHz.

afr = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024);

filterspec = 'Filter order and transition width';
Order = 21;
TW = 2000;

IIRHalfbandDecim = dsp.IIRHalfbandDecimator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',afr.SampleRate);

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',afr.SampleRate/2);

ap = audioDeviceWriter('SampleRate',afr.SampleRate);

View the magnitude response of the halfband filter.

fvtool(IIRHalfbandDecim)

Read the speech signal from the audio file in frames of 1024 samples. Filter the speech signal into lowpass and highpass subbands with a halfband frequency of 5512.5 Hz. Reconstruct a lowpass approximation of the speech signal by interpolating the lowpass subband. Play the filtered output.

while ~isDone(afr)
  audioframe = afr();
  xlo = IIRHalfbandDecim(audioframe);
  ylow = IIRHalfbandInterp(xlo);
  ap(ylow);
end

Wait until the audio file ends, and then close the input file and release the audio output resource.

release(afr);
release(ap);

Use a halfband decimator and interpolator to implement a two-channel filter bank. This example uses an audio file input and shows that the power spectrum of the filter bank output does not differ significantly from the 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).

Set up the audio file reader and audio device writer. Construct the IIR halfband decimator and interpolator. Finally, set up the spectrum analyzer to display the power spectra of the filter-bank input and output.

AF = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024);
AP = audioDeviceWriter('SampleRate',AF.SampleRate);

filterspec = 'Filter order and transition width';
Order = 51;
TW = 2000;

IIRHalfbandDecim = dsp.IIRHalfbandDecimator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',AF.SampleRate);

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',AF.SampleRate/2,...
    'FilterBankInputPort',true);

SpecAna = dsp.SpectrumAnalyzer('SampleRate',AF.SampleRate,...
    'PlotAsTwoSidedSpectrum',false,'ReducePlotRate',false,...
    'ShowLegend',true,...
    'ChannelNames',{'Input signal','Filtered output signal'});

Read the audio 1024 samples at a time. Filter the input to obtain the lowpass and highpass subband signals decimated by a factor of two. This is the analysis filter bank. Use the halfband interpolator as the synthesis filter bank. Display the running power spectrum of the audio input and the output of the synthesis filter bank. Play the output.

while ~isDone(AF)
    audioInput = AF();
    [xlo,xhigh] = IIRHalfbandDecim(audioInput);
    audioOutput = IIRHalfbandInterp(xlo,xhigh);
    spectrumInput = [audioInput audioOutput];
    SpecAna(spectrumInput);
    AP(audioOutput);
end

release(AF);
release(AP);
release(SpecAna);

Algorithms

expand all

References

[1] Lang, M. Allpass Filter Design and Applications. IEEE Transactions on Signal Processing. Vol. 46, No. 9, Sept 1998, pp. 2505–2514.

[2] Harris, F.J. Multirate Signal Processing for Communication Systems. Prentice Hall. 2004, pp. 208–209.

[3] Regalia, Phillip A., Sanjit K. Mitra, and P. P. Vaidyanathan. "The Digital All-Pass Filter: A Versatile Signal Processing Building Block." Proceedings of the IEEE. Vol. 76, Number 1, 1988, pp. 19-37.

Extended Capabilities

Introduced in R2015b

Was this topic helpful?