【问题标题】:FFT using Python使用 Python 进行 FFT
【发布时间】:2020-06-19 16:23:01
【问题描述】:

我正在以两个 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)

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

【问题讨论】:

  • 我相信你必须使用非均匀 FFT,比如this
  • 使用这种方法有什么好处?为什么标准 fft 在这里不起作用?
  • 嗯,你有非均匀的时间网格,这就是原因。统一时间网格假设中的标准 FFT 根本不需要 X 值。
  • 我自己从未使用过 NFFT,也许有比我建议的更好的软件包。您可能会重新提出问题并专门针对 NFFT 提出问题
  • @SeverinPappadeux 非常感谢。我只是想了一下,认为时间信息在这里并不重要,因为我只想查看数据在频谱中的样子。当我只有一个 np.array 时,如何在这里应用正常的 FFT?

标签: python fft vibration nfft


【解决方案1】:

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

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

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

【讨论】:

猜你喜欢
  • 2016-11-23
  • 2017-09-11
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多