2.5.3 光谱数据的常用预处理方法
采用光谱(如红外、近红外、拉曼光谱等)作为化学信息来源时,在进行信息解析和抽提之前,常常需要根据样品、研究背景的特点和性质对光谱数据进行预处理,以消除基线漂移和噪声等对光谱带来的干扰。图2-11为500多个牛奶样品的近红外光谱。
常用的光谱预处理方法有以下三种。
1.导数(Derivation)
对光谱数据求导可以消除背景漂移造成的影响,一阶导数可以消除背景的常数平移、二阶导数可以消除线性背景平移。在计算机中每一根光谱都是以二维数组的形式存储的(一维存储光谱横坐标即波长的信息,另一维存储吸光度或光谱响应值的信息),对于光谱点数为p且间隔相同的n个样本,其光谱信息可以合并存储在一个n×p的数据矩阵中。对光谱的求导可以采用多点数值微分公式
图2-11 牛奶的原始近红外光谱
上述公式以5点二次平滑方法得到,其中y为吸光度,利用多个波长点处的信息,可改善拟合效果。
在MATLAB下编译的对光谱矩阵B求一阶导数并进行光滑处理的m文件如下
function A=D1st(B,n)
%n为光滑点个数,例如取n=5即进行5点光滑
b1=gradient(B);%求矩阵B每一行(一行对应一根光谱)的一阶导数
for i=1:size(B,1)
end
%用Savitzky-Golay方法对b1中每一行进行光滑处理(光滑点数为n)
在MATLAB下编译的对光谱矩阵B求二阶导数并进行光滑处理的m文件如下
function A=D2st(B,n)
b1=gradient(B);
b2=gradient(b1);
for i=1:size(B,1)
end
对图2-11所示的光谱矩阵B采用上述命令求一阶导数,键入下述命令
>>Bd=dist1(B,31);%对矩阵B中的每一根光谱进行31点光滑的Savitzky-Golay求导
则会出现下述界面
Bd即为经一阶导数处理过后的光谱数据矩阵,再键入下述命令
>>b=[4000,4,10000]; %生成一个波数间隔为4,起始点为4000,终点为10000的光谱波长数组
>>plot(b,Bd); %以b数组为横坐标,Bd为纵坐标作出牛奶样本的一阶导数光谱
可得如图2-12所示的一阶导数光谱
图2-12 一阶导数处理后的牛奶近红外光谱
2.标准正态变换(Standard Normal Variation,SNV)
无论是固体还是液体样品,大多很难达到理想的均匀状态。样品的不均匀性会造成光通过、透过或从样品反射回来时的散射,光的散射会对样品光谱带来误差。SNV可以用来校正因散射而引起的光谱的误差。该法认为每一个光谱中,各波长点的吸光度值应满足一定的分布(如正态分布),通过这一假设对每一条光谱进行预处理,使其尽可能接近“理想”光谱(即没有散射误差效应的光谱)。SNV是原光谱减去该光谱所有光谱点吸光度的平均值后,再除以该光谱数据的标准偏差S,实质是使原光谱数据标准正态化,即
式中,i=1,2,…,n;j=1,2,…,p;n为样本个数,p为光谱点数。
在MATLAB下对光谱矩阵A(A的每一行代表一根光谱)进行SNV变换的M文件如下
>>function B=snv(A)
>>B=(A-repmat(mean(A,2),1,size(A,2)))./repmat(std(A,0,2),1,size(A,2));
对图2-11所示的光谱矩阵B采用上述命令进行SNV变换,键入如下命令
>>Bs=snv(B);
Bs即为经过SNV处理过后的数据,再键入下述命令
>>plot(b,Bs)
可得如图2-13所示的经SNV变换处理的牛奶近红外光谱。
图2-13 SNV处理后的牛奶近红外光谱
3.多元散射校正(Multi-scatter Calibration,MSC)
MSC方法认为每一条光谱都应该与“理想”光谱成线性关系,而真正的“理想”光谱无法得到,可以用样本集的平均光谱来近似。因此,每个样品的任意波长点下反射吸光度值与其平均光谱的相应吸光度的光谱是近似线性关系,直线的截距和斜率可由光谱集线性回归获得,并且用于校正每条光谱,截距反映样品独特反射作用而斜率大小则反映样品的均匀性。具体计算公式如下
上述公式中,A是样本集的光谱矩阵,Ai为第i个样品的光谱,
mi和bi是第i个光谱Ai与平均光谱的线性回归的斜率与截距,都是列向量。通过调整mi和bi,使得在减少光谱差异的同时尽量保留原有的与化学成分有关的信息。
在MATLAB下对光谱矩阵spectrum进行MSC变换的M文件如下
function sp=msc(spectrum)
msp=mean(spectrum);%求平均光谱并存储在向量msp中
[N,M]=size(spectrum);
b=[];
m=[];
for i=1:N
%用多元线性回归函数求解(2-33b)中的mi和bi
sp(i,:)=(spectrum(i,:)-repmat(B(2,1),1,M))./B(1,1);%
用(2-33)对光谱点进行MSC校正end
对图2-11所示的光谱矩阵B采用上述命令进行MSC变换,键入如下命令
>>Bm=msc(B);
Bm即为经过MSC处理过后的数据,再键入下述命令>>plot(b,Bm)
得到如图2-14所示MSC处理后的牛奶近红外光谱。
图2-14 MSC处理后的牛奶近红外光谱
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。