Im Periodogramm eines Zeitsignal das Hintergrundrauschen fitten
Verfasst: Freitag 27. März 2020, 10:44
Hi,
ich versuche von einem Signal das Hintergrundrauschen zu fitten. Dabei handelt es sich um rotes rauschen. Diesen Fit benötige ich um dann confidenc levels zu erzeugen.
Für den Fit kann amn Robust autoregessive fitting methode (AR.1) verwenden aber isch weiß nicht wie!
Es kommt noch dazu das meine Zeitintervalle keine diskreten Abstände hat.
Hier mal ein Beispiel was ich am end vor habe:

Also was ich hab ist ein Datensatz der keine diskreten Zeitabstäde hat:
So als nächstes müsste ich dann den Robustena autoregressive AR(1) Fit machen...weiß aber nicht wie!?
Also die Fragen sind:
1) wie füge ich meinem Testsignal red nois hinuzu?
2) Wie kann ich mein erzeugtes Periodogramm mit dem Robusten autoregressive (1. Ordnung) model fiten?
3) Und wie erzeuge ich ausgehen von diesem Fit meine confidenc levels?
Ich hab überall ne gweisse Vorstellung wie es funktionieren könnte bekomm es aber nicht hin...kann mir jemand helfen?
Grüße,
Lienz
ich versuche von einem Signal das Hintergrundrauschen zu fitten. Dabei handelt es sich um rotes rauschen. Diesen Fit benötige ich um dann confidenc levels zu erzeugen.
Für den Fit kann amn Robust autoregessive fitting methode (AR.1) verwenden aber isch weiß nicht wie!
Es kommt noch dazu das meine Zeitintervalle keine diskreten Abstände hat.
Hier mal ein Beispiel was ich am end vor habe:

Also was ich hab ist ein Datensatz der keine diskreten Zeitabstäde hat:
Leider weiß ich nict wie ich dem Signal red nois hinzufügen kann. Das Periodogramm hab ich mit lombscargel erzeugt.A = 2.
w = 1.
phi = 0.5 * np.pi
nin = 1000
nout = 100000
frac_points = 0.9 # Fraction of points to select
r = np.random.rand(nin)
x = np.linspace(0.01, 10*np.pi, nin)
x = x[r >= frac_points]
y = A * np.sin(w*x+phi)
f = np.linspace(0.01, 10, nout)
import scipy.signal as signal
pgram = signal.lombscargle(x, y, f, normalize=True)
plt.subplot(2, 1, 1)
plt.plot(x, y, 'b+')
plt.subplot(2, 1, 2)
plt.plot(f, pgram)
plt.show()
So als nächstes müsste ich dann den Robustena autoregressive AR(1) Fit machen...weiß aber nicht wie!?
Und danach könnte ich die confidenc levels wie folgt berechen:from statsmodels.tsa.arima_model import ARMA
mod = ARMA(pgram, order=(1,0)) #?????
ar1_fit = mod.fit()
Aber hier bekomme ich nur zwei Werte müsste ich nicht für jeden Punkt an meinem Fit ein Werte für upper und lower bekommen?from scipy import stats
import numpy as np
alpha = 0.1 # significance level = 5%
df = 8 # degress of freedom = 8
t = stats.t.ppf(1 - alpha/2, df) # t-critical value for 95% CI = 2.093
s = np.std(ar1_fit, ddof=1) # sample standard deviation = 2.502
n = len(ar1_fit)
lower = np.mean(ar1_fit) - (t * s / np.sqrt(n))
upper = np.mean(ar1_fit) + (t * s / np.sqrt(n))
Also die Fragen sind:
1) wie füge ich meinem Testsignal red nois hinuzu?
2) Wie kann ich mein erzeugtes Periodogramm mit dem Robusten autoregressive (1. Ordnung) model fiten?
3) Und wie erzeuge ich ausgehen von diesem Fit meine confidenc levels?
Ich hab überall ne gweisse Vorstellung wie es funktionieren könnte bekomm es aber nicht hin...kann mir jemand helfen?
Grüße,
Lienz