Cross-Correlation of Two Moving Average Processes

This example shows how to find and plot the cross-correlation sequence between two moving average processes. The example compares the sample cross-correlation with the theoretical cross-correlation. Filter an $N(0,1)$ white noise input with two different moving average filters. Plot the sample and theoretical cross-correlation sequences.

Create an $N(0,1)$ white noise sequence. Set the random number generator to the default settings for reproducible results. Create two moving average filters. One filter has impulse response $\delta(n)+\delta(n-1)$. The other filter has impulse response $\delta(n)-\delta(n-1)$.

rng default

w = randn(100,1);
x = filter([1 1],1,w);
y = filter([1 -1],1,w);

Obtain the sample cross-correlation sequence up to lag 20. Plot the sample cross-correlation along with the theoretical cross-correlation.

[xc,lags] = xcorr(x,y,20,'biased');

Xc = zeros(size(xc));
Xc(20) = -1;
Xc(22) = 1;

stem(lags,xc,'filled')
hold on
stem(lags,Xc,'.','linewidth',2)

q = legend('Sample cross-correlation','Theoretical cross-correlation');
q.Location = 'NorthWest';
q.FontSize = 9;
q.Box = 'off';

The theoretical cross-correlation is $-1$ at lag $-1$, $1$ at lag $1$, and zero at all other lags. The sample cross-correlation sequence approximates the theoretical cross-correlation.

As expected, there is not perfect agreement between the theoretical cross-correlation and sample cross-correlation. The sample cross-correlation does accurately represent both the sign and magnitude of the theoretical cross-correlation sequence values at lag $-1$ and lag $1$.

Was this topic helpful?