2013-08-06 9 views
0

J'essaie d'utiliser la FFT multidimensionnelle fftwf_plan_dft_r2c_2d à partir d'une seule matrice de données. J'ai points de données M, le nombre N de fois:FFTW FFT multidimensionnel

float *input = (float*)malloc(M * N * sizeof(float)); 
// load M*N data points data 
fftwf_complex *outputFFT = (fftwf_complex*)fftwf_malloc(N * ((M/2) + 1) * sizeof(fftwf_complex)); 
fftwf_plan forwardFFTPlan = fftwf_plan_dft_r2c_2d(N, M, input, outputFFT, FFTW_ESTIMATE); 

fftwf_execute(forwardFFTPlan); 
fftwf_destroy_plan(forwardFFTPlan); 

// Plot M data points, ignore the rest. Plotting magnitude of the data sqrtf(([REAL] * [REAL]) + ([IMAG] * [IMAG])) 

Les résultats FFT ne sont pas correctes (validée par le travail script MATLAB), mais si je prends juste un des points de données 1D FFT de M:

for(int i = 0; i < N; i++) 
{ 
    float *input = (float*)malloc(M * sizeof(float)); 
    // load M data points 
    fftwf_complex *outputFFT = (fftwf_complex*)fftwf_malloc(((M/2) + 1) * sizeof(fftwf_complex)); 
    fftwf_plan forwardFFTPlan = fftwf_plan_dft_r2c_1d(M, input, outputFFT, FFTW_ESTIMATE); 

    fftwf_execute(forwardFFTPlan); 
    fftwf_destroy_plan(forwardFFTPlan); 
} 
// Plot M data points, ignore the rest. Plotting magnitude of the data sqrtf(([REAL] * [REAL]) + ([IMAG] * [IMAG])) 

le résultat est correct. Les données chargées dans le tableau sont les mêmes. Qu'est-ce que je ne comprends pas sur les FFT multidimensionnelles? J'ai lu les pages d'aide et j'ai "pensé" que je le faisais bien, mais évidemment il me manque quelque chose ...

Répondre

0

Après avoir posé une question, j'ai trouvé mon problème: fftwf_plan_dft_r2c_2d effectue une FFT 2D que je lisais différemment. J'avais besoin d'utiliser fftwf_plan_many_dft_r2c à la place, ce qui m'a permis de spécifier les foulées et les tailles pour effectuer une FFT 1D plusieurs fois.