Estimate impulse response using prewhitened-based correlation analysis
[ir,R,cl] = cra(data,M,na,plot)
cra command first computes an autoregressive
model for the input u as ,
where e is uncorrelated (white) noise, q is
the time-shift operator, and A(q)
is a polynomial of order
na. The command then
filters u and output data y with A(q)
to obtain the prewhitened data. The command then computes and plots
the covariance functions of the prewhitened y and u and
the cross-correlation function between them. Positive values of the
lag variable then correspond to an influence from u to
later values of y. In other words, significant
correlation for negative lags is an indication of feedback from y to u in
the data. A properly scaled version of this correlation function is
also an estimate of the system impulse response. This is also plotted
along with 99% confidence levels. The output argument
this impulse response estimate, so that its first entry corresponds
to lag zero. (Negative lags are excluded in
In the plot, the impulse response is scaled so that it corresponds
to an impulse of height 1
duration T, where T is the sample
time of the data.
Number of lags for which the covariance/correlation functions are computed.
Order of the AR model to which the input is fitted.
For the prewhitening, the input is fitted to an AR model of
Plot display control.
Specify plot as one of the following integers:
Estimated impulse response.
The first entry of
99 % significance level for the impulse response.
Estimate the Impulse Response of an ARX Model
Compare a second-order ARX model's impulse response with the one obtained by correlation analysis.
load iddata1 z = z1; ir = cra(z); m = arx(z,[2 2 1]); imp = [1;zeros(20,1)]; irth = sim(m,imp); subplot(211) plot([ir irth]) title('Impulse Responses') subplot(212) plot([cumsum(ir),cumsum(irth)]) title('Step Responses')
An often better alternative to
impulseest, which use a high-order FIR
model to estimate the impulse response.