0

我正在使用 MSVS 2008 中的 FFTW3 库对一些数据进行 r2c DFT (n=128)。我已经发现只使用了真实数据 DFT 输出的前半部分......如果我正在查看我的输出,这似乎是正确的:

0-64 --> 似乎是我输入转换的真正部分。

65-127 --> 总是 4.8367e-026 (我不知道为什么我期望它为零,因为它没有根据 FFTW 文档使用)

到目前为止,它似乎工作正常,但我想绘制一个功率密度谱,所以我也需要虚部,对吧?问题是我无法找到如何访问转换的虚部,我认为只需使用以下方法就可以了:

for(int i=0; i < 128; i++)
{
    std::cout << "FFT Im-Part: " << *out[i][1] << "\n";
}

我怎样才能做到这一点?

谢谢你的帮助!

4

1 回答 1

3

out[i][0]是复数 bin i 的实部,out[i][1]是虚部。

将您的测试代码更改为:

for(int i=0; i < 128; i++)
{
    std::cout << "FFT Im-Part: " << out[i][1] << "\n";
}

对于 bin 频率:对于一个 N 点 FFT,采样率为 Fs,bin k 对应的频率为:

f = Fs * k / N

因此,如果Fs = 44.1 kHz您有 128 点 FFT,则 bin 0 = 0 Hz、 bin 1 = 44100 * 1 / 128 = 344.5 Hz、 bin 2 =44100 * 2 / 128 = 689 Hz等。

请参阅此答案以获得更完整的解释。

于 2012-03-06T13:22:19.977 回答