フィルターのクリア

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

3 ビュー (過去 30 日間)
Sangeetha R
Sangeetha R 2019 年 2 月 26 日
回答済み: Sangeetha R 2019 年 3 月 1 日
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 件のコメント
Sangeetha R
Sangeetha R 2019 年 2 月 28 日
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));
Jan
Jan 2019 年 2 月 28 日
@Sangeetha R: Please post this as an anser and "accept" it as solution.

サインインしてコメントする。

採用された回答

Sangeetha R
Sangeetha R 2019 年 3 月 1 日
@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);

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCorrelation and Convolution についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by