Documentation |
Package: dsp
Cross-correlation of two inputs
The Crosscorrelator returns the cross-correlation sequence for two discrete-time deterministic inputs. This object can also return the cross-correlation sequence estimate for two discrete-time, jointly wide-sense stationary (WSS), random processes.
To obtain the cross-correlation for two discrete-time deterministic inputs:
Define and set up your cross-correlator. See Construction.
Call step to compute the cross-correlation according to the properties of dsp.Crosscorrelator. The behavior of step is specific to each object in the toolbox.
H = dsp.Crosscorrelator returns a cross-correlator object, H, that computes the cross-correlation of two inputs. For N-D arrays, the cross-correlator computes the correlation column-wise. The inputs must have an equal number of columns. If one input is a vector and the other is an N-D array, the cross-correlator computes the cross-correlation of the vector with each column of the N-D array. Cross correlating inputs of length N and M results in a cross-correlation sequence of length N+M–1. Cross correlating matrices of size M-by-N and P-by-N results in a matrix of cross-correlation sequences of size M+P–1-by-N.
H = dsp.Crosscorrelator('PropertyName',PropertyValue, ...) returns a cross-correlator, H, with each property set to the specified value.
clone | Create cross-correlator object with same property values |
getNumInputs | Number of expected inputs to step method |
getNumOutputs | Number of outputs of step method |
isLocked | Locked status for input attributes and nontunable properties |
release | Allow property value and input characteristics changes |
step | Cross-correlation sequence |
The cross-correlation of two length N deterministic inputs, or realizations of jointly WSS random processes, x and y, is:
$$\begin{array}{l}{r}_{xy}(h)=\{\begin{array}{ll}{\displaystyle \sum _{n=0}^{N-h-1}x}(n+h){y}^{*}(n)\hfill & 0\le h\le N-1\hfill \\ {r}_{yx}^{*}(h)\hfill & -(N-1)\le h\le 0\hfill \end{array}\\ \end{array}$$
where h is the lag and * denotes the complex conjugate. If the inputs are realizations of jointly WSS stationary random processes, r_{xy}(h) is an unnormalized estimate of the theoretical cross-correlation:
$${\rho}_{xy}(h)=E\{x(n+h){y}^{*}(n)\}$$
where E{ } is the expectation operator.
Compute correlation between two signals:
hcorr = dsp.Crosscorrelator; t=[0:0.001:1]; x1=sin(2*pi*2*t)+0.05*sin(2*pi*50*t); x2=sin(2*pi*2*t); y=step(hcorr,x1,x2); %computes cross-correlation of x1 and x2 figure,plot(t,x1,'b',t, x2, 'g'); legend('Input signal 1',' Input signal 2') figure, plot(y); title('Correlated output')
Use cross-correlation to detect delay in jointly stationary white Gaussian noise inputs:
S = rng('default'); % white Gaussian noise input x = randn(100,1); % Create copy delayed by 10 samples % x1[n]=x[n-10] Hdelay = dsp.Delay(10); x1= step(Hdelay,x); Hxcorr = dsp.Crosscorrelator; y = step(Hxcorr,x1,x); lags = 0:99; %Positive lags stem(lags,y(100:end),'markerfacecolor',[0 0 1]); axis([0 99 -125 125]); xlabel('Lags'); title('Cross-Correlation of Input Noise and Delayed Version');
The theoretical cross-correlation sequence is identically zero except at lag 10. Note this is not true in the sample cross-correlation sequence, but the estimate demonstrates a peak at the correct lag.
This object implements the algorithm, inputs, and outputs described on the Correlation block reference page. The object properties correspond to the block parameters.