我最近开始使用MathNet.Numerics,我的需求之一是对肌电信号进行 FFT 分析。
我做的第一个测试是在 2kHz 下获得大约 15 秒的信号,它是这样绘制的:

我有一个前段时间写的 Python 脚本,生成的 FFT 谱如下:
lenfft = len(signal)/2.
nyq = 2000/2.
freq_axis = numpy.linspace(0, nyq, lenfft+1)
spectrum = numpy.abs(numpy.fft.rfft(signal))
plt.plot(freq_axis, spectrum)
plt.show()

问题是,当我使用 MathNet.Numerics 时,我得到了一个奇怪的结果(下面的代码和图像):
Complex[] signal = ArrayOfDoublesFromFile()
.Select(val => new Complex(val, 0))
.ToArray();
Fourier.Forward(signal, FourierOptions.Default); // inplace
SaveToFile(signal);

我知道如果输入是纯实数,输出应该是对称的或类似的东西,但由于Fourier.Forward()需要一个MatNet.Numerics.Complex[]数组,我正在创建一个虚部设置为零的数组,并且只使用结果的实部进行绘图,那是对的吗?
所以,问题是: 生成的输出的含义是什么,MathNet.Numerics.Fourier.Forward()如果我想要一个最常与 FFT 相关的视觉形式的结果,即中间图,我应该做什么?