FFTW3:解释fftw_plan_r2c_1d输出并访问输出的虚部

时间:2012-03-06 11:09:51

标签: c++ fft fftw visual-studio

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

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

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

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

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

我该怎么做?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

有关更全面的解释,请参阅this answer