迭代自适应加权惩罚最小二乘法(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效果图
其中,蓝线为原始数据,绿线为光谱基线,黄线为去底后的数据。

参考文档

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

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值