обратное БПФ на шейдерном языке? - PullRequest
4 голосов
/ 24 октября 2009

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

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

Лучший, Heinrich

Ответы [ 4 ]

6 голосов
/ 25 октября 2009

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

3 голосов
/ 25 октября 2009

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

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

2 голосов
/ 31 декабря 2011

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

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

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

0 голосов
/ 25 октября 2009

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

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

...