使用 FFT 结果重新创建时间序列数据,而不使用 ifft

2023-12-21

我使用 fft 分析了 sunspots.dat 数据(如下),这是该领域的一个经典示例。我从实部和虚部的 FFT 中获得了结果。然后我尝试使用这些系数(前 20 个)按照傅立叶变换公式重新创建数据。认为实部对应于a_n,想象部分对应于b_n,我有

import numpy as np
from scipy import *
from matplotlib import pyplot as gplt
from scipy import fftpack

def f(Y,x):
    total = 0
    for i in range(20):
        total += Y.real[i]*np.cos(i*x) + Y.imag[i]*np.sin(i*x)
    return total

tempdata = np.loadtxt("sunspots.dat")

year=tempdata[:,0]
wolfer=tempdata[:,1]

Y=fft(wolfer)
n=len(Y)
print n

xs = linspace(0, 2*pi,1000)
gplt.plot(xs, [f(Y, x) for x in xs], '.')
gplt.show()       

然而,由于某种原因,我的图并不反映 ifft 生成的图(我在两侧使用相同数量的系数)。可能出什么问题了?

Data:

http://linuxgazette.net/115/misc/andreasen/sunspots.dat http://linuxgazette.net/115/misc/andreasen/sunspots.dat


当你打电话时fft(wolfer),您告诉变换假设基本周期等于数据的长度。要重建数据,您必须使用相同基本周期的基函数 =2*pi/N。同样的道理,你的时间指数xs必须在原始信号的时间样本范围内变化。

另一个错误是忘记进行完整的复数乘法。更容易将其视为Y[omega]*exp(1j*n*omega/N).

这是固定代码。注意我改名了i to ctr以避免混淆sqrt(-1), and n to N遵循通常的信号处理约定,即使用小写字母表示样本,使用大写字母表示样本总长度。我也导入了__future__ division以避免整数除法的混淆。

之前忘了补充:请注意,SciPy 的fft不除以N积累后。我在使用之前没有把它分开Y[n];如果你想得到相同的数字,而不仅仅是看到相同的形状,你应该这样做。

最后,请注意,我正在对整个频率系数范围进行求和。当我策划的时候np.abs(Y),看起来高频中存在显着值,至少在样本 70 左右之前是这样。我认为通过对整个范围进行求和,查看正确的结果,然后削减系数并看看会发生什么,会更容易理解结果。

from __future__ import division
import numpy as np
from scipy import *
from matplotlib import pyplot as gplt
from scipy import fftpack

def f(Y,x, N):
    total = 0
    for ctr in range(len(Y)):
        total += Y[ctr] * (np.cos(x*ctr*2*np.pi/N) + 1j*np.sin(x*ctr*2*np.pi/N))
    return real(total)

tempdata = np.loadtxt("sunspots.dat")

year=tempdata[:,0]
wolfer=tempdata[:,1]

Y=fft(wolfer)
N=len(Y)
print(N)

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

使用 FFT 结果重新创建时间序列数据,而不使用 ifft 的相关文章

随机推荐

  • 使用 WPS 隐藏登录插件后,我被锁定在 WordPress 之外

    我有一个我建立的 WordPress 网站 我已经安装并使用了 WPS 隐藏登录插件来帮助提高安全性 如果有帮助的话 我将登录 URL 的值保留为我认为的默认值 login 当我去 login 登录屏幕出现 我输入正确的凭据 几秒钟后我被重
  • 在 O(E logV) 中求图中的单调最短路径

    创意题第 34 题这一页 http algs4 cs princeton edu 44sp 单调最短路径 给定一个边加权有向图 找到一条从 s 到所有其他顶点的单调最短路径 如果路径上每条边的权重严格递增或严格递减 则路径是单调的 部分解决
  • 如何使用 Scipy 处理巨大的稀疏矩阵构造?

    因此 我正在处理维基百科转储来计算大约 5 700 000 个页面的页面排名 这些文件经过预处理 因此不是 XML 格式 它们取自http haselgrove id au wikipedia htm http haselgrove id
  • 有什么方法可以从另一台计算机上使用 exe4j 运行由 jar 制成的 exe 吗?

    我制作了一个 GUI 程序来输入内容 然后将 javamail 发送到我的电子邮件 我必须从 javamail 1 4 5 导入许多 jar 库 然后将其构建 shift f11 为 jar 然后使用 exe4j 使其成为 exe 还添加
  • 使用不同的参数模拟相同的方法

    我正在使用mockito来测试我的业务服务 它使用了我想要模拟的实用程序 每个服务方法中至少有 2 3 个具有不同参数的实用程序调用 有没有推荐的方法来使用多个when thenReturn 对于相同的方法但不同的参数 我也想用any 游行
  • Android Studio 1.2 - 默认情况下项目编码不匹配

    我是一个Android菜鸟 刚刚升级到Android Studio 1 2 当我创建一个新项目 API 16 Android 4 1 Jelly Bean 时 我立即收到以下警告 警告 项目编码 windows 1252 与 Gradle
  • 如何用java实现SOA?

    我是 SOA 的新手 我想知道如何在 Java 中实现 SOA 我正在浏览各种仅处理概念的站点 它没有给出有关实现细节的清晰想法 以便在 Java 中使用 SOA 请提供有关如何实施 SOA 的详细信息 Thanks SOA 是关于设计原则
  • 向 Android SwipeRefreshLayout 添加文本提示

    如何在 listView 的顶部添加提示 例如 下拉刷新 该提示包含在 android support v4 的 swipeRefreshLayout 中 下拉刷新有效 但我想在用户稍微向下拉列表视图时添加文本 编辑 2014 年 10 月
  • Powershell 命令将断开连接的用户踢出服务器

    是否有一个 powershell 命令可以用来将 断开连接 的用户踢出服务器 一旦我知道踢单个用户的单行代码 我就可以编写脚本 例如 我想踢掉下面对话框中看到的 8 个用户 我不能尝试这个 pc qwinsta server YourSer
  • Ionic - 如何禁用 Android 键盘上的键盘建议

    我已经尝试了所有 ion textarea 的可能性 例如 type email 等 我无法让它在所有 Android 版本上工作 我已经安装了 cordova plugin ionic keyboard 它显示了没有建议的键盘 图 A 但
  • 使用 OpenID 登录时如何转义 URL 中的 & 符号?

    好吧 实际上我知道 我应该用 26 替换 但我使用此 URL 通过 OpenID 登录 如您所见 continue 参数已正确转义 但是在通过 Google 登录页面重定向后 它会将我重定向回 https innubili gidea ap
  • 如何为 UITabBarItem 创建操作?

    我创建了一个没有 UITabBarController 的 UITabBar 和 UITabBarItems 现在我想知道如何在单击 UITabBarItem 时放置一个操作 我应该使用什么方法对 UITabBarItem 执行操作 您无法
  • VSCode 重新映射键盘快捷键

    I have been trying for awhile now to remap the Ctrl Tab and Ctrl Shift Tab keys to switch editor tabs linearly Like they
  • 使用 Ruby 1.9.3 时出现“证书验证失败”OpenSSL 错误

    我在 Mac OS 10 6 8 上使用 Ruby 1 9 3p0 使用 rvm 安装 当我尝试使用创建新的 Rails 应用程序时托管在 GitHub 上的应用程序模板 https github com RailsApps rails3
  • 如何 printf 像表格一样对齐我的输出?

    printf 如何像表格一样对齐输出 Title Author BaokyBook Baoky2 Use basename commandUse basename command Baoky 我的部分代码是这样的 titlelength t
  • NSTimer 暂停不起作用

    我设置了三个按钮start stop pause 并给 NSTimer 提供控制来计算 开始停止按钮工作正常 给了我开始和停止时间 但是pause按钮没有给我准确的时间 它实际上是暂停时间 但再次开始它会添加暂停的计时和显示 ay 假设我在
  • OpenCV 框架:未找到架构 armv7 的符号

    我有预编译opencv2 framework http sourceforge net projects opencvlibrary files opencv ios 2 4 8 来自 OpenCV 我已将其添加到我的项目中 然而 尝试编译
  • nginx 配置以启用具有源匹配的 CORS

    我尝试过使用一个非常流行的配置 https gist github com Stanback 7145487对于nginx 它启用了CORS并支持使用正则表达式进行源匹配 这是我的配置 server listen 80 default se
  • 如何在 C# 中更改 WebBrowser 控件用户代理 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是在 C 中使用 WebBrows
  • 使用 FFT 结果重新创建时间序列数据,而不使用 ifft

    我使用 fft 分析了 sunspots dat 数据 如下 这是该领域的一个经典示例 我从实部和虚部的 FFT 中获得了结果 然后我尝试使用这些系数 前 20 个 按照傅立叶变换公式重新创建数据 认为实部对应于a n 想象部分对应于b n