往期文章
希望了解更多的道友点这里
0. 分享【脑机接口 + 人工智能】的学习之路
1.1 . 脑电EEG代码开源分享 【1.前置准备-静息态篇】
1.2 . 脑电EEG代码开源分享 【1.前置准备-任务态篇】
2.1 . 脑电EEG代码开源分享 【2.预处理-静息态篇】
2.2 . 脑电EEG代码开源分享 【2.预处理-任务态篇】
3.1 . 脑电EEG代码开源分享 【3.可视化分析-静息态篇】
3.2 . 脑电EEG代码开源分享 【3.可视化分析-任务态篇】
4.1 . 脑电EEG代码开源分享 【4.特征提取-时域篇】
4.2 . 脑电EEG代码开源分享 【4.特征提取-频域篇】
4.3 . 脑电EEG代码开源分享 【4.特征提取-时频域篇】
4.4 . 脑电EEG代码开源分享 【4.特征提取-空域篇】
5 . 脑电EEG代码开源分享 【5.特征选择】
6.1 . 脑电EEG代码开源分享 【6.分类模型-机器学习篇】
6.2 . 脑电EEG代码开源分享 【6.分类模型-深度学习篇】
汇总. 专栏:脑电EEG代码开源分享【文档+代码+经验】
0 . 【深度学习】常用网络总结
脑电EEG代码开源分享 【1.前置准备-静息态篇】
- 往期文章
- 一、前言
- 二、前置准备 框架介绍
- 三、代码格式说明
- 三、脑电处理 代码
- 3.0 参数设置
- 3.1 数据导入
- 3.2 前置准备-主函数
- 3.3 前置准备-功能函数
- 3.4 前置准备-结果保存
- 四、前置准备 整体代码
- 总结
- To:新想法、鬼点子的道友:
一、前言
本文档旨在归纳BCI-EEG-matlab的数据处理代码,作为EEG数据处理的总结,方便快速搭建处理框架的Baseline,实现自动化、模块插拔化、快速化。本文非锁时任务(无锁时刺激,如静息态、运动想象)为例,分享脑电EEG的分析处理方法。
脑电数据分析系列。分为以下6个模块:
1. 前置准备
2. 数据预处理
3. 数据可视化
4. 特征提取(特征候选集)
5. 特征选择(量化特征择优)
6. 分类模型
本文内容:【1.前置准备】
提示:以下为各功能代码详细介绍,若节约阅读时间,请下滑至文末的整合代码
二、前置准备 框架介绍
前置准备
前置准备的主要功能,分为以下4部分:
1. 降采样
2. 数据分段
3. 去暂态
4. 选择导联
前期准备的代码框图、流程如下所示:
注:前置准备 理论上可以归类到 预处理阶段,本代码将两者分开基于以下考虑:
- 前置准备是数据处理的准备阶段,对脑电数据无损处理,不对原始数据进行变换、映射
- 为提升中间数据的可读性、可分析性,将原本9步骤的预处理,分为 4步【前置准备】 + 5步【预处理】
三、代码格式说明
本文非锁时任务态(下文以静息态代替)范例为:ADHD患者、正常人群在静息状态下的脑模式分类
- 分段代码名称:代码命名为Standard_cut_rest
- 输入格式:静息态为Data的结构体,内部为data命名的原始数据(通道*总采样点数)。
- 参数设置:**采样率\单试次时长\试次标签\试次位置\频域去除暂态时长\降采样(防止数据过大导致运行和内存消耗)
- 处理形式:**EEG数据汇总为cell(试次被试数),每个cell内为(通道数采样点数)。按照不同分类的类别放入不同cell,cell自身名称如下保存格式名称。例如任务态数据为{100,1}[16*512],其意为16通道数据采集,100试次,单试次为512点数据点。
- **保存格式:**单独保存个人的名称为Standard_input_target_xx(被试序号),总保存文件名称为Standard_input_target\ nontarget _xx代表被试个数。
三、脑电处理 代码
提示:代码环境为 matlab 2018
3.0 参数设置
原采样率 fs_raw=500Hz,降低到 fs_down = 250Hz
一次进行10人次的批处理,subject_num = [1;10]
每段数据分段长度为2秒,epoch_length = 2
处理全部导联编号为1-128的电极,perocess_channel = [1 ; 128];
%% 0.!!!需手动调整参数 data_path = 'C:\Users\Amax\Desktop\basetest_flod\raw_data_flod\'; svae_path = 'C:\Users\Amax\Desktop\basetest_flod\save_fold\'; file_name_target = 'ADHD'; file_name_nontarget = 'Normal'; stuct_name = 'Data'; raw_temp_data = load ([data_path ,file_name_target,'1']); raw_temp_data = raw_temp_data.Data.data; fs_raw = 500; fs_down = 250; %降采样后采样率 subject_num = [1;10]; temp_abandon = 20; %去掉的暂态,以秒为单位 epoch_length = 2; perocess_channel = [1 ; 128];
经验建议:
- 采样率降到300Hz以下,目前主流研究认为,静息态脑电有效频率trial_loop,sub_count} = cut_temp; cut_temp = []; cut_temp = raw_data_nontarget(:, temp_abandon_point+ (trial_loop-1)*fs_down*epoch_length+1 : temp_abandon_point + trial_loop*fs_down*epoch_length); Standard_input_nontarget{trial_loop,sub_count} = cut_temp; end % disp(['输入标准化分段: ' , num2str(sub_loop/subject_num)]); fprintf(repmat('\b',1,print_count)); print_count=fprintf('计算标准化分段进度 : %f',sub_count/(subject_num(2,1) - subject_num(1,1)+1)); sub_count = sub_count+1; end fprintf('\n'); end