# xcorr

Cross-correlation

## Syntax

c = xcorr(x,y)
c = xcorr(x)
c = xcorr(x,y,'option')
c = xcorr(x,'option')
c = xcorr(x,y,maxlags)
c = xcorr(x,maxlags)
c = xcorr(x,y,maxlags,'option')
c = xcorr(x,maxlags,'option')
[c,lags] = xcorr(...)

## Description

xcorrestimates the cross-correlation sequence
of a random process. Autocorrelation is handled as a special case.

The true cross-correlation sequence is

where xn and yn are
jointly stationary random processes, -inf<n<inf, and E {·}
is the expected value operator.xcorrmust estimate
the sequence because, in practice, only a finite segment of one realization
of the infinite-length random process is available.

c = xcorr(x,y)returns
the cross-correlation sequence in a length 2*N-1
vector, wherexandyare length N vectors
(N>1). Ifxandyare
not the same length, the shorter vector is zero-padded to the length
of the longer vector.

 Note   The maximum allowable vector length for inputs toxcorris 2^20. If you need to process longer sequences, seedfilt.fftfir.

By default,xcorrcomputes raw correlations
with no normalization.

The output vectorchas elements given by c(m) = Rxy(m-N), m=1, ..., 2N-1.

In general, the correlation function requires normalization
to produce an accurate estimate (see below).

c = xcorr(x)is
the autocorrelation
sequence for the vectorx. Ifxis
an N-by-P matrix, c is a
matrix with 2N-1 rows whose P2 columns
contain the cross-correlation sequences for all combinations of the
withxcorr, see Multiple Channels.

xcorrproduces correlations identically equal
to 1.0 at zero lag only when you perform an autocorrelation and only
when you set the'coeff'option. For example,

```x=0:0.01:10;
X = sin(x);
[r,lags]=xcorr(X,'coeff');
max(r)
```

c = xcorr(x,y,'option')specifies
a normalization option for the cross-correlation, where 'option' is

• 'biased': Biased estimate of the
cross-correlation function

• 'unbiased': Unbiased estimate of
the cross-correlation function
• 'coeff': Normalizes the sequence
so the autocorrelations at zero lag are identically 1.0.

• 'none', to use the raw, unscaled
cross-correlations (default)

on the properties of biased and unbiased correlation estimates.

c = xcorr(x,'option')specifies
one of the above normalization options for the autocorrelation.

c = xcorr(x,y,maxlags)returns
the cross-correlation sequence over the lag range[-maxlags:maxlags].
Outputchas length2*maxlags+1.

c = xcorr(x,maxlags)returns
the autocorrelation sequence over the lag range[-maxlags:maxlags].
Outputchas length2*maxlags+1.
Ifxis an N-by-P matrix,cis
a matrix with2*maxlags+1rows whose P2 columns
contain the autocorrelation sequences for all combinations of the
columns ofx.

c = xcorr(x,y,maxlags,'option')specifies
both a maximum number of lags and a scaling option for the cross-correlation.

c = xcorr(x,maxlags,'option')specifies
both a maximum number of lags and a scaling option for the autocorrelation.

[c,lags] = xcorr(...)returns
a vector of the lag indices at which
cwas estimated,
with the range
[-maxlags:maxlags]. Whenmaxlagsis
not specified, the range of
lagsis[-N+1:N-1].

In all cases, the cross-correlation or autocorrelation computed
byxcorrhas the zeroth lag in the middle of the
sequence, at element or rowmaxlags+1(element
or rowNifmaxlagsis not specified).

## Examples

The second output,lags, is useful for plotting
the cross-correlation or autocorrelation. For example, the estimated
autocorrelation of zero-mean Gaussian white noise cww(m)
can be displayed for -10 ≤ m
10 using:

```ww = randn(1000,1);
[c_ww,lags] = xcorr(ww,10,'coeff');
stem(lags,c_ww)
```

Swapping thexandyinput
arguments reverses (and conjugates) the output correlation sequence.
For row vectors, the resulting sequences are reversed left to right;
for column vectors, up and down. The following example illustrates
this property (mat2stris used
for a compact display of complex numbers):

```x = [1,2i,3]; y = [4,5,6];
[c1,lags] = xcorr(x,y);
c1 = mat2str(c1,2), lags
c2 = conj(fliplr(xcorr(y,x)));
c2 = mat2str(c2,2)
```

For the case where input argumentxis a
matrix, the output columns are arranged so that extracting a row and
rearranging it into a square array produces the cross-correlation
matrix corresponding to the lag of the chosen row. For example, the
cross-correlation at zero lag can be retrieved by:

```randn('state',0)
X = randn(2,2);
[M,P] = size(X);
c = xcorr(X);
c0 = zeros(P); c0(:) = c(M,:)    % Extract zero-lag row
```

You can calculate the matrix of correlation coefficients that
the MATLAB functioncorrcoefgenerates
by substituting:

```c = xcov(X,'coef')
```

in the last example. The functionxcovsubtracts
the mean and then callsxcorr.

Usefftshiftto move
the second half of the sequence starting at the zeroth lag to the
front of the sequence.fftshiftswaps the first
and second halves of a sequence.