Error de memoria de asignación con dft_c2r_2d & fftw_preserve_input
-
26-10-2019 - |
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
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).