Bonjour à tous !
Je ne suis pas sure que ce sois le bon forum.
J'essaye de calculer une FFT avec la librairie FFTW3 sous visualC++ 2008 express. J'ai récupéré un exemple que j'ai adapté mais qui me sort une System.AccessViolationException pour l'appel à fftw_execute(plan), fonction dans une dll.
J'avoue que je ne vois pas la solution et que tous les aides sont les bien venue !
la variable "in" est chargé par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 float* in; float* reOut; float* imOut; fftw_complex* spatial_repr; fftw_complex* frequency_repr; fftw_plan plan; spatial_repr = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*512); frequency_repr = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*512); /*On remplit la structure qui sera utilisée par fftw*/ for(i=0;i<512;i++) { spatial_repr[i][0] = in[i]; spatial_repr[i][1] = 0.0f; } /*on calcule le plan d'exécution*/ fftw_plan_dft_2d(512, 512, spatial_repr, frequency_repr, FFTW_FORWARD, FFTW_ESTIMATE); /*on effectue la transformée de Fourier*/ fftw_execute(plan); /*on retranscrit le résultat en 2 images, l'une représentant la partie réelle, l'autre la partie imaginaire*/ for(i=0;i<512;i++) { reOut[i]=frequency_repr[i][0]; imOut[i]=frequency_repr[i][1]; } /*on détruit les objets*/ fftw_destroy_plan(plan); fftw_free(spatial_repr); fftw_free(frequency_repr);
Critiques, Remarques, aides sont les bienvenues.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 _CRT_FLOAT fltval; String^ fileName = "datafft"; std::ifstream fichier( "datafft" ); std::string ligne; int i; if ( fichier ) // ce test échoue si le fichier n'est pas ouvert { i = 1; float tmpin[512]; while ( std::getline( fichier, ligne ) ) { tmpin[i] = _atoflt ( &fltval, (char*)ligne.c_str()) ; i++; } in = tmpin; }
MERCI !
Partager