Pregunta

¿Alguien sabe una implementación de la FFT inversa en HLSL / GLSL / cg ...?

Me ahorraría mucho trabajo.

Mejor, Heinrich

¿Fue útil?

Solución

DirectX11 viene con un ejemplo de FFT para los sombreadores de cálculo (consulte versión DX11 de agosto del SDK de agosto Notas ). Como señala PereAllenWebb, esto también puede usarse para FFT inversa.

Editar: si solo quieres una FFT rápida, puedes probar el CUFFT, que se ejecuta en la GPU. Es parte del SDK de CUDA. El AMCL de AMD también tiene un FFT, que actualmente no está acelerado por GPU, pero es probable que esto se agregue pronto.

Otros consejos

¿Ya tienes una implementación FFT? Es posible que ya esté al tanto, pero la inversa se puede calcular invirtiendo el orden de las N entradas, tomando la FFT sobre ellas y dividiendo el resultado por la N.

Implementé una FFT 1D en el hardware 7800GTX en 2005. Esto fue antes de CUDA, etc., así que tuve que recurrir al uso de Cg y la implementación manual de la FFT.

Tengo dos implementaciones FFT. Uno es un Radix2 Decimation in Time FFT y el otro es un Stockham Autosort FFT. El stockham funcionaría alrededor de 2 a 4 veces más rápido que una CPU (en el momento de un solo núcleo PHz de 3 GHz) para tamaños más grandes (> 8192) pero para tamaños más pequeños, la CPU era más rápida ya que no tiene que transferir datos a / desde GPU.

Si está interesado en el código del sombreador, no dude en ponerse en contacto conmigo y se lo enviaré por correo electrónico. Era de un proyecto personal, por lo que no está cubierto por ningún derecho de autor comercial. Me imagino que las implementaciones de CUDA (y otras similares) superarán enormemente a mi implementación, sin embargo, desde una perspectiva de aprendizaje, no se puede mejorar al escribir o estudiar el código usted mismo.

Tal vez podría echar un vistazo a OpenCL, que es un estándar para computación de propósito general en hardware de gráficos (y otros).
El artículo de wikipedia contiene un ejemplo de OpenCL para una FFT estándar:
http://en.wikipedia.org/wiki/OpenCL#Example

Si está en una Mac con OS X 10.6, solo necesita instalar las herramientas para desarrolladores para comenzar con el desarrollo de OpenCL. También escuché que los proveedores de hardware ya brindan soporte básico de controladores OpenCL en Windows.

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