【发布时间】:2020-05-09 07:46:29
【问题描述】:
我想将使用fft 函数的傅里叶变换应用于我的时间序列数据,以通过提取观察数据中的主要频率分量来查找“模式”,即。在每个时间序列结束时预测 y 值(细菌计数)的最低 5 个主要频率。
我想保留最小的 5 个系数作为特征,并消除其余的。
我的代码如下:
df = pd.read_csv('/content/drive/My Drive/df.csv', sep=',')
X = df.iloc[0:2,0:10000]
dft_X = np.fft.fft(X)
print(dft_X)
print(len(dft_X))
plt.plot(dft_X)
plt.grid(True)
plt.show()
# What is the graph about(freq/amplitude)? How much data did it use?
for i in dft_X:
m = i[np.argpartition(i,5)[:5]]
n = i[np.argpartition(i,range(5))[:5]]
print(m,'\n',n)
但我不知道如何解释这个图表。准确地说,
1) 图表是否显示输入数据的转换值?我只用了2行数据(每行是一个时间序列),所以数据是2x10000,为什么图中有这么多行?
2) 要获得频率值,我应该使用np.fft.fftfreq(n, d=timestep)吗?
参数:
n : 整数 窗口长度。d : 标量,可选 采样间隔(采样率的倒数)。默认为 1。
返回:
f : 数组 包含样本频率的长度为 n 的数组。
如何确定n(窗口长度)和sample spacing?
3) 为什么转换后的值都是复数?
谢谢
【问题讨论】:
标签: python numpy scipy signal-processing fft