2010-09-22 4 views
1

Je suis en train de faire un lot FFT sur 50 images en utilisant l'extrait suivant:Comment lots FFT en C

pix3 = n*pix1*pix2; 
fftwf_complex *in2, *f2h; //input for FFT2 
in2 = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * pix3); 
f2h = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * pix3); 

for (i = 0; i < pix3; i++) 
{ 
in2[i][0] = ref20[i]; //ref20 is an array of real values 
in2[i][1] = 0; 
}  

for(i = 0; i < n; ++i) 
{ 
    plan_forward2 = fftwf_plan_dft_2d (pix1, pix2, in2, f2h, FFTW_FORWARD, FFTW_ESTIMATE); 
    fftwf_execute (plan_forward2); 
    in2 += pix1*pix2; 
    f2h += pix1*pix2; 
} 

Cependant, je ne suis en mesure d'obtenir la FFT de la 1ère image (ie premier PIX1 * éléments pix2). Des suggestions sur la façon d'obtenir ce droit?

Merci à l'avance

+0

Vous devrez peut-être montrer la code entre l'allocation de mémoire initiale et la boucle for, c'est-à-dire la partie qui charge réellement les images dans in2. –

+0

après allocation de mem, je suis juste en train de lire les données (size = pix3) d'un fichier texte puis de convertir ma variable en un type complexe (in2) – vivekv80

Répondre

2

Vous devriez lire the manual 4.6 New-array Execute Functions attentivement

Il vous suffit de créer le plan une fois en dehors de la boucle, puis l'utiliser comme:

fftwf_execute_dft(plan_forward2, in2, f2h); 
+0

L'interface "avancée" permet des batchs, c'est ce que j'utilise ... Je me demande si la seule réutilisation du même plan aurait la même vitesse avec moins de consommation de mémoire. –