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.