HLSL/GLSL/cg での逆 FFT の実装を知っている人はいますか ... ?
それは私に多くの仕事を救うでしょう。
最高、ハインリッヒ
すでにFFTの実装がありますか?すでにご存知かもしれませんが、逆数は、N個の入力の順序を逆にし、それらをFFTで処理し、結果をNで除算することで計算できます。
DirectX11 には、計算シェーダーの FFT サンプルが付属しています ( DX11 August SDK リリース ノートを参照)。PereAllenWebb が指摘しているように、これは逆 FFT にも使用できます。
編集:高速FFTが必要な場合は、GPUで実行されるCUFFTを試すことができます。これは CUDA SDK の一部です。AMD の AMCL にも FFT があり、これは現在 GPU で高速化されていませんが、これは間もなく追加される可能性があります。
私は 2005 年に 7800GTX ハードウェアに 1D FFT を実装しました。これは CUDA などの前であったため、Cg を使用して手動で FFT を実装する必要がありました。
2 つの FFT 実装があります。1 つは Radix2 Decimation in Time FFT で、もう 1 つは Stockham Autosort FFT です。ストックハムは、より大きなサイズ (> 8192) の場合、CPU (当時は 3GHz P4 シングル コア) よりも約 2 ~ 4 倍高速に実行されますが、小さいサイズの場合、GPU との間でデータをシフトする必要がないため、CPU の方が高速でした。 .
シェーダー コードに興味がある場合は、お気軽にご連絡ください。メールでお送りします。これは個人的なプロジェクトによるものであり、商用著作権の対象ではありません。CUDA (および同様の) 実装は、私の実装よりもはるかに優れていると思いますが、学習の観点からは、自分でコードを書いたり勉強したりするよりも優れたものはありません!
グラフィックス (およびその他の) ハードウェアでの汎用コンピューティングの標準である OpenCL を見てみるとよいでしょう。
ウィキペディアの記事には、標準 FFT の OpenCL の例が含まれています:
http://en.wikipedia.org/wiki/OpenCL#Example
OS X 10.6 を搭載した Mac を使用している場合は、開発者ツールをインストールするだけで OpenCL 開発を開始できます。また、ハードウェア ベンダーが Windows で基本的な OpenCL ドライバーのサポートを既に提供していると聞きました。