fftw库,fftw_plan_dft_r2c_1d的输出大小是多少?

时间:2016-04-15 03:24:45

标签: fft fftw

我是fftw库的新手。我有一个n个真实数据的数组,并使用fftw_plan_dft_r2c_1d来查找fft频谱。什么是输出的大小。它和输入一样吗?此外,结果中心是0 Hz还是我必须手动完成?

2 个答案:

答案 0 :(得分:3)

对于实数到复数变换,您可以获得N个实数输入的N / 2 + 1个复数输出(不会生成冗余对称输出)。

0 Hz分量位于bin 0。

FFTW manual已涵盖这一点。

答案 1 :(得分:0)

这不是您问题的答案,但我希望它可以解决您的问题。

如果您只想查找数据的频谱,可以使用“halfcomplex”格式。

这是一段代码:

double *in,*out;
fftw_plan myplan;
in  = fftw_malloc (N*sizeof(double));
out = fftw_malloc (N*sizeof(double));

myplan = fftw_plan_r2r_1d(N,in,out,FFTW_R2HC,FFTW_FORWARD);

// Fill in[] with your data.
...
fftw_execute(myplan);

现在out包含r0,r1,r2,...,rn / 2,i(n + 1)/ 2-1,...,i2,i1,因为它写在手册中

  • r0,out[0],是您的数据/信号的平均值。
  • r1,out[1],是DFT第一个元素的真实部分。
  • ...
  • i0为0,因为您使用的是真实数据,因此未存储在out中。
  • i1,out[N-1],是DFT第一个元素的虚部。
  • i2,out[N-2],是DFT第二个元素的虚部。

如果N是偶数,则r(N / 2)out[N/2]是奈奎斯特频率幅度。

  

我是fftw库的新手

请记住,FFTW仅通过三角函数计算数据的乘积,但不会对它们进行标准化。 您可以找到有关halfcomplex here的更多信息。