37

時系列のパワー スペクトル密度を計算したいと思います。バンドパス、ローパス、およびハイパス フィルタリングを実行します。多分他の基本的なもの。

これを行うための優れたオープンソース Java ライブラリはありますか?

私は成功せずに少し狩りをしました(たとえば、「パワースペクトル密度Java」または「信号処理Java」をグーグルで検索し、リンクをクリックして、Apache Commons、Sourceforge、java.netなどを調べました)。

私のニーズを満たさないアプレット、本、チュートリアル、商用製品などがたくさんあります。

更新:フーリエ変換のorg.apache.commons.math.transformが見つかりましこれは、パワースペクトル密度、バンドパスなどを実装していませんが、何かです。

4

5 に答える 5

23

私の最初の提案は、JavaでDSP実装を行わないことです。私の2番目の提案は、Javaで独自の単純なDSP実装を自分でロールすることです。


Javaを使用しない理由:

私は過去10年以上にわたってDSPコードを書いた経験が豊富です...そしてほとんどのDSPコードはJavaにありません...JavaでDSPを実装したい人について読むのをためらっているときは許してください。

重要なDSPを実行する場合は、Javaを使用しないでください。DSPをJavaで実装するのが非常に難しい理由は、すべての優れたDSP実装が、低レベルのメモリ管理トリック、ポインター(クレイジーな量のポインター)、大量の生データ配列などを使用するためです。

Javaを使用する理由:

単純なDSPを実行している場合は、独自のJava実装をロールします。オンラインでの実装例が非常に多く、理論が十分に文書化されているため、PSDやフィルタリングなどの単純なDSPは、どちらも比較的簡単に実装できます(実装は簡単ですが、高速ではありません)。

私の場合、Java GUIでPSDをグラフ化していたため、JavaでPSD関数を一度実装したので、Javaでパフォーマンスヒットを取得し、Java GUIでPSDを計算して、それをプロットするのが最も簡単でした。


PSDを実装する方法:

PSDは通常、dBで表示されるFFTの大きさです。FFTの大きさをdBで計算する方法を示す、学術、商業、およびオープンソースからの多くの例があります。たとえば、ApacheにはFFT出力を提供するJava実装があり、マグニチュードとdBに変換する必要があります。FFTの後は、必要なもの/欲しいものに合わせて調整する必要があります。


ローパス、バンドパスフィルタリングを実装する方法:

私の意見では、最も簡単な実装(最も計算効率が高いわけではありません)は、FIRフィルターを使用して時間領域の畳み込みを行うことです。

畳み込みは非常に簡単に実装でき、2つのネストされたforループがあり、ネット上には文字通り何百万ものサンプルコードがあります。

フィルタの設計について何も知らない場合、FIRフィルタは扱いにくい部分になります。最も簡単な方法は、Matlabを使用してFIRフィルターを生成し、係数をJavaにコピーすることです。Matlabのfirpmord()とfirpm()を使用することをお勧めします。阻止帯域で-30〜-50 dBの減衰、通過帯域で3dBのリップルを撮影します。

于 2009-06-07T23:05:49.227 に答える
9

私は本JavaDigitalSignalProcessingとそのサンプルソースコードを見つけました。コードを調べて、ニーズに合っているかどうかを確認できます。

DSPラボもチェックアウトできます。

コメントで言及されているように、duffymoとbasszeroは、Java DSPの公開以降、一部のコード例に影響を与える可能性のあるJavaへの変更がありました。特に、(比較的)新しいConcurrencyUtiltiesパッケージが役立つ場合があります。

于 2009-03-12T02:38:46.997 に答える
3

かなりまばらに見えます。SignalgoまたはjeinまたはIntel Signal Processing Libraryを試してください。ただし、最後のものは単なる JNI ラッパーだと思います。

あなたが話していたアプレットをたくさん見ました。それらの JAR を取得して、内部でクラス API を使用できると思います。ただし、ドキュメントが不足しているため、Eclipseとjadを使用して逆コンパイルし、それらが何をするかを理解する必要がある場合があります。たとえば、このページのソースを試してください。

于 2009-03-11T23:04:29.977 に答える
2

ライブラリではありませんが、別のリソースを見つけました: http://www.dickbaldwin.com/tocdsp.htm。これは、信号処理とフーリエ変換の基本的な説明であり、Java の例もいくつか含まれています。たとえば、チュートリアル 1478、1482、1486 を参照してください。コードのライセンスが不明です。

于 2009-03-18T18:22:14.550 に答える