这是一个非常基本的问题。我正在尝试使用SciPy / NumPy对示波器的电压与时间数据进行fft。当把数据传递到scipy进行fft处理时,我完全迷失了。我将数据作为两个列表(x和y值),显然可以将列表压缩为元组。我不确定该怎么做。我似乎找不到太多的文档。如果之前有人问过这个问题,我无法找到相关的问题。
总结:如果一个人将x和y数据存储在两个列表中或存储在元组中,他们如何对这些数据执行FFT?
答案 0 :(得分:3)
假设所有样本间隔相等(即每个时间样本之间存在相同的差异),您只需将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()
答案 1 :(得分:2)
可以在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)
答案 2 :(得分:1)
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])