# EEG **Repository Path**: kernel-c/eeg ## Basic Information - **Project Name**: EEG - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-31 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EEG-data-analysis-Course EEG时间序列数据分析,包括事件相关电位(ERP)、时频分析、统计分析和分类 ## 📋 项目概述 本项目提供了一套完整的EEG数据处理流程,支持多种数据格式,包括: - **BCIC IV 2a数据集**(运动想象任务,GDF格式) - **PhysioNet数据集**(EDF格式) - **自定义设备数据**(通过适配脚本) - **模拟数据**(用于测试和演示) 主脚本:`eeg_course_script_master_updated_with_TF_methods.m`(全程注释,可直接运行) --- ## 📊 BCIC IV 2a数据集详解 ### 数据集简介 **BCI Competition IV Dataset 2a** 是脑机接口领域广泛使用的公开数据集,包含运动想象任务的EEG数据。 ### 数据集特点 | 特征 | 说明 | |------|------| | **实验任务** | 4类运动想象任务:左手、右手、双脚、舌头 | | **受试者数量** | 9名受试者(A01-A09) | | **采样率** | 250 Hz | | **通道数** | 25通道(22个EEG + 3个EOG) | | **试次数量** | 每类48次,共288次/受试者 | ### 通道配置 **EEG通道(22个):** ``` Fz, FC3, FC1, FCz, FC2, FC4, C5, C3, C1, Cz, C2, C4, C6, CP3, CP1, CPz, CP2, CP4, P1, Pz, P2, POz ``` **EOG通道(3个):** ``` EOG-left, EOG-central, EOG-right ``` --- ## 🧠 EEG通道位置详解(国际10-20系统) ### 什么是10-20系统 **国际10-20系统**是EEG电极放置的国际标准,名称含义: - **10-20**:相邻电极之间的距离为头围的10%或20% - 基于**鼻根(Nasion)**和**枕外隆凸(Inion)**两个解剖标志定位 ### 通道命名规则 | 字母 | 含义 | 大脑区域 | |------|------|----------| | **F** | Frontal | 额叶(Frontal lobe) | | **C** | Central | 中央区(Central,运动皮层) | | **P** | Parietal | 顶叶(Parietal lobe) | | **O** | Occipital | 枕叶(Occipital lobe,视觉皮层) | | **T** | Temporal | 颞叶(Temporal lobe) | | **Fp** | Frontopolar/Prefrontal | 额极/前额叶 | | **A** | Auricular/Ear | 耳垂/耳周 | | **AF** | Anterior Frontal | 前额区 | | **FC** | Frontal-Central | 额中央区 | | **CP** | Central-Parietal | 中央顶区 | | **PO** | Parietal-Occipital | 顶枕区 | | 数字 | 含义 | 位置 | |------|------|------| | **z** (zero) | 中线 | 头顶正中线 | | **偶数** (2,4,6,8) | 右侧 | 右半球 | | **奇数** (1,3,5,7) | 左侧 | 左半球 | | **数字越小** | 越靠近中线 | 靠近z轴 | | **数字越大** | 越远离中线 | 靠近外侧 | ### BCIC IV 2a通道位置详解 #### 额叶区域(Frontal)- 认知、决策、运动计划 ``` Fp1, Fp2 : 额极(前额叶最前端)- 高级认知功能 Fz : 额叶中线 - 运动准备、认知控制 F3, F4 : 额叶外侧 - 工作记忆、注意力 F7, F8 : 额叶前外侧 - 语言处理(左侧) AF3, AF4 : 前额外侧 - 前额叶皮层(注:BCIC数据集中可能不含) ``` #### 中央区(Central)- 运动皮层 ``` Cz : 中央顶点 - 初级运动皮层代表区 C3, C4 : 中央区外侧 - 对侧肢体运动控制 └─ C3: 右手运动(左脑控制) └─ C4: 左手运动(右脑控制) C5, C6 : 中央区更外侧 - 辅助运动区 ``` #### 顶叶区域(Parietal)- 感觉整合、空间认知 ``` Pz : 顶叶中线 - 感觉整合、注意力 P3, P4 : 顶叶外侧 - 空间处理、数学认知 P7, P8 : 顶叶后外侧(原T5,T6)- 视觉空间处理 CP1, CP2 : 中央顶区 - 感觉运动整合 CP5, CP6 : 中央顶区外侧 ``` #### 枕叶区域(Occipital)- 视觉处理 ``` Oz : 枕叶中线 - 初级视觉皮层 O1, O2 : 枕叶外侧 - 视觉信息处理 PO3, PO4 : 顶枕区 - 高级视觉处理 PO7, PO8 : 顶枕区外侧 - 视觉注意 ``` #### 颞叶区域(Temporal)- 听觉、语言、记忆 ``` T7, T8 : 颞叶外侧(原T3,T4)- 听觉处理、语言理解 └─ T7 (左): 语言理解(Wernicke区附近) └─ T8 (右): 音乐、非语言声音处理 ``` ### 通道位置示意图 ``` 鼻根方向(前) ↑ | Fp1 -------- Fpz -------- Fp2 / \ / \ / \ / \ / \ / \ F7 F3───Fz─────F4───F8 | \ / \ | / \ / | | \ / \ | / \ / | | FC5──FC1───Cz───FC2──FC6 | | | | | | | | T7────C5──C3────Cz────C4──C6────T8 | | | | | | | | CP5──CP1───Pz───CP2──CP6 | | / \ / | \ / \ | | / \ / | \ / \ | P7 P3───Pz────P4───────P8 \ / \ | / \ / \ / \ | / \ / PO7──────PO3─Oz─PO4──────PO8 \ / | \ / \ / | \ / O1──┴────Oz────┴───O2 | ↓ 枕外隆凸方向(后) 左侧(奇数)<────────────> 右侧(偶数) ``` ### 运动想象任务的关键通道 对于**左手/右手运动想象**,最重要的通道是: | 通道 | 重要性 | 原因 | |------|--------|------| | **C3** | ⭐⭐⭐ | 右侧运动皮层(控制左手) | | **C4** | ⭐⭐⭐ | 左侧运动皮层(控制右手) | | **Cz** | ⭐⭐☆ | 辅助运动区 | | **FC3, FC4** | ⭐⭐☆ | 运动前区 | | **CP3, CP4** | ⭐☆☆ | 感觉运动整合 | ### 实际应用建议 #### 1. 分析特定脑区 ```matlab % 提取运动相关通道 motor_channels = {'C3', 'Cz', 'C4', 'FC3', 'FCz', 'FC4'}; motor_indices = find(ismember(Channelnames, motor_channels)); motor_data = data_EEG_sync(motor_indices, :); ``` #### 2. 左右对比分析 ```matlab % 左半球 vs 右半球 left_channels = {'C3', 'FC3', 'CP3'}; right_channels = {'C4', 'FC4', 'CP4'}; left_idx = find(ismember(Channelnames, left_channels)); right_idx = find(ismember(Channelnames, right_channels)); % 计算左右不对称指数 left_power = mean(bandpower(data_EEG_sync(left_idx, :)')); right_power = mean(bandpower(data_EEG_sync(right_idx, :)')); asymmetry = (right_power - left_power) / (right_power + left_power); ``` #### 3. 可视化特定区域 ```matlab % 只显示中央区通道 central_channels = {'FC5', 'FC1', 'FC2', 'FC6', 'C5', 'C3', 'Cz', 'C4', 'C6'}; ``` ### 实验流程 ``` 时间轴: 0-2秒:十字提示( fixation cross) 2-3秒:箭头提示(指示想象任务类型) 3-4秒:运动想象执行期 ``` ### 事件代码 | 代码 | 含义 | 说明 | |------|------|------| | 769 | 左手 | 想象左手运动 | | 770 | 右手 | 想象右手运动 | | 771 | 双脚 | 想象双脚运动 | | 772 | 舌头 | 想象舌头运动 | ### 文件结构 ``` BCICIV_2a/ ├── A01T.gdf # A01受试者训练集 ├── A01E.gdf # A01受试者测试集 ├── A02T.gdf # A02受试者训练集 ├── A02E.gdf # A02受试者测试集 ├── ... └── A09E.gdf # A09受试者测试集 ``` **文件命名规则:** - `A01`:受试者编号(A01-A09) - `T`:Training(训练集),带标签 - `E`:Evaluation(测试集),无标签(用于竞赛评估) ### 数据下载 数据集可从以下地址下载: - 官网:http://www.bbci.de/competition/iv/desc_2a.html - 需注册后下载 --- ## � GDF文件格式详解 ### 什么是GDF格式 **GDF(General Data Format)** 是BIOSIG项目开发的通用生物信号数据格式,专为EEG、ECG、EMG等生理信号设计。 ### GDF文件结构 ``` GDF文件 = 文件头(Header) + 数据记录(Data Records) ``` #### 文件头信息(Header) | 字段 | 说明 | 示例值 | |------|------|--------| | `TYPE` | 文件类型标识 | 'GDF' | | `VERSION` | GDF版本号 | 1.99 | | `FileName` | 完整文件路径 | 'E:\EEG\BCICIV_2a\A01T.gdf' | | `T0` | 记录开始时间 | [2005 1 17 12 0 0] | | `HeadLen` | 文件头长度(字节) | 6656 | | `NS` | 通道数(Number of Signals) | 25 | | `SPR` | 每个数据记录的采样点数 | 1 | | `NRec` | 数据记录总数 | 672528 | | `SampleRate` | 采样率(Hz) | 250 | | `Label` | 通道名称列表 | {25×1 cell} | | `LeadIdCode` | 导联标识代码 | [0 0 0 ...] | | `PhysDimCode` | 物理维度代码 | [4275 4275 ...] | #### 事件信息(EVENT) ```matlab EVENT.POS % 事件位置(采样点索引) EVENT.TYP % 事件类型代码 EVENT.CHN % 事件相关通道 EVENT.DUR % 事件持续时间 ``` **BCIC IV 2a事件代码:** - 276: 开始记录 - 768: 试次开始 - 769: 左手想象提示 - 770: 右手想象提示 - 771: 双脚想象提示 - 772: 舌头想象提示 - 783: 未知类别(测试集) - 1023: 拒绝试次(伪迹过多) --- ## 🔧 使用sload读取GDF数据 ### sload函数简介 `sload` 是BIOSIG工具箱的核心函数,用于加载多种格式的生物信号数据。 ### 基本用法 ```matlab % 读取GDF文件 [s, h] = sload('A01T.gdf'); % s: 信号数据矩阵 (采样点 × 通道) % h: 文件头信息结构体 ``` ### 输出数据结构 #### s - 信号数据 ```matlab size(s) % 返回: [672528, 25] % 含义: [总采样点数, 通道数] % 单位: 微伏 (μV) 或纳伏 (nV),取决于设备 ``` #### h - 文件头结构体 ```matlab % 基本信息 h.TYPE % 'GDF' h.VERSION % 1.9900 h.FileName % 完整文件路径 % 时间信息 h.T0 % [年 月 日 时 分 秒] h.SampleRate % 250 Hz h.Dur % 0.0040 (每个数据记录的持续时间,秒) % 数据维度 h.NS % 25 (通道数) h.NRec % 672528 (数据记录数) h.SPR % 1 (每记录采样点数) % 通道信息 h.Label % {25×1 cell} 通道名称 h.LeadIdCode % 导联标识代码 h.PhysDim % {25×1 cell} 物理维度单位(如 'μV', 'nV') h.PhysDimCode % 物理维度代码(4275=nV, 4256=μV) % 数值范围信息 h.PhysMin % [-99.9512 ...] 物理最小值(微伏) h.PhysMax % [99.9512 ...] 物理最大值(微伏) h.DigMin % [-2047 ...] 数字最小值(ADC数值) h.DigMax % [2047 ...] 数字最大值(ADC数值) % 校准信息 h.Cal % [0.0488 ...] 校准系数(物理值 = 数字值 × Cal + Off) h.Off % [0 ...] 偏移量 h.GDFTYP % 数据类型代码 % 硬件信息 h.Transducer % {25×1 cell} 传感器类型 h.Impedance % [2.1475e+09 ...] 电极阻抗(欧姆) h.fZ % [2.1475e+09 ...] 参考阻抗 h.Filter % [1×1 struct] 滤波器设置 h.ELEC % [1×1 struct] 电极位置信息 % 事件信息 h.EVENT.POS % 事件位置向量 h.EVENT.TYP % 事件类型向量 h.EVENT.CHN % 事件通道向量 h.EVENT.DUR % 事件持续时间向量 % 其他信息 h.TOffset % [NaN ...] 时间偏移 h.AS % [1×1 struct] 辅助信息 h.REC % [1×1 struct] 记录信息 h.InChanSelect % [1 2 3 ... 25] 选中的通道索引 h.Manufacturer % [1×1 struct] 设备制造商信息 % BCIC IV 2a数据集特有字段 h.Calib % [26×25 double] 校准矩阵 h.FILE % [1×1 struct] 文件信息 h.Classlabel % [288×1 double] 试次类别标签(1=左手, 2=右手, 3=双脚, 4=舌头) h.TRIG % [288×1 double] 触发位置(与EVENT.POS对应) h.ArtifactSelection % [288×1 logical] 伪迹标记(true=有伪迹) h.CHANTYP % 'EEEEEEEEEEEEEEEEEEEEEEOOO' 通道类型(E=EEG, O=EOG) ``` ### 实际使用示例 ```matlab % 1. 加载数据 [s, h] = sload('A01T.gdf'); % 2. 提取信号数据并转置为 (通道 × 时间) data_EEG_sync = s'; % 3. 获取采样率 Fs = h.SampleRate; % 4. 获取通道名称 Channelnames = h.Label; % 5. 提取事件信息 event_pos = h.EVENT.POS; % 事件位置 event_typ = h.EVENT.TYP; % 事件类型 % 6. 筛选特定事件(如左手想象) left_hand_events = event_pos(event_typ == 769); % 7. 查看数据时间长度 duration_seconds = size(s, 1) / Fs; duration_minutes = duration_seconds / 60; fprintf('数据时长: %.2f 分钟\n', duration_minutes); ``` ### 数据单位转换 GDF文件中的数据通常以**微伏(μV)**为单位存储,但有时可能需要转换: ```matlab % 如果数据单位是纳伏(nV),转换为微伏(μV) if isfield(h, 'PhysDimCode') && any(h.PhysDimCode == 4275) % 4275 = nV data_EEG_sync = data_EEG_sync * 1e-3; % nV → μV end ``` ### 重要字段的实际应用 #### 1. 数据校准(Cal 和 Off) ```matlab % 原始ADC数值转换为物理单位 % 物理值 = 数字值 × Cal + Off physical_value = digital_value * h.Cal(1) + h.Off(1); ``` #### 2. 检查数据范围(PhysMin/PhysMax) ```matlab % 检查数据是否超出设备量程 if max(abs(data_EEG_sync(:))) > h.PhysMax(1) warning('数据可能包含削波(clipping)!'); end ``` #### 3. 电极阻抗检查(Impedance) ```matlab % 检查电极阻抗是否过高(通常>10kΩ为不良) bad_electrodes = find(h.Impedance > 10e3); if ~isempty(bad_electrodes) fprintf('警告: 以下通道阻抗过高: '); fprintf('%s ', h.Label{bad_electrodes}); fprintf('\n'); end ``` #### 4. 滤波器信息(Filter) ```matlab % 查看设备硬件滤波设置 if isfield(h.Filter, 'LowPass') fprintf('硬件低通滤波: %.1f Hz\n', h.Filter.LowPass); end if isfield(h.Filter, 'HighPass') fprintf('硬件高通滤波: %.1f Hz\n', h.Filter.HighPass); end ``` #### 5. 数据记录时长计算 ```matlab % 计算总记录时长 total_duration = h.NRec * h.Dur; % 秒 total_minutes = total_duration / 60; fprintf('总记录时长: %.2f 分钟\n', total_minutes); ``` ### 当前脚本实际使用的字段 `load_bciciv2a_data.m` 脚本中**实际使用**的GDF字段: | 字段 | 用途 | 代码示例 | |------|------|----------| | `s` | 信号数据矩阵 | `data_EEG_sync = s'` | | `h.SampleRate` | 采样率 | `Fs = h.SampleRate` | | `h.NS` | 通道数 | `num_channels = h.NS` | | `h.Label` | 通道名称 | `Channelnames = h.Label` | | `h.EVENT.POS` | 事件位置 | `event_pos = h.EVENT.POS` | | `h.EVENT.TYPE` | 事件类型 | `event_typ = h.EVENT.TYPE` | **说明**:当前脚本通过解析 `EVENT.TYPE` 中的事件代码(769/770/771/772)来识别4类运动想象任务。 --- ### 当前脚本未使用但可利用的字段 以下BCIC特有字段**存在但未使用**,可以简化代码: | 字段 | 说明 | 优化建议 | |------|------|----------| | `h.Classlabel` | 试次类别标签 [288×1] | 直接获取类别,无需解析EVENT.TYPE | | `h.TRIG` | 触发位置 [288×1] | 直接作为triggers使用 | | `h.ArtifactSelection` | 伪迹标记 [288×1] | 自动排除坏试次 | | `h.CHANTYP` | 通道类型 'E'/'O' | 快速分离EEG/EOG通道 | --- ### BCIC IV 2a特有字段的应用 #### 6. 使用Classlabel进行条件分组 ```matlab % 根据类别标签分组试次 % 1=左手, 2=右手, 3=双脚, 4=舌头 left_hand_trials = find(h.Classlabel == 1); right_hand_trials = find(h.Classlabel == 2); feet_trials = find(h.Classlabel == 3); tongue_trials = find(h.Classlabel == 4); fprintf('左手试次: %d\n', length(left_hand_trials)); fprintf('右手试次: %d\n', length(right_hand_trials)); fprintf('双脚试次: %d\n', length(feet_trials)); fprintf('舌头试次: %d\n', length(tongue_trials)); ``` #### 7. 伪迹试次筛选(ArtifactSelection) ```matlab % 排除有伪迹的试次 clean_trials = find(~h.ArtifactSelection); artifact_trials = find(h.ArtifactSelection); fprintf('干净试次: %d\n', length(clean_trials)); fprintf('伪迹试次: %d\n', length(artifact_trials)); % 只使用干净试次进行分析 valid_classlabels = h.Classlabel(clean_trials); ``` #### 8. 通道类型分离(CHANTYP) ```matlab % 分离EEG通道和EOG通道 eeg_channels = find(h.CHANTYP == 'E'); % 22个EEG通道 eog_channels = find(h.CHANTYP == 'O'); % 3个EOG通道 fprintf('EEG通道数: %d\n', length(eeg_channels)); fprintf('EOG通道数: %d\n', length(eog_channels)); % 提取EEG数据(不含EOG) eeg_data_only = data_EEG_sync(eeg_channels, :); ``` #### 9. 使用TRIG获取触发位置 ```matlab % TRIG与EVENT.POS通常对应,但TRIG更简洁 trigger_positions = h.TRIG; % 288个试次的触发位置 % 结合Classlabel和TRIG提取特定条件的epoch left_hand_triggers = h.TRIG(h.Classlabel == 1); ``` --- ## �� 快速开始 ### 环境要求 - **MATLAB** R2018b或更高版本 - **必需工具箱:** - Signal Processing Toolbox - Statistics and Machine Learning Toolbox - **推荐工具箱:** - BIOSIG(用于读取GDF文件) - EEGLAB(用于高级EEG处理) ### BIOSIG工具箱安装 1. 下载BIOSIG:https://biosig.sourceforge.net/ 2. 解压到MATLAB工具箱目录,如:`D:\Program Files\MatlabR2025b\toolbox\biosig4octmat-3.8.5` 3. 在MATLAB中添加路径: ```matlab addpath('D:\Program Files\MatlabR2025b\toolbox\biosig4octmat-3.8.5\biosig'); addpath('D:\Program Files\MatlabR2025b\toolbox\biosig4octmat-3.8.5\biosig\t200_FileAccess'); savepath; ``` ### 运行主脚本 1. **准备数据**:将BCIC IV 2a数据放在 `E:\EEG\BCICIV_2a` 文件夹 2. **打开MATLAB**,切换到项目目录 3. **运行命令**: ```matlab eeg_course_script_master_updated_with_TF_methods ``` --- ## 📜 主脚本详细介绍 ### 脚本结构 `eeg_course_script_master_updated_with_TF_methods.m` 包含以下主要模块: #### 1. 数据加载模块(第1节) **功能**:支持多种数据源的自动检测和加载 **支持的数据源(按优先级):** 1. **自定义设备数据** - 通过 `load_my_device_data.m` 加载 2. **BCIC IV 2a数据** - 通过 `load_bciciv2a_data.m` 加载 3. **PhysioNet EDF数据** - 通过 `load_physionet_data.m` 加载 4. **MAT文件数据** - 直接加载 `.mat` 文件 5. **模拟数据** - 自动生成测试数据 **关键输出变量:** - `data_EEG_sync`:EEG数据矩阵(通道 × 时间) - `triggers`:事件标记位置 - `Fs`:采样率(Hz) - `Channelnames`:通道名称 - `EEG`:EEGLAB格式结构体 - `trial_info`:试次信息(条件、标签等) #### 2. 数据探索模块(第2节) **功能**:可视化原始数据,了解数据特征 **生成的图形:** - **Figure 1**:原始EEG信号(多通道) - **Figure 2**:事件标记分布 - **Figure 3**:数据质量概览 #### 3. 数据预处理模块(第3节) **功能**:滤波、重参考、降采样等预处理操作 **处理步骤:** 1. **高通滤波**(0.5-1 Hz):去除基线漂移 2. **低通滤波**(40-100 Hz):去除高频噪声 3. **陷波滤波**(50/60 Hz):去除工频干扰 4. **重参考**:可选择平均重参考或特定电极重参考 5. **降采样**(可选):降低计算量 **生成的图形:** - **Figure 4-6**:滤波前后对比、频谱分析 #### 4. 事件相关分析模块(第4节) **功能**:根据事件标记分段,提取Epoch **关键参数:** - `epoch_time`:分段时间窗口(如 [-0.2, 1] 秒) - `baseline_time`:基线校正时间(如 [-0.2, 0] 秒) **生成的图形:** - **Figure 7-10**:单试次波形、ERP平均波形 #### 5. 时频分析模块(第5节) **功能**:使用Morlet小波进行时频分解 **分析方法:** - **连续小波变换(CWT)**:高时间分辨率 - **短时傅里叶变换(STFT)**:高频率分辨率 - **功率谱密度(PSD)**:Welch方法 **生成的图形:** - **Figure 11-15**:时频图、功率谱、ERSP(事件相关谱扰动) #### 6. 空间分析模块(第6节) **功能**:地形图(Topography)和通道间分析 **生成的图形:** - **Figure 16-18**: - 头皮地形图(特定时间点和频率) - 通道相关性矩阵 - 空间滤波结果 #### 7. 统计分析模块(第7节) **功能**:条件间比较和显著性检验 **分析方法:** - **t检验**:配对样本t检验 - **置换检验**:非参数统计 - **多重比较校正**:FDR或Bonferroni校正 **生成的图形:** - **Figure 19-20**:差异波形、显著性标记 #### 8. 分类分析模块(第8节) **功能**:基于EEG特征的模式分类 **分类器:** - **SVM**(支持向量机) - **LDA**(线性判别分析) - **CNN**(卷积神经网络,可选) **特征提取:** - 时域特征:均值、方差、峰度 - 频域特征:功率谱特征 - 时频特征:小波系数 **生成的图形:** - **Figure 21-23**:分类准确率、混淆矩阵、特征重要性 #### 9. 高级分析模块(第9-15节) **功能**:更高级的EEG分析方法 **包括:** - **带通滤波和包络分析**(第15节) - **多通道联合分析** - **连接性分析**(相干性、相位同步) - **微状态分析**(可选) **生成的图形:** - **Figure 24+**:带通滤波信号、包络、频谱图 --- ## 🔧 自定义设备数据接入 #### ⚠️ 重要区别:GDF数据 vs 自定义数据 | 数据类型 | 包含信息 | 使用方式 | |----------|----------|----------| | **GDF文件** (BCIC IV 2a) | 完整的元数据(20+字段) | `sload()` 自动读取所有信息 | | **自定义数据** | 通常只有数据矩阵 | 需要手动设置采样率、通道名等 | **GDF文件包含的字段:** - `h.SampleRate`, `h.Label`, `h.EVENT.POS/TYP`, `h.Classlabel`, `h.TRIG` 等 **自定义数据需要手动定义:** - 【必需】`data_EEG_sync` (数据矩阵), `Fs` (采样率) - 【推荐】`Channelnames` (通道名称), `triggers` (事件位置) - 【可选】`trial_info` (试次信息) ### 创建数据加载函数 1. **复制模板**:`load_my_device_data.m` 已提供模板 2. **修改加载代码**:根据设备数据格式选择对应代码段 3. **设置参数**:采样率、通道数、通道名称 ### 支持的数据格式 | 格式 | 扩展名 | 加载方法 | |------|--------|----------| | EDF | `.edf` | `edfread()` 或 `pop_biosig()` | | BDF | `.bdf` | `pop_biosig()` | | GDF | `.gdf` | `sload()` 或 `pop_biosig()` | | MAT | `.mat` | `load()` | | CSV | `.csv` | `csvread()` 或 `readmatrix()` | | 自定义 | 任意 | 根据厂商SDK编写 | ### 主脚本配置 修改 `eeg_course_script_master_updated_with_TF_methods.m` 第28-29行: ```matlab my_data_path = 'E:\EEG\MyData'; % 您的数据文件夹 my_data_file = 'subject01.edf'; % 您的数据文件名 ``` --- ## 📈 输出结果 ### 生成的图形 脚本会生成20+个Figure,涵盖: - 原始数据可视化 - 预处理效果对比 - ERP波形 - 时频分析 - 空间分布 - 统计检验结果 - 分类性能 ### 保存的数据 运行结束后,工作区包含: - 预处理后的数据 - ERP平均波形 - 时频分析结果 - 分类模型(如训练了分类器) --- ## 🐛 故障排除 ### 常见问题 **Q1: 提示 "BIOSIG工具箱未找到"** - 确保BIOSIG已安装并添加到MATLAB路径 - 参考上面的安装步骤 **Q2: 数据加载失败** - 检查文件路径是否正确 - 确认数据文件格式与加载函数匹配 **Q3: 内存不足错误** - 减少同时处理的试次数 - 降低采样率或通道数 - 使用64位MATLAB **Q4: 图形显示异常** - 更新MATLAB到最新版本 - 检查显卡驱动 --- ## 📚 参考资源 - **BCIC IV 2a数据集**:http://www.bbci.de/competition/iv/desc_2a.html - **BIOSIG工具箱**:https://biosig.sourceforge.net/ - **EEGLAB**:https://sccn.ucsd.edu/eeglab/ - **FieldTrip**:https://www.fieldtriptoolbox.org/ --- ## 📝 更新日志 - **2026-03-31**:添加BCIC IV 2a数据集支持,完善数据加载模块 - **2026-03-30**:添加自定义设备数据接入功能 - **2026-03-29**:优化频谱分析和可视化 - **2026-03-28**:添加详细注释和文档 --- ## 👥 作者和贡献 - **原始脚本**:Franz Hell (2015) - **修改和扩展**:AI Assistant (2026) - **数据集**:BCIC IV 2a (TU Graz) --- **提示**:脚本全程带有详细中文注释,可直接运行。如有问题,请参考代码中的注释或联系维护者。