Pregunta

Quiero hacer una transformación 'complejo_to_real', significa el IFFT. Me di cuenta de que necesito preservar las entradas de la transformación para un uso posterior, por lo que agrego al plan de 'DFT' la bandera: "Preserve_input".

Después de agregar esta bandera, me convierto en un problema en el tiempo de compilación, va a 'dbgmalloc.c', eso significa que debería ser un problema de memoria de asignación, pero no cambié nada, y sin el nuevo indicador funcionó correctamente.

¿Puedes darme algunas pistas?

    // IFFT ( U1,U2 --> u1,u2)
    //----IFFT-----
    double *u1 = (double*) malloc(sizeof(double)*N_fft);
    double *u2 = (double*) malloc(sizeof(double)*N_fft);
    fftw_plan p3;
    fftw_plan p4;

    p3 = fftw_plan_dft_c2r_2d(alto, ancho, U1, u1, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT);
    p4 = fftw_plan_dft_c2r_2d(alto, ancho, U2, u2, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT);
    fftw_execute(p3); 
    fftw_execute(p4); 
    fftw_destroy_plan(p3);
    fftw_destroy_plan(p4); 

Saludos

Antonio

¿Fue útil?

Solución

Como se puede ver en este enlace, no es compatible con esta bandera para los DFT reales multidimensionales

http://www.fftw.org/doc/one_002dimensional-dfts-of-real-data.html

Como se señaló anteriormente, la transformación C2R destruye su matriz de entrada incluso para transformaciones fuera del lugar. Esto se puede prevenir, si es necesario, al incluir fftw_preserve_input en las banderas, con desafortunadamente algún sacrificio en el rendimiento. Esta bandera tampoco es compatible actualmente para los DFT reales multidimensionales (sección siguiente).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top