【问题标题】:Units of frequency when using FFT in NumPy在 NumPy 中使用 FFT 时的频率单位
【发布时间】:2012-01-24 07:31:28
【问题描述】:

我正在使用 NumPy 中的 FFT 函数进行一些信号处理。我有一个名为signal 的数组 每小时有一个数据点,总共有576个数据点。我在signal 上使用以下代码来查看它的傅立叶变换。

t = len(signal)
ft = fft(signal,n=t)
mgft=abs(ft)
plot(mgft[0:t/2+1])

我看到两个峰值,但我不确定 x 轴的单位是什么,即它们如何映射到小时?任何帮助将不胜感激。

【问题讨论】:

    标签: numpy signal-processing fft


    【解决方案1】:

    给定采样率FSample和变换块大小N,您可以使用以下关系计算频率分辨率deltaF、采样间隔deltaT和总捕获时间capT

    deltaT = 1/FSample = capT/N
    deltaF = 1/capT = FSample/N
    

    还请记住,FFT 将值从 0 返回到 FSample,或等效地从 -FSample/2FSample/2。在您的情节中,您已经将 -FSample/2 删除到 0 部分。 NumPy 包含一个帮助函数来为您计算所有这些:fftfreq

    对于deltaT = 1 hourN = 576 的值,您会得到deltaF = 0.001736 cycles/hour = 0.04167 cycles/day,从-0.5 cycles/hour0.5 cycles/hour。因此,如果您在 bin 48(和 bin 528)处有幅度峰值,则对应于 48*deltaF = 0.0833 cycles/hour = 2 cycles/day. 处的频率分量

    一般来说,您应该在计算 FFT 之前将window function 应用于您的时域数据,以减少spectral leakage。 Hann 窗口几乎从来都不是一个糟糕的选择。您还可以使用rfft 函数跳过输出的-FSample/2, 0 部分。那么,您的代码将是:

    ft = np.fft.rfft(signal*np.hanning(len(signal)))
    mgft = abs(ft)
    xVals = np.fft.fftfreq(len(signal), d=1.0) # in hours, or d=1.0/24 in days
    plot(xVals[:len(mgft)], mgft)
    

    【讨论】:

    • @JoeKington - 谢谢!我今天在文档中找不到,我以为我产生了幻觉。
    • 另请注意,每个 FFT 结果箱都有一个宽度,因此潜在的错误范围在您的情况下约为半小时。或者如果你开窗,大约需要 1 小时或更长时间。
    • 也许xVals = np.fft.rfftfreq(len(signal), d=1.0) 然后plot(xVals, mgft) 也可以?
    【解决方案2】:

    fft 转换的结果不会映射到 HOURS,而是映射到数据集中包含的频率。拥有转换后的图表会很有帮助,这样我们就可以看到峰值在哪里。

    您可能在转换后的缓冲区的开头出现尖峰,因为您没有进行任何窗口化。

    【讨论】:

      【解决方案3】:

      通常,来自 FFT 的频率维度单位与归因于馈送到 FFT 的数据的采样率的维度单位相同,例如:每米、每弧度、每秒,或者在您的情况下,每小时。

      每个 FFT 结果 bin 索引的频率缩放单位是 N / theSampleRate,具有与上述相同的维度单位,其中 N 是完整 FFT 的长度(在这种情况下,您可能只绘制该长度的一半严格的真实数据)。

      请注意,每个 FFT 结果峰值 bin 代表一个具有非零带宽的滤波器,因此您可能希望为映射到频率值的结果点添加一些不确定性或误差范围。如果需要并且适合源数据,甚至可以使用插值估计方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多