使用 Python 的 FFT

FFT using Python

我正在以两个 numpy 数组的形式从振动传感器接收数据。第一个数组表示振动测量的实际值,第二个数组是相应的时间信息(时间戳)。例如:

vibraton_data = np.array([621,1546,262])

timestamps = np.array([1592583531, 1592583548, 1592583555])

这意味着对于每次振动测量,我都有时间信息。

我现在想申请快速傅立叶变换。有谁知道这是怎么做到的吗?我的第一次尝试是这样的:

N = 600 
T = 1.0 / 800.0 
x = np.linspace(0.0, N*T, N)
yf = fft(vibration_data)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

但我不知道如何处理我的时间数组中的时间信息。

这确实是一个信号处理问题,而不是 Python。您在这里有几个选择:

  • 如果您的数据是统一采样的 - 您可以完全忽略时间戳。您需要的所有信息都在数据中,并且(恒定)采样频率:f_s = 1.0 / (timestamps[1] - timestamps[0])
  • 如果没有,您可以:
    • 使用Non-uniform DFT (here是一种实现,没试过)
    • 在非统一时间戳之间插入数据,使其变得统一。请注意,这实际上对您的数据应用了低通滤波器,这可能不是您想要的(更多关于插值的影响 here)。

在所有情况下,当您执行 FFT 时,不再需要时间信息,因为您在频域中。