使用 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 时,不再需要时间信息,因为您在频域中。
我正在以两个 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 时,不再需要时间信息,因为您在频域中。