我想知道冲突背后的原因,只有在想象的部分后,IFFT。
对于我的C/C++实现和MATLAB实现,我都在做同样的步骤。
我的信号x是Mx1维,我对该信号进行N点FFT(其中N=2*M)以在频域中得到N点信号。
在此频域信号上应用自定义滤波器(实部和虚部都在步骤中更改)。
在N点反FFT中执行。
C/C++和MATLAB实现都产生完全相同的结果,除了在逆IFFT步骤之后,虚部不匹配,但实部匹配。
如果跳过上面的步骤2,两个实现的IFFT输出都匹配,没有任何问题。
我输入到IFFT的信号(即,在步骤2滤波器之后)不需要是共轭对称的。事实上,这个信号甚至可能不是厄米特对称的。
目前,我正在使用FFT/IFFT的C实现,FFT/IFFT被定义为smbFft函数,在CPP-FILE中可用。
有什么线索,为什么会这样?
PS:如果有人能指出我在C/C++中的FFT实现,那将是很好的,它正好与相应的MATLAB实现相一致。
谢谢。
编辑:我只是测试了FFTW的实现,而不是smbFfT(我在上面提到过)。FFTW实现也有同样的问题,这表明这两个测试的C实现都使用hermitian对称设置执行IFFT。我需要在C中执行与Matlab在IFFT(..., 'nonsymmetric')中相同的IFFT。

最佳答案

如果你想要一个严格的实数结果(虚数部分都等于零),那么你需要在IFFT之前使向量完全共轭对称(实数部分镜像,虚数部分反向镜像)。
Matlab和C对数组的索引0或1的处理方式不同。确保你的过滤器也考虑到这一点。

10-06 11:00