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

2024-01-01

我有一个带有复数的向量(可以找到here https://www.dropbox.com/s/ve0de4ebk41s8y2/data.txt?dl=1),无论是在 Python 中还是在 MATLAB 中。我正在计算ifft- 转化为

ifft(<vector>) 

在 MATLAB 中并使用

np.fft.ifft(<vector>)

在Python中。我的问题是我得到了两个完全不同的结果,即虽然 Python 中的向量很复杂,但 MATLAB 中却不是。虽然 MATLAB 中的某些组件为零,但 Python 中却没有。这是为什么?这fft-版本按预期工作。最小值约为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

For numpy,请注意,复数是用j信,不是i。因此,当您加载文本时,您must转变所有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.real on the ifft如果你愿意的话。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • C++ tmpnam 替代方案

    我有一个 C 库 它使用tmpnam NULL 创建一个临时文件 我需要破解这个 因为它在根文件夹 c 或 中生成临时文件 因此它需要管理权限 如何使用有效的临时路径将此功能更改为其他功能 Thanks Though tmpnam返回前面加
  • OBJECT 和 EMBED 标签是否始终位于顶部?

    我有一个我制作的网站 我在该网站上流式传输视频 它开始 看起来很酷 但我用 CSS 制作的菜单总是在视频下方 因此某些链接会在对象后面消失 有谁知道我是否可以解决这个问题 我想我尝试过一次 z index 无济于事 我刚刚重新发布了这个问题
  • 这种语言有下推自动机(PDA)吗?

    the language is An B 2n Cn where n gt 0 我认为是有的 因为你可以这样处理 推入A 推入B 每个C从堆栈中弹出3次 如果没有C并且堆栈为空 则返回true 否则返回false 使用泵引理来证明这不是上下
  • TypeScript 错误 TS2403:后续变量声明必须具有相同的类型

    我的 TypeScript 项目似乎遇到了一些编译错误 完整的错误是 node modules types mocha index d ts 2680 13 error TS2403 Subsequent variable declarat
  • 有适合新手的 XML/XSD 教程吗?

    有谁知道任何关于 XSD XML 的新手教程 这些教程简单地解释了事情 但详细介绍了如何做事情 以下是有关使用 XSD 验证 XML 的教程 http www ibm com developerworks xml tutorials x v
  • 数据表 colspan 排序

    当引入 colspan 或 rowspan 时 Datatable jquery 插件会出现错误 有没有其他办法可以渡过 只需使用一些 jQuery 手动完成即可 function var tableRows myDatatable tbo
  • C++ 一个标头多个源

    I have a large class Foo1 class Foo public void apples1 void apples2 void apples3 void oranges1 void oranges2 void orang
  • isinstance(x, list) 迭代包含字符串和列表的列表时

    At 由内而外迭代嵌套列表 https stackoverflow com questions 14960380 iterating nested list inside out 14960687 comment21002419 14960
  • 根据 WooCommerce 产品类别禁用特定购物车商品数量字段

    在我使用的 woocommerce 中从 WooCommerce 产品类别的购物车中隐藏 删除商品 https stackoverflow com questions 54033207 hide remove item from cart
  • 如何运行Hadoop程序?

    我已经在笔记本电脑上安装了 Hadoop 并成功运行了安装指南中给出的示例程序 但是 我无法运行程序 rohit renaissance1 hadoop ch2 hadoop MaxTemperature input ncdc sample
  • PermissionError:pip 从 8.1.1 升级到 8.1.2

    我正在尝试将 pip 从 8 1 1 升级到 8 1 2 但它显示以下 PermissionError WinError 5 Access is denied 如何升级pip C gt python m pip install upgrad
  • 如何处理 multiprocessing.Pool 中的初始化错误?

    当初始化程序抛出如下错误时 脚本将不会停止 我想在开始主进程之前中止 不要运行 do something from multiprocessing import Pool import contextlib def initializer
  • 如何在 ARM Cortex-a8 中使用乘法和累加内在函数?

    如何使用GCC提供的乘累加内在函数 float32x4 t vmlaq f32 float32x4 t float32x4 t float32x4 t 谁能解释一下我必须传递给这个函数的三个参数 我的意思是源寄存器和目标寄存器以及函数返回什
  • Suds 忽略代理设置

    我正在尝试使用 salesforce python toolkit 对 Salesforce API 进行 Web 服务调用 但是我在让客户端通过代理时遇到问题 由于该工具包基于 suds 之上 因此我尝试只使用 suds 本身 看看是否可
  • 如何防止文本字段中向上/向下箭头的默认行为?

    我正在为关键字创建一个输入字段 当用户写作时 我会在插入符号位置下方的列表中显示关键字的建议 输入字段是单行 因此我使用向上 向下箭头键选择建议 然后按 Enter 插入它 它大部分都在工作 除了一个很大的例外是向上 向下键还将插入符号位置
  • 我可以在没有 WebView 的情况下运行 Javascript,或者 WebView 可以在没有 Activity 上下文的情况下运行(例如在服务中)吗?

    我有一个 HTML5 JavaScript 支持的应用程序 我想将其移植到 Android 在某些情况下 JavaScript 代码需要在后台 Service 中运行 没有 UI 因此没有 WebView 例如 为了同步 通过研究 WebV
  • 使用gradle导入GSON

    我正在尝试使用 android studio 中的 gradle 将 GSON 导入到我的项目中 我已经使用了上找到的说明谷歌的 GitHub https github com google gson和几个堆栈溢出页面 例如here htt
  • Google Chrome - 扩展程序与应用程序

    我想修改 chrome 起始页 更改背景 也许还有徽标 我想将 jQuery 包含在用户本地存储中并在用户页面加载 搜索页面 时加载它 我从来没有用 chrome 做过任何事情 所以我想要一些方法来开始 我需要使用应用程序或扩展程序来阅读吗
  • h5py:如何读取 hdf5 文件的选定行?

    是否可以从 hdf5 文件中读取给定的行集而不加载整个文件 我有相当大的 hdf5 文件 其中包含大量数据集 下面是我想要减少时间和内存使用的示例 usr bin env python import numpy as np import h
  • numpy 中的 FFT 与 MATLAB 中的 FFT 没有相同的结果

    我有一个带有复数的向量 可以找到here https www dropbox com s ve0de4ebk41s8y2 data txt dl 1 无论是在 Python 中还是在 MATLAB 中 我正在计算ifft 转化为 ifft