問題タブ [fftw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
186 参照

c - fftw3 によるフル スペクトル データからの画像の復元

復元する画像のフル フーリエ スペクトルがある場合、fftw3 を使用して画像を復元するにはどうすればよいですか? fftwf_complex **arr1 を fftwf_complex *arr2 に変換して fftwf_plan_dft_c2r_2d に入れようとしましたが、出力では予期しないノイズが発生しましたが、予期したイメージではありませんでした。

逆高速フーリエ変換を行います。

TIFF に保存するためのイメージの再作成:

IFFTSHIFT を使用してスペクトルが IFFT 関数に入れられているため、FFTSHIFT を使用します。

0 投票する
2 に答える
898 参照

c++ - PPL と並列メモリ割り当てによるスレッド ID

Microsoft PPL ライブラリと並列プログラミング全般について質問があります。FFTW を使用して、64 x 64 x 64 FFT と逆 FFT の大規模なセット (100,000) を実行しています。現在の実装では、並列 for ループを使用し、ループ内でストレージ配列を割り当てます。これらのケースでは、CPU 使用率が約 60 ~ 70% しか上がらないことに気付きました。(これは、私がテストした FFTW によって提供される組み込みのスレッド化された FFT よりも優れた使用率であることに注意してください)。fftw_malloc を使用しているため、完全な使用を妨げている過剰なロックが発生している可能性はありますか?

これに照らして、メイン処理ループの前に各スレッドにストレージ配列を事前に割り当てて、ループ自体の中でロックが不要になるようにすることをお勧めしますか? もしそうなら、MSFT PPL ライブラリでこれがどのように可能になるのでしょうか? 私は以前に OpenMP を使用していました。その場合、提供された関数を使用してスレッド ID を取得するのは簡単です。ただし、PPL ドキュメントで同様の関数を見たことがありません。

0 投票する
1 に答える
2537 参照

matlab - FFTWをMatlabFFTのトップに最適化

MatlabのFFTでは、計算を実行しているスレッドの数を選択できません(http://stackoverflow.com/questions/9528833/matlabs-fftn-gets-slower-with-multithreading)。デフォルトでは、スタンドアロンのMATLAB上のすべてのコアを使用します。ただし、クラスターでは、各ワーカーはデフォルトで単一のCPUで起動されます。より多くのコアで動作するように強制することができます(maxNumCompThreads関数)。これは代数演算で完全に機能しますが、FFT関数は(奇妙なことに?)シングルコアのままです。したがって、(matlabのように)fftwライブラリを使用してmexファイルを作成し、必要なコア数でfftを計算しました。しかし、FFTW_ESTIMATEプランナー(Matlabのデフォルト)と明確な知恵を使用してコードを比較しようとすると、コードはMatlab fftよりも3〜4倍遅いままです。

これが私がmexに使用したコードです(FFT2mxという名前の2D fftに適用されます):

関連するmatlabコード:

静的ライブラリを使用してmexコードをコンパイルします。

すべてがうまく機能します、それはただ遅いです。

FFTWライブラリは、次の引数を使用してコンパイルされています。

このコードは、2つのクアッドコアAMD Opteron(tm)を備えた1つのクラスターノードで実行しており、次のコマンドでテストしています。

魔女が戻る:

mexコードをどのように調整できますか?fftwライブラリのコンパイルを最適化できますか?ESTIMATEプランナーのみを使用してfftwアルゴリズムを高速化する方法はありますか?

私は洞察を探しています。ありがとうございました。


編集:

私はあなたが提案したことを考慮に入れ(知恵と静的な計画を使用して)、この更新されたコードを書きました:

関数を数回呼び出した後(2から6の間)、セグメンテーション違反が発生しましたが、その理由がわかりません。ポインタで初期化する別の方法を試しました。また、対応する静的プランを操作するには、プランのポインターが静的である必要があることもどこかで読みました。私が間違っているのを見たことがありますか?

洞察に感謝します。

0 投票する
2 に答える
1665 参照

3d - fftwライブラリを使用した3d c2c fft

FFTW ライブラリで 3D FFT を実行しようとしていますが、逆変換に問題があります。

最初に、次の方法で序文の変換を行います。

私のデータは実際のデータですが、複雑から複雑への変換のみをサポートする opencl fft に後で置き換えたいため、複雑から複雑への変換を使用しています。

3D フーリエ空間では、非常に単純なローパス フィルターを実行します。

最後に逆変換:

結果は私が期待するものではありません。逆変換後、虚数部は想定どおりにすべてゼロではありません。

私が見る限り、実際のデータの順方向変換の後、合計バッファー サイズの半分のみが使用され、残りの半分には共役複素数値はありません。(参照: c2c with real data ) この場合、後方変換の前に自分でそれらを計算する必要がありますが、fftw ドキュメントで半分が計算され、どれが計算されないかのヒントを見つけることができませんでした。

この対称性をフーリエ空間で表示するために、非常に単純な 2D-Test-Case を作成しました。

これにより、次の出力が得られます。

私が見る限り、対称値はありません。なんで?

どなたかヒントを頂ければ幸いです。

ご挨拶

0 投票する
1 に答える
413 参照

ctypes - Python Ctypes と FFTW リンク

Ctypesを使用してfftw3に依存するpythonでac数値ライブラリを使用しようとしています。次のようなプログラムがあるとします。

次に、次を使用してこれをコンパイルします。

ctypes を使用して Python にロードしようとすると、正しくリンクされていないようです:

Python プリント:

最初は ./configure make make install でセットアップされた fftw 3.1 の新規インストールを使用していましたが、その後、ここで概説されているように「-fPIC」などのさまざまなオプションを使用して fftw を再コンパイルしようとしました。これにより、同じエラーメッセージが表示され、今はアイデアがありません。この同じ手順は、GSL のような外部ライブラリを使用する他のライブラリを Python にインポートするために機能していたため、FFTW3 で何が問題になっているのかわかりません。どんな助けでも大歓迎です。

〜ダグ

0 投票する
1 に答える
1385 参照

2d - fftw c2c:変換された実際のデータに対称性がありません

最近、fftwの使用とそれがc2c変換に関するいくつかの問題に直面しました(fftwライブラリを使用した3d c2c fftを参照)。fftw libの使用で問題を見つけたので、この状況をより具体的に議論するために新しい質問を作成しました。実データを使用して複素数から複素数への変換を行っているため、フーリエ空間で変換されたデータは対称であると想定されます。F [n] = con(F [Nn])

次に、テストデータの小さなブロックを使用していくつかの変換を行い、変換されたデータのこの対称性を確認しました。1D変換では、すべてが期待どおりに機能しましたが、より高い次元では、実際に予期しない結果が得られました。

私はfftwf_plan_dft_2d8x8のグレースケール画像をフーリエ空間に変換するために使用しています。複雑な結果は次のようになります。

この長いデータリストについては申し訳ありませんが、それは私の問題を示しています。

たとえば、F[3]=-182.721 + 15.8486i私は期待F[64-3] = F[61] = -182.721 - 15.8486iしていましたが、ご覧のとおりです-84.7868 + 9.10052i。代わりに、の共役はF[3]インデックス5にあります。他のペアについても同じです。

システムがある場合、私はそれを見つけることができません。

完全なコードは次のとおりです。

助けていただければ幸いです。:-D

ご挨拶

0 投票する
1 に答える
3063 参照

fft - fftw を使用した理想的なローパス フィルター

繰り返しますが、まだローパス フィルターを実行しようとしていますが、なぜこれがまだ実行されていないのかわかりません。画像に理想的なローパス フィルターを適用するために、 FFT フィルターと前の質問FFT 質問に従ってコードを方向付けました。以下のコードは、画像を暗くして、結果の画像に白いピクセルを配置するだけです。

いくつかの助けをいただければ幸いです。

0 投票する
1 に答える
1026 参照

matlab - MEX および MATLAB 引数の問題を伴う FFTW

MATLAB からの FFT 計算に使用されるスレッドの数を制御するために、FFTW ライブラリを使用して次の C/MEX コードを作成しました。FFTW_ESTIMATEこのコードは、MATLAB よりも低速ですが、プランナーの引数を使用して (複雑な FFT フォワードおよびバックワードで) うまく機能します。しかし、FFTW_MEASUREFFTW プランナーを調整するという議論に切り替えると、前方に 1 つの FFT を適用してから後方に 1 つの FFT を適用しても、最初のイメージが返されないことがわかりました。代わりに、画像は係数でスケーリングされます。を使用FFTW_PATIENTすると、ヌル行列でさらに悪い結果が得られます。

私のコードは次のとおりです。

Matlab 関数:

FFT フォワード:

FFT 逆方向:

Mex 関数:

FFT フォワード:

FFT逆方向

この MEX 関数は、FFTW のドキュメントで提案されているように、ポインターの切り替え、および関数とプランの実行のみpr <-> piが上記と異なります。pr2 <-> pi2CreatePlan

私が走れば

と引数をそれぞれ使用すると、この結果が得FFTW_MEASUREられますFFTW_ESTIMATE

これは私のコードまたはライブラリのエラーによるものなのだろうか。保存ではなく、知恵の周りで別のことを試しました。FFTW単体ツールの知恵を使って知恵を生み出す。改善は見られませんでした。なぜこれが起こっているのか誰にも示唆できますか?

追加情報:

スタティック ライブラリを使用して MEX コードをコンパイルします。

FFTW ライブラリは以下でコンパイルされていません:

成功せずにさまざまなフラグを試しました。Linux 64 ビット ステーション (AMD opteron クアッド コア) で MATLAB 2011b を使用しています。

0 投票する
2 に答える
5187 参照

opencv - FFTW 対 OpenCV cvDFT

OpenCV の cvDFT (http://goo.gl/YCHj0) の代わりに FFTW (http://www.fftw.org/) を使用すると、高速化を期待できますか?

私のプログラムの実行時間は、逆 DFT と順 DFT の適用によって大きく左右されます。OpenCV cvDFT の代わりに FFTW を使用することを考えています。

IIRC FFTW はある種の「ランタイム コンパイル」を行いますが、cvDFT は単純な FFT 実装であるため、処理が少し高速化されると思います。

ですから、自分で試してみる前に、誰かが同じ質問につまずいて以前に解決した場合に備えて、ここで質問することを考えました.

前もって感謝します

0 投票する
0 に答える
480 参照

openmp - OpenMP を使用した FFTW のドキュメントの誤解またはタイプミス

この引用はFFTWマニュアルからのものです:

[...] 3 番目に、並列化したいプランを作成する前に、以下を呼び出す必要があります。

void fftw_plan_with_nthreads(int nthreads);

nthreads 引数は、FFTW で使用するスレッドの数 (実際には最大数) を示します。[...]

OpenMP で、現在実行中のすべての OpenMP スレッド (omp_set_num_threads(nthreads) または OMP_NUM_THREADS環境変数によって設定) を使用するように FFTW を構成するには、次のようにします fftw_plan_with_nthreads(omp_get_num_threads()

最後のコマンドが間違っていると思います。である必要がありますfftw_plan_with_nthreads(omp_get_max_threads())omp_get_num_threads()現在のスレッド数を返します。しかし、それはおそらく1、1 つのスレッドで fftw_plan を作成しているためです。omp_get_num_threads()は の値を返さOMP_NUM_THREADSず、 の逆ではありませんomp_set_num_threads(nthreads)

私は正しいですか、それともFFTWまたはOpenMP APIのどちらかを誤解していますか?