Transforming Between Frequency-Domain and Frequency-Response Data
You can transform frequency-response data to frequency-domain
data (iddata
object). The idfrd
object represents complex frequency-response
of the system at different frequencies. For a description of this
type of data, see Frequency-Response Data Representation.
When you select to transform single-input/single-output (SISO) frequency-response data to frequency-domain data, the toolbox creates outputs that equal the frequency responses, and inputs equal to 1. Therefore, the ratio between the Fourier transform of the output and the Fourier transform of the input is equal to the system frequency response.
For information about changing the frequency resolution of frequency-response
data to a new constant or variable (frequency-dependent) resolution,
see the spafdr
reference page.
You might use this feature to increase the number of data points near
the system resonance frequencies and make the frequency vector coarser
in the region outside the system dynamics. Typically, high-frequency
noise dominates away from frequencies where interesting system dynamics
occur.
Note
You cannot transform an idfrd
object to
a time-domain iddata
object.
To transform an idfrd
object
with the name idfrdobj
to a frequency-domain iddata
object,
use the following syntax:
dataf = iddata(idfrdobj)
The resulting frequency-domain iddata
object
contains values at the same frequencies as the original idfrd
object.
For the multiple-input case, the toolbox represents frequency-response
data as if each input contributes independently to the entire output
of the system and then combines information. For example, if a system
has three inputs, u1
, u2
, and u3
and
two frequency samples, the input matrix is set to:
In general, for nu
inputs and ns
samples,
the input matrix has nu
columns and (ns
nu
) rows.
If you have ny
outputs, the transformation
operation produces an output matrix has ny
columns
and (ns
nu
)
rows using the values in the complex frequency response G(iw) matrix
(ny
-by-nu
-by-ns
).
In this example, y1
is determined by unfolding G(1,1,:)
, G(1,2,:)
,
and G(1,3,:)
into three column vectors and vertically
concatenating these vectors into a single column. Similarly, y2
is
determined by unfolding G(2,1,:)
, G(2,2,:)
,
and G(2,3,:)
into three column vectors and vertically
concatenating these vectors.
If you are working with multiple inputs,
you also have the option of storing the contribution by each input
as an independent experiment in a multiexperiment data set. To transform
an idfrd
object with the name idfrdobj
to
a multiexperiment data set datf
, where each experiment
corresponds to each of the inputs in idfrdobj
datf = iddata(idfrdobj,'me')
In this example, the additional argument 'me'
specifies
that multiple experiments are created.
By default, transformation from frequency-response to frequency-domain
data strips away frequencies where the response is inf
or NaN
.
To preserve the entire frequency vector, use datf = iddata(idfrdobj,'inf')
.
For more information, type help idfrd/iddata
.
Related Examples
- Transform Between Time-Domain and Frequency-Domain Data
- Transform Time-Domain Data in the App
- Transform Frequency-Domain Data in the App
- Transform Frequency-Response Data in the App