2011-03-09 7 views
6

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

+0

¿es una función 1D FFT? – fabrizioM

+0

¿Puedes mencionar las transformaciones que estás realizando? el sqrt (2) hace que el nombre tenga sentido inmediato. –

+0

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

Respuesta

0

Esto terminó siendo un problema con la forma en que se calculaban los valores absolutos del número complejo. en la biblioteca std :: complex, estaba calculando la distancia del vector.

6

CUFFT tiene el mismo comportamiento que FFTW, se calcula la FFT no normalizadas. IFFT(FFT(A))=n A donde n es la longitud del vector. La longitud n está en número de muestras (no flotantes ni bytes). Hay algunas diferencias de relleno entre FFTW y CUFFT con C2R y R2C que pueden arruinar una comparación simple, pero no para C2C. Verificaría dos veces la configuración de datos y los cálculos de longitud, y verificaría su plan tanto en FFTW como en CUFFT.

Cuestiones relacionadas