Escribí un programa de prueba simple, donde estaba haciendo complejos a complejos FT y acabo de generar algunos datos 1..50 y los metí en la parte real e imaginaria para cada índice de la matriz.factor de escala para el CUFFT
Cuando hago una operación como ésta IFFT (FFT (A)) = A
para probarlos, estoy consiguiendo resultados diferentes para cada biblioteca.
FFTW, tengo que dividir la salida por Len (A) para volver al original Un
Sin embargo, hacer esto adelante y luego revertir FFT con CUFFT, parece que tengo que dividir por (sqrt (2) * 50) para volver a los datos originales.
¿De dónde viene este factor de raíz cuadrada extra?
de acuerdo con la documentación de CUFFT: CUFFT realiza FFT no normalizadas; es decir, realizar una FFT hacia delante en un conjunto de datos de entrada seguido de una FFT inversa en el conjunto resultante arroja datos que son iguales a la entrada escalada por el número de elementos . El tamaño de la transformación por el recíproco del tamaño del conjunto de datos se deja para que el usuario lo realice como lo considere oportuno.
Gracias de antemano
¿es una función 1D FFT? – fabrizioM
¿Puedes mencionar las transformaciones que estás realizando? el sqrt (2) hace que el nombre tenga sentido inmediato. –
Eso no suena bien. La documentación de CUDA dice explícitamente que debe ser escalada por la longitud de la matriz. ¿Estás seguro de que estás calculando las longitudes correctamente? – Mikola