How to Filter Data at the Command Line
Simple Passband Filter
Use idfilt
to apply passband and other custom
filters to a time-domain or a frequency-domain iddata
object.
In general, you can specify any custom filter. Use this syntax to filter an
iddata
object data
using the filter called
filter
:
fdata = idfilt(data,filter)
In the simplest case, you can specify a passband filter for time-domain data using the following syntax:
fdata = idfilt(data,[wl wh])
In this case, w1
and wh
represent the low and high
frequencies of the passband, respectively.
You can specify several passbands, as follows:
filter=[[w1l,w1h];[ w2l,w2h]; ....;[wnl,wnh]]
The filter is an n
-by-2
matrix, where each row
defines a passband in radians per second.
To define a stopband between ws1
and ws2
,
use
filter = [0 ws1; ws2 Nyqf]
where, Nyqf
is the Nyquist frequency.
For time-domain data, the passband filtering is cascaded Butterworth filters of
specified order. The default filter order is 5. The Butterworth filter is the same as
butter
in the Signal Processing Toolbox™ product. For frequency-domain data, select the indicated portions of the data
to perform passband filtering.
Defining a Custom Filter
Use idfilt
to apply passband and other custom
filters to a time-domain or a frequency-domain iddata
object.
In general, you can specify any custom filter. Use this syntax to filter an
iddata
object data
using the filter called
filter
:
fdata = idfilt(data,filter)
You can define a general single-input/single-output (SISO) system for filtering time-domain or frequency-domain data. For frequency-domain only, you can specify the (nonparametric) frequency response of the filter.
You use this syntax to filter an iddata
object
data
using a custom filter specified by
filter
:
fdata = idfilt(data,filter)
filter
can be also any of the following:
filter = idm filter = {num,den} filter = {A,B,C,D}
idm
is a SISO identified linear model or LTI
object. For more information about LTI objects, see the Control System Toolbox™ documentation.
{num,den}
defines the filter as a transfer function as a cell array
of numerator and denominator filter coefficients.
{A,B,C,D}
is a cell array of SISO state-space matrices.
Specifically for frequency-domain data, you specify the frequency response of the filter:
filter = Wf
Here, Wf
is a vector of real or complex values that define the filter
frequency response, where the inputs and outputs of data
at frequency
data.Frequency(kf)
are multiplied by Wf(kf)
.
Wf
is a column vector with the length equal to the number of
frequencies in data
.
When data
contains several experiments, Wf
is a
cell array with the length equal to the number of experiments in
data
.
Causal and Noncausal Filters
For time-domain data, the filtering is causal by default. Causal filters typically
introduce a phase shift in the results. To use a noncausal zero-phase filter (corresponding
to filtfilt
in the Signal Processing Toolbox product), specify a third argument in idfilt
:
fdata = idfilt(data,filter,'noncausal')
For frequency-domain data, the signals are multiplied by the frequency response of the filter. With the filters defined as passband filters, this calculation gives ideal, zero-phase filtering (“brick wall filters”). Frequencies that have been assigned zero weight by the filter (outside the passband or via frequency response) are removed.
When you apply idfilt
to an idfrd
data object,
the data is first converted to a frequency-domain iddata
object (see
Transforming Between Frequency-Domain and Frequency-Response Data). The result is
an iddata
object.