%% 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.
% Copyright 2015 The MathWorks, Inc.