近红外数据预处理和简单分析matlab

ops/2025/1/18 7:19:42/

近红外的数据,预处理过程很多开源的工具包可以使用,像homer3、NIRS_SPM、NIRS_KIT等等,B站资源也很多,都可以学习。本次主要记录下,分析的一个fNIRS数据。首先,使用NIRS_KIT做了下预处理,然后再matlab中进行简单的分析。

数据是采集了一个27通道,25Hz,大约15分钟左右的静息态,导出了一个excel格式。
1. NIRS_KIT预处理
工具包可识别的数据格式类型比较多,具体的大家可以参考手册,也有一个中文手册,描写的很清楚,可以自行查阅;
数据准备:
在这里插入图片描述
2D位置制作
点击2D Topo-marker, 进行通道,发射和接收光极放置,以及进行编号,如果需要可以进行制作,如果不需要也可省略,不勾选;
在这里插入图片描述
数据预览
此步骤主要查看数据质量如何,预处理后,结果怎样,可设置参数,查看结果,但是结果不会保存,只为了确定预处理参数
在这里插入图片描述
数据预处理
按照数据预览中的参数设置,点击Run即可将数据保存在选择的文件夹中
在这里插入图片描述
结果如下
结果是.mat格式,在matlab中也方便读取
在这里插入图片描述
注:其每次处理添加的都是文件夹,如果多个数据的话放在同一文件夹下,也会同时处理,比较方便。

2. matlab简单分析
主要想看看周围的血氧和中间的血氧是否不同;

clc;clear;close all;
load('wangyongliang20250106.mat'); % 加载数据
data = nirsdata.oxyData;  % 读取数据% 数据校正(数据围绕0进行波动)
Total_mean = mean(data); % 计算所有通道的均值
data = data - Total_mean; % 数据减去均值%% 数据都从0开始,看自己需要进行选择
% start_one = data(1,:);
% data = data - start_one;fs = 25;  % 采样率
n = 5;    % 选取几分钟
lengths = fs*60*1; % 时长1分钟
for i = 1:n   % 将数据划分为1分钟的时间段data1 = data((i-1)*lengths+1:i*lengths,:);data_t(:,:,i) = data1;
end
% 将时间段进行叠加平均
M_data = mean(data_t,3);   % 所有段进行叠加平均为一段
M_data_c = abs(mean(M_data));   % 将一段叠加平均为一个数值,27个通道也即27个数值
% 分组,有4个通道,数据不好,排除
w = [1,2,4,6,7,9,10,18,20,21,22,26,27]; %分组1的对应的通道编号
z = [3,5,8,11,12,13,14,19,23,25];  % 分组2对应的通道编号data_w = M_data(:,w);  % 取分组1的数据
data_z = M_data(:,z);  % 取分组2的数据M_data_w = M_data_c(w); % 从所有均值中取分组1的均值
M_data_z = M_data_c(z); % 从所有均值中取分组2的均值% 分组的均值
data_w_m = mean(data_w,2);  % 分组1叠加平均,13个通道的均值
data_z_m = mean(data_z,2);  % 分组2叠加平均,10个通道的均值
data_w_z =[data_w_m,data_z_m]; % 两组数据组合
data_m = [abs(mean(data_w_m)),abs(mean(data_z_m))]; % 两组的各自均值

接下来,进行画图,画所有通道的均值

% 画所有通道
figure;
bar(M_data_c(1,:));
title('含氧血红蛋白浓度变化',FontSize= 16 );
ylabel('浓度',FontSize= 16);
xlabel('通道',FontSize= 16);

在这里插入图片描述

% 画分组的通道
figure;
subplot (2,1,1);
bar(M_data_w);
title('周围HbO浓度变化');
ylabel('浓度');
set(gca,'XTickLabel',w);
subplot (2,1,2);
bar(M_data_z);
title('中间HbO浓度变化');
ylabel('浓度');
xlabel('通道');
set(gca,'XTickLabel',z);

在这里插入图片描述
画分组后的波形图,以及相应的均值

% 画分组后的波形图,1分钟数据figure;
t = (0:lengths-1)/fs;
plot(t,data_w_z);
title('HbO浓度变化');
ylabel('浓度');
xlabel('时间/s');
legend('周围','中间')
% 画分组的均值
figure;
bar(data_m);
title('周围-中间HbO浓度变化均值');
ylabel('浓度');
set(gca,'XTickLabel',{'周围','中间'});

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


http://www.ppmy.cn/ops/151032.html

相关文章

数据库的DML

1.insert 数据库于表创建成功后,需要向数据库的表中插入数据。在MySQL中可以使用insert语句向数据库已有的表中插入一行或者多行元组数据 基本语法: insert 语句有两种语法形式,分别是insert…values语句和insert…set语句 insert into&l…

剑指offer第2版:树系列(一)

一、p62-重建二叉树 重建二叉树_牛客题霸_牛客网 我们可以通过前序遍历来定位根,然后去中序遍历里面找根,然后他左边的数字就是他的左子树,右边的数字就是他的右子树,然后再转化成子问题 class Solution {public:TreeNode* buil…

css‘s hover VS mobile

.animation {animation: 30s move infinite linear;/* &:hover {animation-play-state: paused;*/ }原本写的好好的,测试说:“移动端点击滚动条,跳转到其他页面后,返回当前页面,滚动条不滚动;可以优化位…

20250117在Ubuntu20.04.6下使用灵思FPGA的刷机工具efinity刷机

20250117在Ubuntu20.04.6下使用灵思FPGA的刷机工具efinity刷机 2025/1/17 18:30 缘起:做Rockchip的项目RK3566/RK3588,由于编译服务器是ubuntu,RK3566/RK3588有Linux/Ubuntu下的刷机工具。 就顺手要了一下易灵思的FPGA的刷机工具,…

Oracle数据库diag目录下 incident、trace等文件详解

1.什么是ADR ADR是Automatic Diagnostic Repository首字母缩写,它是一个数据库外的基于文件的、并且可以通过事件编号检索和分析的存储库。 故障诊断基础设施有助于预防、检测、诊断和解决问题。 特别针对的问题是严重错误,例如由代码错误、元数据损坏…

中电金信:源启AI开发与服务平台:大模型能力服务化,推动企业智能化转型

导语:日前,源启AI开发与服务平台发布了最新版本。在本次升级中,源启AI开发与服务平台在原有机器学习能力的基础上,提升了深度学习建模能力,优化了模型服务能力,新增了大模型开发工具链能力,全面…

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …

算法竞赛(蓝桥杯)贪心算法1——数塔问题

题目描述 有如下所示的数塔,要求从底层走到顶层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 输入 输入数据首先包括一个整数整数 N (1≤N≤100),表示数塔的高度,接下来用 N 行数字表示…