How to do this more efficiently

G
Genesis · Feb 25, 2021 · 1.9K views
Question
I have this piece of code in MATLAB:       for kk=0:N-1 for mm=0:N-1 for pp=1:Np for qq=1:Np if ((kk*Ts+tau(pp)))<=(mm*Ts+tau(qq))) && ((kk+1)*Ts+tau(pp))>(mm*Ts+tau(qq))) thetaSR=(((kk+1)*Ts+tau(pp)))-((mm*Ts+tau(qq)))); F_SR_MR(kk+1,mm+1)=F_SR_MR(kk+1,mm+1)+conj(H(pp))*H(qq)*(thetaSR*exp(1i*pi*fc**thetaSR)*sinc(fc*thetaSR)); end which obviously is not very efficient. How can I re-write it more efficiently?  
Expert Answer
Profile picture of John Williams
John Williams PhD Expert
Answered Nov 20, 2025
It isn't necessary to do the inequality test for every possible pair of kk and mm values. Since kk and mm are integers and Ts must surely be a positive number, your pair of inequalities is logically equivalent to
 
 
 kk-mm == d
where d = floor((tau(qq)-tau(pp))/Ts). Therefore you can simply add the appropriate vectors along corresponding diagonals of F. For large N, doing it this way should save quite a bit of computation time.
 
 
F=zeros(N);
for pp=1:Np
  for qq=1:Np
    d = floor((tau(qq)-tau(pp))/Ts);
    kk = max(d,0):min(N-1,N-1+d);
    mm = kk-d;
    theta=(d+1)*Ts-(tau(qq)-tau(pp));
    ix = d+1+(N+1)*mm;
    F(ix) = F(ix)+conj(H(pp))*H(qq)*theta.*exp(1i*pi*fc*theta).*sinc(fc*theta);
  end
end
100% Run Guarantee 3-Hour Fast-Track Delivery

Need a Custom Version or Complete Simulation for This Problem?

Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.

Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!