How to speed up convolution with a million data points
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Matt J
le 3 Mai 2024
Modifié(e) : Matt J
le 3 Mai 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 commentaires
Matt J
le 3 Mai 2024
Modifié(e) : Matt J
le 3 Mai 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
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Fourier Analysis and Filtering dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!