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.

 채택된 답변

Bruno Luong
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
Elapsed time is 0.074924 seconds.
% vectorize way
tic
A_hat2 = conv2(s,flip(conj(s.*exp(-1i*2*pi*fd_(:).*t))*Ts,2));
toc
Elapsed time is 0.083580 seconds.
% Check correctness
norm(AF_hat-A_hat2,Inf)/norm(AF_hat,Inf)
ans = 6.7209e-16

댓글 수: 1

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
Elapsed time is 0.076804 seconds.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

제품

릴리스

R2020b

질문:

2022년 12월 3일

편집:

2022년 12월 6일

Community Treasure Hunt

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

Start Hunting!

Translated by