这是一个非常基本的问题。我正在尝试使用 SciPy/NumPy 对来自示波器的电压与时间数据执行 fft。在将数据传递给 scipy 进行 fft 处理时,我完全迷失了方向。我将数据作为两个列表(x 和 y 值),显然可以将列表压缩为元组。我不确定该怎么做。我似乎找不到太多文档。抱歉,如果以前有人问过这个问题,我找不到相关的问题。
总结一下:如果一个人有 x 和 y 数据存储在两个列表中或存储在一个元组中,他们如何对这些数据进行 FFT?
假设所有样本都是等距的(即每次样本之间存在相同的差异),您只需将y
向量传递给 fft 函数。
它将返回一个复数向量。第一个数字将对应于直流电压。然后向量的一半将是正频率,而另一半将对应于负频率。如果您只处理实际电压,则可能不需要负频率。
这是一个示例,假设x
任何y
都是 numpy 数组:
from matplotlib import pyplot
fy = numpy.fft.fft(y)
dt = x[1] - x[0]
n = x.size
freqs = numpy.fft.fftfreqs(n, d=dt) # Frequencies associated with each samples
pyploy.plot(numpy.fft.fftshift(freqs), numpy.fft.fftshift(abs(fy)))
pyplot.show()
该文档可以在http://docs.scipy.org/doc/scipy/reference/generated/scipy.fftpack.fft.html找到
我不知道你为什么要打发时间;肯定它隐含在电压测量序列中吗?
一般来说,
import numpy as np
import scipy.fftpack
data = np.arange(0.0, 12.8, 0.1)
fft = scipy.fftpack.fft(data)
from scipy.fftpack import fft
my_voltage_list = [1.1,1.2,1.1,1.1,3.0,3.1]
my_time_list = [1,2,3,4,5,6]
fft_result = fft(my_voltage_list)
print fft_result
>>> array([ 10.6 +0.00000000e+00j, 0.1 +3.29089653e+00j,
-2.0 +4.44089210e-16j, -0.2 +0.00000000e+00j,
-2.0 -4.44089210e-16j, 0.1 -3.29089653e+00j])