执行峰值拟合,发现高峰和标签,集成某些地区
37视图(30天)
显示旧的评论
我有一个数据集,我需要做一个基线校正,然后整合某些地区计算比率把他们打印出来。
我的基线校正部分似乎是工作,但我没有得到任何结果峰值和整合的结果。我认为找不到峰值定义的地区是主要的问题。
下面我分享代码,以及样本数据集。
%负载拉曼数据从一个文本文件
数据= readmatrix (
“我data.txt之路”
);
x =数据(:1);
%波数
y =数据(:,2);
%强度
%基线校正使用不对称最小二乘(ALS)算法
基线= als_baseline (y, 0.001, 10 ^ 6);
corrected_y = y -基线;
%找到峰值谱——本节并不给任何输出
prominence_threshold = 120;
distance_threshold = 10;
山峰= findpeaks (corrected_y,
“MinPeakProminence”
prominence_threshold,
“MinPeakDistance”
,distance_threshold);
%执行峰值拟合和集成
range1 = (2050、2200);
range2 = (2800、3000);
integrated_area1 = 0;
integrated_area2 = 0;
为
i = 1:元素个数(peaks.loc)
位置= x (peaks.loc (i));
强度= corrected_y (peaks.loc (i));
如果
位置> = range1 (1) & & < = range1位置(2)
integrated_area1 = integrated_area1 +强度;
结束
如果
位置> = range2 (1) & & < = range2位置(2)
integrated_area2 = integrated_area2 +强度;
结束
结束
结果= integrated_area2 / ((integrated_area1 + integrated_area2) + (integrated_area1 + integrated_area2));
流(
“集成结果:% f \ n”
,结果);
%定义ALS基线校正函数
函数
基线= als_baseline (y, p, lam)
L =元素个数(y);
D = diff (speye (L), 2);
w = 1 (L, 1);
为
i = 1:10
W = spdiags (W 0 L, L);
C =胆固醇(W +林* (D ' * D));
\ \ z = C (C”(w。* y));
w = p * (y > z) + (1 - p) * (y < z);
结束
基线= z;
结束
你能推荐一个更好的方法吗?或发现任何代码的问题是感谢。
0评论
答案(2)
马修•诺伊
2023年6月14日十五19
你好
修正一些小错误
希望它能帮助
%负载拉曼数据从一个文本文件
数据= readmatrix (03——频谱——006——规范。1.三种数据);
x =数据(:1);%波数
y =数据(:,2);%强度
%基线校正使用不对称最小二乘(ALS)算法
基线= als_baseline (y, 0.001, 10 ^ 6);
corrected_y = y -基线;
%找到峰值谱——本节并不给任何输出
prominence_threshold = 10;
distance_threshold = 10;
(峰值、loc) = findpeaks (corrected_y,“MinPeakProminence”prominence_threshold,“MinPeakDistance”,distance_threshold);
%执行峰值拟合和集成
range1 = (2050、2200);
range2 = (2800、3000);
integrated_area1 = 0;
integrated_area2 = 0;
为ci = 1:元素个数(loc)
位置= x (loc (ci));
强度=山峰(ci);
如果位置> = range1 (1) & & < = range1位置(2)
integrated_area1 = integrated_area1 +强度;
结束
如果位置> = range2 (1) & & < = range2位置(2)
integrated_area2 = integrated_area2 +强度;
结束
结束
结果= integrated_area2 / ((integrated_area1 + integrated_area2) + (integrated_area1 + integrated_area2));
流(“集成结果:% f \ n”,结果);
%定义ALS基线校正函数
函数基线= als_baseline (y, p, lam)
L =元素个数(y);
D = diff (speye (L), 2);
w = 1 (L, 1);
为i = 1:10
W = spdiags (W 0 L, L);
C =胆固醇(W +林* (D ' * D));
\ \ z = C (C”(w。* y));
w = p * (y > z) + (1 - p) * (y < z);
结束
基线= z;
结束
4评论
马修•诺伊
2023年6月15日14:34
我改变的值来获得更多的山峰被选现在结果不同于0.5
我添加了几行代码来显示有多少山峰保留的范围
我还是有点担心你称之为area_integral不是面积积分,但一个简单的几峰值振幅之和。你不是sippose做一个真正的积分定义范围,假设这个范围实际上包含一个撞吗?
%负载拉曼数据从一个文本文件
数据= readmatrix (03——频谱——006——规范。1.三种数据);
x =数据(:1);%波数
y =数据(:,2);%强度
%基线校正使用不对称最小二乘(ALS)算法
基线= als_baseline (y, 0.001, 10 ^ 6);
corrected_y = y -基线;
%找到峰值谱——本节并不给任何输出
prominence_threshold = 3;
distance_threshold = 10;
(峰值、loc) = findpeaks (corrected_y,“MinPeakProminence”prominence_threshold,“MinPeakDistance”,distance_threshold);
情节(x, corrected_y,“b”x (loc),山峰,“博士”);
%执行峰值拟合和集成
range1 = (2050、2200);
range2 = (2800、3000);
integrated_area1 = 0;
integrated_area2 = 0;
n1 = 0;%的新代码
n2 = 0;%的新代码
为ci = 1:元素个数(loc)
位置= x (loc (ci));
强度=山峰(ci);
如果位置> = range1 (1) & & < = range1位置(2)
integrated_area1 = integrated_area1 +强度;
n1 = n1 + 1;
结束
如果位置> = range2 (1) & & < = range2位置(2)
integrated_area2 = integrated_area2 +强度;
n2 = n2 + 1;
结束
结束
disp ([“选择峰值范围1 =”num2str (n1)]);%的新代码
disp ([“选择峰值范围2 =”num2str (n2)]);%的新代码
% = integrated_area2 /结果((integrated_area1 + integrated_area2) + (integrated_area1 + integrated_area2));
结果= integrated_area2 / (2 * (integrated_area1 + integrated_area2));%一样!
流(“集成结果:% f \ n”,结果);
%定义ALS基线校正函数
函数基线= als_baseline (y, p, lam)
L =元素个数(y);
D = diff (speye (L), 2);
w = 1 (L, 1);
为i = 1:10
W = spdiags (W 0 L, L);
C =胆固醇(W +林* (D ' * D));
\ \ z = C (C”(w。* y));
w = p * (y > z) + (1 - p) * (y < z);
结束
基线= z;
结束