Вопрос

кто - нибудь знает реализацию обратного БПФ в HLSL / GLSL / cg ...?

Это сэкономило бы мне много работы.

С наилучшими пожеланиями, генрих

Это было полезно?

Решение

DirectX11 поставляется с примером FFT для вычислительных шейдеров (см. Примечания к выпуску DX11 August SDK).Как указывает PereAllenWebb , это также может быть использовано для обратного БПФ.

Редактировать:Если вам просто нужен быстрый FFT, вы могли бы попробовать CUFFT, который работает на графическом процессоре.Это часть CUDA SDK.AMCL от AMD также имеет FFT, который в настоящее время не ускоряется с помощью GPU, но, скорее всего, скоро будет добавлен.

Другие советы

У вас уже есть реализация FFT?Возможно, вы уже знаете, но обратное может быть вычислено путем изменения порядка N входных данных, использования БПФ поверх них и деления результата на N.

Я внедрил 1D FFT на оборудовании 7800GTX еще в 2005 году.Это было до CUDA и т.д., поэтому мне пришлось прибегнуть к использованию Cg и вручную реализовать FFT.

У меня есть две реализации FFT.Один из них - это прореживание Radix2 во временном БПФ, а другой - БПФ автоматической сортировки Стокхэма.Stockham будет работать примерно в 2-4 раза быстрее, чем CPU (в то время одноядерный процессор P4 с частотой 3 ГГц) для больших размеров (> 8192), но для меньших размеров CPU был быстрее, поскольку ему не нужно передавать данные в / из GPU.

Если вас интересует код шейдера, не стесняйтесь обращаться ко мне, и я отправлю его по электронной почте.Это был личный проект, поэтому на него не распространяется никакое коммерческое авторское право.Я бы предположил, что реализации CUDA (и подобных им) значительно превзошли бы мою реализацию, однако с точки зрения обучения вы не можете добиться большего, чем написать или изучить код самостоятельно!

Возможно, вы могли бы взглянуть на OpenCL, который является стандартом для вычислений общего назначения на графическом (и другом) оборудовании.
Статья в википедии содержит пример OpenCL для стандартного FFT:
http://en.wikipedia.org/wiki/OpenCL#Example

Если вы используете Mac с OS X 10.6, вам просто нужно установить инструменты разработчика, чтобы начать разработку OpenCL.Я также слышал, что поставщики оборудования уже предоставляют базовую поддержку драйверов OpenCL в Windows.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top