私はまだdataの周波数解析をPythonでFFTを使用して取得しようとしています。 サンプリングレートは1データポイント/分です。Pythonを使用したFFT - 予想外の低周波数
私のコードは次のとおりです。
from scipy.fftpack import fft
df3 = pd.read_csv('Pressure - Dates by Minute.csv', sep=",", skiprows=0)
df3['Pressure FFT'] = df3['ATMOSPHERIC PRESSURE (hPa) mean'] - df3['ATMOSPHERIC PRESSURE (hPa) mean'].mean()
Pressure = df3['Pressure FFT']
Fs = 1/60
Ts = 1.0/Fs
n = len(Pressure)
k = np.arange(n)
T = n/Fs
t = np.arange(0,1,1/n) # time vector
frq = k/T # two sides frequency range
frq = frq[range(int(n/2))] # one side frequency range
Y = np.fft.fft(Pressure)/n # fft computing and normalization
Y = Y[range(int(n/2))]
fig, ax = plt.subplots(2, 1)
ax[0].plot(t,Pressure)
ax[0].set_xlabel('Time')
ax[0].set_ylabel('Amplitude')
ax[1].plot(frq,abs(Y),'r') # plotting the spectrum
ax[1].set_xlabel('Freq (Hz)')
ax[1].set_ylabel('|Y(freq)|')
しかし、結果が得られます。
だから私の問題は、次のとおりです。
1)は、周波数が全く存在しないのはなぜ?データは明らかに周期的です。
2)なぜ周波数スペクトルが低いのですか? (0 - 0.009)
3)多分私は別のフィルタリング手法を試してみるべきですか?
洞察?
ありがとうございました!
FFT関数によって返される配列の最初の項目は、DCコンポーネント、つまり元の配列のすべての値の合計を持ちます。これは、しばしば、周期成分よりも数桁大きい。プロットする前に 'Y [1:]'をプロットするか、 'Y [0] = 0'を行うと、あなたの周波数が表示されるはずです。 – Jaime
プロットする前にY [0] = 0を実行しようとしましたが、周波数はまだありません。多分それは正規化ですか?定期的な行動は1日2回であるからです。 – ValientProcess
通常、ログスケールを使用してY軸をプロットします。また、FFTの前に適切な窓関数を適用するのを忘れてしまった。 –