基线校正——多项式拟合

小耿成长记录第一天0106
拉曼光谱数据处理学习读文献记录第一天

由于荧光背景、样品及周围环境的黑体辐射等影响,导致光谱的基线产生,其表现为缓慢变化曲线,直接对后续的数据分析产生影响。因此需要在后续处理之前将谱线中的基线消除。

分三步:
① 峰值消除;
② 多项式拟合逼近基线,得到基线;
③ 减去基线,得到基线校正后的光谱数据。

其中,拟合残差计算公式如下:

在这里插入图片描述

式中O(x)为原始光谱,P(x)为拟合光谱,DEV为残差。

残差判断条件如下:
If i=1,判断条件为abs(DEV1-DEV)/DEV1<0.05;
else,判断条件为abs(DEVi-DEVi-1)/DEVi<0.05;
原文链接:https://blog.csdn.net/dongke1991/article/details/123802799
常用的基线校正算法有分段线性拟合法、局部极值中值法、多项式拟合法。

在这里插入图片描述

%读取该目录下的所有txt文件
% 读取后file_list 的属性有
% name -- file_name  
%通过字符串拼接,获取绝对路径可以直接用[],也可以用strcat()函数
clear;clc;
path1 = 'C:\Users\Gmy\Desktop\光谱\2\';
file_list1 = dir([path1,'*.txt']);
file_name1 = sort({file_list1.name});
len1 = length(file_list1);
filename1 = cell(1,len1);
text1 = cell(1,len1);
for i = 1:len1
    filename1{i} = [path1,file_name1{i}];%通过字符串拼接获得的就是绝对路径了
    text1{i} = load(filename1{i});
end
figure(1)
for i=1:1
 figure
    x = text1{i}(:,1);
    y1 = text1{i}(:,2);
    plot(x,y1);
    title('拉曼光谱图')
    xlabel('拉曼位移')
    ylabel('拉曼强度')


y = sgolayfilt(y1,5,7)
%%
% x=[];%拉曼位移
% y=[];%原始光谱
n=5;%多项式阶数
[p0,s0,mu0]=polyfit(x,y,n);%多项式拟合
y_fit0=polyval(p0,x,[],mu0);%计算拟合值
r0=y-y_fit0;
dev0=sqrt(sum((r0-mean(r0)).^2)/length(r0));%计算残差
y_remove0=y(find(y<=y_fit0));%峰值消除
x_remove0=x(find(y<=y_fit0));%峰值消除
i=1;
judge=1;
while(judge)
[p1,s1,mu1]=polyfit(x_remove0,y_remove0,n);%多项式拟合
y_fit1=polyval(p1,x_remove0,[],mu1);%计算拟合值
r1=y_remove0-y_fit1;
dev(i)=sqrt(sum((r1-mean(r1)).^2)/length(r1));%计算残差
if i==1
    judge=abs(dev(i)-dev0)/dev(i)>0.05;
else
    judge=abs((dev(i)-dev(i-1))/dev(i))>0.05;%残差判断条件
end
index=find(y_remove0<=y_fit1);
y_remove0(index)=y_fit1(index);%光谱重建,大于拟合值的数据用拟合值代替,小于拟合值的数组采用原始数据
i=i+1
end
y_baseline=polyval(p1,x,[],mu1);%基线
y_baseline_correction=y-y_baseline;%基线校正后
figure(1)
h=plot(x,y,'b',x,y_baseline,'m',x,y_baseline_correction,'r')
set(h,'Linewidth',1,'Markersize',1)%设置线宽和点的大小
title('基线校正效果','fontsize',20)%图形标题
xlabel('波数','fontsize',10)%x轴名称
ylabel('幅值','fontsize',10)%y轴名称
grid on %打开网格线
legend('原始光谱','基线','基线校正后的光谱')%添加图例
axis tight


    hold on
end
hold off

在这里插入图片描述

### 拉曼光谱基线校正中的多项式拟合原理 #### 多项式拟合概述 在拉曼光谱分析中,由于样品自身的荧光背景或其他因素的影响,常常会在光谱图上形成一条不平坦的基线。这条基线会干扰特征峰的真实位置和强度测量,因此需要对其进行校正。其中一种常用的方法就是通过多项式函数来近似描述这段复杂的曲线变化趋势。 #### 实现过程详解 为了实现有效的基线校正,在采用多项式拟合法时通常遵循以下几个环节: - **峰值消除**:首先识别并移除原始信号中存在的显著尖锐峰位点,因为这些地方往往代表了实际物质的信息而不是噪声或背景贡献[^2]。 - **构建模型**:接着利用剩余的数据点建立一个低阶(一般不超过四次方程)或多段高阶组合形式的连续光滑曲面作为估计对象。此阶段的目标是在尽可能保留真实成分的同时最小化误差平方和[^1]。 - **求解参数**:基于上述设定好的数学表达式结构,借助于数值优化算法计算出最佳匹配系数集{a,b,c...}使得预测值y_hat与观测样本之间的差异达到全局最优状态。这一过程中可能会涉及到矩阵运算以及梯度下降等技术手段[^3]。 - **减去基线**:最后一步则是简单地将所获得的理想型态从总的响应量里扣除掉,从而得到经过修正后的纯净目标物特性展示。 ```python import numpy as np from scipy.optimize import curve_fit def poly_func(x, *params): """定义多项式函数""" result = 0 for i, param in enumerate(params): result += param * (x ** i) return result # 假设data_x为横坐标数组,data_y为纵坐标即原始光谱数据 popt, _ = curve_fit(poly_func, data_x, data_y) baseline_corrected_data = data_y - poly_func(data_x, *popt) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值