numpy中的FFT与MATLAB中的FFT没有相同的结果

arc_lupus

在Python和MATLAB中,我都有一个带有复数的向量(可以在此处找到)。我正在计算ifft-transformation与

ifft(<vector>) 

在MATLAB和

np.fft.ifft(<vector>)

在Python中。我的问题是我从中得到两个完全不同的结果,即,虽然Python中的向量很复杂,但MATLAB中却没有。虽然MATLAB中的某些组件为零,但Python中没有。这是为什么?fft按预期-version工作。最小值约为1e-10,即不要太低。

雷瑞恩

实际上,它们是相同的,但是Python以极高的精度显示了虚部。虚部显示的数值约为10^{-12}

这是我为在MATLAB中重构问题而写的内容:

format long g;
data = importdata('data.txt');
out = ifft(data);

format long g; 是一种格式设置选项,可向您显示更多有效数字,其中我们显示15个有效数字(包括小数位)。

当我显示逆FFT输出的前10个元素时,我得到的是:

>> out(1:10)

ans =

         -6.08077329443768
         -5.90538963023573
         -5.72145198564976
         -5.53037208039314
         -5.33360059559345
         -5.13261402212083
         -4.92890104744583
         -4.72394865937531
         -4.51922820694745
         -4.31618153490126

对于numpy,建议将复数读入而j不是字母i因此,在加载文本时,必须将所有i字符转换j完成后,您可以正常加载数据:

In [15]: import numpy as np

In [16]: with open('data.txt', 'r') as f:
   ....:     lines = map(lambda x: x.replace('i', 'j'), f)
   ....:     data = np.loadtxt(lines, dtype=np.complex)

当您打开文件时,对的调用map将获取文件的内容,并将每个i字符转换j为字符串,然后返回一个字符串列表,其中此列表中的每个元素都是文本文件中的复数,并i替换为j然后,我们将调用numpy.loadtxt函数将这些字符串转换为复数数组。

现在,当我进行IFFT并显示反演结果的前10个元素时(如我们在MATLAB版本中看到的那样),我们得到:

In [20]: out = np.fft.ifft(data)

In [21]: out[:10]
Out[21]: 
array([-6.08077329 +0.00000000e+00j, -5.90538963 +8.25472974e-12j,
       -5.72145199 +3.56159535e-12j, -5.53037208 -1.21875843e-11j,
       -5.33360060 +1.77529105e-11j, -5.13261402 -1.58326676e-11j,
       -4.92890105 -6.13731196e-12j, -4.72394866 +5.46673985e-12j,
       -4.51922821 -2.59774424e-11j, -4.31618154 -1.77484689e-11j])

如您所见,实部是相同的,但虚部仍然存在。但是,请注意虚数分量的大小。在这种情况下,MATLAB选择不显示虚部,因为它们的大小非常小。实际上,从ifftMATLAB中调用返回的数据类型是真实的,因此调用后可能会进行一些后处理ifft以丢弃这些虚构的分量。numpy顺便说一句,它们并没有做相同的事情,但是您最好将这些组件视为很小且无关紧要的。


总而言之,ifftPython和MATLAB中的调用本质上是相同的,但是虚构组件在某种意义上是不同的,即Python /numpy返回了这些虚构组件,尽管它们ifft在MATLAB中调用并不重要。另外请注意,您需要确保将虚数变量替换为,j并且不能i像在提供的原始文本文件中那样使用如果你知道了一定的输出类型应该是真实的,你也可以通过给调用降虚部numpy.realifft结果,如果你愿意的话。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

numpy的fft结果的幅度要乘以采样周期吗?

来自分类Dev

openCV中的FFT和反向FFT与原始图像的结果不同

来自分类Dev

在MATLAB中的WAV文件上计算FFT

来自分类Dev

在MATLAB中遍历WAF文件以进行FFT

来自分类Dev

FFT的高频结果错误?

来自分类Dev

在FFT上登录结果

来自分类Dev

openCV DFT和Matlab FFT的结果值不同

来自分类Dev

FFT结果中的频域熵是什么,如何计算?

来自分类Dev

了解python中的FFT输出

来自分类Dev

numpy中的FFT与MATLAB中的FFT没有相同的结果

来自分类Dev

MATLAB中的FFT产生幅度混淆rect的FFT不产生正弦

来自分类Dev

在MATLAB中执行FFT后的高频杂散

来自分类Dev

numpy.fft.fft和numpy.fft.fftfreq有什么区别

来自分类Dev

当信号频率恰好落在fft bin上时,Numpy FFT会产生意外结果

来自分类Dev

FFT算法中的错误

来自分类Dev

fft fortran中的相角

来自分类Dev

在Matlab中获得更高的FFT精度

来自分类Dev

Matlab / Octave中的2D与3D FFT

来自分类Dev

Matlab FFT和Fortran Rosetta Code FFT中的差异

来自分类Dev

fortran fft中的精度损失

来自分类Dev

在Matlab中绘制FFT幅度频谱信号

来自分类Dev

MATLAB中的FFT产生幅度混淆rect的FFT不产生正弦

来自分类Dev

Julia中的零填充FFT

来自分类Dev

FFTS FFT和Matlab FFT之间的结果值不同

来自分类Dev

CUDA fft 2d 与 MATLAB fft 在 2d 上的不同结果

来自分类Dev

CUDA fft 与 MATLAB fft 不同的结果

来自分类Dev

FFT 结果 Matlab VS Numpy (Python):结果不一样

来自分类Dev

复数课程——在 Plnkr 中没有相同的结果

来自分类Dev

库中的 FFT 比 Web 音频 FFT 的级别低