我想拟合荧光寿命曲线。这些曲线由仪器响应函数的卷积(IRF,假设高斯)和(多)指数衰减给出:傅立叶变换/使用numpy/scipy在python中进行迭代反卷积
在G是高斯和F指数衰减。我已经在Python使用lmfit.minimize尝试配合这一点,具有以下功能:
def gaus(t, gamp, gwidth, gtoff):
i = gamp*math.exp(-(t-gtoff)**2/gwidth)
return i
def exp1(t, expamp, exptime, exptoff):
i = expamp*math.exp((t-exptoff)/(exptime))
return i
def func1(t, gamp, gwidth, gtoff, expamp1, exptime1, exptoff1):
i = [(scipy.integrate.quad(lambda Tpr: gaus((ti - Tpr), gamp, gwidth, gtoff)*exp1(ti, expamp1, exptime1, exptoff1), 0, ti))[0]
for ti in t]
return i
凡GAUS限定高斯仪器响应函数,EXP1是单指数衰减。 FUNC1计算两个与scipy.integrate之间的卷积,它返回被用于计算拟合之间的差的值和给定的数据的一组参数:
def fitfunc(params, x, data):
..getting parameters part here..
values = func1(t, gamp, gwidth, toff, expamp1, exptime1, toff)
return values - data
result = lmfit.minimize(fitfunc, fit_params, args = (t, test))
虽然这种作品的,拟合过程是非常缓慢的,还没有给出我的任何合理的配合。
有几种方法可以通过使用傅立叶变换或迭代反卷积来规避卷积过程。 Origin似乎知道如何去做,但我无法理解程序。
据我所知,迭代反卷积的工作原理是用猜测的高斯函数去卷积信号,然后拟合结果,然后调整高斯。
傅里叶变换方法将基于实空间中的卷积对应于傅立叶域中的乘法的原理,这将减少计算时间。我猜测这将是傅里叶变换信号,拟合,然后傅里叶变换回来。
我想要一些关于如何在python numpy/scipy中实现这些方法的输入。迭代去卷积似乎是最容易做到的,所以也许我应该从头开始。另一方面,从我读过的内容来看,傅里叶方法应该更快更可靠。但是,我不知道如何对傅里叶变换结果进行拟合。