オーディオファイルの操作中に問題が発生しました。オーディオファイルを処理するアルゴリズムを実装しています。このアルゴリズムでは、入力が5KHzのモノラルオーディオファイルである必要があります。
私が持っているオーディオファイルのほとんどはPCM44.1KHz 16ビットステレオです。私の問題は、44.1KHzステレオファイルを5KHzモノラルファイルに変換する方法です。
アイデアの背後にあるDSPの基本やJAVAライブラリを説明するチュートリアルを誰かが提供してくれれば幸いです。
オーディオファイルの操作中に問題が発生しました。オーディオファイルを処理するアルゴリズムを実装しています。このアルゴリズムでは、入力が5KHzのモノラルオーディオファイルである必要があります。
私が持っているオーディオファイルのほとんどはPCM44.1KHz 16ビットステレオです。私の問題は、44.1KHzステレオファイルを5KHzモノラルファイルに変換する方法です。
アイデアの背後にあるDSPの基本やJAVAライブラリを説明するチュートリアルを誰かが提供してくれれば幸いです。
Prasad が既に述べたことを補強するために、結果のエイリアシングを防ぐために、ダウンサンプリングの前に 2.5 kHz で信号をローパス フィルター処理する必要があります。元の信号に 4 kHz のトーンが含まれている場合、5 kHz のサンプル レートでは表現できない可能性があり、2.5 kHz のナイキスト制限を越えて折り返され、1.5 kHz で偽の (「エイリアスされた」) トーンが作成されます。 .
関連参照: Java を使用してローパス フィルターを実装する方法
また、44100 から 5000 Hz にダウンサンプリングする場合は、元の 8.82 サンプルごとに 1 つ保存します。良い整数除算ではありません。これは、元の信号から非整数値をサンプリングするため、ある種の補間も使用する必要があることを意味します。
私が通常扱っているステレオPCMでは、pcmバイトアレイの16ビット値は特定のステレオチャネルに対応するデータポイントであり、これはインターリーブと呼ばれます。したがって、最初にステレオチャネル内の1つおきの値を取得して、モノラルPCMバイトアレイを抽出します。
周波数のダウンサンプリングに関しては、44100 Hzのオーディオファイルを5000Hzのオーディオファイルのように再生すると、データが多すぎてサウンドが遅くなります。したがって、int(44100/5000)の増分でサンプルを取得して、5kHzの信号にダウンサンプリングします。
Java Sound API (javax.sound.*) には、サウンドを操作するための便利な関数が多数含まれています。
http://download.oracle.com/javase/tutorial/sound/index.html
オーディオ ファイルを簡単にダウンサンプリングするために、既に実装されている Java コードをここで見つけることができます。