# impulseest

Nonparametric impulse response estimation

## Syntax

## Description

estimates an impulse response model `sys`

= impulseest(`data`

)`sys`

, also known as a finite
impulse response (FIR) model, using time-domain or frequency-domain data
`data`

. The function uses persistence-of-excitation analysis
on the input data to select the model order (number of nonzero impulse response
coefficients.

Use nonparametric impulse response estimation to analyze input/output data for feedback effects, delays, and significant time constants.

## Examples

## Input Arguments

## Output Arguments

## Tips

To view the impulse or step response of

`sys`

, use either`impulseplot`

or`stepplot`

, respectively.A response value that corresponds to a negative time value and that is significantly different from zero in the impulse response of

`sys`

indicates the presence of feedback in the data.To view the region of responses that are not significantly different from zero (the zero-response region) in a plot, right-click on the plot and select

**Characteristics**>**Confidence Region**. A patch depicting the zero-response region appears on the plot. The impulse response at any time value is significant only if it lies outside the zero-response region. The level of confidence in significance depends on the number of standard deviations specified in`showConfidence`

or options in the property editor. The default value is 1 standard deviation, which gives 68% confidence. A common choice is 3 standard deviations, which gives 99.7% confidence.

## Algorithms

*Correlation analysis* refers to methods
that estimate the impulse response of a linear model, without specific
assumptions about model orders.

The impulse response, *g*, is the system output when the input is an impulse
signal. The output response to a general input,
*u*(*t*), is the
convolution with the impulse response. In continuous time:

$$y(t)={\displaystyle {\int}_{-\infty}^{t}g\left(\tau \right)u\left(t-\tau \right)}d\tau $$

In discrete time:

$$y\left(t\right)={\displaystyle \sum _{k=1}^{\infty}g\left(k\right)u\left(t-k\right)}$$

The values of *g*(*k*) are the *discrete-time
impulse response coefficients*.

You can estimate the values from observed input/output data in several different ways.
`impulseest`

estimates the first
*n* coefficients using the
least-squares method to obtain a finite impulse response (FIR) model
of order *n*.

`impulseest`

provides several important options for the estimation:

*Regularization*— Regularize the least-squares estimate. With regularization, the algorithm forms an estimate of the prior decay and mutual correlation among*g*(*k*), and then merges this prior estimate with the current information about*g*from the observed data. This approach results in an estimate that has less variance but also some bias. You can choose one of several kernels to encode the prior estimate.This option is essential because the model order

`n`

can often be quite large. In cases without regularization,`n`

can be automatically decreased to secure a reasonable variance.Specify the regularizing kernel using the

`RegularizationKernel`

name-value argument of`impulseestOptions`

.*Prewhitening*— Prewhiten the input by applying an input-whitening filter of order`PW`

to the data. Use prewhitening when you are performing unregularized estimation. Using a prewhitening filter minimizes the effect of the neglected tail—`k`

>`n`

—of the impulse response. To achieve prewhitening, the algorithm:Defines a filter

`A`

of order`PW`

that whitens the input signal`u`

:`1/A = A(u)e`

, where`A`

is a polynomial and`e`

is white noise.Filters the inputs and outputs with

`A`

:`uf = Au`

,`yf = Ay`

Uses the filtered signals

`uf`

and`yf`

for estimation.

Specify prewhitening using the

`PW`

name-value pair argument of`impulseestOptions`

.*Autoregressive Parameters*— Complement the basic underlying FIR model by*NA*autoregressive parameters, making it an ARX model.$$y\left(t\right)={\displaystyle \sum _{k=1}^{n}g\left(k\right)u\left(t-k\right)}-{\displaystyle \sum _{k=1}^{NA}{a}_{k}y\left(t-k\right)}$$

This option both gives better results for small

*n*values and allows unbiased estimates when data are generated in closed loop.`impulseest`

sets*NA*to`5`

when t > 0 and sets*NA*to`0`

(no autoregressive component) when t < 0.*Noncausal effects*— Include response to negative lags. Use this option if the estimation data includes output feedback:$$u(t)={\displaystyle \sum _{k=0}^{\infty}h(k)y\left(t-k\right)}+r\left(t\right)$$

where

*h*(*k*) is the impulse response of the regulator and*r*is a setpoint or disturbance term. The algorithm handles the existence and character of such feedback*h*, and estimates*h*in the same way as*g*by simply trading places between*y*and*u*in the estimation call. Using`impulseest`

with an indication of negative delays,`mi = impulseest(data,nk,nb)`

, where`nk`

< 0, returns a model`mi`

with an impulse response$$\left[h(-nk),h(-nk-1),\mathrm{...},h(0),g(1),g(2),\mathrm{...},g(nb+nk)\right]$$

that has an alignment that corresponds to the lags $$\left[nk,nk+1,\mathrm{..},0,1,2,\mathrm{...},nb+nk\right]$$. The algorithm achieves this alignment because the input delay (

`InputDelay`

) of model`mi`

is`nk`

.

For a multi-input multi-output system, the impulse response *g*(*k*)
is an *ny*-by-*nu* matrix, where *ny* is
the number of outputs and *nu* is the number of inputs.
The *i*–*j* element of the
matrix *g*(*k*) describes the behavior
of the *i*th output after an impulse in the *j*th
input.

## Version History

**Introduced in R2012a**

## See Also

`impulseestOptions`

| `impulse`

| `impulseplot`

| `idtf`

| `step`

| `cra`

| `spa`