Code Optimization, for loop
Mostra commenti meno recenti
Is it possible to make this code faster?
%
RevPSD = zeros(size(X));
for m = Tmin + 1:size(X,2)
for i = Tmin:Tmax
if m - i <= 0
break
else
RevPSD(:,m) = RevPSD(:,m) + exp(-2*delta*i*hop/fs)*(Xpsd(:,m-i));
end
end
end
2 Commenti
Christoph F.
il 28 Set 2017
Two suggestions:
The inner loop only loops from Tmin to (m-1). The extra comparison of m and i inside the loop could be removed if the loop condition is changed, e.g.
for i = Tmin:(m-1)
RevPSD(:,m) = RevPSD(:,m) + exp(-2*delta*i*hop/fs)*(Xpsd(:,m-i));
end
The values of the term
exp(-2*delta*i*hop/fs)
only depend on i can could be pre-calculated for every possibly value of i outside the loop. e.g.
exptable = exp(-2*delta*(Tmin:Tmax)*hop/fs);
for m = Tmin + 1:size(X,2)
for i = Tmin:(m-1)
RevPSD(:,m) = RevPSD(:,m) + exptable(i-Tmin+1)*(Xpsd(:,m-i));
end
end
Jan
il 28 Set 2017
@Christoph F: Please post this in the answer sections.
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su ループと条件付きステートメント in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!