我想擬合熒光壽命曲線。這些曲線由儀器響應函數的卷積(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中實現這些方法的輸入。迭代去卷積似乎是最容易做到的,所以也許我應該從頭開始。另一方面,從我讀過的內容來看,傅里葉方法應該更快更可靠。但是,我不知道如何對傅里葉變換結果進行擬合。