hd = dfilt.structure(input1,...)
hd = [dfilt.structure(input1,...), dfilt.structure(input1,...),...]
hd = design(d,'designmethod')
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.
Structures for dfilt.structure specify the type of filter structure. Available types of structures for dfilt are shown below.
Coefficient Mapping Support in realizemdl
Cascade of allpass filter sections
Cascade of allpass wave digital filters
Direct-form I, second-order sections
Direct-form I transposed
Direct-form I transposed, second-order sections
Direct-form II, second-order sections
Direct-form II transposed
Direct-form II transposed, second-order sections
Direct-form FIR transposed
Direct-form symmetric FIR
Direct-form antisymmetric FIR
Generic fractional delay Farrow filter
Linear fractional delay Farrow filter
Lattice autoregressive (AR)
Lattice autoregressive moving- average (ARMA)
Lattice moving-average (MA) for maximum phase
Lattice moving-average (MA) for minimum phase
Coupled, allpass lattice
Coupled, allpass lattice with power complementary output
Scalar gain object
Allpass wave digital filter object
Filters arranged in series
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:
Selecting a method (such as equiripple) to design the filter.
Using the specification-based technique can be more effective than the coefficient-based filter design techniques.
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 next table lists all of the design methods in the toolbox.
Design Method String
Filter Design Result
Chebyshev Type I IIR
Chebyshev Type II IIR
Equiripple with the same ripple in the pass and stopbands
Least Pth norm IIR
Fractional delay filter
As the specifications object d changes, the available methods for designing filters from d also change. For instance, if d is a lowpass filter with the default specification 'Fp,Fst,Ap,Ast', the applicable methods are:
% Create an object to design a lowpass filter. d=fdesign.lowpass; designmethods(d) % What design methods apply to object d?
If you change the specification string to 'N,F3dB', the available design methods change:
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.
Note If your variable hd is a 1-D array of dfilt filters, the method is applied to each object in the array. Only freqz, grpdelay, impz, is*, order, and stepz methods can be applied to arrays. The zplane method can be applied to an array only if zplane is used without outputs.
Some of the methods listed here have the same name as functions in Signal Processing Toolbox™ software. They behave similarly.
block(hd) creates a block of the dfilt object. The block method can specify these properties and 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.
Returns the series combination of two dfilt objects. Refer to dfilt.cascade.
Returns the filter coefficients in a structure containing fields that use the same property names as those in the original dfilt.
Converts a dfilt object from one filter structure, to another filter structure.
Writes a filter coefficient ASCII file. The file can contain a single filter or a vector of objects. The file can contain multirate filters (mfilt) or adaptive filters (adaptfilt). The default file name is untitled.fcf.
fcfwrite(hd,filename) writes to a disk file named filename in the current working folder. 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
Returns the frequency-domain coefficients used when filtering with a dfilt.fftfir
Performs filtering using the dfilt object.
Returns the type (1-4) of a linear phase FIR filter.
Plots the frequency response in fvtool. Unlike the freqz function, this dfilt freqz method has a default length of 8192.
Plots the group delay in fvtool.
Plots the impulse response in fvtool.
Returns the length of the impulse response.
Displays dfilt information, such as filter structure, length, stability, linear phase, and, when appropriate, lattice and ladder length.
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.
Returns a logical 1 if the dfilt object is cascaded or a logical 0 if it is not.
Returns a logical 1 if the dfilt object has finite impulse response (FIR) or a logical 0 if it does not.
Returns a logical 1 if the dfilt object is linear phase or a logical 0 if it is not.
Returns a logical 1 if the dfilt object is maximum-phase or a logical 0 if it is not.
Returns a logical 1 if the dfilt object is minimum-phase or a logical 0 if it is not.
Returns a logical 1 if the dfilt object has parallel stages or a logical 0 if it does not.
Returns a logical 1 if the dfilt object has real-valued coefficients or a logical 0 if it does not.
Returns a logical 1 if the dfilt object is a scalar or a logical 0 if it is not scalar.
Returns a logical 1 if the dfilt object has second-order sections or a logical 0 if it does not.
Returns a logical 1 if the dfilt object is stable or a logical 0 if it are not.
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).
Returns the number of stages of the filter, where a stage is a separate, modular filter.
Returns the number of states for an object.
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.
Returns the parallel combination of two dfilt filters. Refer to dfilt.parallel.
Plots the phase response in fvtool.
(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'. 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 delay chains made up of n unit delays with a single delay by n.
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.
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).
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 hertz.
Converts the dfilt to a filter System object™. See the reference page for a list of supported objects.
Converts the dfilt to a transfer function.
Plots the zero-phase response in fvtool.
Converts the dfilt to zeros-pole-gain form.
Plots a pole-zero plot in fvtool.
As with any object, use get to view a dfilt properties. To see a specific property, use
To see all properties for an object, use
Note dfilt objects include an arithmetic property. You can change the internal arithmetic of the filter from double- precision to single-precision using: hd.arithmetic = 'single'.
If you have Fixed-Point Designer™ software, you can change the arithmetic property to fixed-point using: hd.arithmetic = 'fixed'
To set specific properties, use
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.
To create a copy of an object, use the copy method.
h2 = copy(hd)
Note Using the syntax H2 = hd copies only the object handle and does not create a new, independent object.
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.
Two properties control the filter states:
states — Stores the current states of the filter. Before the filter is applied, the states correspond to the initial conditions and after the filter is applied, the states correspond to the final conditions. For df1, df1t, df1sos and df1tsos structures, states returns a filtstates object.
PersistentMemory — Controls whether filter states are saved. The default value is 'false', which causes the initial conditions to be reset to zero before filtering and turns off the display of states information. Setting PersistentMemory to 'true' allows the filter to use your initial conditions or to reuse the final conditions from a previous filtering operation as the initial conditions of the next filtering operation. The true setting also displays information about the filter states.
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); isstable(hd)
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
B = get(hd,'numerator'); % or B1 = hd.numerator;
Create an array containing two dfilt objects, apply a method and verify that the method acts on both objects. Use a method to test whether the objects are FIR objects.
b = fir1(5,.5); hd = dfilt.dffir(b); % Create an FIR filter object [b,a] = butter(5,.5); % Create IIR filter hd(2) = dfilt.df2t(b,a); % Create DF2T object and place % in the second column of hd. [h,w] = freqz(hd); test_fir = isfir(hd) % hd(1) is FIR and hd(2) is not.
Refer to the reference pages for each structure for more examples.
design | dfilt | 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 | fdesign | filter | freqz | grpdelay | impz | realizemdl | sos | stepz | zplane