def estimate_time_constant(fluor, p = 2, sn = None, lags = 5, fudge_factor = 1.):
"""
Estimate AR model parameters through the autocovariance function
Inputs
----------
fluor : nparray
One dimensional array containing the fluorescence intensities with
one entry per time-bin.
p : positive integer
order of AR system
sn : float
noise standard deviation, estimated if not provided.
lags : positive integer
number of additional lags where he autocovariance is computed
fudge_factor : float (0< fudge_factor <= 1)
shrinkage factor to reduce bias
Return
-----------
g : estimated coefficients of the AR process
"""
if sn is None:
sn = GetSn(fluor)
lags += p
xc = axcov(fluor,lags)
xc = xc[:,np.newaxis]
A = scipy.linalg.toeplitz(xc[lags+np.arange(lags)],xc[lags+np.arange(p)]) - sn**2*np.eye(lags,p)
g = np.linalg.lstsq(A,xc[lags+1:])[0]
gr = np.roots(np.concatenate([np.array([1]),-g.flatten()]))
gr = (gr+gr.conjugate())/2.
gr[gr>1] = 0.95 + np.random.normal(0,0.01,np.sum(gr>1))
gr[gr<0] = 0.15 + np.random.normal(0,0.01,np.sum(gr<0))
g = np.poly(fudge_factor*gr)
g = -g[1:]
return g.flatten()
评论列表
文章目录