基于惩罚最小二乘法的基线校正方法已成功地应用于各种光谱分析中。该方法通过估计基线来迭代地改变权重。如果信号低于先前拟合的基线,则给予大权重。另一方面,当信号高于拟合基线时,不给出权重或给出小权重,因为它可以被假设为峰值的一部分。
然而,由于噪声分布在基线之上以及基线之下,因此希望在任一情况下给予给予相同或相似的权重。为此,文章提出了一种新的加权方案的基础上广义逻辑函数。所提出的方法迭代地估计噪声水平,并相应地调整权重。
往期内容:
优化内存版
def baseline_als_optimized(y, lam, p, niter=10):
L = len(y)
D = sparse.diags([1,-2,1],[0,-1,-2], shape=(L,L-2))
D = lam * D.dot(D.transpose()) # Precompute this term since it does not depend on `w`
w = np.ones(L)
W = sparse.spdiags(w, 0, L, L)
for i in range(niter):
W.setdiag(w) # Do not create a new matrix, just update diagonal values
Z = W + D
z = spsolve(Z, w*y)
w = p * (y > z) + (1-p) * (y < z)
return z<