标准化 fftw_plan_dft_r2c_1d 产生的 fft

信息处理 fft C++
2022-02-07 10:59:56

fftw_plan_dft_r2c_1d接受一个实数数组并生成一个复数数组,其大小为输入数组 + 1 的 1/2。

根据 fftw 的网站:

由于这种对称性,输出 Y 的一半是冗余的(作为另一半的复共轭),因此 1d r2c 仅转换 Y 的输出元素 0...n/2(n/2+1 复数字),其中除以 2 向下舍入。

当我归一化时,我是否按 fft 的大小或生成的 fft_size / 2 进行归一化

    // normalize the fft
    for (unsigned int x = 0; x <(fftSize/2); x++)
        array[x] = array[x] / complex<double>((fftSize/2), 0);   <<<<<

或者

    // normalize the fft
    for (unsigned int x = 0; x <(fftSize/2); x++)
        array[x] = array[x] / complex<double>(fftSize, 0);       <<<<<
1个回答

阅读手册,即使只返回了一半的数据,也计算出全长 FFT:

在此处输入图像描述

因此,您应该通过将全长归一化为: 进行归一化fft_size