3

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

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

4

3 回答 3

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()
于 2012-07-03T23:04:22.703 回答
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)
于 2012-07-03T22:57:25.933 回答
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])
于 2012-07-03T23:05:43.527 回答