Vectorize application of xcorr() function
조회 수: 2 (최근 30일)
이전 댓글 표시
For the following code,
t = 0:1e-3:1-1e-3;
AF_hat = [];
fd_ = -8:0.1:8;
for fd = fd_
AF_hat = [AF_hat; xcorr(s,s.*exp(-1i*2*pi*fd*t))*Ts];
end
I would like to eliminate the for loop by doing something like,
xcorr(s,s.*exp(-1i*2*pi*fd_.'*t))*Ts,
but cannot get it to work.
Would welcome any comments/guidance.
댓글 수: 0
채택된 답변
Bruno Luong
2022년 12월 3일
편집: Bruno Luong
2022년 12월 3일
Vectorized method but for-loop with preallocation is faster
t = 0:1e-3:1-1e-3;
Ts = 5e-2;
fd_ = -8:0.1:8;
s = rand(size(t));
tic
AF_hat = zeros(length(fd_),2*length(s)-1);
for k = 1:length(fd_)
fd = fd_(k);
AF_hat(k,:) = xcorr(s,s.*exp(-1i*2*pi*fd*t))*Ts;
end
toc
% vectorize way
tic
A_hat2 = conv2(s,flip(conj(s.*exp(-1i*2*pi*fd_(:).*t))*Ts,2));
toc
% Check correctness
norm(AF_hat-A_hat2,Inf)/norm(AF_hat,Inf)
댓글 수: 1
Bruno Luong
2022년 12월 6일
편집: Bruno Luong
2022년 12월 6일
May be faster code since avoid conj and replace flip array by 2 vector-flips
t = 0:1e-3:1-1e-3;
Ts = 5e-2;
fd_ = -8:0.1:8;
s = rand(size(t));
% vectorize way
tic
A_hat2 = conv2(s,(Ts*flip(s)).*exp(2i*pi*fd_(:).*flip(t)));
toc
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!