how to reduce the execution time of xcorr() function?

I want to find the windowed correlation values of x & y having array size of 1*20000. Xcorr function taking too much time to execute. Is there any way to reduce the execution time. The code is given below
k=1;
for i=1:stepsize:(length(x)-w+1)
corrValue_w=xcorr(x(i:i+w-1),y(i:i+w-1));
maxCorrValue_w(k)=max(corrValue_w);
k=k+1;
end

7 Comments

YOu reshape your data and use xcorr at once.
Thank you for your reply!
Can you please elaborate. I want to extract the maximum correlation value from each window.
This does not work:
C = xcorr(reshape(x, w, :), reshape(y, w, :));
result = max(C, [], 1);
Is there any way to reshape the matrix with a given step size.
For example, input_mat=1:8;
w=4;stepsize=2;
output = [1 3 5
2 4 6
3 5 7
4 6 8]
This can be done easily with a loop, or with the buffer command: https://www.mathworks.com/help/signal/ref/buffer.html
Thank you very much.
I think, using loop will take more time to execute in case of large vectors. Buffer function solved my problem.
idx = buffer(x,w,stepsize,'nodelay');
I also got another solution for this problem mentioned below:
idx = bsxfun( @plus, (1:w).', 0:stepsize:(numel(x)-w));
@Sangeetha R: Please post this as an anser and "accept" it as solution.

Sign in to comment.

 Accepted Answer

@Jan, KSSV. Thank you so much for the solutions provided.
Solution for the problem asked is provided below;
Input matrix x & y reshaped using buffer function or bsxfun and perform the correlation at once.
% 1. Generate indexing matrix
idx = buffer(x,w,stepsize,'nodelay');
or
idx = bsxfun( @plus, (1:w).', 0:stepsize:(numel(x)-w));
% 2. Reshape the input matrix
x1 = x(idx);
y1 = y(idx);
% 3. Find the correlation of each column of x1 to that of y1
corrLength=2*w - 1
xcorr_value = fftshift(ifft(fft(x1,corrLength).*conj(fft(y1,corrLength))),1);
% 4. Find the maximum value from each column of xcorr_value
maxCorrValue_w = max(xcorr_value,[],1);

More Answers (0)

Products

Release

R2018b

Community Treasure Hunt

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

Start Hunting!