第一次问虽然我已经访问了一段时间。
这是问题所在:
我目前正在尝试使用以下属性隔离 WAVE 数据文件中包含的信号的基频:
- PCM 音频格式,即线性量化
- 8000 赫兹采样率
- 每个样本 16 位
- 16000 字节速率
只有一个通道,没有交错。
获取字节值:
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));
将其转换为双精度数组:
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
这些是这些限制中的第一个数组,也是数组的其余部分。
我的结论是我有某种代码故障,但我似乎能够找到它。任何帮助,将不胜感激。
第二个问题,因为我只在响应向量中向 FFT 算法提供真实数据,我是否也应该只期望真实部分数据?
非常感谢。