How to speed up convolution with a million data points
    11 views (last 30 days)
  
       Show older comments
    
I am currently doing convolution using nested for loops, for 10^6 data points in each for loop. Are there ways to speed up the following code? Thanks in advance!
% nIters = 40;
% n = 1e6; 
% mzL = rand(nIters, n); 
% gg  = rand(1, n);
mzR_temp = zeros(nIters, 1);
for c = 1:n 
    mzR_temp(:) = 0;
    for d = 1:c
        mzR_temp(:) = mzR_temp(:) + gg(c-d+1) * mzL(:,d);
    end
    mzR_II(:,c) = mzR_temp;
end
0 Comments
Accepted Answer
  Matt J
      
      
 on 3 May 2024
        
      Edited: Matt J
      
      
 on 3 May 2024
  
      Use conv,
mzR_II=conv(gg,mzL,'same');
or FFTs,
mzR_II=ifft( fft(gg,2*n) .* fft(mzL,2*n) , 'symmetric');
mzR_II=mzR_II(1:n);
4 Comments
  Matt J
      
      
 on 3 May 2024
				
      Edited: Matt J
      
      
 on 3 May 2024
  
			There is absolutely no way the computation should take more than 1 second on any computer made within the last 10 years.
n=1e6;
mzL = rand(1,n);
gg = rand(1,n-1);
tic
mzR_II = [0 fftfilt(mzL,gg)];
toc
tic;
mzR_II=ifft( fft(gg,2*n) .* fft(mzL,2*n) , 'symmetric');
mzR_II=mzR_II(1:n);
toc
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




