【问题标题】:Power of 2 requirement when using python rfft使用 python rfft 时要求 2 的幂
【发布时间】:2022-08-16 23:55:20
【问题描述】:

我在 python 中使用 numpy.fft 来计算快速傅立叶变换。特别是,我正在使用 rfft,因为我有一个真实的信号并且不需要负频率。我的问题是:当我去计算 FFT 时,我的信号长度必须是 2 的幂吗?我的信号有 184320 个点,所以我想知道是否需要在 131072 (2^17) 处截断我的信号,或者用零填充它,使其长度为 262144 (2^18)?我的下一步是进行窗口化,所​​以我想确保在我做任何进一步的事情之前我已经正确地执行了我的 FFT。

  • 您需要了解 FFT 的好处,尤其是您是否关心信号随时间可能发生的变化……要了解随时间变化的变化,您需要使用尽可能少的样本,但是根据定义,这也会增加频率的大小从您的 FFT 调用返回的每个数组元素的增量...通过使用您输入 FFT 的各种大小的样本数组来进行实验...自然使用较小的输入数组大小将使您的运行时执行运行得更快...我总是使用 2 数组大小的幂...我相信 FFT 也可以,但请检查
  • @ScottStensland,感谢您的回复。在某些情况下,我有一个在 184320 点内捕获了许多周期的波形。您是否建议仅在几个周期后截断信号?我尝试对我的信号应用一个窗口,并且 fft 的幅度与非窗口版本显着不同。这可能是因为我包括了多少个时期?

标签: python numpy fft


【解决方案1】:

您不必填充信号。 NumPy 中的 FFT 实现对于作为小因子乘积的数组长度是有效的,如 README.md 中所述,它说

有效的小码可用于以下因素:

  • 2、3、4、5、7、11 用于复值 FFT
  • 2、3、4、5 用于实值 FFT

您的信号长度为184320 = 2**12 * 3**2 * 5,因此 FFT 应该能够有效地处理它。

【讨论】:

  • 谢谢回复!很高兴知道 FFT 可以处理我的信号。如果我的信号有多个周期,最好只在几个周期后截断以获得更好的结果吗?我问是因为应用窗口显着改变了频率分量的幅度。我想知道这是否会受到我的信号长度的影响?
猜你喜欢
  • 2012-01-11
  • 2018-12-15
  • 2016-05-30
  • 2010-10-12
  • 1970-01-01
  • 2012-11-30
  • 2021-03-21
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多