Filter data using user-defined passbands, general filters, or Butterworth filters
Zf = idfilt(Z,filter)
Zf = idfilt(Z,filter,causality)
Zf = idfilt(Z,filter,'FilterOrder',NF)
Zf = idfilt(Z,filter)
filters data using
user-defined passbands, general filters, or Butterworth filters. Z
is
the data, defined as an iddata
object. Zf
contains
the filtered data as an iddata
object. The filter
can be defined in three ways:
As an explicit system that defines the filter.
filter = idm or filter = {num,den} or filter = {A,B,C,D}
idm
can be any SISO identified linear model
or LTI model object. Alternatively the filter can be defined as a
cell array {A,B,C,D}
of SISO state-space matrices
or as a cell array {num,den}
of numerator/denominator
filter coefficients.
As a vector or matrix that defines one or several passbands.
filter=[[wp1l,wp1h];[ wp2l,wp2h]; ....;[wpnl,wpnh]]
The matrix is n
-by-2, where each row defines
a passband. A filter is constructed that gives the union of these
passbands. For time-domain data, it is computed as cascaded Butterworth
filters or order NF. The default value of NF is 5
.
For time-domain data — The passbands are in
units of rad/TimeUnit
, where TimeUnit
is
the time units of the estimation data.
For frequency-domain data — The passbands are
in the frequency units (FrequencyUnit
property)
of the estimation data.
For example, to define a stopband between ws1
and ws2
,
use
filter = [0 ws1; ws2,Nyqf]
where Nyqf
is the Nyquist frequency.
For frequency-domain data, only the frequency response of the filter can be specified.
filter = Wf
Here Wf
is a vector of possibly complex values
that define the filter's frequency response, so that the inputs and
outputs at frequency Z.Frequency(kf)
are multiplied
by Wf(kf)
. Wf
is a column vector
of length = number of frequencies
in Z
. If the data object has several experiments, Wf
is
a cell array of length = # of experiments in Z
.
Zf = idfilt(Z,filter,causality)
specifies
causality. For time-domain data, the filtering is carried out in the
time domain as causal filtering as default. This corresponds to a
last argument causality = 'causal'
. With causality
= 'noncausal'
, a noncausal, zero-phase filter is used for
the filtering (corresponding to filtfilt
in the Signal Processing Toolbox™ product).
For frequency-domain data, the signals are multiplied by the
frequency response of the filter. With the filters defined as passband,
this gives ideal, zero-phase filtering (“brickwall filters”).
Frequencies that have been assigned zero weight by the filter (outside
the passband, or via the frequency response) are removed from the iddata
object Zf
.
Zf = idfilt(Z,filter,'FilterOrder',NF)
specifies
the filter order. The time domain filters in the pass-band case are
calculated as cascaded Butterworth pass-band and stop-band filters.
The orders of these filters are 5 by default, which can be changed
to an arbitrary integer NF
.
It is common practice in identification to select a frequency
band where the fit between model and data is concentrated. Often this
corresponds to bandpass filtering with a passband over the interesting
breakpoints in a Bode diagram. For identification where a disturbance
model is also estimated, it is better to achieve the desired estimation
result by using the 'WeightingFilter'
option of
the estimation command than just to prefilter the data. The values
for 'WeightingFilter'
are the same as the argument filter
in idfilt
.
The Butterworth filter is the same as butter
in
the Signal Processing Toolbox product. Also, the zero-phase filter
is equivalent to filtfilt
in that toolbox.
Ljung (1999), Chapter 14.