Autocorrelation Matrix from a vector

22 次查看(过去 30 天)
I have observations of a noisy channel and i form a vector y of length n from those observations. I need to compute the autocorrelation matrix from this vector y which should be just the outer product y*y' i-e E[y*y']=y*y'. This matrix is a rank=1 nxn matrix. Is this correct?

采纳的回答

Wayne King
Wayne King 2012-9-26
编辑:Wayne King 2012-9-26
No, that is not correct. The way you are doing it is not giving the autocorrelation matrix. For one thing your matrix is not going to be Toeplitz.
For example:
x = randn(10,1);
rxx = x*x';
Note the above, rxx, is not Toeplitz.
But
[xc,lags] = xcorr(x,x,9,'biased');
r = xc(10:end);
rxx = toeplitz(r,conj(r)); % the conj() of course here is not needed
Now, rxx is Toeplitz and not that the autocorrelation matrix has full column rank.
rank(rxx)
Or you could do:
X = fft(x,2^nextpow2(2*size(x,1)-1));
R = ifft(abs(X).^2);
m = length(x);
R = R./m; % Biased autocorrelation estimate
rxx = toeplitz(R(1:length(x)),conj(R(1:length(x))));

更多回答(1 个)

xplore29
xplore29 2012-9-27
Thank you.
In case of cross correlation between y(nx1) and x(mx1) (n>m) vectors
rxy is a nxn matrix and following code should work
[xc,lags] = xcorr(y,x,n-1); r = xc(n:end); rxy = toeplitz(r,conj(r)); % the conj() of course here is not needed
but the true X-correlation matrix is T (nxm) matrix
T = rxy(:,1:m);
Is this correct?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by