時系列のパワースペクトル密度を計算したいと思います。バンドパス、ローパス、およびハイパスフィルタリングを実行します。他の基本的なものかもしれません。
素敵なオープンソースJavaライブラリはありますか?
私は少し成功しませんでした(たとえば、「パワースペクトル密度Java」または「信号処理Java」をグーグルでクリックしてリンクをクリックし、Apache Commons、Sourceforge、Java.netなどを調べました)。
私のニーズに合わないアプレット、本、チュートリアル、商用製品などがたくさんあります。
更新:フーリエ変換の org.Apache.commons.math.transform が見つかりました。これは、パワースペクトル密度、バンドパスなどを実装していませんが、何かです。
私の最初の提案は、JavaでDSPを実装しないことです。 2番目の提案は、Javaで独自の単純なDSP実装をロールバックすることです。
Javaを使用しない理由:
私は過去10年以上にわたってDSPコードを書いた経験がたくさんあります...そしてDSPコードはほとんどJavaではありません...だからJavaでDSPを実装したい人について読むのをためらうとき私を許してください。
非自明なDSPを行う場合は、Javaを使用しないでください。 DSPがJavaで実装するのが非常に苦痛である理由は、すべての優れたDSP実装が低レベルのメモリ管理トリック、ポインター(大量のポインター)、大きな生データ配列などを使用するためです。
Javaを使用する理由:
シンプルなDSPのものを使用している場合は、独自のJava実装。PSDやフィルタリングなどのシンプルなDSPの両方は比較的実装例が非常に多く、理論がオンラインで十分に文書化されているため、実装が簡単です(実装は簡単ですが、高速ではありません)。
私の場合、PSD関数をJavaに1回実装しました。これは、PSDをJava GUIでグラフ化していたため、 Javaで、PSDをJava GUIで計算してからプロットします。
PSDの実装方法:
PSDは通常、dB単位で表示されるFFTの大きさです。学術、商業、およびオープンソースの多くの例があり、dB単位でFFTの大きさを計算する方法を示しています。たとえば ApacheにはJava実装があります 出力があり、振幅とdBに変換する必要があります。FFTの後は何に合わせて調整する必要がありますあなたが必要/したい。
ローパス、バンドパスフィルタリングの実装方法:
私の意見では、最も簡単な実装(最も計算効率が良くない)は、FIRフィルターを使用して時間領域の畳み込みを行うことです。
畳み込みは非常に簡単に実装でき、ネストされたforループが2つあり、文字通り何百万ものサンプルコードがネット上にあります。
FIRフィルターは、フィルターの設計について何も知らない場合、扱いにくい部分になります。最も簡単な方法は、Matlabを使用してFIRフィルターを生成し、係数をJavaにコピーすることです。 Matlabのfirpmord()およびfirpm()を使用することをお勧めします。遮断帯域で-30〜-50 dBの減衰、通過帯域で3 dBのリップルを撮影します。
私は本を見つけました Java Digital Signal Processing およびその ソースコード例 。コードを調べて、ニーズに合っているかどうかを確認できます。
DSP Laboratory もチェックアウトできます。
Duffymoとbasszeroがコメントで言及したように、Java Java DSPがコード例の一部に影響を与える可能性があるため、Java $ ===に変更が加えられました。 、(比較的)新しい Concurrency Utiltiesパッケージ が役立つかもしれません。
いくつかのJava DSPクラス、たとえばIIRフィルターのコレクションを作成しました:
かなりまばらに見えます。 Signalgo または jein または Intel Signal Processing Library を試してみてください。ただし、最後のものは単なるJNIラッパーだと思います。
あなたが話していたアプレットをたくさん見ました。それらのJARを取得し、内部でクラスAPIを使用できる可能性があると思います。ただし、ドキュメントが不足しているため、Eclipseとjadを使用して、それらの機能を逆コンパイルして把握する必要があります。 このページ でソースを試してください。
ライブラリではありませんが、別のリソースを見つけました: http://www.dickbaldwin.com/tocdsp.htm 。いくつかのJavaの例。チュートリアル1478、1482、1486の例を参照してください。コードのライセンスが不明です。