我在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";
}
我该怎么做?
感谢您的帮助!
答案 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。