I have a decay process which appears essentially like $$ f(t) = \xi(t)\exp[-t/\tau],$$ where $\xi(t)$ is a stationary Gaussian noise with some mean, variance, and correlation function.
Given a realization of $f(t)$ which I measure from an experiment, I would like to estimate the decay timescale $\tau$.
Here is an example dataset, generated in Python using an Ornstein-Uhlenbeck process for $\xi(t)$:
import numpy as np import matplotlib.pyplot as plt dt = 1e-3 # timestep N = 5000 # number of step t = np.arange(0,N*dt,dt) tau = 5 # this is what I want to estimate np.random.seed(4) # set the random state noise =  # list to be filled with noise n = 9.4 # initial noise value D = 15 # diffusivity gam = 2 # damping i=0 while i<N: # produce an Ornstein uhlenbeck noise (correlated) noise.append(n) n = n + gam*(n0 - n)*dt + np.sqrt(2*D*dt)*np.random.normal() i+=1 noise = np.array(noise) plt.plot(t,noise*np.exp(-t/tau)) plt.xlabel('t',fontsize=15) plt.ylabel('f(t)',fontsize=15)
Given a timeseries like this, I would like to estimate its decay constant $\tau$, using some method which is more robust than just fitting a curve and ignoring the noise.
Are there any standard methods for this type of fitting procedure? In my case smoothing is not exactly viable because the correlation time of the noise is often comparable to the decay time of the signal.