How to speed up convolution with a million data points
10 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
Categories
Find more on Fourier Analysis and Filtering in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!