2012-07-03 77 views
2

这是一个非常基本的问题。我试图用SciPy/NumPy来对来自示波器的电压与时间数据进行fft处理。在将数据传递给scipy以进行fft处理时,我完全丧失了信心。我有数据作为两个列表(x和y值),显然可以将列表压缩到元组。我不确定该怎么做。我似乎无法找到很多文档。如果以前有人问过我的道歉,我找不到相关的问题。总结:如果一个人的x和y数据存储在两个列表中或存储在一个元组中,他们如何对这些数据执行FFT?电压/时间数据的NumPy/SciPy FFT

+1

是否所有时间样本等距间隔? –

+0

嗨,你知道吗?我有一个10000点的时间与速度数据,时间均匀分布。你能告诉我如何使用Python来获取我的数据的频率? – jhaprade

回答

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) 
+0

你是对的,我想我不需要花时间去使用它来指定其他波形的相对时间位置。这可以很容易地从文件名中推断出来。有时,这些明显的事情从来没有出现过。谢谢。 – relaytheurgency

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