Ich habe eine Zeitreihe von 3-stündlichen Temperaturdaten, die ich analysiert habe, und habe das Leistungsspektrum für die Verwendung der Fourier-Analyse gefunden.Python: Entwerfen eines Zeitreihenfilters nach Fourier-Analyse
data = np.genfromtxt('H:/RData/3hr_obs.txt',
skip_header=3)
step = data[:,0]
t = data[:,1]
y = data[:,2]
freq = 0.125
yps = np.abs(np.fft.fft(y))**2
yfreqs = np.fft.fftfreq(y.size, freq)
y_idx = np.argsort(yfreqs)
fig = plt.figure(figsize=(14,10))
ax = fig.add_subplot(111)
ax.semilogy(yfreqs[y_idx],yps[y_idx])
ax.set_ylim(1e-3,1e8)
Frequenzspektrum:
Leistungsspektrum:
Nein Wenn ich weiß, dass das Signal bei Frequenzen von 1 und 2 am stärksten ist, möchte ich einen Filter (Nicht-Boxcar) erstellen, der die Daten glätten kann, um diese dominanten Frequenzen zu behalten.
Gibt es eine bestimmte numpy oder scipy Funktion, die das tun kann? Wird dies etwas sein, das außerhalb der Hauptpakete erstellt werden muss?
Multiply im Frequenzbereich mit einer Gaußschen geeigneter Breite und Lage, die Frequenzen von Interesse zu isolieren, dann IFFT zurück in den Zeitbereich. – roadrunner66