我正在使用Exocortex.DSP C#库,但是它没有给我期望的输出。我不确定为什么会这样。在这个例子中我使用的音频文件是一个16位无符号的纯800Hz波形的.wav文件。在Audacity中,我可以看到它只是一个单独的正弦波。我使用NAudio将文件作为byte[]读入,然后使用BitConverter.Single进行转换。在对数组运行Fourier.FFT之后,我期望在samples[800]处看到显著的数据,并且其他地方都是零,但是我得到的数据与此完全不同。以下是代码...
public static void Main(string[] args)
{
var waveChannel = new WaveChannel32(new WaveFileReader("../../Files/800Hz.wav"));
var buffer = new byte[4096 * 4];
waveChannel.Read(buffer, 0, 4096 * 4);
var samples = new ComplexF[4096];
for (int i = 0; i < 4096; i++)
{
samples[i].Re = BitConverter.ToSingle(buffer, i * 4);
}
Fourier.FFT(samples, FourierDirection.Forward);
for (int i = 790; i < 810; i++)
Console.WriteLine(i + ": " + samples[i]);
}
...它给我以下输出...
790: ( -0.4223004, -0.5940632i )
791: ( -0.4242424, -0.6004524i )
792: ( -0.4241259, -0.591617i )
793: ( -0.4438736, -0.5921871i )
794: ( -0.4386246, -0.5902517i )
795: ( -0.4222358, -0.6125283i )
796: ( -0.424219, -0.586903i )
797: ( -0.4283331, -0.6008587i )
798: ( -0.4152279, -0.5989774i )
799: ( -0.4329002, -0.5994851i )
800: ( -0.4230377, -0.5904933i )
801: ( -0.4128067, -0.5878658i )
802: ( -0.4171145, -0.5898319i )
803: ( -0.4254847, -0.572481i )
804: ( -0.4199851, -0.5827408i )
805: ( -0.4186496, -0.5890546i )
806: ( -0.4181305, -0.6026474i )
807: ( -0.4402256, -0.5738652i )
808: ( -0.4149643, -0.589726i )
809: ( -0.4256677, -0.599369i )
我也尝试计算每个复数的大小,看是否能得到更有意义的结果,但仍然得到类似的结果。我不确定是代码出了什么问题还是我没有理解结果。请帮忙解答?