问题描述
我正在尝试使用numpy fft从数据框中绘制一些数据:
plt.plot(np.fft.fft(df_valid_daily_activity.stepsDaily))
我不明白为什么情节一开始如此陡峭,然后似乎趋于稳定? 我也收到此警告:
Casting complex values to real discards the imaginary part
return array(a,dtype,copy=False,order=order)
我要绘制的数据示例:
2 12693.0
3 18387.0
4 18360.0
5 11684.0
6 12722.0
...
273 27836.0
274 15566.0
280 7836.0
281 17787.0
284 7739.0
Name: stepsDaily,Length: 199,dtype: float64
任何想法为何? 谢谢!
解决方法
您使用的函数是一个完全复杂的傅立叶变换:应用于实际数据时,它将对称于零。您可以做两件事:使用np.fft.fftshift
移位数据,使零频率处于中间(或使用np.fft.fftfreq
计算频率)或使用np.fft.rfft
进行转换实际数据,并将返回完整FFT的一半。
最好了解FFT的预期用途。大多数人(包括我自己)实际上只对数据中出现的频率感兴趣。为此,可以使用FFT的幅度平方(通常在对数刻度上)的图。
,我想发表评论,但由于我的声誉而不能:)
我猜您应该尝试使用对数标度图。首先,建议使用numpy.fft.fftshift
来“将零频率分量移到频谱的中心。”
import random
import matplotlib.pyplot as plt
import numpy as np
f = [random.randint(5000,20000) for i in range(300)]
ff = np.fft.fftshift(f)
现在以“ semilogx”,“ semilogy”和“ loglog”比例绘制图:
Semi Log X
Semi Log Y
Log Scale Both