私はしばらく訪問しているのに初めて尋ねます。
ここに問題があります:
私は現在、次のプロパティを使用してWAVEデータファイルに含まれる信号の基本周波数を分離しようとしています。
- PCMオーディオフォーマット、すなわちライナーの量子化
- 8000Hzサンプルレート
- サンプルあたり16ビット
- 16000バイトレート
1つのチャネルのみインターリーブはありません。
バイト値の取得:
System.IO.FileStream WaveFile = System.IO.File.OpenRead(@"c:\tet\fft.wav");
byte[] data = new byte[WaveFile.Length];
WaveFile.Read(data,0,Convert.ToInt32(WaveFile.Length));
これをDoubleの配列に変換します。
for (int i = 0; i < 32768; i++)//this is only for a relatively small chunk of the file
{
InReal[i] =BitConverter.ToDouble(data, (i + 1) * 8 + 44);
}
そしてそれを変換関数に最終的に渡します。
FFT FftObject = new FFT();
FftObject.Transform(InReal, InImg, 0, 32768, out outReal, out outImg, false);
最初の質問は、wavファイルのPCM値が-1と1の境界にある必要があることを理解しているためですが、Doubleに変換すると、次の値が得られます。
2.65855908666825E-235
2.84104982662944E-285
-1.58613492930337E+235
-1.25617351166869E+264
1.58370933499389E-242
6.19284549187335E-245
-2.92969500042228E+254
-5.90042665390976E+226
3.11954507295188E-273
3.06831908609091E-217
NaN
2.77113146323761E-302
6.76597919848376E-306
-1.55843653898344E+291
これらは、これらの制限内のアレイの最初のいくつかであり、残りのアレイでもあります。
私の結論は、ある種のコードの誤動作がありますが、それを見つけることができるようです。どんな助けでもいただければ幸いです。
そして2番目の質問は、応答ベクトルでFFTアルゴリズムに実際のデータのみを提供しているため、実際の部分のデータのみを期待する必要がありますか?
どうもありがとうございます。