我有一个数据集,包括时间戳(ms),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行数据集:
答案 0 :(得分:0)
来自numpy.fft.fftfreq
's reference:
返回的浮点数组f包含每单位样本间隔周期的频率仓中心(开始时为零)。例如,如果采样间隔以秒为单位,则频率单位为周期/秒。
由于时间戳以毫秒为单位,因此使用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]
作为时间步骤隐含地假定数据在时间上均匀采样(在给定提供的样本数据集的情况下似乎就是这种情况)。 /子>