gpt4 book ai didi

IFFT 后虚部冲突

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:06 26 4
gpt4 key购买 nike

我只想知道 IFFT 后虚部冲突背后的原因。

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

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

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

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

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

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

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

谢谢。

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

最佳答案

如果您想要严格实数的结果(虚部全部为零),则需要在 IFFT 之前使 vector 完全共轭对称(实部镜像,虚部反镜像)。

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

关于IFFT 后虚部冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19863410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com