python - numpy.fft.fft 中参数 n 的影响是什么
问题描述
我想将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)
在scipy
doc on 中numpy.fft.fft
,它指出
numpy.fft.fft(a, n=None, 轴=-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 值?此外,为什么输出值是复数?任何帮助表示赞赏。
解决方案
但是我仍然不清楚参数 n 值对输出的影响以及如何决定使用什么值。
对于“n = 输入大小”,结果是简单的离散傅立叶变换:它在频率空间中精确地表示持续时间 (T = n dt) 的信号。最低频率分量是波周期 2T 的正弦/余弦。
对于“n > 输入大小”,您执行信号的变换,该信号是附加了零的原始信号。因此可以表示的最低频率对应于较长的波周期2T。信号因此突然被切断为零。根据输入信号,这可能会引入不需要的更高频率分量。
对于“n < 输入大小”,您会截断信号。如果您有“固定信号”,则分析较短的样本(可能带有窗口)可能是有意义的。
什么决定了使用正确的 n 值?
这取决于应用和采样(非常长的固定系列,短的测量,...)。除非您有某些理由使用该选项,否则您可以省略 n。
此外,为什么输出值是复数?
实信号的傅里叶变换通常是复杂的。它只对偶数信号是真实的。
您可以使用具有简单信号(例如纯正弦或余弦)的 FFT 来理解这一点。
推荐阅读
- r - 接受裸(来自 rlang)或字符串作为函数输入
- sql - 如何通过sql生成session_id?
- mysql - 从一个表中选择多行为一行
- spss-modeler - 如何在 SPSS Modeler 中对列名使用通配符搜索来选择列
- mysql - 为 MySQL 创建带有插入的表
- javascript - 请求 node.js 中的其他路由
- reactjs - 如何在 React JS 中检索 Azure Key Vault
- html - ::before 也在影响 Firefox 中的 optgroup 标签
- file - 带有忽略 Emacs-lisp 中子目录的选项的异步复制目录?
- sql - 我可以创建一个在 SQL 语句和 PL SQL 脚本中也有用的变量吗?