2011-04-20 15 views
5

Sé que en el dominio del tiempo la convolución es una operación bastante costosa entre dos matrices y puede realizarla en el dominio de frecuencia transformándolas en el plano complejo y usando la multiplicación (y luego en el dominio del tiempo)Convolución con FFT, ¿cómo funciona esto?

De todos modos no entiendo cómo se realiza esto en el SDK de CUDA donde los datos y el kernel se rellenan y colocan en dos búferes (m_PaddedKernel y m_PaddedData), esto debería ser para acelerar el método Cooley-Tuckey, luego se llama a la función cufftExecC2C para transformar primero el Kernel (y ¿por qué C2C? complejo a complejo, ¿por qué no de real a complejo?) en el plano complejo y luego todos los datos en el mismo plano

El kernel definido spProcess2D_kernel activa un d parece que se normaliza y ejecuta la multiplicación entre datos y kernel en el dominio de la frecuencia (¿cómo hacer la multiplicación de dos funciones? Creo que se refieren a la composición de las dos funciones) y de vuelta con la transformación C2C (todavía preguntándose por qué C2C y no C2R)

+0

¿Te refieres al ejemplo 'simpleCUFFT.cu'? –

+0

sí señor, exactamente –

Respuesta

2

En cuanto a por qué esto se puede hacer con la FFT, debe leer sobre convolution theorem.

En general, sus datos de entrada pueden ser complejos. Entonces esa es la razón por la que se usa C2C.

+1

Gracias, pero no estoy buscando si esto se puede hacer, estoy de acuerdo con eso. Pero no sé "cómo" se implementa de esa manera –

+0

@Paul: Entonces no estoy seguro de cuál es su pregunta ... –

+0

No estoy seguro de cómo se implementa la FFT en el SDK de CUDA, lo leí pero no puedo entenderlo –