IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 三维荧光平行因子学习记录--(二)荧光区域积分(FRI) -> 正文阅读

[数据结构与算法]三维荧光平行因子学习记录--(二)荧光区域积分(FRI)

三维荧光平行因子学习记录–(二)荧光区域积分(FRI)

注:本文仅作为自己的学习记录以备以后复习查阅

所有步骤和代码参考知乎上两位大佬在这里po一下他们的主页:

https://www.zhihu.com/people/uby-23
https://www.zhihu.com/people/ihy-38-65

有兴趣学习三维荧光相关数据处理和分析的可以去看看他们的文章。

前言

在这里插入图片描述

荧光区域积分最早是在《2003 Fluorescence Excitation-Emission Matrix Regional Integration to Quantify Spectra for Dissolved Organic Matter》这篇文章里提到的,用于分析荧光数据的方法,在此之前各种荧光光谱技术已被用于表征海洋、水生和土壤DOM(溶解性有机质)样品的来源,但量化荧光光谱特性的技术已受到限制,通常仅使用荧光光谱中的一个、两个或三个数据点。由此文章提出了区域积分的方法对荧光数据进行表征。
文中的积分区域如下:
在这里插入图片描述

一、积分公式

我们假设在选定区域内EEM下方的整合将代表具有相似性质的DOM的累积荧光响应。FRI技术用于整合EEM光谱下的区域(计算第i个区域的体积积分)。
在这里插入图片描述
对于离散的数据,体积积分公式的计算如下:
在这里插入图片描述
标准化激发发射面积体积(Φi,n,ΦT,n)和荧光响应百分比(Pi,n)计算如下:
在这里插入图片描述
在这里插入图片描述
第i块区域占全区域的比例:
在这里插入图片描述

二、数据整理

所有的数据整理参考我的上一篇文章,在这里就不赘述了,默认我们已经有了做好的数据集。
在这里插入图片描述
大家注意看一下自己的ex和em的大小。

三、Matlab代码

下面的代码参考知乎上一位作者的,这里po一下他的主页,(如有侵权联系我立即删除)

https://www.zhihu.com/people/ihy-38-65

下面是代码部分,简单说一下,因为代码中没有注释的部分,想要获得较好的积分和绘图效果建议ex在200-450nm,em在250-600nm这样大概的范围内,并且要保证代码中所有积分的波长范围你的数据集中都有包括,不然matlab会报错超过数组索引范围。

下面的代码保存成.m文件放在你要分析数据的路径下面方便调用。
在这里插入图片描述

function [P, Phi, MF] = FRI(data,plots)
% FRI:区域积分计算
% Phi:各区域的荧光积分,MF:倍增系数,P:各区域比例
% data:数据集,plots:每次画图数,如[2,3]表示两行三列图,即一次六张图,默认不连续出图而是按下任意键画下一组图
% e.g.绘制图形:[P, Phi, MF] = FRI(data,plots)    不绘制图形:[P, Phi, MF] = FRI(data)
% 只获取各区域积分比例:[P] = FRI(data)

zmin=min(reshape(data.X,(data.nSample*data.nEm*data.nEx),1));
zmax=max(reshape(data.X,(data.nSample*data.nEm*data.nEx),1));

X=data.X;
X(isnan(X))=0;
ex=data.Ex;em=data.Em;
dex=ex(2)-ex(1);dem=em(2)-em(1);
s(1)=(250-ex(1))*(330-em(1));index{1,1}=find(ex<=250);index{1,2}=find(em<=330);
s(2)=(250-ex(1))*(380-330);index{2,1}=find(ex<=250);index{2,2}=find(em>=330&em<=380);
s(3)=(250-ex(1))*(em(end)-380);index{3,1}=find(ex<=250);index{3,2}=find(em>=380);
s(4)=(ex(end)-250)*(380-em(1));index{4,1}=find(ex>=250);index{4,2}=find(em<=380);
s(5)=(ex(end)-250)*(em(end)-380);index{5,1}=find(ex>=250);index{5,2}=find(em>=380);
for i=1:data.nSample
    t=squeeze(X(i,:,:));
    for j=1:5
        ts=t(index{j,2},index{j,1});
        Phi(i,j)=(sum(ts(:))-0.5*(sum(ts(1,:))+sum(ts(:,1))+sum(ts(end,:))+sum(ts(:,end)))+0.25*(ts(1,1)+ts(1,end)+ts(end,1)+ts(end,end)))*dex*dem;
        MF(i,j)=sum(s)/s(j);
        S(i,j)= Phi(i,j)*MF(i,j);
    end
    for j=1:5
        P(i,j)=S(i,j)/sum(S(i,:));
    end
end
if nargin>1
    figure
    for i=1:(plots(1)*plots(2)):data.nSample,pause
        m=min(i+plots(1)*plots(2)-1,data.nSample)-i+1;
        for j=1:m
            subplot(plots(1),plots(2),j)
            contourf(em,ex,squeeze(X(i+j-1,:,:))'),colorbar,caxis([zmin,zmax])
            line([em(1) em(end)],[250 250],'color','k','LineWidth',0.8)
            line([380 380],[ex(1) ex(end)],'color','k','LineWidth',0.8)
            line([330 330],[ex(1) 250],'color','k','LineWidth',0.8)
            text((330+em(1))/2,(250+ex(1))/2,'','Color','white','FontSize',12,'FontAngle','italic','FontWeight','bold','HorizontalAlignment','center')
            text((330+380)/2,(250+ex(1))/2,'','Color','white','FontSize',12,'FontAngle','italic','FontWeight','bold','HorizontalAlignment','center')
            text((380+em(end))/2,(250+ex(1))/2,'','Color','white','FontSize',12,'FontAngle','italic','FontWeight','bold','HorizontalAlignment','center')
            text((em(1)+380)/2,(250+ex(end))/2,'','Color','white','FontSize',12,'FontAngle','italic','FontWeight','bold','HorizontalAlignment','center')
            text((380+em(end))/2,(250+ex(end))/2,'','Color','white','FontSize',12,'FontAngle','italic','FontWeight','bold','HorizontalAlignment','center')
            xlabel('Em/nm')
            ylabel('Ex/nm')
            title(['Sample' num2str(i+j-1)])
        end
    end
end
end

运行效果:

在这里插入图片描述

在这里插入图片描述
P中生成的列分别对应五个积分区域,行就代表你的样本数量,比如我这里只有九个样本。(下面的也是一样)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
运行代码:[P] = FRI(data,[2 3])
表示画一个两行三列的图来显示数据,运行后默认是不会画的,需要你点击任意键来切换,每一张图都是如此。

在这里插入图片描述
在这里插入图片描述

注意:在进行荧光区域积分之前建议大家都对数据进行去除散射的处理

我的数据量不是很多,并且从图中也能看出数据处理的并不是特别好,可能也是我做的仪器的原因,实验室仪器的氙灯用的太久了,水拉曼测试两个指标都不通过,勉强为了学习数据分析去收集的这九个数据,还是建议大家在数据分析前也重视数据的预处理,这样才能得到一个较好的分析效果。

以上。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 11:02:21  更:2022-04-23 11:06:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:58:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码