第 4 层 · 伪迹剔除层 · 第 14 步 / 共 25 步

步骤 14:SSP 投影(眼电)

计算 EOG 投影向量

🕐 22 分钟🎯 难度:进阶🔗 核心 API:compute_proj_eog⬅️ 前置:步骤 13

1. 目标

基于 EOG 通道构建 Signal-Space Projection(信号空间投影)——一种正交分解算法,可识别并去除眼电伪迹在 EEG 通道中的"投影分量"。是 ICA 之外的补充伪迹处理手段。

2. 何时使用 / 何时跳过

  • 应当使用:mne-bids-pipeline 默认流程;双眼电(HEOG+VEOG)存在时
  • 可跳过:仅用 ICA 已能充分去除眼电;不希望损失任何空间自由度

3. 前置条件

  • 已执行步骤 13:平均参考已完成
  • 数据中存在至少 1 个 eog 类型通道

4. 核心代码

Python
import mne

# ====== 方式 A:自动构建眼电 SSP(推荐新手) ======
# MNE 会自动搜索 'eog' 类型通道并构建投影
# 注意:compute_proj_eog 实际返回 (projs, eog_events) 二元组
projs_eog, eog_events = mne.preprocessing.compute_proj_eog(
    raw,
    n_eeg=2,           # 计算几个 EEG 投影(默认 2)
    ch_name=None,      # None = 自动从 eog 类型通道选择
    average=True,      # 把双眼电平均(默认 True)
    reject=None,       # 自动拒绝阈值
)
print(f"构建的 EOG 投影: {projs_eog}")
print(f"检测到的眨眼事件: {len(eog_events)}")

# 加入到 raw.info['projs']
raw.add_proj(projs_eog)

# ====== 方式 B:显式指定双眼电通道 ======
projs_eog = mne.preprocessing.compute_proj_eog(
    raw,
    n_eeg=2,
    ch_name=['HEOG', 'VEOG'],
    average=True,
)
raw.add_proj(projs_eog)

# ====== 验证 ======
print(raw.info['projs'])
for p in raw.info['projs']:
    print(p)

5. 参数详解

参数 含义 推荐值
n_eeg EEG 投影维度 2(默认;MNE 推荐)/ 1(更保守)
ch_name EOG 通道 None(自动选 eog 类型)/ 'HEOG' / ['HEOG', 'VEOG']
average 是否把多个 EOG 平均 True(默认推荐)/ False
reject 自动拒绝阈值 None(用默认值 dict(eeg=5e-5))
l_freq / h_freq 滤波范围 默认 1.0–35.0 Hz

6. SSP 投影与 ICA 的关系

维度 SSP ICA
原理 信号空间投影 盲源分离
适用 单一类型伪迹(眼电/心电) 多种类型混合
数据长度要求 低(≥ 1 分钟) 高(≥ 1 分钟 × 通道数)
损失空间自由度 少(1–2 个维度) 多(N 个成分)
解释性 高(与 EOG 强相关) 中(需人工核对)
可与 ICA 共存 ✅ ✅

📌 最佳实践:先用 SSP 去除眼电/心电(保留空间自由度),再用 ICA 去除其他伪迹。

7. 验证方法

Python
# 验证 1:投影已添加到 raw
print(f"投影数: {len(raw.info['projs'])}")
assert any('eog' in p['desc'].lower() for p in raw.info['projs']), "未添加 EOG 投影"

# 验证 2:可视化投影模式(topomap)
mne.viz.plot_projs_topomap(raw.info['projs'], raw.info)

# 验证 3:施加 vs 未施加的对比
raw_proj = raw.copy().apply_proj()  # 施加投影
# 对比 raw vs raw_proj 的眼电相关时刻差异

# 验证 4:解释方差
# raw.plot_projs_topomap() 不直接显示方差,需结合 ICA 的 plot_properties

8. 常见错误

错误 原因 解决方案
RuntimeError: No EOG channels found 未执行步骤 03 标通道类型 立即回到步骤 03
EOG 投影不收敛 EOG 通道数据本身异常 检查 EOG 通道是否也是坏导
与 ICA 互相干扰 ICA 拟合时已含 SSP 投影 ICA 应在 SSP 未施加但已记录的状态下拟合(见步骤 16)
损失自由度太多 n_eeg=4 过多 保持 n_eeg=2(默认即足够)
ValueError: too many values to unpack compute_proj_eog 实际返回 (projs, eog_events) 元组 改为 projs, eog_events = compute_proj_eog(...)

9. 官方来源

资源类型 链接
compute_proj_eog https://mne.tools/stable/generated/mne.preprocessing.compute_proj_eog.html
SSP 教程 https://mne.tools/stable/auto_tutorials/preprocessing/plot_50_artifact_correction_ssp.html
投影管理 https://mne.tools/stable/generated/mne.io.Raw.html#mne.io.Raw.add_proj

10. 学术引用

Uusitalo, M. A., & Ilmoniemi, R. J. (1995). Signal-space projection method for separating MEG or EEG into components. Medical & Biological Engineering & Computing, 33(3), 402-404.