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.


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

More About