Convolution de 2 tableaux unidimensionnels avec FFTW C++
Convolution de 2 tableaux unidimensionnels avec FFTW C++ - C++ - Programmation
MarshPosté le 05-10-2011 à 16:49:41
Bonjour,
Je viens tout juste de télécharger la bibliotheque fftw3 et j'ai lu le tutorial. En fait, mon but est de faire la convolution de deux énormes tableaux de double, et je veux utiliser la transformée de fourrier pour des critères de rapidité.
Je sais que pour faire la convolution, il faut suivre cet algorithme ci dessous:
Etape 1 TF(A)=FFT(A) avec A un de nos tableaux de départ de taille M TF(B)=FFT(B) avec B un de nos tableaux de départ de taille N
Etape 2 Puis faire TF(A)*TF(B)
Etape 3 Et finir par faire l'inversion en obtenant Conv(A,B) = IFFT( TF(A)*TF(B) ) qui aura une taille égale à M+N-1.
Mon problème se situe à l'étape 2, je ne sais vraiment pas comment implémenter cette étape. Je sais qu'il faut faire un zéro padding sur les vecteurs A ET B pour les avoir avec une taille égale à M+N-1 avant de faire leur transformée de fourrier
Aidez moi, c'est la seule étape qui reste pour que je finisse un projet. Je vous mets mon code à la suite et à la ligne 51 se trouve la fonction qui permet de faire la multiplication des transformées de fourrier
Code :
void confftW (fftw_complex* A, fftw_complex* B, int M, int N) {
Marsh Posté le 05-10-2011 à 16:49:41
Bonjour,
Je viens tout juste de télécharger la bibliotheque fftw3 et j'ai lu le tutorial.
En fait, mon but est de faire la convolution de deux énormes tableaux de double, et je veux utiliser la transformée de fourrier pour des critères de rapidité.
Je sais que pour faire la convolution, il faut suivre cet algorithme ci dessous:
Etape 1
TF(A)=FFT(A) avec A un de nos tableaux de départ de taille M
TF(B)=FFT(B) avec B un de nos tableaux de départ de taille N
Etape 2
Puis faire TF(A)*TF(B)
Etape 3
Et finir par faire l'inversion en obtenant Conv(A,B) = IFFT( TF(A)*TF(B) ) qui aura une taille égale à M+N-1.
Mon problème se situe à l'étape 2, je ne sais vraiment pas comment implémenter cette étape.
Je sais qu'il faut faire un zéro padding sur les vecteurs A ET B pour les avoir avec une taille égale à M+N-1 avant de faire leur transformée de fourrier
Aidez moi, c'est la seule étape qui reste pour que je finisse un projet.
Je vous mets mon code à la suite et à la ligne 51 se trouve la fonction qui permet de faire la multiplication des transformées de fourrier
Je vous remercie d'avance