我有一系列的太阳黑子数据,每月计算平均太阳黑子数,我试图使用傅里叶变换将其从时间域转换到频率域。数据来自https://wwwbis.sidc.be/silso/infosnmtot。
首先,我不确定如何将采样频率表达为每月一次。我需要将其转换成秒,例如 1/(30天中的秒数) 吗?以下是我的进展:
首先,我不确定如何将采样频率表达为每月一次。我需要将其转换成秒,例如 1/(30天中的秒数) 吗?以下是我的进展:
fs = 1/2592000
#the sampling frequency is 1/(seconds in a month)
fourier = np.fft.fft(sn_value)
#sn_value is the mean number of sunspots measured each month
freqs = np.fft.fftfreq(sn_value.size,d=fs)
power_spectrum = np.abs(fourier)
plt.plot(freqs,power_spectrum)
plt.xlim(0,max(freqs))
plt.title("Power Spectral Density of the Sunspot Number Time Series")
plt.grid(True)
我认为这不正确 - 主要是因为我不知道x轴的刻度。但是我知道在(11年)^-1处应该有一个峰值。
从这张图中我想了解的第二件事是为什么似乎有两条线 - 其中一条是略高于y = 0的水平线。当我将x轴边界改为:plt.xlim(0,1)时,情况更加清晰。
我是否错误地使用了傅里叶变换函数?
np.fft.rfft
,因为您有实值数据。 - Tim Robertsnp.fft.rfft
的建议!只是想问一下 - FFT可能不会每11年有一个峰值,但是numpy.fft.fftfreq
应该在11年处返回一个峰值,对吗? - jayfftfreq
根本不使用数据。它只是计算您的x轴值。它基本上是np.arange()
除以一个常数。 - Tim Roberts