使用 numpy fft 提取相位信息

2023-11-20

我正在尝试使用快速傅立叶变换来提取单个正弦函数的相移。我知道,在纸面上,如果我们将函数的变换表示为 T,那么我们有以下关系:

enter image description here

然而,我发现虽然我能够准确捕获余弦波的频率,但除非我以极高的速率采样,否则相位不准确。例如:

import numpy as np
import pylab as pl

num_t = 100000
t = np.linspace(0,1,num_t)
dt = 1.0/num_t
w = 2.0*np.pi*30.0
phase = np.pi/2.0

amp = np.fft.rfft(np.cos(w*t+phase))
freqs = np.fft.rfftfreq(t.shape[-1],dt)

print (np.arctan2(amp.imag,amp.real))[30]

pl.subplot(211)
pl.plot(freqs[:60],np.sqrt(amp.real**2+amp.imag**2)[:60])
pl.subplot(212)
pl.plot(freqs[:60],(np.arctan2(amp.imag,amp.real))[:60])
pl.show()

使用 num=100000 点,我得到的相位为 1.57173880459。

使用 num=10000 点,我得到的相位为 1.58022110476。

使用 num=1000 点,我得到的相位为 1.6650441064。

出了什么问题?即使有 1000 点,我每个周期也有 33 点,这应该足以解决它。有没有办法增加计算频率点的数量?有没有办法以“低”点数做到这一点?

编辑:从进一步的实验来看,我似乎每个周期需要约 1000 个点才能准确地提取相位。为什么?!

编辑2:进一步的实验表明准确性与每个周期的点数有关,而不是绝对数量。增加每个周期的采样点数可以使相位更加准确,但如果信号频率和采样点数都增加相同的倍数,则精度保持不变。


您的分数在整个时间间隔内分布不均匀,最后的分数加倍:0与以下相同点1。显然,你获得的分数越多,这一点就越不重要,但仍然会产生一些错误。你完全可以避免它,linspace为此有一个标志。它还有一个标志可以返回给您dt直接与数组一起。

Do

t, dt = np.linspace(0, 1, num_t, endpoint=False, retstep=True)

代替

t = np.linspace(0,1,num_t)
dt = 1.0/num_t

然后就可以了:)

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

使用 numpy fft 提取相位信息 的相关文章

  • 我应该如何类型提示一个也可以是无限的整数变量?

    搜索这个主题时我发现了以下内容 如何表示整数无穷大 我同意 Martijn Peeters 的观 点 即为int可能不是最好的想法 然而 这使得类型提示变得困难 假设以下代码 myvar 10 type int myvar math inf
  • 类型错误:无法 pickle _thread.RLock 对象

    在检查了 Stackoverflow 上的所有现有答案后 检查点 keras 模型 TypeError 无法 pickle thread lock 对象和这里 类型错误 无法 pickle thread lock 对象 我还没有发现为什么这
  • 将数据框列名称从字符串格式更改为日期时间

    我有一个数据框 其中列的名称是字符串形式的日期 年月 如何将这些名称转换为日期时间格式 我尝试这样做 new cols pd to datetime df columns df df new cols 但我收到错误 KeyError Dat
  • 为什么“object”是“type”的实例,而“type”是“object”的实例?

    我有点困惑object and typePython 3 中的类 也许有人可以消除我的困惑或提供一些额外的信息 我目前的理解是每个班级 除了object 继承自一个名为的基类object 但每堂课 包括object 也是该类的一个实例typ
  • Flask 会话不持久

    我在 CentOS 6 3 上运行 Python 2 7 Apache mod wsgi 当我在本地主机上时 一切正常 但是 当我在 Azure 中的虚拟机上运行代码时 我没有看到会话信息跨页面保存 基本上在我看来 我有这样的想法 fron
  • Python 3.4 的 HTML 解析器

    我有一些用 Python 2 7 编写的代码 它使用 HTMLParser 我目前使用的是Python 3 4 我找不到 HTMLParser 下载模块 如果存在的话 有人可以分享一下链接吗 如果没有 我该怎么办 您不需要安装 Python
  • GStreamer 警告:无法查询视频位置:状态=0,值=-1,持续时间=-1

    我使用 OpenCV 包和face recognition 包来检测我的笔记本电脑网络摄像头上的人脸 每当我运行它时 代码都运行良好 但我遇到了相同的 GStreamer 错误 from imutils video import Video
  • 从三个 1D numpy 数组填充 2D numpy 数组

    是否有一种有效的方法可以在不使用循环的情况下从未排序的坐标点 即并非所有经度和 或纬度都升序或降序 创建值的二维数组 示例数据 lats np array 45 5 45 5 45 5 65 3 65 3 65 3 43 2 43 2 43
  • 如何使用python进行坐标仿射变换?第2部分

    我有与这里描述的相同的问题 如何使用python进行坐标仿射变换 我试图使用所描述的方法 但由于某些原因我会收到错误消息 我对代码所做的更改是替换主系统和辅助系统点 我通过使用不同的原点创建了辅助坐标点 在我正在研究这个主题的实际情况中 测
  • Python - 在 Pandas DataFrame 中取消嵌套单元格

    假设我有DataFrame df a b c v f 3 4 5 v 2 6 v f 4 5 我想制作这个df a b c v f 3 v f 4 v f 5 v 2 6 v f 4 v f 5 我知道如何在 R 中进行这种转换 使用tid
  • scipy.sparse 默认值

    稀疏矩阵格式 dok 假设不在字典中的键的值等于零 有什么办法让它使用除零之外的默认值吗 另外 有没有办法计算稀疏矩阵的对数 类似于常规 numpy 矩阵中的 np log 该功能不是内置的 但如果您确实需要此功能 您应该能够编写自己的功能
  • 如何检索模块的路径?

    我想检测模块是否已更改 现在 使用 inotify 很简单 您只需要知道要从中获取通知的目录即可 如何在 python 中检索模块的路径 import a module print a module file 实际上会给你加载的 pyc 文
  • 如何以编程方式设置文档字符串?

    我有一个返回函数的包装函数 有没有办法以编程方式设置返回函数的文档字符串 如果我可以写信给 doc 我会做以下事情 def wrapper a def add something b return a b add something doc
  • 使用 PRAW 获得超过 100 个搜索结果?

    我使用以下代码通过 PRAW 4 4 0 获取 reddit 搜索结果 params sort new time filter year return reddit subreddit subreddit search params 我想从
  • 使用请求登录 WordPress - Python3

    import requests with requests Session as s headers1 Cookie wordpress test cookie WP Cookie check datas log admin pwd adm
  • 我无法使用 Python 在 Gmail 中搜索已发送的电子邮件

    我正在尝试在 已发送 中搜索消息 实际上我关心两者 但我只收到传入消息 暂时我有 imap conn select str after after strftime d b Y typ msg ids imap conn search UT
  • 如何识别Python中哪个函数调用引发异常?

    我需要确定谁引发异常来处理更好的 str 错误 有办法吗 看看我的例子 try os mkdir valid created dir os listdir invalid path except OSError msg here i wan
  • 使用 python xlib 全局捕获、忽略和发送按键事件,识别虚假输入

    我想在普通键盘上实现按键和弦 我想我使用 python xlib 为此 程序必须全局吞下所有关键事件 然后才允许它们通过 我当前的测试只是抓住 1 键 如果按下此键 它将调用一个处理程序 该处理程序通过 xtest fake input 将
  • 在文件上打开资源管理器

    在Python中 如何跳转到Windows资源管理器中的文件 我找到了跳转到文件夹的解决方案 import subprocess subprocess Popen explorer C path of folder 但我没有文件的解决方案
  • Python sys.stderr 刷新频率

    sys stderr 多久刷新一次缓冲区 这是不同环境中的标准吗 gt gt gt import sys gt gt gt sys stderr

随机推荐

  • Docker 节点 alpine 8 分段错误(核心转储)

    我被这个错误困扰了一整天 当我尝试运行我的 docker 容器时 出现错误Segmentation fault core dumped 因此 为了重现此错误 我将提供我的环境和代码 下面第一个是 Dockerfile 没什么特别的 FROM
  • 没有JS的固定标题列和行的Html表格

    我目前正在尝试正确显示一种议程 该议程代表头行上的时间和头列上的不同房间 我想要有固定的标题 第一行和第一列 和一个可滚动的表格 显示房间在给定时间是否可用 经过一些研究后 我发现这个问题已经使用 jQuery 或自制 JS 脚本得到了回答
  • 角度4:从不同的组件调用方法

    我有 2 个同级组件 我正在一个组件中执行 http 请求 如果发生特定情况 它应该发出另一个在另一个组件中编写的 http 请求 所以我应该能够调用第一个组件中的方法 这是第一个组件 import Component OnInit Inj
  • 在elasticsearch中使用现有字段作为id

    今天刚开始使用elasticSearch 我想知道是否可以设置某种全局参数以始终使用文档中的某个字段作为 ID 我的 JSON 文档将始终拥有自己的唯一 ID Record ID a06b0000004SWbdAAG System Mods
  • Java 和本地数据库

    TL 博士 需要一些 Java 帮助来连接到真正的本地数据库 无法访问服务器技术 或者如果您可以编写代码 那就可以了 它所要做的就是查询数据库 MS Access 尽管可以更改 并输出一个 JSON 字符串 有关更多具体信息 请参阅 EDI
  • React Native android APK 扩展支持吗?

    我尝试搜索 React Native Android APK Expansion 但找不到任何有关它的页面 RN 支持 APK 扩展文件吗 如何在本地开发中测试它 谢谢 None
  • 在spring data elasticsearch中,聚合查询不能放在存储库实现中吗?

    我第一次使用 spring boot elasticsearch 我现在已经弄清楚如何使用 elastics java api 描述我的串行差异管道查询 正如您将在下面看到的 这个查询相当大 并且为每个对象返回多个存储桶以及每个存储桶之间的
  • 丢失密钥对后访问 EC2 实例

    几个月前 我启动了一个 EC2 实例 当时我将 pem 密钥存储在我的 PC 中 电脑崩溃后 我不得不在上面重新安装 Windows 而且我没有 pem 文件的备份 有什么方法可以让我到达 EC2 实例上的提示符 任何通过 ssh 或其他方
  • ASP.Net MVC 控制器构造函数中的会话为 null

    为什么控制器的构造函数中Session为null 可以从 Action 方法访问它 据推测 因为 MVC 路由框架负责更新控制器 所以它此时还没有 重新 实例化会话 有谁知道这是否是设计使然 如果是 为什么 我已经通过使用延迟加载模式设法规
  • jackson xml 列出了识别为重复键的反序列化

    我正在尝试使用将 xml 转换为 jsonjackson 2 5 1 and jackson dataformat xml 2 5 1xml结构是从Web服务器接收的并且未知 因此我不能用java类来表示该对象 并且我试图直接转换为Tree
  • 莫西忽略场

    使用 moshi 序列化为 json 字符串时是否有一种简单的方法来忽略字段 我只能想到是一个自定义适配器 但我感觉有更好的方法 Use transient关于现场声明 private transient String your varia
  • 使用反射在内部类中实例化带有参数的构造函数

    我有一些类似的事情 object parameter new object 1 parameter 0 x object instantiatedType Activator CreateInstance typeToInstantiate
  • OpenCV - 让滑块在视频播放期间更新其位置

    我选择了 学习 OpenCV 并尝试了一些代码示例 练习 在此代码片段中 我想让滑块随着每个视频帧的变化而更新其位置 但由于某种原因它不起作用 图片通过以下代码冻结 include cv h include highgui h int g
  • 在 SELECT INTO 中保留 ORDER BY

    我有一个 T SQL 查询 它从一个表中获取数据并将其复制到一个新表中 但只复制满足特定条件的行 SELECT VibeFGEvents INTO VibeFGEventsAfterStudyStart FROM VibeFGEvents
  • 检查路径是否有效

    我只是想知道 我正在寻找一种方法来验证给定路径是否有效 注意 我不想检查文件是否存在 我只想证明路径的有效性 所以如果文件可能存在于该位置 问题是 我在 Net API 中找不到任何内容 由于 Windows 支持多种格式和位置 我宁愿使用
  • 为什么 x 在内部作用域中未定义? [复制]

    这个问题在这里已经有答案了 在下面的代码中 var x 1 function console log x var x 2 为什么console log x 时 x未定义 可变提升 实际的代码是这样执行的 var x 1 function v
  • Interface Builder > Inspector > Bindings 中的“控制器键”是什么意思?

    我在文档中找不到他们解释所有这些字段及其含义的地方 尤其是 控制器键 我不清楚 复印我在另一个问题上的回答 控制器键是您要绑定的 控制器对象的属性 的键 模型关键路径是绑定对象可以向模型对象请求更基本的对象 例如字符串或图像 或其他模型对象
  • 使用 gson 将 json 字段反序列化为纯字符串

    我正在尝试将 json 对象反序列化为 java bean 我面临的主要问题是我想对待这个领域object将 json 字符串视为普通字符串 即使它包含可能正确的 json 对象 json结构是这样的 type user object id
  • REPL 和解释器有什么区别?

    REPL 和解释器之间有技术差异吗 交互式解释器使用 REPL 不需要配备口译员 例如 您可以以非交互模式 在文件上 运行 Python 并且它不会使用读取 评估 打印循环
  • 使用 numpy fft 提取相位信息

    我正在尝试使用快速傅立叶变换来提取单个正弦函数的相移 我知道 在纸面上 如果我们将函数的变换表示为 T 那么我们有以下关系 然而 我发现虽然我能够准确捕获余弦波的频率 但除非我以极高的速率采样 否则相位不准确 例如 import numpy