【问题标题】:converting time to Hz in python在python中将时间转换为Hz
【发布时间】:2015-10-30 02:23:21
【问题描述】:

我有一个由时间戳(毫秒)、x、y 和 z 组成的数据集。我想将其转换为频域(傅立叶)。我用numpy.fft.fft(a, n=None, axis=-1, norm=None)[source]

我的代码是

import panda as pd
from scipy.fftpack import fft
import matplotlib.pyplot as plt

data=pd.read_csv('/home/Desktop/dataset.csv')
data = data.as_matrix()
xf=fft(data[:,3])
freq = numpy.fft.fftfreq(len(data), data[1,2] - data[0-1,2])
plt.plot(t,xf)

我对 y 和 z 做了同样的事情。 这种方式正确吗?我不确定我用于将时间更改为 Hz 的方式是否正确。

这是 10 行数据集:

【问题讨论】:

  • 你有机会发布数据吗?如果它太大,那么 10 行左右会有所帮助。
  • @MikeWise 我编辑了这个问题。

标签: python numpy import fft


【解决方案1】:

来自numpy.fft.fftfreq's reference

返回的浮点数组 f 包含频率 bin 中心,以每单位样本间距的周期为单位(开头为零)。例如,如果样本间隔以秒为单位,则频率单位为周期/秒。

由于您的时间戳以毫秒为单位,使用 data[1,2] - data[0,2] 指定时间间隔将以周期/毫秒或 kHz 为单位给出频率。要获得以 Hz 为单位的频率,您应该改用:

freq = numpy.fft.fftfreq(len(data), 0.001*(data[1,2] - data[0,2]))

那么你应该使用freq来绘制它:

plt.plot(freq,xf)

作为对未来读者的附注,使用data[1,2] - data[0,2] 作为时间步隐含地假设数据在时间上是均匀采样的(鉴于提供的示例数据集,这里似乎就是这种情况)。

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2010-09-12
    相关资源
    最近更新 更多