【问题标题】:How do I get peak values back from fourier transform?如何从傅立叶变换中获取峰值?
【发布时间】:2020-05-13 09:21:37
【问题描述】:

我怀疑我对傅里叶变换的理解缺少一些东西,所以我正在寻找一些更正(如果是这样的话)。我应该如何从下面的第一个图中收集峰值信息?

该数据集是过去 17 年(特定城市)911 呼叫的每小时数据。

我已从数据中删除了趋势,现在正在删除季节性。当我运行傅里叶变换时,我得到以下图:

我相信数据集确实有一些季节性(查看每周数据,我有这种模式):

如何在第一个图中找出峰值的值?大概对于第一个图中 5000 下的所有“峰值”,我可能会忽略在我的最终模型中包含该季节性,但只会损失准确性,对吗?

这是我目前正在使用的代码:

from scipy import fftpack
fft = fftpack.fft(calls_grouped_hour.detrended_residuals - calls_grouped_hour.detrended_residuals.mean())
plt.plot(1./(17*365)*np.arange(len(fft)), np.abs(fft))
plt.xlim([-.1, 23/2]);

编辑: 在 Mark Snider 的初步回答之后,我有以下情节:

添加代码尝试从 fft 获取峰值:

我需要先使用 ifft 将值转换回来吗?

fft_x_y = np.stack((fft.real, fft.imag), -1)
peaks = []
for x, y in np.abs(fft_x_y):
    if (y >= 0): 
        spipeakskes.append(x)

peaks = np.unique(peaks)
print('Length: ', len(peaks))
print('Peak values: ', '\n', np.sort(peaks))

【问题讨论】:

    标签: python scipy fft


    【解决方案1】:
    threshold = 5000
    fft[np.abs(fft)<threshold] = 0
    

    这会给你一个fft,它会忽略除峰值之外的所有内容。不,我不会想象“噪音”代表实际的季节性。 fft[0] 的峰值也不代表季节性——它是数据平均值的倍数,所以如果你打算减去峰值的 ifft,我也不会包括 fft[0],除非你想要你的数据要居中。

    如果您想要只是峰值而不是可以反转的完整 fft,您可以这样做:

    peaks = [np.abs(value) for value in fft if np.abs(value)&gt;threshold]

    【讨论】:

    • 虽然这提供了一个更清晰的情节(添加到上面的原始问题中),但我仍然很难获得实际值。我试图“堆叠”虚数,以便我可以过滤掉 x 值大于 0 的那些(因为阈值将
    • @alofgran 哦,对不起。如果您想要只是峰值而不是可以反转的完整 fft,您可以这样做:peaks = [np.abs(value) for value in fft if np.abs(value)&gt;threshold]。我假设您希望继续反转这些峰值并从数据中减去结果。
    • 不用道歉;你的假设是绝对正确的。我是新人,而你比我领先一步。这听起来不是挑选实际峰值并为每次出现的季节性创建一个正弦和余弦特征(就像我认为我需要做的那样),你告诉我我可以减去 fft 的倒数形式从我的去趋势残差中列出我可以建模的噪声?
    • @alofgran 基本上,是的。挑选出单个峰,将它们转换为正弦曲线,然后从整体数据中减去每个峰与一次对所有峰进行 ifft,然后从整体数据中减去该信号之间没有区别。如果您正确地进行了单独的转换,最终结果应该完全相同。如果您对查看单个季节性影响感兴趣,您可能会发现进行单个转换是值得的。但如果你只是想摆脱它们,一次完成它们会更容易。
    • @alofgran 如果您对绘制单个正弦曲线感兴趣,您可能希望看到我之前的回答:stackoverflow.com/a/59726152/12482432
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多