IFFT后虚构部分的冲突

时间:2013-11-08 16:02:27

标签: c matlab signal-processing fft ifft

我想知道IFFT之后仅在假想部分发生冲突的原因。

对于我的C / C ++实现和Matlab实现,我正在执行相同的后续步骤。

  1. 我的信号 x 的维度为 Mx1 ,我执行 N 点FFT(其中 N = 2 * M )在该信号上获得频域中的 N 点信号。
  2. 在此频域信号上应用自定义滤波器(实部和虚部均在步骤中更改)。
  3. 执行 N -point逆FFT。
  4. 除了反向IFFT步骤之外,C / C ++和Matlab实现都生成完全相同的结果,虚部不匹配但实部匹配

    如果我跳过上面的第2步,两个实现的IFFT输出都没有任何问题。 意图是我对IFFT的输入信号(即,在步骤2滤波器之后)不需要是共轭对称的。事实上,这个信号甚至可能不是Hermitian /对称。

    目前,我正在使用定义为此CPP-FILE中可用的函数smbFft的FFT / IFFT的C实现。

    任何线索,为什么会发生这种情况?

    PS:如果有人能指出我在C / C ++中的FFT实现,那将是很好的,这与相应的Matlab实现完全一致。

    感谢。

    编辑:我刚刚测试了FFTW实现,而不是smbFfT(我在上面提到过)。 FFTW实现也具有相同的问题,这表明这两个测试的C实现都执行具有厄米对称性设置的IFFT。我需要在C中执行与C IFFT(..., 'nonsymmetric')相同的IFFT。

1 个答案:

答案 0 :(得分:1)

如果你想要一个严格实际的结果(虚部都等于零),那么你需要在IFFT之前使矢量完全共轭对称(镜像的实部,反像虚部)。

Matlab和C对数组的索引0或1进行了不同的处理。确保您的过滤器也考虑到了这一点。