C IFFT后虚部的冲突
我只想知道IFFT后在想象中的冲突背后的原因 对于我的C/C++实现和Matlab实现,我都在执行以下相同的步骤C IFFT后虚部的冲突,c,matlab,signal-processing,fft,ifft,C,Matlab,Signal Processing,Fft,Ifft,我只想知道IFFT后在想象中的冲突背后的原因 对于我的C/C++实现和Matlab实现,我都在执行以下相同的步骤 我的信号x的维数为Mx1,我对该信号执行N点FFT(其中N=2*M)以获得频域中的N点信号 在此频域信号上应用自定义滤波器(实部和虚部在步骤中都会发生变化) 执行N点逆FFT C/C++和Matlab实现生成的结果完全相同,除了逆IFFT步骤之后,虚部不匹配,但实部匹配 如果跳过上面的步骤2,两个实现的IFFT输出将匹配,没有任何问题。 我的IFFT输入信号(即步骤2滤波器后)不需要
smbFft
任何线索,为什么会发生这种情况
PS:如果有人能给我指出一个C/C++中的FFT实现,那就太好了,它与相应的Matlab实现完全一致
谢谢
编辑:我刚刚测试了FFTW实现,而不是
smbFfT
(我上面提到过)。FFTW实现也有同样的问题,这表明这两个经过测试的C实现都使用厄米对称设置执行IFFT。我需要在C中执行与Matlab对IFFT(…,'nonsymmetric')相同的IFFT如果你想要一个严格的实数结果(虚部都等于零),那么你需要在IFFT之前使向量完全共轭对称(实部镜像,虚部反向镜像)
Matlab和C对数组的索引0或1的处理方式不同。确保你的过滤器也考虑到了这一点。如果你想要一个严格的实数结果(虚部都等于零),那么你需要在IFFT之前使向量完全共轭对称(实部镜像,虚部反向镜像)
Matlab和C对数组的索引0或1的处理方式不同。确保你的过滤器也考虑到了这一点。发布你的代码。特别要注意的是Matlab
“
操作符,它应用了一个复杂的共轭函数try FFT->IFFT,而没有对这两个代码进行其他更改。请确认C代码中的逆运算是正确的。结果应该等于输入值(考虑数值精度)@Sebastien我刚刚在上面编辑过,我跳过了上面的第2步,IFFT的输出与Matlab的IFFT匹配。@LuisMendo感谢您的指针。我知道这项操作。您在这两种情况下使用完全相同的过滤器吗?我曾经使用fftw作为C代码。非常高效和健壮。发布您的代码。特别要注意的是Matlab“
操作符,它应用了一个复杂的共轭函数try FFT->IFFT,而没有对这两个代码进行其他更改。请确认C代码中的逆运算是正确的。结果应该等于输入值(考虑数值精度)@Sebastien我刚刚在上面编辑过,我跳过了上面的第2步,IFFT的输出与Matlab的IFFT匹配。@LuisMendo感谢您的指针。我知道这项操作。您在这两种情况下使用完全相同的过滤器吗?我曾经使用fftw作为C代码。非常高效和健壮。谢谢你的指点。我的IFFT输入信号(即步骤2滤波器后)不需要共轭对称。因此,我知道后IFFT不会产生零的虚部。这不是问题所在。问题是,在IFFT之后,虚部对我来说仍然很重要。但是C实现(我上面提到过)计算的虚值与Matlab.IFFT实现相比有所不同。换句话说,这两个IFFT实现在处理相同的输入非对称信号时发生冲突。感谢您的指点。我的IFFT输入信号(即步骤2滤波器后)不需要共轭对称。因此,我知道后IFFT不会产生零的虚部。这不是问题所在。问题是,在IFFT之后,虚部对我来说仍然很重要。但是C实现(我上面提到过)计算的虚值与Matlab.IFFT实现相比有所不同。换句话说,这两种IFFT实现在处理相同的输入非对称信号时存在冲突。