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

3
这是一个很基础的问题。我想使用SciPy/NumPy对示波器上的电压-时间数据进行fft处理,但在将数据传递给Scipy进行fft处理时完全不知所措。我有两个列表(x和y值)作为数据,并可以将它们压缩成元组。然而,我不确定该怎么做。我似乎找不到太多文档。如果之前有人问过这个问题,我很抱歉没能找到相关的问题。
总之,如果一个人有存储在两个列表或元组中的x和y数据,他们应该如何对这些数据执行FFT呢?

1
所有时间样本间隔相等吗? - Charles Brunet
你好,你解决了吗?我有一组包含10000个点的时间与速度数据,并且时间间隔是均匀的。你能告诉我如何使用Python获取我的数据的频率吗? - Pradeep Kumar Jha
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()

2

您是正确的,我想除了用它来指定相对于其他波形的时间位置之外,我也不必浪费时间。但是这可以从文件名中轻松推断出来。有时这些显而易见的事情从未发生在我脑海中。谢谢。 - relaytheurgency

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接