【发布时间】:2019-01-09 07:10:10
【问题描述】:
我正在尝试使用来自 CSV 的时间序列数据实现离散傅立叶变换。我已经能够使用 SciPy 在 Python 中生成正弦波(和余弦波),并获得了我想要的幅度和相位信息。但是,我正在努力处理真实数据。我的 CSV 看起来像这样,模拟每周一上午 9 点发生的事件。
id1 ?2018-01-05T23:00:00.000Z
id1 ?2018-01-08T09:20:00.000Z
id1 ?2018-01-15T09:43:00.000Z
id1 ?2018-01-22T09:02:00.000Z
id1 ?2018-01-29T09:50:00.000Z
id1 ?2018-02-05T09:47:00.000Z
id1 ?2018-02-12T09:18:00.000Z
id1 ?2018-02-19T09:02:04.000Z
id1 ?2018-02-26T09:54:00.000Z
id1 ?2018-03-05T09:12:00.000Z
清理干净后,白天分箱后看起来像这样(我希望最终按小时和分钟级别分箱):
ID..日期............事件
id1 2018-01-08 1
id1 2018-01-09 0
id1 2018-01-10 0
id1 2018-01-11 0
id1 2018-01-12 0
id1 2018-01-13 0
id1 2018-01-14 0
id1 2018-01-15 1
id1 2018-01-16 0
...等等。我该怎么做才能将其转换为正弦波?目前,我正在创建一个正弦波并像这样运行 fft:
A = 5 # amplitude
fc = 10 # frequency
fs = 32 * fc # sampling frequency with oversampling factor 32
t = np.arange(0, 2, 1/fs) # time array
phi = 30 # phase shift
x = A * np.cos(2 * np.pi * fc * t + phi)
fourier = fft(x)
我能够以我想要的频率从中获取相位信息,这让我相信如果我可以从我的 CSV 文件中获取一个信号并将其替换为 x,那么我将能够提取相位信息从此。我的理解是,对于二进制数据(“事件”列),幅度信息将无济于事 - 对吗?
如何将此 CSV 文件转换为正弦波或余弦波?
【问题讨论】:
-
您的数据看起来不像任何正弦信号。很难从这些数据中得出一个阶段/时期。
-
我可以使用一种技术将其转换为更像正弦的东西吗?我做了一些研究,我知道 fft 可以用于时间序列的东西,但通常不是有这么多零的东西。我不应该对它进行二值化吗?我应该向外扩展并查看每周数据而不是每日数据吗?我能做什么?
标签: python scipy fft trigonometry