web-dev-qa-db-ja.com

C#での高速フーリエ変換(FFT)の実装

C#でのFFTの無料で非常に迅速で信頼性の高い実装はどこで入手できますか?

それは製品で使用できますか?または、制限はありますか?

71
AnnaR

AForge.net は、高速フーリエ変換をサポートする無料の(オープンソース)ライブラリです。 (Sources/Imaging/ ComplexImage.cs を使用、Sources/Math/ FourierTransform.cs 実装を参照)

31
torial

AForgeをやった男はかなり良い仕事をしましたが、商業的な品質ではありません。学ぶことは素晴らしいことですが、彼が学習していることもわかるので、ピクセルあたりの正しいビット数を使用する代わりに画像のサイズを仮定するなど、かなり深刻な間違いがあります。

私はその男をノックしているわけではありません。そのすべてを学んだことを彼に敬意を表し、その方法を教えてくれます。私は彼が現在博士号を取得している、または少なくとも彼がそうなろうとしているので、彼は本当に頭が良くて、商業的に使用できるライブラリーではないと思います。

フーリエ変換と複雑な画像/数値を扱う場合、Math.Netライブラリには独自の奇妙さがあります。たとえば、私が間違っていなければ、フーリエ変換を人間の目に見える形式で出力します。変換の写真を見たい場合は人間にとってはいいのですが、データが特定の形式(通常の形式)。私はそれについて誤解する可能性がありますが、少し奇妙な点があったことを覚えているので、実際にフーリエのものに使用された元のコードに行き、それははるかにうまく機能しました。 (ExocortexDSP v1.2 http://www.exocortex.org/dsp/

Math.netには、FFTからのデータを処理する際に気に入らない他のファンキーな機能もありました。私は数学者でもエンジニアでもありません。それらの人にとって、それは完全に理にかなっているかもしれません。

そう!私は、Math.NetのベースであるExoCortexからヤンクされたFFTコードを、他に何も使用せずに使用しています。

そして最後に、C#ではないことはわかっていますが、FFTWの使用を検討し始めました( http://www.fftw.org/ )。そして、この男は既にC#ラッパーを作成しているので、チェックアウトするつもりでしたが、実際にはまだ使用していません。 ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html

ああ!学校や仕事のためにこれをやっているかどうかはわかりませんが、いずれにしても、iTunes Universityのスタンフォード教授による素晴らしい無料講義シリーズがあります。

https://podcasts.Apple.com/us/podcast/the-fourier-transforms-and-its-applications/id384232849

50
Mike Bethany

Math.NETの Iridiumライブラリ は、FFTを含む数学関連関数の高速で定期的に更新されるコレクションを提供します。 LGPLの下でライセンスされているため、商用製品で自由に使用できます。

13
Jacob

これは古いスレッドですが、価値があるものとして、ここに無料の(MITライセンス)1次元の2の長さのみのC#FFT実装があります: http://gerrybeauregard.wordpress .com/2011/04/01/an-fft-in-c /

そのパフォーマンスを他のC#FFT実装と比較していません。主にFlash/ActionScriptとSilverlight/C#のパフォーマンスを比較するために作成しました。後者は、少なくとも数値計算のためにはるかに高速です。

7

もう1つあります。 Ooura FFTのC#ポート。かなり高速です。このパッケージには、MITライセンスの下に、オーバーラップ/追加コンボリューションおよびその他のDSPスタッフが含まれています。

https://github.com/hughpyle/inguz-DSPUtil/blob/master/Fourier.cs

5
Hugh

http://www.exocortex.org/dsp/ は、FFTアルゴリズムを備えたオープンソースのC#数学ライブラリです。

5
pookleblinky

古い質問ですが、それはまだGoogleの結果に表示されます...

非常に制限のないMITライセンスC#/ .NETライブラリは、

https://www.codeproject.com/articles/1107480/dsplib-fft-dft-fourier-transform-library-for-net

このライブラリは複数のコアでスレッドを並列処理するため高速であり、非常に完全ですぐに使用できます。

3
Steve Hageman

入力を気にしない場合、Numerical Recipes Webサイト(http://www.nr.com/)にFFTがあります。LabviewプログラムをC#2008、.NET 3.5に変換してデータを取得し、次に、周波数スペクトルを見てください。残念ながら、Math.Netは最新の.NETフレームワークを使用しているため、そのFFTは使用できませんでした。 Exocortexを試してみました-うまくいきましたが、結果はLabviewの結果と一致し、問題の原因を知るのに十分なFFT理論がわかりません。そこで、数値レシピWebサイトでFFTを試してみましたが、うまくいきました!また、Labviewの低サイドローブウィンドウをプログラムすることもできました(また、スケーリング係数を導入する必要がありました)。

あなたは彼らのサイトでゲストとして数値レシピ本の章を読むことができますが、この本はとても便利なので、購入することを強くお勧めします。最終的にMath.NET FFTを使用したとしても。

2
Curt

Intelプロセッサー用に調整されたマルチスレッド実装については、IntelのMKLライブラリーを調べてみます。無料ではありませんが、手頃な価格(100ドル未満)で非常に高速です-しかし、P/Invokesを介してC dllを呼び出す必要があります。 Exocortexプロジェクトは6年前に開発を停止したため、これが重要なプロジェクトである場合は慎重に使用する必要があります。

1
Paul