## 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:

$$\left[\begin{array}{ccc}1& 0& 0\\ 1& 0& 0\\ 0& 1& 0\\ 0& 1& 0\\ 0& 0& 1\\ 0& 0& 1\end{array}\right]$$

In general, for `nu`

inputs and `ns`

samples,
the input matrix has `nu`

columns and (`ns`

$$\cdot $$ `nu`

) rows.

If you have `ny`

outputs, the transformation
operation produces an output matrix has `ny`

columns
and (`ns`

$$\cdot $$ `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