dfilt - Discrete-time filter

Syntax

hd = dfilt.structure(input1,...)
hd = [dfilt.structure(input1,...), dfilt.structure(input1,...),...]
hd = design(d,'designmethod')

Description

hd = dfilt.structure(input1,...) returns a discrete-time filter, hd, of type structure. Each structure takes one or more inputs. When you specify a dfilt.structure with no inputs, a default filter is created.

hd = [dfilt.structure(input1,...), dfilt.structure(input1,...),...] returns a vector containing dfilt filters.

Structures

Structures for dfilt.structure specify the type of filter structure. Available types of structures for dfilt are shown below.

dfilt.structure

Description

dfilt.allpass

Allpass filter

dfilt.cascadeallpass

Cascade of allpass filter sections

dfilt.cascadewdfallpass

Cascade of allpass wave digital filters

dfilt.delay

Delay

dfilt.df1

Direct-form I

dfilt.df1sos

Direct-form I, second-order sections

dfilt.df1t

Direct-form I transposed

dfilt.df1tsos

Direct-form I transposed, second-order sections

dfilt.df2

Direct-form II

dfilt.df2sos

Direct-form II, second-order sections

dfilt.df2t

Direct-form II transposed

dfilt.df2tsos

Direct-form II transposed, second-order sections

dfilt.dffir

Direct-form FIR

dfilt.dffirt

Direct-form FIR transposed

dfilt.dfsymfir

Direct-form symmetric FIR

dfilt.dfasymfir

Direct-form antisymmetric FIR

dfilt.farrowfd

Generic fractional delay Farrow filter

dfilt.farrowlinearfd

Linear fractional delay Farrow filter

dfilt.fftfir

Overlap-add FIR

dfilt.latticeallpass

Lattice allpass

dfilt.latticear

Lattice autoregressive (AR)

dfilt.latticearma

Lattice autoregressive moving- average (ARMA)

dfilt.latticemamax

Lattice moving-average (MA) for maximum phase

dfilt.latticemamin

Lattice moving-average (MA) for minimum phase

dfilt.calattice

Coupled, allpass lattice

dfilt.calatticepc

Coupled, allpass lattice with power complementary output

dfilt.statespace

State-space

dfilt.scalar

Scalar gain object

dfilt.wdfallpass

Allpass wave digital filter object

dfilt.cascade

Filters arranged in series

dfilt.parallel

Filters arranged in parallel

For more information on each structure, refer to its reference page.

hd = design(d,'designmethod') returns the dfilt object hd resulting from the filter specification object d and the design method you specify in designmethod. When you omit the designmethod argument, design uses the default design method to construct a filter from the object d.

With this syntax, you design filters by

  1. Specifying the filter specifications, such as the response shape (perhaps highpass) and details (passband edges and attenuation).

  2. Selecting a method (such as equiripple) to design the filter.

  3. Applying the method to the specifications object with design(d,'designmethod).

Using the specification-based technique can be more effective than the coefficient-based filter design techniques.

Design Methods for design Syntax

When you use the hd = design(d,'designmethod') syntax, you have a range of design methods available depending on d, the filter specification object. The table below lists all of the design methods in the toolbox.

Design Method String

Filter Design Result

butter

Butterworth IIR

cheby1

Chebyshev Type I IIR

cheby2

Chebyshev Type II IIR

ellip

Elliptic IIR

equiripple

Equiripple with the same ripple in the pass and stopbands

firls

Least-squares FIR

freqsamp

Frequency-Sampled FIR

ifir

Interpolated FIR

iirlpnorm

Least Pth norm IIR

iirls

Least-Squares IIR

kaiserwin

Kaiser-windowed FIR

lagrange

Fractional delay filter

multistage

Multistage FIR

window

Windowed FIR

As specifications object d changes, the methods that apply for designing filters from d change. For instance, if d is a lowpass filter, these are the applicable methods:

% Create an object to design a lowpass filter.
d=fdesign.lowpass 
 
d =
 
               Response: 'Lowpass'      
          Specification: 'Fp,Fst,Ap,Ast'
            Description: {4x1 cell}     
    NormalizedFrequency: true           
                  Fpass: 0.45           
                  Fstop: 0.55           
                  Apass: 1              
                  Astop: 60             
                                        
designmethods(d) % What design methods apply to object d?

Design Methods for class fdesign.lowpass (Fp,Fst,Ap,Ast):

butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

When d is a bandstop filter, the design methods change.

% Create default bandstop specifications 
d=fdesign.bandstop 
object.
 
d =
 
               Response: 'Bandstop'                     
          Specification: 'Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2'
            Description: {7x1 cell}                     
    NormalizedFrequency: true                           
                 Fpass1: 0.35                           
                 Fstop1: 0.45                           
                 Fstop2: 0.55                           
                 Fpass2: 0.65                           
                 Apass1: 1                              
                  Astop: 60                             
                 Apass2: 1                              
                                                        
designmethods(d) % Show design methods that apply to d.

Design Methods for class fdesign.bandstop 
(Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2):

butter
cheby1
cheby2
ellip
equiripple
kaiserwin

Theifir and multistage design methods do not apply to this bandstop specifications object d.

Analysis Methods

Methods provide ways of performing functions directly on your dfilt object without having to specify the filter parameters again. You can apply these methods directly on the variable you assigned to your dfilt object.

For example, if you create a dfilt object, hd, you can check whether it has linear phase with islinphase(hd), view its frequency response plot with fvtool(hd), or obtain its frequency response values with h = freqz(hd). You can use all of the methods described here in this way.

Some of the methods listed here have the same name as functions in Signal Processing Toolbox™ or Filter Design Toolbox™ software. They behave similarly.

Method

Description

addstage

Adds a stage to a cascade or parallel object, where a stage is a separate, modular filter. Refer to dfilt.cascade and dfilt.parallel.

block

(Available only with Signal Processing Blockset)

block(hd) creates a Signal Processing Blockset block of the dfilt object. The block method can specify these properties/values:

'Destination' indicates where to place the block. 'Current' places the block in the current Simulink® model. 'New' creates a new model. Default value is 'Current'.

'Blockname' assigns the entered string to the block name. Default name is 'Filter'.

'OverwriteBlock'indicates whether to overwrite the block generated by the block method ('on') and defined by Blockame. Default is 'off'.

'MapStates' specifies initial conditions in the block ('on'). Default is 'off'. Refer to "Using Filter States" in Signal Processing Toolbox documentation.

cascade

Returns the series combination of two dfilt objects. Refer to dfilt.cascade.

coeffs

Returns the filter coefficients in a structure containing fields that use the same property names as those in the original dfilt.

convert

Converts a dfilt object from one filter structure, to another filter structure

fcfwrite

Writes a filter coefficient ASCII file. The file can contain a single filter or a vector of objects. If Filter Design Toolbox software is installed, the file can contain multirate filters (mfilt) or adaptive filters (adaptfilt). Default filename is untitled.fcf.

fcfwrite(hd,filename) writes to a disk file named filename in the current working directory. The .fcf extension is added automatically.

fcfwrite(...,fmt) writes the coefficients in the format fmt, where valid fmt strings are:

'hex' for hexadecimal

'dec' for decimal

'bin' for binary representation.

fftcoeffs

Returns the frequency-domain coefficients used when filtering with a dfilt.fftfir

filter

Performs filtering using the dfilt object

firtype

Returns the type (1-4) of a linear phase FIR filter

freqz

Plots the frequency response in fvtool. Note that unlike the freqz function, this dfilt freqz method has a default length of 8192.

grpdelay

Plots the group delay in fvtool

impz

Plots the impulse response in fvtool

impzlength

Returns the length of the impulse response

info

Displays dfilt information, such as filter structure, length, stability, linear phase, and, when appropriate, lattice and ladder length.

isallpass

Returns a logical 1 (i.e., true) if the dfilt object in an allpass filter or a logical 0 (i.e., false) if it is not

iscascade

Returns a logical 1 if the dfilt object is cascaded or a logical 0 if it is not

isfir

Returns a logical 1 if the dfilt object has finite impulse response (FIR) or a logical 0 if it does not

islinphase

Returns a logical 1 if the dfilt object is linear phase or a logical 0 if it is not

ismaxphase

Returns a logical 1 if the dfilt object is maximum-phase or a logical 0 if it is not

isminphase

Returns a logical 1 if the dfilt object is minimum-phase or a logical 0 if it is not

isparallel

Returns a logical 1 if the dfilt object has parallel stages or a logical 0 if it does not

isreal

Returns a logical 1 if the dfilt object has real-valued coefficients or a logical 0 if it does not

isscalar

Returns a logical 1 if the dfilt object is a scalar or a logical 0 if it is not scalar

issos

Returns a logical 1 if the dfilt object has second-order sections or a logical 0 if it does not

isstable

Returns a logical 1 if the dfilt object is stable or a logical 0 if it are not

nsections

Returns the number of sections in a second-order sections filter. If a multistage filter contains stages with multiple sections, using nsections returns the total number of sections in all the stages (a stage with a single section returns 1).

nstages

Returns the number of stages of the filter, where a stage is a separate, modular filter

nstates

Returns the number of states for an object

order

Returns the filter order. If hd is a single-stage filter, the order is given by the number of delays needed for a minimum realization of the filter. If hd has multiple stages, the order is given by the number of delays needed for a minimum realization of the overall filter.

parallel

Returns the parallel combination of two dfilt filters. Refer to dfilt.parallel.

phasez

Plots the phase response in fvtool

realizemdl

(Available only with Simulink )

realizemdl(hd) creates a Simulink model containing a subsystem block realization of your dfilt.

realizemdl(hd,p1,v1,p2,v2,...) creates the block using the properties p1, p2,... and values v1, v2,... specified.

The following properties are available:

'Blockname' specifies the name of the block. The default value is 'Filter'.

'Destination' specifies whether to add the block to a current Simulink model or create a new model. Valid values are 'Current' and 'New'.

'OverwriteBlock' specifies whether to overwrite an existing block that was created by realizemdl or create a new block. Valid values are 'on' and 'off'. Note that only blocks created by realizemdl are overwritten.

The following properties optimize the block structure. Specifying 'on' turns the optimization on and 'off' creates the block without optimization. The default for each block is 'off'.

'OptimizeZeros' removes zero-gain blocks.

'OptimizeOnes' replaces unity-gain blocks with a direct connection.

'OptimizeNegOnes' replaces negative unity-gain blocks with a sign change at the nearest summation block.

'OptimizeDelayChains' replaces cascaded chains of delay block with a single integer delay block set to the appropriate delay.

removestage

Removes a stage from a cascade or parallel dfilt. Refer to dfilt.cascade and dfilt.parallel.

setstage

Overwrites a stage of a cascade or parallel dfilt. Refer to dfilt.cascade and dfilt.parallel.

sos

Converts the dfilt to a second-order sections dfilt. If hd has a single section, the returned filter has the same class.

sos(hd,flag) specifies the ordering of the second-order sections. If flag='UP', the first row contains the poles closest to the origin, and the last row contains the poles closest to the unit circle. If flag='down', the sections are ordered in the opposite direction. The zeros are always paired with the poles closest to them.

sos(hd,flag,scale) specifies the scaling of the gain and the numerator coefficients of all second-order sections. scale can be 'none', 'inf' (infinity-norm) or 'two' (2-norm). Using infinity-norm scaling with up ordering minimizes the probability of overflow in the realization. Using 2-norm scaling with down ordering minimizes the peak roundoff noise.

ss

Converts the dfilt to state-space. To see the separate A,B,C,D matrices for the state-space model, use [A,B,C,D]=ss(hd).

stepz

Plots the step response in fvtool

stepz(hd,n) computes the first n samples of the step response.

stepz(hd,n,Fs) separates the time samples by T = 1/Fs, where Fs is assumed to be in Hz.

tf

Converts the dfilt to a transfer function

zerophase

Plots the zero-phase response in fvtool

zpk

Converts the dfilt to zeros-pole-gain form

zplane

Plots a pole-zero plot in fvtool

Viewing Properties

As with any object, use get to view a dfilt properties. To see a specific property, use

 get(hd,'property') 

To see all properties for an object, use

get(hd)

Changing Properties

To set specific properties, use

set(hd,'property1',value,'property2',value,...) 

Note that you must use single quotation marks around the property name. Use single quotation marks around the value argument when the value is a string, such as specifyall or fixed.

Copying an Object

To create a copy of an object, use the copy method.

h2 = copy(hd)

Converting Between Filter Structures

To change the filter structure of a dfilt object hd, use

hd2 = convert(hd,'structure_string');

where structure_string is any valid structure name in single quotation marks. If hd is a cascade or parallel structure, each stage is converted to the new structure.

Using Filter States

Two properties control the filter states:

Examples

Create a direct-form I filter and use a method to see if it is stable.

[b,a] = butter(8,0.25);
hd = dfilt.df1(b,a)
 
hd = 
         FilterStructure: 'Direct-Form I'
               Numerator: [1x9 double]
             Denominator: [1x9 double]
        PersistentMemory: false
    
isstable(hd)
ans =
     1

If a dfilt's numerator values do not fit on a single line, a description of the vector is displayed. To see the specific numerator values for this example, use

get(hd,'numerator')

ans =
Columns 1 through 6 
    0.0001  0.0009  0.0030  0.0060  0.0076  0.0060
  Columns 7 through 9 
    0.0030  0.0009  0.0001

Create an array containing two dfilt objects, apply a method and verify that the method acts on both objects, and use a method to test whether the objects are FIR objects.

b = fir1(5,.5);
hd = dfilt.dffir(b);         % Create an FIR object
[b,a] = butter(5,.5);
hd(2) = dfilt.df2t(b,a);	   % Create DF2T object and place
                           % in the second column of hd.

[h,w] = freqz(hd);
size(h)								% Verify that resulting h is
ans =								% 2 columns.
        8192           2
size(w)								% Verify that resulting w is
ans =								% 1 column.
        8192           1

test_fir = isfir(hd)
test_fir =
     1     0								% hd(1) is FIR and hd(2) is not.

Refer to the reference pages for each structure for more examples.

See Also

dfilt, design, fdesign, realizemdl, sos, stepz

dfilt.cascade, dfilt.df1, dfilt.df1t, dfilt.df2, dfilt.df2t, dfilt.dfasymfir, dfilt.dffir, dfilt.dffirt, dfilt.dfsymfir, dfilt.latticeallpass, dfilt.latticear, dfilt.latticearma, dfilt.latticemamax, dfilt.latticemamin, dfilt.parallel, dfilt.statespace, filter, freqz, grpdelay, impz, zplane in Signal Processing Toolbox documentation

  


 © 1984-2008- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS