Estimate frequency response and spectrum using spectral analysis with frequency-dependent resolution

`g = spafdr(data)`

g = spafdr(data,Resol,w)

`g = spafdr(data)`

estimates the input-to-output frequency response G(ω)
and noise spectrum *Φ _{υ}* of the general linear
model

$$y(t)=G(q)u(t)+v(t)$$

where *Φ _{υ}*(

`data`

contains
the output-input data as an `iddata`

object. The
data can be complex valued, and either time or frequency domain. It
can also be an `idfrd`

object containing frequency-response
data. `g`

is an `idfrd`

object
with the estimate of $$G\left({e}^{i\omega}\right)$$ at the frequencies `w`

. `g`

also includes
information about the spectrum estimate of `g`

. The normalization of
the spectrum is the same as described in `spa`

.Information about the estimation results and options used is
stored in the model's `Report`

property. `Report`

has
the following fields:

`Status`

— Summary of the model status, which indicates whether the model was created by construction or obtained by estimation.`Method`

— Estimation command used.`WindowSize`

— Frequency resolution.`DataUsed`

— Attributes of the data used for estimation. Structure with the following fields:`Name`

— Name of the data set.`Type`

— Data type.`Length`

— Number of data samples.`Ts`

— Sample time.`InterSample`

— Input intersample behavior.`InputOffset`

— Offset removed from time-domain input data during estimation.`OutputOffset`

— Offset removed from time-domain output data during estimation.

`g = spafdr(data,Resol,w)`

specifies frequencies
and frequency resolution.

The frequency variable `w`

is either specified as a row vector of
frequencies in rad/`TimeUnit`

, where `TimeUnit`

refers to the `TimeUnit`

property of data, or as a cell array
`{wmin,wmax}`

. In the latter case the covered frequencies will
be 50 logarithmically spaced points from `wmin`

to
`wmax`

. You can change the number of points to
`NP`

by entering `{wmin,wmax,NP}`

.

Omitting `w`

or entering it as an empty matrix gives the default value, which
is 100 logarithmically spaced frequencies between the smallest and largest frequency
in data. For time-domain data, the default range goes from $$\frac{2\pi}{N{T}_{s}}$$ to $$\frac{\pi}{{T}_{s}}$$, where *Ts* is the sample time of data and
*N* is the number of data points.

The argument `Resol`

defines the frequency resolution of the estimates. The
resolution (measured in rad/`TimeUnit`

) is the size of the smallest
detail in the frequency function and the spectrum that is resolved by the estimate.
The resolution is a tradeoff between obtaining estimates with fine, reliable
details, and suffering from spurious, random effects: The finer the resolution, the
higher the variance in the estimate. `Resol`

can be entered as a
scalar (measured in rad/`TimeUnit`

), which defines the resolution
over the whole frequency interval. It can also be entered as a row vector of the
same length as `w`

. Then `Resol(k)`

is the local,
frequency-dependent resolution around frequency `w(k)`

.

The default value of `Resol`

, obtained by omitting
it or entering it as the empty matrix, is `Resol(k) = 2(w(k+1)-w(k))`

,
adjusted upwards, so that a reasonable estimate is guaranteed. In
all cases, the resolution is returned in the variable `g.Report.WindowSize`

.

If the data is given in the time domain, it is first converted
to the frequency domain. Then averages of `Y(w)Conj(U(w))`

and `U(w)Conj(U(w))`

are
formed over the frequency ranges `w`

, corresponding
to the desired resolution around the frequency in question. The ratio
of these averages is then formed for the frequency-function estimate,
and corresponding expressions define the noise spectrum estimate.