我想知道IFFT之后仅在假想部分发生冲突的原因。
对于我的C / C ++实现和Matlab实现,我正在执行相同的后续步骤。
除了反向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。
答案 0 :(得分:1)
如果你想要一个严格实际的结果(虚部都等于零),那么你需要在IFFT之前使矢量完全共轭对称(镜像的实部,反像虚部)。
Matlab和C对数组的索引0或1进行了不同的处理。确保您的过滤器也考虑到了这一点。