迭代自适应加权惩罚最小二乘法(airPLS)的Python实现

算法介绍

拉曼光谱的位移和强度可以给我们提供拉曼光谱测定物质的含量相关信息,其中拉曼位移是定性与结构分析的依据。拉曼光谱分析技术在定性分析中的运用较为广泛。

但由于拉曼光谱是散射光,得到的浓度-强度曲线并不是完全线性的。其原因主要有以下三点:

  • 拉曼仪器激发器本身的不稳定性
  • 样本对反射光存在光的吸收
  • 样品在测定过程中存在操作误差

迭代自适应加权惩罚最小二乘法(Adaptive Iterative Re-weighted Penalized Least Squares,airPLS),是一种精度较高,常被用于去除拉曼光谱中的背景噪声。

Python实现

def airPLS(X, lam, order, wep=0.05, p=0.05, itermax=20):
    (m,n) = X.shape
    Z = np.empty([m,n])
    D = np.diff(np.eye(n), order, axis=0)
    DD = np.matmul(lam * D.T,D)
    for i in range(m):
        w = np.ones([n,1]).T
        x = X[i,:]
        for j in range(1, itermax+1):
            W = spdiags(w, 0, n, n)
            C = cholesky(W + DD)
            z = np.matmul(inv(C), np.matmul(inv(C.T), (w * x).T)).T
            d = x - z
            dssn = np.abs(sum(d[d<0]))
            if dssn < 0.001 * sum(np.abs(x)):
                break
            w[d>=0] = 0
            w[0][:math.ceil(n*wep)] = p
            w[0][n-math.floor(n*wep)-1:] = p
            to_exp = abs(d[d<0])/dssn
            w[d<0] = j * np.exp(to_exp)
        Z[i,:] = z
    Xc=X-Z
    return Xc,Z

效果图

迭代自适应加权惩罚最小二乘法(airPLS)的Python实现_第1张图片
其中,蓝线为原始数据,绿线为光谱基线,黄线为去底后的数据。

参考文档

代码改编自一条大鱼025的文章《近红外光谱基线校正—airPLS》中的MATLAB代码。

你可能感兴趣的:(光谱分析,python)