1

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

对于我的 C/C++ 实现和 Matlab 实现,我都在执行相同的以下步骤。

  1. 我的信号x的维度是Mx1并且我对该信号执行N点 FFT(其中N = 2* M)以获得频域中的N点信号。
  2. 对此频域信号应用自定义滤波器(实部和虚部都逐步改变)。
  3. N点逆 FFT 中执行。

C/C++ 和 Matlab 实现都生成完全相同的结果,除了在逆 IFFT 步骤之后,虚部不匹配但实部匹配

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

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

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

PS:如果有人能指出 C/C++ 中的 FFT 实现,那就太好了,它与相应的 Matlab 实现完全一致。

谢谢。

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

4

1 回答 1

1

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

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

于 2013-11-08T20:16:38.197 回答