对的 ✅,你的理解很对:重参考(re-referencing)应该放在滤波之前,否则滤波后的相位和幅值可能会受参考选择影响。通常推荐的流程是:
- 导入数据
- 重参考(例如平均参考、双耳参考或指定电极参考)
- 带通滤波(比如 1–40 Hz,去掉低频漂移和高频肌电干扰)
- 去眼电/心电伪迹(ICA 或 ASR 自动化方法)
- 伪迹标记/剔除坏段坏道(自动或半自动)
- 保存清洗后的数据
下面给你一个 MATLAB EEGLAB 脚本(全自动去伪迹版本),你可以直接运行在 EEGLAB 环境里。
% ================================
% 全自动 EEG 数据预处理脚本
% Author: GPT-5
% ================================
% 启动 EEGLAB
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
% ========= 1. 导入数据 =========
% 替换文件路径为你的 .vhdr 文件
EEG = pop_loadbv('C:\EEGdata\', 'EEG_0006.vhdr');
EEG = eeg_checkset(EEG);
% ========= 2. 重参考 =========
% 使用平均参考 (common average reference)
EEG = pop_reref(EEG, []);
EEG = eeg_checkset(EEG);
% ========= 3. 滤波 =========
% 高通滤波:1 Hz (去漂移)
EEG = pop_eegfiltnew(EEG, 1, []);
% 低通滤波:40 Hz (去肌电噪声)
EEG = pop_eegfiltnew(EEG, [], 40);
EEG = eeg_checkset(EEG);
% ========= 4. 自动伪迹校正 =========
% 使用 CleanRawData (ASR 方法)
EEG = clean_rawdata(EEG, ...
5, ... % flatline removal (秒数阈值)
-1, ... % channel correlation (自动)
0.8, ... % 标准差阈值
4, ... % 高方差窗口剔除
20); % ASR 参数(越大越保守)
% ========= 5. ICA 去伪迹 =========
% 运行 ICA
EEG = pop_runica(EEG, 'extended',1,'interupt','on');
% 自动标签(ICLabel 插件,需要安装)
EEG = pop_iclabel(EEG, 'default');
% 去除眼电、心电、肌电等伪迹分量
EEG = pop_icflag(EEG, [NaN NaN; % Brain
0.8 1; % Muscle
0.8 1; % Eye
0.8 1; % Heart
NaN NaN; % Line Noise
NaN NaN; % Channel Noise
NaN NaN]);% Other
EEG = eeg_checkset(EEG);
% ========= 6. 插值坏道 =========
EEG = eeg_interp(EEG, EEG.etc.clean_channel_mask, 'spherical');
% ========= 7. 保存数据 =========
EEG = pop_saveset(EEG, 'filename','EEG_0006_clean.set','filepath','C:\EEGdata\');
disp('✅ 全自动 EEG 预处理完成!');
📌 思路说明
- 重参考放在滤波之前 → 避免参考偏置影响滤波结果。
- 滤波:常用 1–40 Hz(也可以 0.5–45 Hz,取决于实验设计)。
- ASR (Artifact Subspace Reconstruction) → 自动清理大伪迹和坏道。
- ICA + ICLabel → 自动识别并剔除眼电、心电、肌电等成分。
- 插值坏道 → 保留全电极信息,避免空间丢失。
这个流程相当于是 “一键清洗 EEG”,但仍建议人工复核 ICLabel 的结果,以免误删脑信号。
要不要我帮你写一个 半自动版本(会弹出图形界面让你选择保留/删除哪些 ICA 成分),这样可控性更强?
发表回复