我是新手,对傅里叶理论不熟悉。我看过一些非常好的教程,教我如何将fft应用到信号中并绘制它,以便查看其中包含的频率。但这些教程都将正弦混合作为数据,我很难将其适应到我的实际问题中。
我有242个每小时观测值,具有日周期性,这意味着我的周期为24。因此,我期望在我的fft图上有一个峰值约为24。
我的data.csv样本在这里: https://pastebin.com/1srKFpJQ 数据绘制如下:
这会输出一个非常奇怪的结果,似乎每个频率都得到了相同的值。 我认为问题出在N、t和T的定义上,但我找不到任何在线帮助我清晰理解这个问题。请帮忙 :)
编辑1: 使用charles的答案提供的代码,我发现在0附近出现了一个非常奇怪的尖峰。为了避免太多的频率,我使用了rfft和rfftfreq。
我有242个每小时观测值,具有日周期性,这意味着我的周期为24。因此,我期望在我的fft图上有一个峰值约为24。
我的data.csv样本在这里: https://pastebin.com/1srKFpJQ 数据绘制如下:
我的代码:
data = pd.read_csv('data.csv',index_col=0)
data.index = pd.to_datetime(data.index)
data = data['max_open_files'].astype(float).values
N = data.shape[0] #number of elements
t = np.linspace(0, N * 3600, N) #converting hours to seconds
s = data
fft = np.fft.fft(s)
T = t[1] - t[0]
f = np.linspace(0, 1 / T, N)
plt.ylabel("Amplitude")
plt.xlabel("Frequency [Hz]")
plt.bar(f[:N // 2], np.abs(fft)[:N // 2] * 1 / N, width=1.5) # 1 / N is a normalization factor
plt.show()
这会输出一个非常奇怪的结果,似乎每个频率都得到了相同的值。 我认为问题出在N、t和T的定义上,但我找不到任何在线帮助我清晰理解这个问题。请帮忙 :)
编辑1: 使用charles的答案提供的代码,我发现在0附近出现了一个非常奇怪的尖峰。为了避免太多的频率,我使用了rfft和rfftfreq。
我读到这可能是由于序列的直流分量,因此在减去平均值后得到:
我在解释这个的时候遇到了困难,尖峰似乎周期性出现,但是Hz值不让我得到我的24值(总频率)。有人知道如何解释这个吗?我错过了什么吗?