【发布时间】:2020-05-09 07:26:10
【问题描述】:
我想将fft 应用于我的时间序列数据,以提取最低 5 个主要频率分量,用于预测每个时间序列结束时的 y 值(细菌计数)。我的代码如下:
df = pd.read_csv('/content/drive/My Drive/df.csv', sep=',')
X = df.iloc[0:2,0:10000]
dft_X = np.fft.fft(X) # What should I fill in for argument n?
print(dft_X)
print(len(dft_X))
plt.plot(dft_X)
plt.grid(True)
plt.show()
for i in dft_X:
m = i[np.argpartition(i,5)[:5]]
n = i[np.argpartition(i,range(5))[:5]]
print(m,'\n',n)
在numpy.fft.fft 上的scipy 文档中,它指出
numpy.fft.fft(a, n=None, axis=-1, norm=None)
...
n : 整数,可选
输出的转换轴的长度。如果 n 小于输入的长度,则裁剪输入。如果它更大,则用零填充输入。如果 n 没有给出,则使用输入沿轴指定的轴的长度。
但我仍然不清楚参数 n 值对输出的影响以及如何决定使用什么值。
我注意到n = 10时,输出如下:
# n= 10
# [-1.5 -1.11022302e-16j -0.46352549-1.42658477e+00j
# -1.21352549-8.81677878e-01j -1.21352549+8.81677878e-01j
# -0.46352549+1.42658477e+00j]
# [-1.5 -1.11022302e-16j -1.21352549-8.81677878e-01j
# -1.21352549+8.81677878e-01j -0.46352549-1.42658477e+00j
# -0.46352549+1.42658477e+00j]
当n = 10000时,输出如下:
# n= 10000
# [-4752.15448944 +4113.44846878j -5199.36419709 -1826.78753048j
# -4659.45705354-13014.97971229j -4752.15448944 -4113.44846878j
# -5199.36419709 +1826.78753048j]
# [-5199.36419709 -1826.78753048j -5199.36419709 +1826.78753048j
# -4752.15448944 -4113.44846878j -4752.15448944 +4113.44846878j
# -4659.45705354-13014.97971229j]
什么决定了使用正确的 n 值?此外,为什么输出值是复数?任何帮助表示赞赏。
【问题讨论】:
标签: python numpy scipy signal-processing fft