【发布时间】:2018-12-20 01:26:49
【问题描述】:
我正在尝试使用 Python 进行傅里叶变换。
有一个不错的库numpy 具有fft 函数,该函数假定根据文档获取一系列点并返回它们的傅里叶变换。
现在我尝试让它工作 - 但它看起来不对......
我创建了简单的sine wave 1Hz,Amplitude=1。
我用8Hz 对其进行采样(所以 8 个样本)
这些是样本:
[0,0.707,1,0.707,0,-0.707,-1,-0.707]
现在我希望得到 ens 的回报。 [0,4,0,0,0,0,0,4] 或[0,8,0,0] 表示频率为1Hz(取决于它是否根据奈奎斯特限制进行所需的修整)。
但实际上我得到以下信息:
[0.00000000e+00+0.00000000e+00j, -2.22044605e-16-3.99969798e+00j,
0.00000000e+00+0.00000000e+00j, -2.22044605e-16+3.02022804e-04j,
0.00000000e+00+0.00000000e+00j, 2.22044605e-16-3.02022804e-04j,
0.00000000e+00+0.00000000e+00j, 2.22044605e-16+3.99969798e+00j]
这是我的代码:
import numpy
signal = numpy.array([0,0.707,1,0.707,0,-0.707,-1,-0.707], dtype=float)
f = numpy.fft.fft(signal)
print (f)
为什么我会得到这个结果?我做错了什么?
【问题讨论】:
-
试试cos而不是sin。
-
"这些是示例:[0,0.707,1,0.707,0,-0.707,-1,-0.707]" 如果将
0.707替换为更准确的值np.sqrt(2)/2,您将显着降低数值噪声。 -
@OliverCharlesworth 出于好奇,为什么这会对 OP 有所帮助?
-
@tel 它将消除导致 OP 输出为虚构的 90 度相移(尽管存在数字问题)。
-
@OliverCharlesworth 有道理,谢谢。这个问题对物理 201 来说是相当复习的。