我想知道 IFFT 之后仅在虚构部分中发生冲突的原因。
对于我的 C/C++ 实现和 Matlab 实现,我都在执行相同的以下步骤。
- 我的信号x的维度是Mx1并且我对该信号执行N点 FFT(其中N = 2* M)以获得频域中的N点信号。
- 对此频域信号应用自定义滤波器(实部和虚部都逐步改变)。
- 在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')
.