用于电压/时间数据的NumPy / SciPy FFT

时间:2012-07-03 22:53:22

标签: python numpy scipy fft

这是一个非常基本的问题。我正在尝试使用SciPy / NumPy对示波器的电压与时间数据进行fft。当把数据传递到scipy进行fft处理时,我完全迷失了。我将数据作为两个列表(x和y值),显然可以将列表压缩为元组。我不确定该怎么做。我似乎找不到太多的文档。如果之前有人问过这个问题,我无法找到相关的问题。

总结:如果一个人将x和y数据存储在两个列表中或存储在元组中,他们如何对这些数据执行FFT?

3 个答案:

答案 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])